① 80c51編程,用mcs-51指令實現
MCS-51數據傳送指令
數據傳送指令共有29條,數據傳送指令一般的操作是把源操作數傳送到目的操作數,指令執行完成後,源操作數不變,目的操作數等於源操作數。如果要求在進行數據傳送時,目的操作數不丟失,則不能用直接傳送指令,而採用交換型的數據傳送指令,數據傳送指令不影響標志C,AC和OV,但可能會對奇偶標志P有影響。
[1]. 以累加器A為目的操作數類指令(4條)
這4條指令的作用是把源操作數指向的內容送到累加器A。有直接、立即數、寄存器和寄存器間接定址方式:
MOV A,data ;(data)→(A) 直接單元地址中的內容送到累加器A
MOV A,#data ;#data→(A) 立即數送到累加器A中
MOV A,Rn ;(Rn)→(A) Rn中的內容送到累加器A中
MOV A,@Ri ;((Ri))→(A) Ri內容指向的地址單元中的內容送到累加器A
[2]. 以寄存器Rn為目的操作數的指令(3條)
這3條指令的功能是把源操作數指定的內容送到所選定的工作寄存器Rn中。有直接、立即和寄存器定址方式:
MOV Rn,data ;(data)→(Rn) 直接定址單元中的內容送到寄存器Rn中
MOV Rn,#data ;#data→(Rn) 立即數直接送到寄存器Rn中
MOV Rn,A ;(A)→(Rn) 累加器A中的內容送到寄存器Rn中
[3]. 以直接地址為目的操作數的指令(5條)
這組指令的功能是把源操作數指定的內容送到由直接地址data所選定的片內RAM中。有直接、立即、寄存器和寄存器間接4種定址方式:
MOV data,data ;(data)→(data) 直接地址單元中的內容送到直接地址單元
MOV data,#data ;#data→(data) 立即數送到直接地址單元
MOV data,A ;(A)→(data) 累加器A中的內容送到直接地址單元
MOV data,Rn ;(Rn)→(data) 寄存器Rn中的內容送到直接地址單元
MOV data,@Ri ;((Ri))→(data) 寄存器Ri中的內容指定的地址單元中數據送到直接地址單元
[4]. 以間接地址為目的操作數的指令(3條)
這組指令的功能是把源操作數指定的內容送到以Ri中的內容為地址的片內RAM中。有直接、立即和寄存器3種定址方式:
MOV @Ri,data ;(data)→((Ri)) 直接地址單元中的內容送到以Ri中的內容為地址的RAM單元
MOV @Ri,#data ;#data→((Ri)) 立即數送到以Ri中的內容為地址的RAM單元
MOV @Ri,A ;(A)→((Ri)) 累加器A中的內容送到以Ri中的內容為地址的RAM單元
[5]. 查表指令(2條)
這組指令的功能是對存放於程序存儲器中的數據表格進行查找傳送,使用變址定址方式:
MOVC A,@A+DPTR ;((A))+(DPTR)→(A) 表格地址單元中的內容送到累加器A中
MOVC A,@A+PC ;((PC))+1→(A),((A))+(PC)→(A) 表格地址單元中的內容送到累加器A中
[6]. 累加器A與片外數據存儲器RAM傳送指令(4條)
這4條指令的作用是累加器A與片外RAM間的數據傳送。使用寄存器定址方式:
MOVX @DPTR,A ;(A)→((DPTR)) 累加器中的內容送到數據指針指向片外RAM地址中
MOVX A, @DPTR ;((DPTR))→(A) 數據指針指向片外RAM地址中的內容送到累加器A中
MOVX A, @Ri ;((Ri))→(A) 寄存器Ri指向片外RAM地址中的內容送到累加器A中
MOVX @Ri,A ;(A)→((Ri)) 累加器中的內容送到寄存器Ri指向片外RAM地址中
[7]. 堆棧操作類指令(2條)
這4類指令的作用是把直接定址單元的內容傳送到堆棧指針SP所指的單元中,以及把SP所指單元的內容送到直接定址單元中。這類指令只有兩條,下述的第一條常稱為入棧操作指令,第二條稱為出棧操作指令。需要指出的是,單片機開機復位後,(SP)默認為07H,但一般都需要重新賦值,設置新的SP首址。入棧的第一個數據必須存放於SP+1所指存儲單元,故實際的堆棧底為SP+1所指的存儲單元。
PUSH data ;(SP)+1→(SP),(data)→(SP) 堆棧指針首先加1,直接定址單元中的數據送到堆棧指針SP所指的單元中
POP data ;(SP)→(data)(SP)-1→(SP), 堆棧指針SP所指的單元數據送到直接定址單元中,堆棧指針SP再進行減1操作
[8]. 交換指令(5條)
這5條指令的功能是把累加器A中的內容與源操作數所指的數據相互交換。
XCH A,Rn ;(A)←→(Rn)累加器與工作寄存器Rn中的內容互換
XCH A,@Ri ;(A)←→((Ri))累加器與工作寄存器Ri所指的存儲單元中的內容互換
XCH A,data ;(A)←→(data)累加器與直接地址單元中的內容互換
XCHD A,@Ri ;(A 3-0 )←→((Ri) 3-0 )累加器與工作寄存器Ri所指的存儲單元中的內容低半位元組互換
SWAP A ;(A 3-0 )←→(A 7-4 )累加器中的內容高低半位元組互換
[9]. 16位數據傳送指令(1條)
這條指令的功能是把16位常數送入數據指針寄存器。
MOV DPTR,#data16 ;#dataH→(DPH),#dataL→(DPL)16位常數的高8位送到DPH,低8位送到DPL
MCS-51算術運算指令
算術運算指令共有24條,算術運算主要是執行加、減、乘、除法四則運算。另外MCS-51指令系統中有相當一部分是進行加、減1操作,BCD碼的運算和調整,我們都歸類為運算指令。雖然MCS-51單片機的算術邏輯單元ALU僅能對8位無符號整數進行運算,但利用進位標志C,則可進行多位元組無符號整數的運算。同時利用溢出標志,還可以對帶符號數進行補碼運算。需要指出的是,除加、減1指令外,這類指令大多數都會對PSW(程序狀態字)有影響。這在使用中應特別注意。
[1]. 加法指令(4條)
這4條指令的作用是把立即數,直接地址、工作寄存器及間接地址內容與累加器A的內容相加,運算結果存在A中。
ADD A,#data ;(A)+#data→(A) 累加器A中的內容與立即數#data相加,結果存在A中
ADD A,data ;(A)+(data)→(A) 累加器A中的內容與直接地址單元中的內容相加,結果存在A中
ADD A,Rn ;(A)+(Rn)→(A) 累加器A中的內容與工作寄存器Rn中的內容相加,結果存在A中
ADD A,@Ri ;(A)+((Ri))→(A) 累加器A中的內容與工作寄存器Ri所指向地址單元中的內容相加,結果存在A中
[2]. 帶進位加法指令(4條)
這4條指令除與[1]功能相同外,在進行加法運算時還需考慮進位問題。
ADDC A,data ;(A)+(data)+(C)→(A) 累加器A中的內容與直接地址單元的內容連同進位位相加,結果存在A中
ADDC A,#data ;(A)+#data +(C)→(A) 累加器A中的內容與立即數連同進位位相加,結果存在A中
ADDC A,Rn ;(A)+Rn+(C)→(A) 累加器A中的內容與工作寄存器Rn中的內容、連同進位位相加,結果存在A中
ADDC A,@Ri ;(A)+((Ri))+(C)→(A) 累加器A中的內容與工作寄存器Ri指向地址單元中的內容、連同進位位相加,結果存在A中
[3]. 帶借位減法指令(4條)
這組指令包含立即數、直接地址、間接地址及工作寄存器與累加器A連同借位位C內容相減,結果送回累加器A中。
這里我們對借位位C的狀態作出說明,在進行減法運算中,CY=1表示有借位,CY=0則無借位。OV=1聲明帶符號數相減時,從一個正數減去一個負數結果為負數,或者從一個負數中減去一個正數結果為正數的錯誤情況。在進行減法運算前,如果不知道借位標志位C的狀態,則應先對CY進行清零操作。
SUBB A,data ;(A)-(data) - (C)→(A) 累加器A中的內容與直接地址單元中的內容、連同借位位相減,結果存在A中
SUBB A,#data ;(A)-#data -(C)→(A) 累加器A中的內容與立即數、連同借位位相減,結果存在A中
SUBB A,Rn ;(A)-(Rn) -(C)→(A) 累加器A中的內容與工作寄存器中的內容、連同借位位相減,結果存在A中
SUBB A,@Ri ;(A)-((Ri)) -(C)→(A) 累加器A中的內容與工作寄存器Ri指向的地址單元中的內容、連同借位位相減,結果存在A中
[4]. 乘法指令(1條)
這個指令的作用是把累加器A和寄存器B中的8位無符號數相乘,所得到的是16位乘積,這個結果低8位存在累加器A,而高8位存在寄存器B中。如果OV=1,說明乘積大於FFH,否則OV=0,但進位標志位CY總是等於0。
MUL AB ;(A)×(B)→(A)和(B) 累加器A中的內容與寄存器B中的內容相乘,結果存在A、B中
[5]. 除法指令(1條)
這個指令的作用是把累加器A的8位無符號整數除以寄存器B中的8位無符號整數,所得到的商存在累加器A,而余數存在寄存器B中。除法運算總是使OV和進位標志位CY等於0。如果OV=1,表明寄存器B中的內容為00H,那麼執行結果為不確定值,表示除法有溢出。
DIV AB ;(A)÷(B)→(A)和(B) 累加器A中的內容除以寄存器B中的內容,所得到的商存在累加器A,而余數存在寄存器B中。
[6]. 加1指令(5條)
這5條指令的的功能均為原寄存器的內容加1,結果送回原寄存器。上述提到,加1指令不會對任何標志有影響,如果原寄存器的內容為FFH,執行加1後,結果就會是00H。這組指令共有直接、寄存器、寄存器減間址等定址方式:
INC A ;(A)+1→(A) 累加器A中的內容加1,結果存在A中
INC data ;(data)+1→(data) 直接地址單元中的內容加1,結果送回原地址單元中
INC @Ri ;((Ri))+1→((Ri)) 寄存器的內容指向的地址單元中的內容加1,結果送回原地址單元中
INC Rn ;(Rn)+1→(Rn)寄存器Rn的內容加1,結果送回原地址單元中
INC DPTR ;(DPTR)+1→(DPTR)數據指針的內容加1,結果送回數據指針中
在INC data這條指令中,如果直接地址是I/O,其功能是先讀入I/O鎖存器的內容,然後在CPU進行加1操作,再輸出到I/O上,這就是「讀—修改—寫」操作。
[7]. 減1指令(4條)
這組指令的作用是把所指的寄存器內容減1,結果送回原寄存器,若原寄存器的內容為00H,減1後即為FFH,運算結果不影響任何標志位,這組指令共有直接、寄存器、寄存器間址等定址方式,當直接地址是I/O口鎖存器時,「讀—修改—寫」操作與加1指令類似。
DEC A ;(A)-1→(A)累加器A中的內容減1,結果送回累加器A中
DEC data ;(data)-1→(data)直接地址單元中的內容減1,結果送回直接地址單元中
DEC @Ri ;((Ri))-1→((Ri))寄存器Ri指向的地址單元中的內容減1,結果送回原地址單元中
DEC Rn ;(Rn)-1→(Rn)寄存器Rn中的內容減1,結果送回寄存器Rn中
[8]. 十進制調整指令(1條)
在進行BCD碼運算時,這條指令總是跟在ADD或ADDC指令之後,其功能是將執行加法運算後存於累加器A中的結果進行調整和修正。
DA A
MCS-51邏輯運算及移位指令
邏輯運算和移位指令共有25條,有與、或、異或、求反、左右移位、清0等邏輯操作,有直接、寄存器和寄存器間址等定址方式。這類指令一般不影響程序狀態字(PSW)標志。
[1]. 循環移位指令(4條)
這4條指令的作用是將累加器中的內容循環左或右移一位,後兩條指令是連同進位位CY一起移位。
RL A ;累加器A中的內容左移一位
RR A ;累加器A中的內容右移一位
RLC A ;累加器A中的內容連同進位位CY左移一位
RRC A ;累加器A中的內容連同進位位CY右移一位
[2]. 累加器半位元組交換指令(1條)
這條指令是將累加器中的內容高低半位元組互換,這在上一節中內容已有介紹。
SWAP A ; 累加器中的內容高低半位元組互換
[3]. 求反指令(1條)
這條指令將累加器中的內容按位取反。
CPL A ; 累加器中的內容按位取反
[4]. 清零指令(1條)
這條指令將累加器中的內容清0。
CLR A ; 0→(A),累加器中的內容清0
[5]. 邏輯與操作指令(6條)
這組指令的作用是將兩個單元中的內容執行邏輯與操作。如果直接地址是I/O地址,則為「讀—修改—寫」操作。
ANL A,data ;累加器A中的內容和直接地址單元中的內容執行與邏輯操作。結果存在寄存器A中。
ANL data,#data ;直接地址單元中的內容和立即數執行與邏輯操作。結果存在直接地址單元中。
ANL A,#data ;累加器A的內容和立即數執行與邏輯操作。結果存在累加器A中。
ANL A,Rn ;累加器A的內容和寄存器Rn中的內容執行與邏輯操作。結果存在累加器A中。
ANL data,A ;直接地址單元中的內容和累加器A的內容執行與邏輯操作。結果存在直接地址單元中。
ANL A,@Ri ;累加器A的內容和工作寄存器Ri指向的地址單元中的內容執行與邏輯操作。結果存在累加器A中。
[6]. 邏輯或操作指令(6條)
這組指令的作用是將兩個單元中的內容執行邏輯或操作。如果直接地址是I/O地址,則為「讀—修改—寫」操作。
ORL A,data ;累加器A中的內容和直接地址單元中的內容執行邏輯或操作。結果存在寄存器A中。
ORL data,#data ;直接地址單元中的內容和立即數執行邏輯或操作。結果存在直接地址單元中。
ORL A,#data ;累加器A的內容和立即數執行邏輯或操作。結果存在累加器A中。
ORL A,Rn ;累加器A的內容和寄存器Rn中的內容執行邏輯或操作。結果存在累加器A中。
ORL data,A ;直接地址單元中的內容和累加器A的內容執行邏輯或操作。結果存在直接地址單元中。
ORL A,@Ri ;累加器A的內容和工作寄存器Ri指向的地址單元中的內容執行邏輯或操作。結果存在累加器A中。
[7]. 邏輯異或操作指令(6條)
這組指令的作用是將兩個單元中的內容執行邏輯異或操作。如果直接地址是I/O地址,則為「讀—修改—寫」操作。
XRL A,data ;累加器A中的內容和直接地址單元中的內容執行邏輯異或操作。結果存在寄存器A中。
XRL data,#data ;直接地址單元中的內容和立即數執行邏輯異或操作。結果存在直接地址單元中。
XRL A,#data ;累加器A的內容和立即數執行邏輯異或操作。結果存在累加器A中。
XRL A,Rn ;累加器A的內容和寄存器Rn中的內容執行邏輯異或操作。結果存在累加器A中。
XRL data,A ;直接地址單元中的內容和累加器A的內容執行邏輯異或操作。結果存在直接地址單元中。
XRL A,@Ri ;累加器A的內容和工作寄存器Ri指向的地址單元中的內容執行邏輯異或操作。結果存在累加器A中。
MCS-51控制轉移指令
控制轉移指令用於控製程序的流向,所控制的范圍即為程序存儲器區間,MCS-51系列單片機的控制轉移指令相對豐富,有可對64kB程序空間地址單元進行訪問的長調用、長轉移指令,也有可對2kB位元組進行訪問的絕對調用和絕對轉移指令,還有在一頁范圍內短相對轉移及其它無條件轉移指令,這些指令的執行一般都不會對標志位有影響。
[1]. 無條件轉移指令(4條)
這組指令執行完後,程序就會無條件轉移到指令所指向的地址上去。長轉移指令訪問的程序存儲器空間為16地址64kB,絕對轉移指令訪問的程序存儲器空間為11位地址2kB空間。
LJMP addr16 ;addr16→(PC),給程序計數器賦予新值(16位地址)
AJMP addr11 ;(PC)+2→(PC),addr11→(PC 10-0 )程序計數器賦予新值(11位地址),(PC 15-11 )不改變
SJMP rel ;(PC)+ 2 + rel→(PC)當前程序計數器先加上2再加上偏移量給程序計數器賦予新值
JMP @A+DPTR ;(A)+ (DPTR)→(PC),累加器所指向地址單元的值加上數據指針的值給程序計數器賦予新值
[2]. 條件轉移指令(8條)
程序可利用這組豐富的指令根據當前的條件進行判斷,看是否滿足某種特定的條件,從而控製程序的轉向。
JZ rel ; A=0,(PC)+ 2 + rel→(PC),累加器中的內容為0,則轉移到偏移量所指向的地址,否則程序往下執行
JNZ rel ; A≠0,(PC)+ 2 + rel→(PC),累加器中的內容不為0,則轉移到偏移量所指向的地址,否則程序往下執行
CJNE A, data, rel ; A≠(data),(PC)+ 3 + rel→(PC),累加器中的內容不等於直接地址單元的內容,則轉移到偏移量所指向的地址,否則程序往下執行
CJNE A, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),累加器中的內容不等於立即數,則轉移到偏移量所指向的地址,否則程序往下執行
CJNE Rn, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),工作寄存器Rn中的內容不等於立即數,則轉移到偏移量所指向的地址,否則程序往下執行
CJNE @Ri, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),工作寄存器Ri指向地址單元中的內容不等於立即數,則轉移到偏移量所指向的地址,否則程序往下執行
DJNZ Rn, rel ; (Rn)-1→(Rn),(Rn)≠0,(PC)+ 2 + rel→(PC)工作寄存器Rn減1不等於0,則轉移到偏移量所指向的地址,否則程序往下執行
DJNZ data, rel ; (Rn)-1→(Rn),(Rn)≠0,(PC)+ 2 + rel→(PC)直接地址單元中的內容減1不等於0,則轉移到偏移量所指向的地址,否則程序往下執行
[3]. 子程序調用指令(1條)
子程序是為了便於程序編寫,減少那些需反復執行的程序佔用多餘的地址空間而引入的程序分支,從而有了主程序和子程序的概念,需要反復執行的一些程序,我們在編程時一般都把它們編寫成子程序,當需要用它們時,就用一個調用命令使程序按調用的地址去執行,這就需要子程序的調用指令和返回指令。
LCALL addr16 ; 長調用指令,可在64kB空間調用子程序。此時(PC)+ 3→(PC),(SP)+ 1→(SP),(PC 7-0 )→(SP),(SP)+ 1→(SP),(PC 15-8 )→(SP),addr16→(PC),即分別從堆棧中彈出調用子程序時壓入的返回地址
ACALL addr11 ; 絕對調用指令,可在2kB空間調用子程序,此時(PC)+ 2→(PC),(SP)+ 1→(SP),(PC 7-0 )→(SP),(SP)+ 1→(SP),(PC 15-8 )→(SP),addr11→(PC 10-0 )
RET ; 子程序返回指令。此時(SP)→(PC 15-8 ),(SP)- 1→(SP),(SP)→(PC 7-0 ),(SP)- 1→(SP)
RETI ; 中斷返回指令,除具有RET功能外,還具有恢復中斷邏輯的功能,需注意的是,RETI指令不能用RET代替
[4]. 空操作指令(1條)
這條指令將累加器中的內容清0。
NOP ; 這條指令除了使PC加1,消耗一個機器周期外,沒有執行任何操作。可用於短時間的延時
MCS-51布爾變數操作指令
布爾處理功能是MCS-51系列單片機的一個重要特徵,這是出於實際應用需要而設置的。布爾變數也即開關變數,它是以位(bit)為單位進行操作的。
在物理結構上,MCS-51單片機有一個布爾處理機,它以進位標志做為累加位,以內部RAM可定址的128個為存儲位。
既然有布爾處理機功能,所以也就有相應的布爾操作指令集,下面我們分別談論。
[1]. 位傳送指令(2條)
位傳送指令就是可定址位與累加位CY之間的傳送,指令有兩條。
MOV C,bit ;bit→CY,某位數據送CY
MOV bit,C ;CY→bit,CY數據送某位
[2]. 位置位復位指令(4條)
這些指令對CY及可定址位進行置位或復位操作,共有四條指令。
CLR C ; 0→CY,清CY
CLR bit ; 0→bit,清某一位
SETB C ; 1→CY,置位CY
SETB bit ; 1→bit,置位某一位
[3]. 位運算指令(6條)
位運算都是邏輯運算,有與、或、非三種指令,共六條。
ANL C,bit ;(CY)∧(bit)→CY
ANL C,/bit ;(CY)∧( )→CY
ORL C,bit ;(CY)∨(bit)→CY
ORL C,/bit ;(CY)∧( )→CY
CPL C ;( )→CY
CPL bit ;( )→bir
[4]. 位控制轉移指令(5)
位控制轉移指令是以位的狀態作為實現程序轉移的判斷條件,介紹如下:
JC rel ; (CY)=1轉移,(PC)+2+rel→PC,否則程序往下執行,(PC)+2→PC。
JNC rel ; (CY)=0轉移,(PC)+2+rel→PC,否則程序往下執行,(PC)+2→PC。
JB bit, rel ; 位狀態為1轉移。
JNB bit, rel ; 位狀態為0轉移。
JBC bit, rel ; 位狀態為1轉移,並使該位清「0」。
後三條指令都是三位元組指令,如果條件滿足,(PC)+3+rel→PC,否則程序往下執行,(PC)+3→PC
② 單片機二級加密怎麼設置
程序防寫
這種方法是最常見,也是最簡單的一種。現在的MUC基本都有防寫功能,但是這種容易被人破解。
燒斷數據匯流排
這個方法聽起來不錯,但有損壞的風險,同樣也能破解。
軟體加密
是一些防止別人讀懂程序的方法,單一的這種方法不能防止別人全盤復制,須配合其他的加密演算法。
添加外部硬體電路的加密方法
這個方法效果看起來比較好,但會增加成本。
晶元打磨改型
這個方法改了型號能誤導,但同時也增加成本,解密者一般也能分析出來。
通過通過聯網加序列號加密
通過連接網路,在你的MCU中生成一個唯一的隨機長序列號,並加入復雜的特種演算法,或加入你們重新編碼的企業信息在裡面,每個晶元內不同,復制者只能復制到一個序列號。
通過MCU唯一的標識加密
以前很多MCU沒有唯一標識碼,現在的很多MCU都具有唯一標識碼了。
這個方法比較好,簡單省事,能很好的防止復制。
讀保護 + 唯一ID加密
使用讀保護 + 唯一ID的加密是最常用的一種方法,也是推薦大家使用的一種方法。
唯一ID
現在正規的晶元,每顆出廠的時候都帶了一個唯一標識碼,這個號碼是唯一不重復的,比如STM32的就使用96位作為唯一ID。
和我們每個人的身份證號碼一樣,現在剛出生的嬰兒,上戶的時候就給他一個身份證號,那麼每個晶元一生產出來,也就具備了這個身份證號。
加密原理
讀保護就不用說了,增加被破解難度。
使用唯一ID加密的方法很多,這里說一種簡單的方法:出廠時程序讀取唯一ID並保存在一個位置,以後程序執行之前,要讀取並匹配這個唯一ID,一致才執行程序。
當然,這種方法是最基礎的原理,但也存在被破解的風險。所以,存儲的數據,以及讀取驗證這兩個地方需要進一步添加一些演算法。
這樣操作之後,即使別人讀取了你的程序,也是無法正常執行。
③ 我手上有隻單片機,標識上寫的型號是第一行「H58E15D」第二行「1050N8227」 求此單片機的廠家或詳細型號。
自從單片機誕生至今,已經發展到70多個系列近500個機種。目前國內外比較有名,而且影響較大的公司和它們的產品如下:
Intel公司的MCS-48,MCS-51,MCS-96系列產品;
Motorla公司的6801、6802、6803、6805、68HCC11系列產品;
Zilog公司的Z8、super-8系列產品;
仙童公司和Mostek公司的F8、3870系列產品;
NEC公司的μCOM-87系列產品;
Rockwell工地的6500、6501系列產品。
89系列單片機的型號編碼由三個部分組成,它們是前綴、型號和後綴。格式如下:
AT89CXXXXXXXX其中,AT是前綴,89CXXXX是型號,XXXX是後綴。
下面分別對這三個部分進行說明,並且對其中有關參數的表示和意義作相應的解釋。
(l)前綴由字母「AT」組成,表示該器件是ATMEL公司的產品。
(2)型號由「89CXXXX」或「89LVXXXX」或「89SXXXX」等表示。
④ 單片機如何與USB介面相連接其硬體電路如何設計
現在都網路化了,杭州發到崑山也就一天時間,你看看這里:
單片機學習實驗及開發工具的導購
鑒於目前單片機技術火的一塌糊塗!越來越多的朋友加入了學習單片機的行列中!還有更多的朋友正在准備加入到學習單片機行列中。很多初學者在購買了本站的硬體學習板後,在短期內就掌握了自主編寫實用控製程序的能力,正所謂只要功夫深,鐵杵磨成針。
這里要先說一下單片機的含義,單片機就是一種微型的計算機,它的硬體等級不高,程序存儲器比較小,無法和我們個人電腦中的硬碟相比,但是他的整體成本很低,體積也很小,這就給電子工程師提供了一個低成本開發智能控制設備的可能。另外就是它的可塑性是很強的,只要把程序存儲器中寫入不同的程序,它就會根據不同的程序來完成不同的工作。
比如我們要控制洗衣機的完成一個智能控制洗衣流程(不採用簡單的機械定時器),從成本角度講,雖然個人電腦性能強大,但是不能採用,因為一台個人電腦的體積成本都太過了,此時用「單片機+順序控製程序+介面電路+執行電路」就是最好的解決方案了,這等於在洗衣現場有一個小小的電腦在控制著整個洗衣過程,單片機是現代全自動洗衣機的核心部分,它的應用大大減低了人的勞動強度。從這個簡單的例子中,我們就可以看到單片機的實際意義了!小到溫度智能控制,中到通訊控制,大到生產流程式控制制,都可以見到它的身影。應用范圍絕對廣泛,只要編寫好不同的程序。單片機就可以完成不同的控制工作。這樣,我們通過編寫不同的控製程序就可以實現器件的萬能化!
大致可以通過這些步驟來完成實驗及開發工作:
第一步:通過軟體編譯平台開始寫我們的試驗程序,這就好比寫文章要有筆和紙一樣,最常用的是KEIL軟體平台,比如點亮一個發光管,點亮多個發光管,點亮流水燈,驅動繼電器,驅動數碼管......,學用寫源程序有2個重點,重點1是學會在KEIL中寫源程序,就和用記事本軟體編輯文字一樣,重點2是學會把寫好的源程序通過KEIL軟體平台編譯成為單片機可以讀懂的由0和1構成的機器碼,為了簡化,通常是生成16進制的*.HEX或者*.BIN文件,不過本質還是0和1。在這里,源程序我們能讀懂,但是單片機不能讀懂,所以需要把源程序通過編譯器編譯成最終的*.HEX或者*.BIN文件。在這里,編譯平台充當的是一個語言翻譯官的角色!
第二步:製作或者購買一個編程器(也有人叫它為燒寫器)。
注意,編程器的作用是把我們編譯好的機器碼文件寫入到單片機的程序存儲器中,這個設備的作用就好比我們給一個沒有記憶的人灌輸記憶。通過程序被寫入,單片機中就被灌輸了我們的設計思想或者是某種控制流程。編程器和單片機可以支持的文件是16進制的,文件屬性一般為*.HEX或者*.BIN,它們的本質是二進制,也就是1和0。編程器只是一種寫入設備,而源程序還是要由我們來編寫和創造的!
第三步:製作或者購買一個實驗板,它的作用是完成最終的硬體驅動效果驗證。這就好比把一個已經灌輸了我們設計思想的單片機連上軀體和四肢,看看這個完整的,已經具備了「頭腦+思想+四肢」的設備是不是能真的動起來,動起來的時候看看它的動作是不是和我們設計的程序完全一致?如果不一致就說明我們給他設計的「思想」可能存在問題!此時就需要用編程器中的「擦除」操作給單片機「洗腦」,並且修改程序,然後再次寫入和看驗證結果。
比如我們用軟體寫了一個流水燈程序,通過什麼來驗證它是否可以真正的驅動硬體呢?答案就是實驗板。
也許有人會問,為什麼沒有提到模擬器?因為以前專業化的模擬器太貴了!大家一般都承受不了!
模擬器是做什麼的呢?它的作用是調試我們的程序用的,比如我們的程序有100行,假設代表了10個驅動硬體的動作,這時候如果有模擬器的話,我們可以讓這10個動作一個個的執行,同時能夠觀察到在執行這10個動作的過程中,單片機內部的各單元狀態是什麼樣的!也就是可以細致的分析一下整個程序在硬體中的具體工作過程。這樣我們就可以了解程序中是不是有問題存在,所以叫做模擬!
模擬分為硬體模擬和軟體模擬二種,軟體模擬是完全虛擬的,比較抽象,初學者理解起來比較困難。硬體模擬方面,如果硬體模擬器連接了目標設備,就可以看到驅動硬體的效果,還是比較實用的。
看了這么多的文字介紹,大家還是可以來這里看一下上面所說的到底是怎麼樣的東西,我們應該如何來使用它們,給大家一個感性的認識。
點擊進入大量單片機實驗視頻錄像在線觀看
總而言之,在你決定學習單片機之前,請做好如下准備工作:
一、硬體准備:計算機一台,編程器,模擬器和實驗板。如果你想學單片機,而又不願做這些投資,很有可能會挫傷你學習的積極性和浪費你的時間,好在這些投資並不算多:)
編程器可以選用「A51編程器」或「多功能編程器」,經常會有朋友這樣問我:這兩種編程器到底有什麼不同,其區別在哪裡?
在此,站長也說明一下其不同之處,怎麼樣的才適合你的使用。「A51編程器」的主要特點就是價格低,性能穩定,支持常用的51晶元,僅燒51的話,用用這個絕對經濟實惠,不錯了。「多功能編程器」的主要特點是性價比高,支持晶元多,有幾百種型號,還能燒寫主板BIOS晶元,比目前市場上的同類產品價格都要低。總括來講,如果你是僅僅用用51系列的,選「A51編程器」肯定OK;如果你想在單片機方面好好發展一下的,那最好還是為以後考慮一下,「多功能編程器」就比較合適了,雖然價格比「A51編程器」高了僅幾十元,但長期來看,還是非常值得投資的,以備日後做其它用途使用,而且還有豐富的套餐組合供您選購。至於「TOP系列」的編程器相對來說,價格要稍高於「A51編程器」和「多功能編程器」,但它有漂亮的外殼,看上去比較漂亮,經站長自己使用的經驗總結,感覺TOP853、TOP2000BS、TOP2005+(新產品)、TOP2007(新產品)、TOP2048這幾款TOP編程器性能比較穩定,使用感覺不錯,性價比比較高,其它的TOP系列編程器我們也就不作介紹了。
多功能編程器全套餐A:176元 相應介紹詳見這里
A51編程器:98元 相應介紹詳見這里
微型51模擬器:128元 相應介紹詳見這里
增強型51實驗板:148元 相應介紹詳見這里
增強型51實驗板可選配件:
1602液晶屏:30元 紅外線遙控器:25元 步進電機:15元 18B20溫度感測器:12元
200米無線遙控發射模塊:20元 1000米無線遙控發射模塊:35元 無線遙控接收模塊:15元
TOP系列編程器—— TOP851 TOP2000BS TOP853 TOP2005+ TOP2007 TOP2048 TOP2049
TOP全系列編程器區別與差異介紹(站長個人使用總結)
推薦單片機學習全套餐C(編程器、模擬器、實驗板分體式設計):
A51編程器+微型51模擬器+增強型51實驗板+1602液晶屏+紅外線遙控器+步進電機+DS18B20溫度感測器+200米無線遙控收發模塊(包括發射機和接收板)+AT89S51單片機晶元 總價:501+20(郵費)=521元
贈送:
1號光碟:單片機多媒體視頻教程+單片機實驗視頻錄像(酷)+實驗板原理圖+大量實驗板配套常式+電子資料手冊等 ——此碟為CDROM光碟
2號光碟:單片機權威教程全集,DVD格式,數據量4.3G,內含10CD教程 ——此碟為DVD光碟(相當於價值100元的CD教程光碟)
好消息:從2007年7月5日起,凡購買單片機學習全套餐C的用戶,特別贈送價值36元的《C51單片機高效入門》配套教程一本,以便配套學習使用。 關於贈送活動的更詳細情況請看這里--->>>
關於單片機學習全套餐C的配套的系列教學資料可以看網站首頁的「手把手教你學51單片機」欄目。
您也可以翻閱歷年來的《電子製作》雜志,我們刊登了系列連載教程,以便大家進行理論學習以及提高實踐動手能力。 歷年來有哪些期刊雜志有所介紹呢,原文及詳細情況您可以看這里--->>>點擊進入
點擊進入「單片機學習全套餐C」相關實驗視頻錄像在線觀看
現在單片機學習之類的書籍在新華書店一翻就是一大堆,讓人看了眼花繚亂,相信大家也有這樣的感受,經常會有很多單片機初學者朋友讓我來推薦單片機入門的書籍,從這些朋友的要求來看,感覺大家已經厭倦了很多條教式書籍的枯燥與古板,至少站長在大學讀書時就有這樣的感受,文科的書相對理科的書來說要好些,但對於理科的特點,本來就是比較突出其技術性與特點,要想寫出點新鮮感確實有點難;還有一點,相信大家和我也會有一個共識,現在很多書不僅多,而且厚,但到時我們真正所關心的問題是否真的有這么多呢,相信一般我們也不會把整本書全部讀完,只是取其一部分對自己有用的內容來閱讀,至少有些書對於我來講有點像字典,需要用的時候去翻一下而已。看完了書,有很多朋友可能還是會說,書我看了一大堆,但到頭來還是一團迷茫,而感到無從下手,呵呵,因為我本人也遇到過這樣的情況,對於單片機,在此我們必須提到的就是實踐動手,否則書就算看10遍甚至20遍還是不能完成具體的應用任務,這等於白學,因為不能做到學以致用。針對以上這些現狀,站長萌發了寫書的念頭,找了很多材料,並將積累的經驗,花了無數的日夜寫下了這本《C51單片機高效入門》一文,寫書的思路是以理論與實踐相結合為主導,以我們網站提供的單片機學習全套餐為硬體平台,一一介紹單片機各方面的理論知識與具體實踐動手方法,建議初學者朋友先將此書大致翻一遍,對整體有個了解,掌握理論基礎知識,然後再對照著書上的實踐例子,一個課時一個課時地學習下去,相信看完了此書,你已經跨入了單片機這個領域的大門了。
建議:如果以後想做做單片機開發及產品的,可以將以上套餐中的A51編程器換成TOP853編程器,這樣性價比可以高很多,支持的晶元有1500多種,而且是USB介面,使用非常方便,不會出現部分筆記本電腦沒有串口而不能使用的尷尬局面,如換成TOP853,補上兩種編程器的差價就可以了。
單片機學習全套餐C主要部件實物照片:
單片機學習全套餐C使用的編程器、模擬器、實驗板
1602LCD液晶屏
DS18B20溫度感測器
6121編碼紅外線遙控器
微型步進電機
200米無線收發模塊
AT89S51單片機晶元——程序燒寫使用
贈送的精美配套光碟,含豐富的學習資料與常式
贈送的單片機視頻權威教程——DVD光碟
附帶的USB線、串口線
贈送的配套學習書本 點擊查看書本詳細資料-->> 本書是以目前最為流行的8051系列單片機為主體,同時使用C程序設計語言來進行描述的。全書共分為四部分內容:單片機基礎知識、C語言程序設計、單片機入門基礎實例、單片機高級應用實例。以理論與實踐相結合的方式來進行講解,避免了傳統教科書給人枯燥、乏味的感覺。講解風格通俗易懂、條理清晰、實例豐富、圖文並茂,既使是沒有任何單片機基礎的人,也可以通過本書的學習,踏入單片機世界的大門。 作者為本書的出版開發了相應的學習編程、模擬及實驗板,以方便讀者朋友進行學習,同時以大量實例照片記錄了實驗的過程且現象,以激發讀者朋友對單片機的興趣愛好。 本書的配套光碟包含了所有實驗的源程序代碼、一些常用的電子工具軟體、晶元資料、實驗過程照片以及試驗演示視頻錄像。因此,通過本書,讀者獲得的是教程和學習平台的結合,不僅可以用於學習,而且還可以用於工廠、企業的產品研發。 本書可供電子愛好者和大學、中專相關專業學生參考。
單片機學習全套餐C的精美彩色外包裝盒,質量、品質的實力體現!
推薦單片機學習全套餐D(編程器、模擬器、實驗板一體化設計)豪華配置——多數初學者的選擇
51單片機綜合學習系統+模擬組件+1602液晶屏+紅外線遙控器+步進電機+DS18B20溫度感測器+200米無線遙控收發模塊(包括發射機和接收板) 總價:563+20(郵費)=583元
2007年我們推出的單片機學習全套餐D,一直受到用戶朋友的廣泛好評。在這一年中,結合大家在學習中遇到的問題,我們不斷總結教學經驗,更新產品技術,組織編寫與之相配套的書本教材<單片機快速入門>,目前此書已由北京航空航天大學出版社出版發行。
很多用戶在於我們的溝通中,都說到自己是初學者,很多人擔心自己學不會。我們推出這本書的目的也在於此:讓零基礎的用戶,可以邊看書邊動手實踐。我們希望用我們的力量,為更多的電子愛好者提供適合的學習資源。
我們多年的發展離不開廣大用戶的支持和信賴,新書推出之際,我們特舉行贈書活動。即日起,您在本公司購買單片機學習全套餐D,就可以免費獲得價值36元的<單片機快速入門>一書。
贈送:
1號光碟:單片機多媒體視頻教程+單片機實驗視頻錄像(酷)+實驗板原理圖+大量實驗板配套常式+電子資料手冊等 ——此碟為CDROM光碟
2號光碟:單片機權威教程全集,DVD格式,數據量4.3G,內含10CD教程 ——此碟為DVD光碟(相當於價值100元的CD教程光碟)
3號光碟:本站特別加送清晰版VCD格式「51單片機綜合學習系統」實驗視頻演示光碟一份,使用更直觀,學習更高效,對於入門級的學習非常有利。
好消息:從2008年5月8日起,凡購買單片機學習全套餐D的用戶,特別贈送價值36元的《單片機快速入門》配套教程一本,以便配套學習使用。 關於贈送活動的更詳細情況請看這里--->>>
全套餐組合不僅可以滿足初學者的學慣用途,還可以供工廠、企業研發人員及電子愛好者做一些技術研究及開發, 有較高的性價比,自投放市場以來,受到了廣大用戶的好評與支持。
關於單片機學習全套餐C的配套的系列教學資料可以看網站首頁的「手把手教你學51單片機」欄目。
您也可以翻閱歷年來的《電子製作》雜志,我們刊登了系列連載教程,以便大家進行理論學習以及提高實踐動手能力。 歷年來有哪些期刊雜志有所介紹呢,原文及詳細情況您可以看這里--->>>點擊進入
點擊進入「單片機學習全套餐D」相關實驗視頻錄像系列--1在線觀看
點擊進入「單片機學習全套餐D」相關實驗視頻錄像系列--2在線觀看
單片機學習全套餐D主要部件實物照片:
單片機全套餐D所有部件圖片集
51單片機綜合學習系統主機
DS18B20溫度感測器
優質超薄型6121編碼紅外線遙控器
微型步進電機
200米無線收發模塊
AT89S51單片機晶元——程序燒寫使用
SST89E516模擬模塊——程序模擬使用
贈送的單片機視頻權威教程——DVD光碟
附帶的USB線、串口線、並口線
贈送的配套學習書本 點擊查看書本詳細資料-->>
精美光碟,含豐富的學習資料 點擊查看常式庫-->>
單片機學習全套餐D的精美彩色外包裝盒,質量、品質的實力體現!
全套餐C與全套餐D的區別在於:
全套餐D為最新設計的學習開發系統,將編程、模擬、實驗三者功能進行了整合,同時,可做實驗的資源與功能要比全套餐C多很多,如SPI匯流排、IIC匯流排、DS1302時鍾、AD模數轉換等實驗資源。全套餐C提供的紅外線遙控器為普通黑色的紅外線遙控器,全套餐D提供的為時尚超薄型紅外線遙控器,此外,對於購買全套餐D的用戶,本站特別加送清晰版VCD格式「51單片機綜合學習系統」實驗視頻演示光碟一份,該演示視頻光碟只適用於51單片機綜合學習系統。用戶可以根據自己的需求來選擇套餐進行學習,套餐C經濟些,便宜些,但其總體功能比套餐C少些,套餐D因為用的是51單片機綜合學習系統為硬體平台,免跳線設計,所以操作比較方便、簡單些。由於全套餐D的成本要高於全套餐C的成本,所以兩種套餐的售價會略有所不同,但從其功能性價比看,我們推薦用戶使用全套餐D來進行單片機學習,一般來說,足夠學習與開發使用了。
>>> 對於一些本站產品優勢以及受歡迎的原因,請點擊這里看
單片機學習全套餐C配套的書本教程,點擊此處進入了解詳細信息。
單片機學習全套餐D配套的書本教程,點擊此處進入了解詳細信息。
原文:
⑤ 如何防止單片機解密
單片機(MCU)一般都有內部EEPROM/FLASH供用戶存放程序和工作數據。為了防止未經授權訪問或拷貝單片機的機內程序,大部分單片機都帶有加密鎖定位或者加密位元組,以保護片內程序。如果在編程時加密鎖定位被使能(鎖定),就無法用普通編程器直接讀取單片機內的程序,這就叫單片機加密。單片機攻擊者藉助專用設備或者自製設備,利用單片機晶元設計上的漏洞或軟體缺陷,通過多種技術手段,就可以從晶元中提取關鍵信息,獲取單片機內程序這就叫單片機解密。
任何一款單片機從理論上講,攻擊者均可利用足夠的投資和時間使用以上方法來攻破。這是系統設計者應該始終牢記的基本原則。因此,作為電子產品的設計工程師非常有必要了解當前單片機攻擊的最新技術,做到知己知彼,心中有數,才能有效防止自己花費大量金錢和時間辛辛苦苦設計出來的產品被人家一夜之間仿冒的事情發生。我們根據滬生電子的解密實踐提出下面建議:
(1)在選定加密晶元前,要充分調研,了解單片機破解技術的新進展,包括哪些單片機是已經確認可以破解的。盡量不選用已可破解或同系列、同型號的晶元選擇採用新工藝、新結構、上市時間較短的單片機,如可以使用ATMEGA88/ATMEGA88V,這種國內目前破解的費用一需要6K左右,另外目前相對難解密的有ST12系列,DSPPIC等;其他也可以和CPLD結合加密,這樣解密費用很高,解密一般的CPLD也要1萬左右。
(2)盡量不要選用MCS51系列單片機,因為該單片機在國內的普及程度最高,被研究得也最透。
(3)產品的原創者,一般具有產量大的特點,所以可選用比較生僻、偏冷門的單片機來加大仿冒者采購的難度,選用一些生僻的單片機,比如ATTINY2313,AT89C51RD2,AT89C51RC2,motorola單片機等比較難解密的晶元,目前國內會開發使用熟悉motorola單片機的人很少,所以破解的費用也相當高,從3000~3萬左右。
(4)在設計成本許可的條件下,應選用具有硬體自毀功能的智能卡晶元,以有效對付物理攻擊;另外程序設計的時候,加入時間到計時功能,比如使用到1年,自動停止所有功能的運行,這樣會增加破解者的成本。
(5)如果條件許可,可採用兩片不同型號單片機互為備份,相互驗證,從而增加破解成本。
(6)打磨掉晶元型號等信息或者重新印上其它的型號,以假亂真(注意,反面有LOGO的也要抹掉,很多晶元,解密者可以從反面判斷出型號,比如51,WINBOND,MDT等)。
(7)可以利用單片機未公開,未被利用的標志位或單元,作為軟體標志位。
(8)利用MCS-51中A5指令加密,其實世界上所有資料,包括英文資料都沒有講這條指令,其實這是很好的加密指令,A5功能是二位元組空操作指令加密方法在A5後加一個二位元組或三位元組操作碼,因為所有反匯編軟體都不會反匯編A5指令,造成正常程序反匯編亂套,執行程序無問題仿製者就不能改變你的源程序。
(9)你應在程序區寫上你的大名單位開發時間及仿製必究的說法,以備獲得法律保護;另外寫上你的大名的時候,可以是隨機的,也就是說,採用某種演算法,外部不同條件下,你的名字不同,比如wwwhusooncom1011、wwwhusooncn1012等,這樣比較難反匯編修改。
(10)採用高檔的編程器,燒斷內部的部分管腳,還可以採用自製的設備燒斷金線,這個目前國內幾乎不能解密,即使解密,也需要上萬的費用,需要多個母片。
(11)採用保密硅膠(環氧樹脂灌封膠)封住整個電路板,PCB上多一些沒有用途的焊盤,在硅膠中還可以摻雜一些沒有用途的元件,同時把MCU周圍電路的電子元件盡量抹掉型號。
(12)對SyncMos,Winbond單片機,將把要燒錄的文件轉成HEX文件,這樣燒錄到晶元內部的程序空位自動添00,如果你習慣BIN文件,也可以用編程器把空白區域中的FF改成00,這樣一般解密器也就找不到晶元中的空位,也就無法執行以後的解密操作。
當然,要想從根本上防止單片機被解密,那是不可能的,加密技術不斷發展,解密技術也不斷發展,現在不管哪個單片機,只要有人肯出錢去做,基本都可以做出來,只不過代價高低和周期長短的問題,編程者還可以從法律的途徑對自己的開發作出保護(比如專利)。
⑥ 單片機編程語言一般有哪幾種
單片機的編程語言有三種種:機器語言、匯編語言與高級語言。
機器語言是計算機能夠看懂的語言。(形式為一段二進制代碼)
5.由於計算機只能看懂機器語言所以無論是匯編語言還是高級語言都需要經過編譯成為機器語言才能夠執行。
拓展資料
單片機的高級語言
51單片機支持三種高級語言,即PL/M,C和BASIC。C語言是一種通用的程序設計語言,其代碼率高,數據類型及運算符豐富,並具有良好的程序結構,適用於各種應用的程序設計,是目前使用較廣的單片機編程語言。
單片機的C語言採用C51編譯器(簡稱C51)。有C51產生的目標代碼短,運行速度高,所需存儲空間小,符合C語言的ANSI標准,生成的代碼遵循Intel目標文件格式,而且可與A51匯編語言或PL/M51語言目標代碼混合使用