A. 單片機匯編
程序好像沒有問題,編譯出什麼問題了?
Keil卸了沒辦法試……
B. 求單片機總匯編語言指令表、____
編號 指令名稱 指令助記符 指令說明
數據傳送類指令
1 一般傳送 MOV A, #data 將立即數#data送累加器A
2 MOV direct, #data 將立即數#data送片內RAM direct地址單元內
3 Mov Rn, #data 將立即數#data送寄存器Rn
4 Mov @Ri, #data 寄存器Ri內為RAM地址,將立即數#data送該地址單元內
5 Mov direct2, direct1 將direct1地址單元的數據送 direct2地址單元內
6 Mov direct, rn 將Rn的數據送 direct地址單元內
7 Mov Rn, direct 將direct地址單元內的數據送Rn寄存器
8 Mov direct, @Ri 寄存器Ri內為RAM地址,將該地址單元內的數據送direct地址單元內
9 Mov @Ri, direct 寄存器Ri內為RAM地址,將direct地址單元內的數據送該地址單元內
10 Mov A, Rn 將寄存器Rn內的數據送累加器A
11 Mov Rn, A 將累加器A內的數據送寄存器Rn
12 Mov A, direct 將direct地址單元內的數據送累加器A
13 Mov direct, A 將累加器A內的數據送direct地址單元內
14 Mov A, @Ri 寄存器Ri內為RAM地址,將該地址單元內的數據送累加器A
15 Mov @Ri , A 寄存器Ri內為RAM地址,將累加器A的數據送該地址單元內
16 目的地址傳送 Mov DPTR, #data16 將16位立即數送數據指針DPTR寄存器
17 位元組交換 SWAP A 累加器A高低4位數據交換
18 XCH A, Rn 將累加器A數據和寄存器Rn內的數據交換
19 XCH A, direct 將累加器A數據和direct地址單元內的數據交換
20 XCH A, @Ri 寄存器Ri內為RAM地址,將該地址單元內的數據與累加器A的數據交換
21 XCHD A, @Ri 寄存器Ri內為RAM地址,將該地址單元內的數據低4位與的低4位交換
22 與外部RAM傳送 MOVX @DPTR, A 將累加器A的數據送數據指針DPTR寄存器所指外部RAM地址單元內
23 MOVX A , @DPTR 將DPTR寄存器所指外部RAM地址單元內的數據送累加器A
24 MOVX A, @Ri 寄存器Ri內為片外RAM地址,將該地址單元內的數據送累加器A
25 MOVX @Ri, A 寄存器Ri內為片外RAM地址,將該地址單元內的數據送累加器A
26 與ROM傳送 MOVC A, @A+DPTR A+DPTR構成ROM地址,將該地址內的數據送累加器A內
27 MOVC A, @A+PC A+PC構成ROM地址,將該地址內的數據送累加器A內
28 棧操作 PUSH direct 堆棧指針SP自加1後,將direct地址單元的數據壓進堆棧,
29 POP direct 堆棧的數據送direct地址單元中,後堆棧指針減1,
算術運算指令
30 加法指令 ADD A, Rn 將寄存器Rn與累加器A的數據相加後,結果保存到累加器A
31 ADD A, direct 將direct地址單元內的數據與累加器A的數據相加後結果保存到累加器A
32 ADD A, @Ri 寄存器Ri內位地址,將該地址單元內的數據與累加器A的數據相加後結果保存到累加器A
33 ADD A, #data 將立即數與累加器A的數據相加後結果保存到累加器A
34 帶進位加法 ADDC A, Rn 將寄存器Rn與累加器A的數據相加,再加上進位標志內的值後,結果保存到累加器A
35 ADDC A, direct 將direct地址單元內的數據與累加器A的數據相加,再加上進位標志內的值後,結果保存到累加器A
36 ADDC A, @Ri 寄存器Ri內為RAM地址,將該地址單元內的數據與累加器A的數據相加,再加上進位標志內的值後,結果保存到累加器A
37 ADDC A, #data 將立即數與累加器A的數據相加,再加上進位標志內的值後結果保存到累加器A
38 帶借位減法 SUBB A, Rn 將與累加器A的數據減去寄存器Rn的數據,再減去進位標志內的值,結果保存到累加器A
39 SUBB A, direct 將與累加器A的數據減去direct地址單元內的數據,再減去進位標志內的值,結果保存到累加器A
40 SUBB A, @Ri 寄存器Ri內為RAM地址,將累加器A的數據減去該地址單元內的數據,再減去進位標志內的值後,結果保存到累加器A
41 SUBB A, #data 將累加器A的數據減去立即數,再減去進位標志內的值後,結果保存到累加器A
42 加1指令 INC A 累加器A的值自加1
43 INC Rn 寄存器Rn的值自加1
44 INC direct direct地址單元內值自加1
45 INC @Ri 寄存器Ri內為RAM地址,該地址單元內的值自加1
46 INC DPTR 數據指針寄存器DPTR內的值自加1
47 減1指令 DEC A 累加器A的值自減1
48 DEC Rn 寄存器Rn的值自減1
49 DEC direct direct地址單元內的值自減1
50 DEC @Ri 寄存器Ri內為RAM地址,該地址單元內的值自減1
51 乘法 MUL AB 累加器A與寄存器B內的值相乘,乘積的高8位保存在B寄存器,低8位保存在累加器A中
52 除法 DIV AB 累加器A的值除以寄存器B的值,商保存在累加器A中,余數保存在B寄存器
53 二-十進制調整 DA A 對累加器A的結果進行十進制調整
邏輯運算指令
54 邏輯與 ANL A, Rn 將累加器A的值和寄存器Rn的值進行與操作,結果保存到累加器A中
55 ANL A, direct 將累加器A的值和direct地址單元內的值進行與操作,結果保存到累加器A中
56 ANL A, @Ri 寄存器Ri內為RAM地址,將累加器A的值和該地址單元內的值進行與操作,結果保存到累加器A中
57 ANL A, #data 將累加器A的值和立即數進行與操作,結果保存到累加器A中
58 ANL direct, A 將累加器A的值和direct地址單元內的值進行與操作,結果保存到direct地址單元內
59 ANL direct, #data 將立即數和direct地址單元內的值進行與操作,結果保存到direct地址單元內
60 邏輯或 ORL A, Rn 將累加器A的值和寄存器Rn的值進行或操作,結果保存到累加器A中
61 ORL A, direct 將累加器A的值和direct地址單元內的值進行或操作,結果保存到累加器A中
62 ORL A, @Ri 寄存器Ri內為RAM地址,將累加器A的值和該地址單元內的值進行或操作,結果保存到累加器A中
63 ORL A, #data 將累加器A的值和立即數進行或操作,結果保存到累加器A中
64 ORL direct, A 將累加器A的值和direct地址單元內的值進行或操作,結果保存到direct地址單元內
65 ORL direct, #data 將立即數和direct地址單元內的值進行或操作,結果保存到direct地址單元內
66 邏輯異或 XRL A, Rn 將累加器A的值和寄存器Rn的值進行異或操作,結果保存到累加器A中
67 XRL A, direct 將累加器A的值和direct地址單元內的值進行異或操作,結果保存到累加器A中
68 XRL A, @Ri 寄存器Ri內為RAM地址,將累加器A的值和該地址單元內的值進行異或操作,結果保存到累加器A中
69 XRL A, #data 將累加器A的值和立即數進行異或操作,結果保存到累加器A中
70 XRL direct, A 將累加器A的值和direct地址單元內的值進行異或操作,結果保存到direct地址單元內
71 XRL direct, #data 將立即數和direct地址單元內的值進行異或操作,結果保存到direct地址單元內
72 按位取反 CPL A 累加器A的值按位取反
73 累加器清零 CLR A 累加器A清0
74 邏輯右移 RR A 累加器A的值循環右移1位
75 邏輯左移 RL A 累加器A的值循環左移1位
76 帶進位右移 RRC A 累加器A的值帶進位循環右移1位
77 帶進位左移 RLC A 累加器A的值帶進位循環左移1位
控制轉移指令
78 無條件轉移 SJMP rel rel為地址偏移量,PC加2後的地址加上rel作為目標地址,程序跳到目標地址繼續運行
79 AJMP addr11(a10- a0) addr11為11位地址,PC加2後的地址高5位與指令中的低11位地址構成目標地址,程序跳到目標地址繼續運行
80 LJMP addr16 將addr16的16位地址送程序計數器PC,使機器執行下一條指令時無條件轉移到addr16處執行程序
81 JMP @A+DPTR 目標地址的基地址放在DPTR中,目標地址對基地址的偏移量放在累加器A中,它們相加構成目標地址
82 條件轉移 JZ rel If(累加器A=0)則PC加2再加上rel作為目標地址
83 JNZ rel If(累加器A!=0)則PC加2再加上rel作為目標地址
84 CJNE A, direct, rel If(累加器A!= direct地址單元的值)則PC加2再加上rel作為目標地址
85 CJNE A, #data, rel If(累加器A!= 立即數)則PC加2再加上rel作為目標地址
86 CJNE Rn, #data, rel If(寄存器Rn的值!= 立即數)則PC加2再加上rel作為目標地址
87 CJNE @Ri, #data, rel 寄存器Ri內為RAM地址,If(該地址單元的值!= 立即數)則PC加2再加上rel作為目標地址
88 循環轉移 DJNZ Rn, rel 寄存器Rn的值減1後,If(寄存器Rn的值!=0)則PC加2再加上rel作為目標地址
89 DJNZ direct, rel Direct地址單元的值減1後,If(該值!=0)則PC加3再加上rel作為目標地址
90 布爾條件轉移 JC rel If(CY=1)則PC加2再加上rel作為目標地址
91 JNC rel If(CY=0)則PC加2再加上rel作為目標地址
92 JB bit, rel If(bit位=1)則PC加3再加上rel作為目標地址
93 JNB bit, rel If(bit位=0)則PC加3再加上rel作為目標地址
94 JBC bit, rel If(bit位=1)則PC加3再加上rel作為目標地址,且bit位清0
95 調用指令 ACALL addr11 addr11為11位地址,PC加2後的地址PUSH進堆棧,再將PC的地址高5位與指令中的低11位地址構成目標地址,程序跳到目標地址繼續運行
96 LCALL addr16 PC加3後的地址PUSH進堆棧,再將16位地址送PC作為目標地址,程序跳到目標地址繼續運行
97 返回指令 RET 子程序返回指令,把堆棧中的地址恢復到PC中使程序回到調用處
98 RETI 中斷程序返回指令,把堆棧中的地址恢復到PC中使程序回到調用處
99 空操作 NOP 空操作
位操作指令
100 布爾傳送 MOV C, bit 將bit位地址中的值送PSW中的進位標志位CY
101 MOV bit, C 將PSW中的進位標志位CY的值送bit位地址中
102 位清0 CLR C 將進位標志位CY清0
103 位清0 CLR bit 將bit位地址內清0
104 位置1 SETB C 將進位標志位CY置1
105 SETB bit 將bit位地址內置1
106 位與 ANL C, bit 將Cy和bit位地址中的值進行與操作後,結果送Cy
107 ANL C, /bit bit位地址中的值取反後再與Cy進行與操作,結構送Cy
108 位或 ORL C, bit 將Cy和bit位地址中的值進行或操作後,結果送Cy
109 ORL C, /bit bit位地址中的值取反後再與Cy進行或操作,結構送Cy
110 位取反 CPL C 將Cy取反
111 CPL bit 將bit位地址的值取反
說明:
1)Ri, Rn指當前工作寄存器,i,n = 0 – 7,當前工作寄存器由程序狀態字寄存器PSW的2個位RS1, RS0決定
C. 單片機匯編查表指令
mov xp0,#0
mov dptr,#tp0
LOOP: mov a,xp0
movc a,@a+dptr
mov p2,a
inc xp0
mov a,xp0
cjne a,#80,LOOP %循環查表中每一個直接的值,一共80次%
ret
tp0: DB 030H,048H,048H,048H,048H,048H,030H,000H
DB 010H,030H,010H,010H,010H,010H,07CH,000H
DB 000H,038H,044H,004H,018H,020H,07CH,000H
DB 030H,048H,008H,010H,008H,048H,030H,000H
DB 008H,018H,028H,048H,07CH,008H,008H,000H
DB 03CH,020H,020H,038H,004H,024H,018H,000H
DB 078H,040H,040H,078H,048H,048H,078H,000H
DB 078H,008H,008H,008H,008H,008H,008H,000H
DB 030H,048H,048H,030H,048H,048H,030H,000H
DB 030H,048H,048H,038H,008H,048H,030H,000H
D. 在51單片機匯編語言中,MOV DPTA,#TABLE 查表指令 怎麼個查法
這個就是把表TABLE的首地址放到的DPTA中。
然後通過操作DPTA來訪問TABLE表中的數據
E. 誰告訴我單片機中匯編需要查表怎麼寫
MOV DPTR,#TAB
MOV A,#3
MOVC A,@A+DPTR ;這樣就查到TAB表中從0開始第3個位元組的數,55H給A
;-------------------------------------
TAB: DB 0F5H,035H
DB 00H,55H
兩種沒區別
F. 求89S52單片機匯編指令表
51單片機匯編指令表
8051
INSTRUCTION
SET
1.Arithmetic
operations:
指令用法
位元組數
機器周期數
ADD
A,@Ri
1
1
ADD
A,Rn
1
1
ADD
A,direct
2
1
ADD
A,#data
2
1
ADDC
A,@Ri
1
1
ADDC
A,Rn
1
1
ADDC
A,direct
2
1
ADDC
A,#data
2
1
SUBB
A,@Ri
1
1
SUBB
A,Rn
1
1
SUBB
A,direct
2
1
SUBB
A,#data
2
1
INC
A
1
1
INC
@Ri
1
1
INC
Rn
1
1
INC
DPTR
1
1
INC
direct
2
1
INC
direct
2
1
DEC
A
1
1
DEC
@Ri
1
1
DEC
Rn
1
1
DEC
direct
2
1
MUL
AB
1
4
DIV
AB
1
4
DA
A
1
1
2.Logical
opreations:
ANL
A,@Ri
1
1
XRL
A,@Ri
1
1
ANL
A,Rn
1
1
XRL
A,Rn
1
1
ANL
A,direct
2
1
XRL
A,direct
2
1
ANL
A,#data
2
1
XRL
A,#data
2
1
ANL
direct,A
2
1
XRL
direct,A
2
1
ANL
direct,#data
3
2
XRL
direct,#data
3
2
ORL
A,@Ri
1
1
CLR
A
1
1
ORL
A,Rn
1
1
CPL
A
1
1
ORL
A,direct
2
1
RL
A
1
1
ORL
A,#data
2
1
RLC
A
1
1
ORL
direct,A
2
1
RR
A
1
1
ORL
direct,#data
3
2
RRC
A
1
1
SWAP
A
1
1
3.Data
transfer:
Mnemonic
Byte
Cyc
MOV
A,@Ri
1
1
MOV
DPTR,#data16
3
2
MOV
A,Rn
1
1
MOVC
A,@A+DPTR
1
2
MOV
A,direct
2
1
MOVC
A,@A+PC
1
2
MOV
A,#data
2
1
MOVX
A,@Ri
1
2
MOV
@Ri,A
1
1
MOVX
A,@DPTR
1
2
MOV
@Ri,direct
2
2
MOVX
@Ri,A
1
2
MOV
@Ri,#data
2
1
MOVX
@DPTR,A
1
2
MOV
Rn,A
1
1
PUSH
direct
2
2
MOV
Rn,direct
2
2
POP
direct
2
2
MOV
Rn,#data
2
1
XCH
A,@Ri
1
1
MOV
direct,A
2
1
XCH
A,Rn
1
1
MOV
direct,@Ri
2
2
XCH
A,direct
2
1
MOV
direct,Rn
2
2
XCHD
A,@Ri
1
1
MOV
direct,direct
3
2
MOV
direct,#data
3
2
4.Boolean
variable
manipulation:
Mnemonic
Byte
Cyc
CLR
C
1
1
ANL
C,bit
2
2
SETB
C
1
1
ANL
C,/bit
2
2
CPL
C
1
1
ORL
C,bit
2
2
CLR
bit
2
1
ORL
C,/bit
2
2
SETB
bit
2
1
MOV
C,bit
2
1
CPL
bit
2
1
MOV
bit,C
2
2
5.Program
and
machine
control:
Mnemonic
Byte
Cyc
NOP
1
1
JZ
rel
2
2
RET
1
2
JNZ
rel
2
2
RETI
1
2
JC
rel
2
2
ACALL
addr11
2
2
JNC
rel
2
2
AJMP
addr11
2
2
JB
bit,rel
3
2
LCALL
addr16
3
2
JNB
bit,rel
3
2
LJMP
addr16
3
2
JBC
bit,rel
3
2
SJMP
rel
2
2
CJNE
A,direct,rel
3
2
JMP
@A+DPTR
1
2
CJNE
A,#data,rel
3
2
DJNZ
Rn,rel
2
2
CJNE
@Ri,#data,rel
3
2
DJNZ
direct,rel
3
2
CJNE
Rn,#data,rel3
2
G. 單片機 匯編
沒有中斷優先順序,那後中斷的就只好等著。
一般是等前一個中斷程序處理完成,返回到主程序中,執行一條指令後,再響應後面這個中斷。
H. 單片機匯編語言,查表程序到底是什麼意思呀
先將使用的數字定義好,使用時指針操作讀出就可以了
I. 匯編語言裡面的查表法是什麼意思啊。在單片機裡面是怎麼運行的啊~~~~
51單片機匯編語言有一條查表指令是:MOVC A, @A+DPTR
它不是單獨使用的,要和 DB 偽指令配套使用。
例如:若累加器A中有一個0~9的數,請用查表法求出該數的平方值,設平方表表頭地址為1000H。
程序如下:
;-------------------------------------
MOV DPTR,#1000H
MOVC A,@A+DPTR
……
ORG 1000H
DB 0, 1, 4, 9, 16, 25......
;-------------------------------------
「DB」,在ROM 1000H中,順序存放了一系列的「平方」數據。
MOVC A,@A+DPTR指令中A如果等於0,就會在「平方」數據中取出第0個,就是0;
MOVC A,@A+DPTR指令中A如果等於1,就會在「平方」數據中取出第1個,就是1;
MOVC A,@A+DPTR指令中A如果等於2,就會在「平方」數據中取出第2個,就是4;
MOVC A,@A+DPTR指令中A如果等於3,就會在「平方」數據中取出第3個,就是9;
……
MOVC A,@A+DPTR指令中A如果等於9,就會在「平方」數據中取出第9個,就是81。
J. 51單片機0~90秒錶的匯編程序
這個圖看不清,給你一個我做過的0~99秒秒錶的程序吧。
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0ISR
ORG 0030H
MAIN:
MOV TMOD,#01H
MOV TH0,#HIGH(65536-10000)
MOV TL0,#LOW(65536-10000)
SETB ET0
SETB EA
MOV R0,#0
MOV R1,#0
MOV R2,#0
MOV R3,#0
CLR 00H
CLR 01H
LOOP:
JB P1.0,LP01
JNB P1.0,$
SETB TR0
CLR 01H
SJMP LOOP0
LP01:
JB P1.1,LP02
JNB P1.1,$
SETB 01H
SJMP LOOP0
LP02:
JB P1.2,LOOP0
JNB P1.1,$
CLR TR0
MOV P3,#0FDH
MOV P2,#0
MOV P3,#0FEH
MOV P2,#0
SJMP MAIN
LOOP0:
JB 00H,LOOP1
MOV A,R0
SJMP LOOP2
LOOP1:
MOV A,R1
LOOP2:
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV R3,A
SJMP LOOP
T0ISR:
CLR TR0
MOV TH0,#HIGH(65536-10000)
MOV TL0,#LOW(65536-10000)
SETB TR0
JB 01H,T0C
INC R2
T0C:
CPL 00H
MOV A,R3
JB 00H,T001
MOV P3,#0FDH
MOV P2,A
SJMP T002
T001:
MOV P3,#0FEH
MOV P2,A
T002:
MOV A,R2
CJNE A,#100,T0E
MOV R2,#0
INC R0
CJNE R0,#9,T0E
MOV R0,#0
INC R1
CJNE R0,#9,T0E
MOV R1,#0
T0E:
RETI
T004:
CLR TR0
RETI
TABLE: ; 共陰極數碼管顯示代碼表
DB 3FH,06H,5BH,4FH,66H ;01234
DB 6DH,7DH,07H,7FH,6FH ;56789
END