㈠ 51單片機指令有哪些啊
MCS-51單片機的指令集
1、數據傳送類指令
助記符 功能說明 位元組數 振盪周期
MOV A,Rn 寄存器內容送入累加器 1 12
MOV A,direct 直接地址單元中的數據送入累加器 2 12
MOV A,@Ri 間接RAM中的數據送入累加器 1 12
MOV A,#data8 8位立即數送入累加器 2 12
MOV Rn,A 累加器內容送入寄存器 1 12
MOV Rn,direct 直接地址單元中的數據送入寄存器 2 24
MOV Rn,#data8 8位立即數送入寄存器 2 12
MOV direct,A 累加器內容送入直接地址單元 2 12
MOV direct,Rn 寄存器內容送入直接地址單元 2 24
MOV direct,direct 直接地址單元中的數據送入直接地址單元 3 24
MOV direct,@Ri 間接RAM中的數據送入直接地址單元 2 24
MOV direct,#data8 8位立即數送入直接地址單元 3 24
MOV @Ri,A 累加器內容送入間接RAM單元 1 12
MOV @Ri,direct 直接地址單元中的數據送入間接RAM單元 2 24
MOV @Ri,#data8 8位立即數送入間接RAM單元 2 12
MOV DPTR,#data16 16位立即數地址送入地址寄存器 3 24
MOVC A,@A+DPTR 以DPTR為基地址變址定址單元中的數據送入累加器 1 24
MOVC A,@A+PC 以PC為基地址變址定址單元中的數據送入累加器 1 24
MOVX A,@Ri 外部RAM(8位地址)送入累加器 1 24
MOVX A,@DPTR 外部RAM(16位地址)送入累加器 1 24
MOVX @Ri,A 累加器送入外部RAM(8位地址) 1 24
MOVX @DPTR,A 累加器送入外部RAM(16位地址) 1 24
PUSH direct 直接地址單元中的數據壓入堆棧 2 24
POP DIRECT 堆棧中的數據彈出到直接地址單元 2 24
XCH A,Rn 寄存器與累加器交換 1 12
XCH A,direct 直接地址單元與累加器交換 2 12
XCH A,@Ri 間接RAM與累加器交換 1 12
XCHD A,@Ri 間接RAM與累加器進行低半位元組交換 1 12
2、算術操作類指令
助記符 功能說明 位元組數 振盪周期
ADD A,Rn 寄存器內容加到累加器 1 12
ADD A,direct 直接地址單元加到累加器 2 12
ADD A,@Ri 間接RAM內容加到累加器 1 12
ADD A,#data8 8位立即數加到累加器 2 12
ADDC A,Rn 寄存器內容帶進位加到累加器 1 12
ADDC A,dirct 直接地址單元帶進位加到累加器 2 12
ADDC A,@Ri 間接RAM內容帶進位加到累加器 1 12
ADDC A,#data8 8位立即數帶進位加到累加器 2 12
SUBB A,Rn 累加器帶借位減寄存器內容 1 12
SUBB A,dirct 累加器帶借位減直接地址單元 2 12
SUBB A,@Ri 累加器帶借位減間接RAM內容 1 12
SUBB A,#data8 累加器帶借位減8位立即數 2 12
INC A 累加器加1 1 12
INC Rn 寄存器加1 1 12
INC direct 直接地址單元內容加1 2 12
INC @Ri 間接RAM內容加1 1 12
INC DPTR DPTR加1 1 24
DEC A 累加器減1 1 12
DEC Rn 寄存器減1 1 12
DEC direct 直接地址單元內容減1 2 12
DEC @Ri 間接RAM內容減1 1 12
MUL A,B A乘以B 1 48
DIV A,B A除以B 1 48
DA A 累加器進行十進制轉換 1 12
3、邏輯操作類指令
助記符 功能說明 位元組數 振盪周期
ANL A,Rn 累加器與寄存器相「與」 1 12
ANL A,direct 累加器與直接地址單元相「與」 2 12
ANL A,@Ri 累加器與間接RAM內容相「與」 1 12
ANL A,#data8 累加器與8位立即數相「與」 2 12
ANL direct,A 直接地址單元與累加器相「與」 2 12
ANL direct,#data8 直接地址單元與8位立即數相「與」 3 24
ORL A,Rn 累加器與寄存器相「或」 1 12
ORL A,direct 累加器與直接地址單元相「或」 2 12
ORL A,@Ri 累加器與間接RAM內容相「或」 1 12
ORL A,#data8 累加器與8位立即數相「或」 2 12
ORL direct,A 直接地址單元與累加器相「或」 2 12
ORL direct,#data8 直接地址單元與8位立即數相「或」 3 24
XRL A,Rn 累加器與寄存器相「異或」 1 12
XRL A,direct 累加器與直接地址單元相「異或」 2 12
XRL A,@Ri 累加器與間接RAM內容相「異或」 1 12
XRL A,#data8 累加器與8位立即數相「異或」 2 12
XRL direct,A 直接地址單元與累加器相「異或」 2 12
XRL direct,#data8 直接地址單元與8位立即數相「異或」 3 24
CLR A 累加器清0 1 12
CPL A 累加器求反 1 12
RL A 累加器循環左移 1 12
RLC A 累加器帶進位循環左移 1 12
RR A 累加器循環右移 1 12
RRC A 累加器帶進位循環右移 1 12
SWAP A 累加器半位元組交換 1 12
4、控制轉移類指令
助記符 功能說明 位元組數 振盪周期
ACALL addr11 絕對短調用子程序 2 24
LACLL addr16 長調用子程序 3 24
RET 子程序返回 1 24
RETI 中斷返回 1 24
AJMP addr11 絕對短轉移 2 24
LJMP addr16 長轉移 3 24
SJMP rel 相對轉移 2 24
JMP @A+DPTR 相對於DPTR的間接轉移 1 24
JZ rel 累加器為零轉移 2 24
JNZ rel 累加器非零轉移 2 24
CJNE A,direct,rel 累加器與直接地址單元比較,不等則轉移 3 24
CJNE A,#data8,rel 累加器與8位立即數比較,不等則轉移 3 24
CJNE Rn,#data8,rel 寄存器與8位立即數比較,不等則轉移 3 24
(相等則執行本指令的下一條)
CJNE @Ri,#data8,rel 間接RAM單元,不等則轉移 3 24
(但有時還想得知兩數比較之後哪個大,哪個小,
本條指令也具有這樣的功能,如果兩數不相等,
則CPU還會反映出哪個數大,哪個數小,
這是用CY(進位標志位)來實現的。
如果左邊的數(A,Rn,@Ri)大或者等於右邊的數(direct,#date8),則CY=0;否則CY=1)
DJNZ Rn,rel 寄存器減1,非零轉移 3 24
DJNZ direct,rel 直接地址單元減1,非零轉移 3 24
NOP 空操作 1 12
控制轉移指令共有17條,可分為「無條件轉移指令」 「有條件轉移指令」 「子程序調用指令」 及 「返回指令」。
5、布爾變數操作類指令
助記符 功能說明 位元組數 振盪周期
CLR C 清進位位 1 12
CLR bit 清直接地址位 2 12
SETB C 置進位位 1 12
SETB bit 置直接地址位 2 12
CPL C 進位位求反 1 12
CPL bit 直接地址位求反 2 12
ANL C,bit 進位位和直接地址位相「與」 2 24
ANL C,/bit 進位位和直接地址位的反碼相「與」 2 24
ORL C,bit 進位位和直接地址位相「或」 2 24
ORL C,/bit 進位位和直接地址位的反碼相「或」 2 24
MOV C,bit 直接地址位送入進位位 2 12
MOV bit,C 進位位送入直接地址位 2 24
JC rel 進位位為1則轉移(CY=O不轉移,=1轉移) 2 24
JNC rel 進位位為0則轉移(和上面相反) 2 24
JB bit,rel 直接地址位為1則轉移 3 24
JNB bit,rel 直接地址位為0則轉移 3 24
JBC bit,rel 直接地址位為1則轉移,該位清零 3 24
偽指令
助記符 功能說明
ORG 設置程序起始地址
END 標志源代碼結束
EQU 定義常數
SET 定義整型數
DATA 給位元組類型符號定值
BYTE 給位元組類型符號定值
WROD 給字類型符號定值
BIT 給位地址取名
ALTNAME 用自定義名取代保留字
DB 給一塊連續的存儲區裝載位元組型數據
DW 給一塊連續的存儲區裝載字型數據
DS 預留一個連續的存儲區或裝入指定位元組。
INCLUDE 將一個源文件插入程序中
TITLE 列表文件中加入標題行
NOLIST 匯編時不產生列表文件
NOCODE 條件匯編時,條件為假的不產生清單
㈡ MCS51單片機的偽指令有哪些
匯編起始偽指令:ORG;結束偽指令:END;位元組數據定義偽指令:DB;字數據定義偽指令:DW;空間定義偽指令:DS;賦值偽指令:EQU;位地址符號定義偽指令:BIT ;片內RAM直接位元組地址定義偽指令:DATA;片外RAM直接位元組地址定義偽指令:XDATA;一共9個
㈢ 單片機如何接收按鈕信號,比如我按下開關,線路接通,單片機如何知道...
如圖:兩種方法,一個地點平觸發(開關在下),一個高電平觸發(開關在上)。如果連接的是普通的IO口,則採用輪詢方式,就是程序要不停地判斷埠是否有變化。如果連接的中斷腳的話,單片機內部需要對觸發類型做設置,開關在下的設置為低電平觸發,開關在上的設置為高電平觸發,這樣不用你在程序裡面不停的去輪詢埠的電平變化,只需要在中斷服務里編寫你要執行的功能即可,這樣當外界有相應的電平變化的時候,單片機就自動的跳到了你的中斷服務程序里執行了,執行完了,就會退出,等待下一個脈沖的到來。這樣你的程序就靈活多了。
㈣ 51單片機指令
TF1是定時器1溢出標志位,$是取地址。JNB TF1,$ 實現的功能是查詢定時器1溢出標志位,如果為0,跳轉到本條指令繼續執行(即繼續查詢)直到定時時間到,TF1置位,才執行下一條指令。
給你注釋一下:
MOV TMOD,#10H //設置定時器工作方式(定時器1,工作方式2)
SETB TR1 //開啟定時器1
LOOP: MOV TH1,#0D8H //裝初值D8F0H 即55536,定時10mS(晶振12M)時間隨晶振改變
MOV TL1,#0F0H
JNB TF1,$ //查詢等待定時器1中斷
CLR TF1 //定時器溢出標志位清0(定時時間到後硬體自動給TF1置位,需軟體清0)
CPL P1.1 //P1.1取反
SJMP LOOP //跳到LOOP處循環(是個死循環)
該段程序實現的功能是:每隔10mS對P1.1取反一次。(10mS當然是晶振為12M的情況下)
㈤ 單片機外部中斷0的入口地址
中斷響應過程包括保護斷點和將程序轉向中斷服務程序的入口地址。首先,中斷系統通過硬體自動生成長調用指令(LACLL),該指令將自動把斷點地址壓入堆棧保護(不保護累加器A、狀態寄存器PSW和其它寄存器的內容),然後,將對應的中斷入口地址裝入程序計數器PC(由硬體自動執行),使程序轉向該中斷入口地址,執行中斷服務程序。MCS-51系列單片機各中斷源的入口地址由硬體事先設定,分配如下:
中斷源 入口地址
外部中斷0 0003H
定時器T0中斷 000BH
外部中斷1 0013H
定時器T1中斷 001BH
串列口中斷 0023H
使用時,通常在這些中斷入口地址處存放一條絕對跳轉指令,使程序跳轉到用戶安排的中斷服務程序的起始地址上去。
㈥ MCS-51系列單片機,長調用LCALL和短調用ACALL什麼情況下使用
可定址的范圍不一樣,ACALL是雙位元組指令,調用指令的地址PC加2後與所調用的子程序的起始地址應在同一個2KB范圍內,而LCALL是三位元組指令,可在64KB范圍內調用,換句話說,就是子程序離得太遠就要用LACLL,離得近用ACALL就可以。LJMP和SJMP同上,LJMP三位元組指令,可轉移到64KB程序存儲器任意單元,SJMP是雙位元組指令,只可以在存儲器256個單元范圍內轉移。
㈦ STC單片機絕對調用和長調用指令有何本質上的區別如何選用
指令結構相同:指令 + 直接地址。
執行過程不同:調用指令要保護現場,進行堆棧操作,轉移指令不需要;
執行結果不同:調用指令執行後會返回執行下一條指令,程序模塊沒有結束;
轉移指令不會返回,本條指令就是程序模塊的結尾。區別是:1、下載方式不同,AT中的S51S52系列的下載方式是ISP下載方式,而C51C52與STC都是串口下載方式2、內存大小有所不同3、部分特殊功能寄存器不同4、STC的單片機相對地執行速度更快,功能更加強大可定址的范圍不一樣,ACALL是雙位元組指令,調用指令的地址PC加2後與所調用的子程序的起始地址應在同一個2KB范圍內,而LCALL是三位元組指令,可在64KB范圍內調用,換句話說,就是子程序離得太遠就要用LACLL,離得近用ACALL就可以。LJMP和SJMP同上,LJMP三位元組指令,可轉移到64KB程序存儲器任意單元,SJMP是雙位元組指令,只可以在存儲器256個單元范圍內轉移。。STC 單片機採用 51 內核,在 51 的基礎上有所改進,而 PIC 是精簡指令集的單片機,二者的技術路線不同。由於 51 的資源多,初學者一般會選擇 51 系列,學會一種單片機再學習其他系列很容易。做項目的專業人員則不同,單片機種類繁多,可以選擇最合適的型號,甚至定製專用晶元。