湯定德
(江西科技學院 機械工程學院,江西 南昌 330098)
51單片機指令系統簡析
湯定德
(江西科技學院 機械工程學院,江西 南昌 330098)
鑒于單片機指令系統的相對復雜及初學者苦于難以記憶,本文特分類介紹識記51單片機指令的一些基本原則,以便激起初學者對單片機課程的學習興趣,從而進行更深入的研究。通過教學實踐證明,這些識記原則在學生學習中起到了很好的效果。
單片機;指令系統;初學者;原則
在科技快速發展的今天,任何設備和產品的自動化、數字化和智能化都離不開單片機[1]。因此,各大高校與電有關的專業都開設了單片機課程,且目前使用最多的是8位51系列單片機[1],其內部邏輯結構相對復雜(如圖1所示),但指令系統中的111條指令可按功能大致分為5類:數據傳送類指令(29條)、算術運算類指令(24條)、邏輯運算及移位類指令(24條)、控制轉移類指令(17條)和位操作類指令(17條)[2]。
在單片機指令系統中,除存儲器讀/寫指令(MOVX、MOVC)涉及單片機外部存儲單元外,其余指令所涉及的存儲單元均在單片機內部。考慮到單片機指令系統的相對復雜及初學者苦于難以記憶,以致于因此失去對本門課程的學習興趣(興趣是最好的老師)而被動學習,本文特分類介紹識記51單片機指令的一些基本原則。
該指令的助記符為MOV,其基本格式為MOV〈目的操作數〉,〈源操作數〉,對這一格式的傳送指令需掌握如下3個原則:
1、只能在內部數據存儲器中傳送;
2、目的操作數一定是非立即數;
3、兩操作數的位數必須相同即對等原則。
1、外部數據存儲器讀寫指令
該指令必須包含3個元素,即MOVX、A以及@Ri或@DPTR,且A在前為“讀數據”進來,A在后為“寫數據”出去。
2、程序存儲器讀指令
該指令只有兩條,即MOVC A,@A+DPTR和MOVC A,@A+PC(必須是將數據讀到A中),且對內外程序存儲器均一樣。

圖1 51單片機內部邏輯結構圖
3、數據交換指令(XCH、XCHD、SWAP)
該指令中必定是A處于目的操作數位置,且必須是A同內部RAM單元(絕不能是立即數)之間(或A的高、低4位之間)進行內容交換,這與C語言中進行交換必須借助中間變量略有不同,主要是因為單片機內部的“暫存器2”相當于隱形的中間變量,這一點可從圖1中看出。
4、堆棧操作指令
該指令只有兩個,即“PUSH direct”(進棧)和“POP direct”(出棧),其中的8位直接地址direct(因專用寄存器只能使用直接尋址方式,故在用到時也可以是ACC或其它專用寄存器符號,下同)對應著內RAM單元(如80C51的內部RAM 00H-FFH單元)。
圖1中算術運算邏輯單元ALU和可位尋址的專用寄存器(累加器ACC、B寄存器、程序狀態字PSW),以及兩個暫存器(TMP1、TMP2)組成了“運算中心”,而其它寄存器不能直接參與(但可通過暫存器)算術邏輯運算。另外,從圖1中各寄存器的相對位置可知,單字節“位運算(移位和邏輯運算)”只會涉及ACC和PSW而B不會參加。
算術運算指令主要指加(ADD、ADDC、INC)減(SUBB、DEC)乘(MUL AB)除(DIV AB)及十進制調整(DA A)指令,其操作數為內RAM單元或立即數,且可分為單操作數類算術運算指令(INC、DEC、“DA A”)和二操作數類算術運算指令(ADD、ADDC、“MUL AB”、“DIV AB”)兩種。
1、單操作數類算術運算指令
因“DA A”指令只能對加減法結果(存于A中)進行十進制調整而為固定格式,而INC和DEC后的操作數(因是單操作數運算,故A不一定參加)只要是對應內RAM的單元即可,但無DEC DPTR指令,這是習慣用法。
2、二操作數類算術運算指令
除“MUL AB與DIV AB”為固定格式外,其它指令只要A為目的操作數即可,如ADDC A,#38H。
這類指令中的操作數同樣為內RAM單元或立即數,其中只有A的單操作數指令包括所有移位指令(RL、RR、RLC、RRC)和整字節清零(CLR A)及取反指令(CPL A)。因它們都相當于“位運算”,故在指令中只能是A,而對于其它邏輯運算指令(ANL、ORL、XRL)中的二操作數使用原則同前述“基本傳送類指令”(圖1中提示的TMP2的數據來源不一定是A,指的就是二操作數邏輯運算)。
控制轉移類指令包括無條件轉移指令和條件轉移指令,而真正意義上的無條件轉移指令助記符應該包括LJMP、AJMP、SJMP、JMP、ACALL和LCALL,其中除“JMP@A+DPTR”為固定格式外,其余的指令助記符后均跟不同位數的地址,但在編程使用中都是以標號代替。
條件轉移指令可分為單操作數指令(JZ/JNZ rel)、二操作數指令(DJNZ Rn/direct,rel)和三操作數指令(“CJNE A/Rn/@Ri,#data,rel”和“CJNE A,direct,rel”),且其中的“相對地址rel”在編程使用中均以標號代替(下同)。
這類指令中的操作數除轉移類指令中的“相對地址rel”外,一定是內RAM中可位尋址單元中的某一位,因“位運算”的結果主要存在PSW中(如圖1所示),故位操作類指令中只能出現C和位地址“bit”。具體如下:
1、位傳送指令(MOV C,bit和MOV bit,C)
該指令中必須得出現C。
2、位“置1”(SETB C/bit)、“清0”(CLR C/bit)和“取反”(CPL C/bit)指令
均為單操作數指令。
3、二操作數位邏輯運算指令(ANL/ORL C,bit)
該指令的目的操作數須為C且格式固定。
4、位控制轉移指令
分單操作數指令(JC/JNC rel)和雙操作數指令(JB/JBC/JNB bit,rel),其中的“JBC bit,rel”指令比較特殊且使用較多(查詢用),即程序發生轉移的同時使“bit”對應位內容清零。
本文介紹了51單片機(以80C51為例)各類指令的顯著特點,以便初學者識記并靈活應用,從而激起對單片機課程的學習興趣并進行深入研究。教學實踐證明,指令系統的基本原則對學生效果明顯,相信能為智能化時代的盡早到來創造可能。
[1]李廣弟.單片機基礎(第3版)[M].北京:北京航空航天大學出版社,2007.
[2]李勛,等.單片機實用教程(第2版)[M].北京:北京航空航天大學出版社,2006.
[3]何立民.單片機高級教程:應用與設計(第2版)[M].北京:北京航空航天大學出版社,2007.
[4]胡錦,等.單片機技術實用教程[M].北京:高等教育出版社,2003.
(責任編輯:陳 輝)
A Brief Analysis of the 51 Single-chip Microcomputer System
TANG Ding-de
(Mechanic Engineering School,Jiangxi University of Technology,Nanchang 330098,China)
In view of the relatively complex instruction system of the single-chip Microcomputer(SCM),the beginners are hard to memorize it.This article introduces the classification of some basic principles to memorize the instructions of 51SCM.It aims to arouse the beginners'interests to learn the SCM course,and do some further studies.It has been proved through the practice of teaching that these principles of memorizing have a good effect on students'learning.
single-chip microcomputer;instruction system;beginner;principles
TP36
A
123(2014)03-0058-03
2014-01-15
湯定德(1977-),男,江西萬年人,江西科技學院機械工程學院,講師,碩士。研究方向:電力電子技術。