1. 關於C51單片機單片機的幾個問題
1、徐漢斌版單片機微型計算機原理教材P144上說「中斷服務程序最後一條指令必須是中斷返回指令RETI」,
這句話是不是錯了?
如果最後一句話是跳轉指令不是也可以么,只不過程序不會回到斷點處罷了,PC也會填充跳轉處PC地址
--寫跳轉指令、或者寫其它什麼指令,都行,隨你便。單片機都會執行。
--只是,單片機沒有執行 RETI 指令,中斷程序就沒有結束。
--如果,你不寫 RETI,中斷後,單片機就永遠處於中斷程序之內。
2、在方式0定時器T0的初值為1E0CH,則TH0,TL0的初值分別為()
這題答案給的居然是F0H、0CH,我覺得分明是1EH、0CH啊,是不是答案錯了
--寫成二進制:1E0CH = 0001 1110 0000 1100B
--取其低 13 位,寫成高八位、低五位:11110000、01100
--方式0的初值,就應該是:F0、0C。
3、」MCS 51的程序計數器PC不能被用戶使用,因為他沒有地址「,
首先,不能被用戶使用指的收拾什麼?其次,它沒有地址那他到底在哪?
--PC 的數值,時時刻刻,在自動加一,這個特點,用戶對其,不可控制。
--但是,用戶,可以用 JMP 指令,改變 PC 的數值。
--說 PC 不能被用戶使用,實際上是他不會用。
--51 單片機裡面,確實沒有 PC 的地址,因為,誰都不需要這個地址。
4、MOV 20H,@DPTR 這個語句錯了是因為DPTR只能用於片外定址么
--這個指令,並不存在。
DPTR只能用於片外定址么
--查一下指令表,就知道了。
5、」80C51單片機子程序調用時能自動保護斷點和現場「,
這句話錯了是不是因為只能自動保護斷點不能自動保護現場?
--中斷時,51 單片機,採用壓棧的方法,自動的保護斷點地址。
--保護現場 ?
--單片機,不知道你的現場是什麼。
--把單片機和保護現場聯系在一起,就是狗戴嚼子,胡勒!
6、MOV A,#33H 是把33H當成無符號數吧?那麼如果我想移入一個帶符號數呢
就寫上負號即可。
MOV A, #-33H
這就行了。
7、向前轉移的偏移量為什麼等於(目的地址+0100H)-(原地址+3),0100H是什麼?
--編寫程序,現在都用編譯軟體來進行編譯。
--編譯軟體,會自動計算程序中的偏移量。
--編程人,根本不用討論偏移量的計算,以及推導公式。
--有些教材,作者的思維,還停留在人工編譯的階段,抱殘守缺,不用理他。
--0100H,是256。
2. 51單片機中定時器T0的高低位賦值問題
定時器兩個位元組為65536,定時50ms,-50000相當於65536-50000,兩個等價。
沒說是工作在方式0,所以所以高8位的值要乘以2的8次方即256.比如一個數23,十位上的2=23/10,個位上的3=23%10.
3. 將累加器A的低五位送到P0口的低五位,但P0口的高3位保持不變。編程求解
P0=(P0&0xe0)|(A&0x1f);
1) ANL A,#1FH
ANL P0,#0E0H
ORL P0,A
2) ANL A,#1FH
MOV R0,P0
ANL R0,#0E0H
ORL A,R0
MOV P0,A
第一種,P0的低5位會有一個短暫的全為0的狀態。
第二種,P0就會由原態直接變為由A得到的新值。
4. 單片機指令問題!
MCS-51系列單片機指令以A開頭的指令有18條,分別為:篇幅不夠,只是一半!
1、ACALL addr11
指令名稱:絕對調用指令
指令代碼:{A10,A9,A8,10001},A[7:0]
指令功能:構造目的地址,進行子程序調用。其方法是以指令提供的11位地址(al0~a0),取代PC的低11位,PC的高5位不變。
操作內容:
PC<-(PC)+2
SP<-(SP)+1
(SP)<-(PC)7~0
SP<-(SP)+1
(SP)<-(PC)15~8
PC10~0<-addrl0~0
位元組數: 2
機器周期:2
使用說明:由於指令只給出子程序入口地址的低11位,因此調用范圍是2KB。
2、ADD A,Rn
指令名稱:寄存器加法指令
指令代碼:28H~2FH
指令功能:累加器內容與寄存器內容相加
操作內容:A<-(A)+(Rn), n=0~7
位元組數: 1
機器周期;1
影響標志位:C,AC,OV
3、ADD A,direct
指令名稱:直接定址加法指令
指令代碼:25H
指令功能:累加器內容與內部RAM單元或專用寄存器內容相加
操作內容:A<-(A)+(direct)
位元組數: 2
機器周期:1
影響標志位:C,AC,OV
4、ADD A,@Ri
指令名稱:間接定址加法指令
指令代碼:26H~27H
指令功能:累加器內容與內部RAM低128單元內容相加
操作內容:A<-(A)+((Ri)), i=0,1
位元組數: 1
機器周期:1
影響標志位:C,AC,OV
5、ADD A,#data
指令名稱:立即數加法指令
指令代碼:24H
指令功能:累加器內容與立即數相加
操作內容:A<-(A)+data
位元組數: 2
機器周期:1
影響標志位:C,AC,OV
6、ADDC A,Rn
指令名稱:寄存器帶進位加法指令
指令代碼:38H~3FH
指令功能:累加器內容、寄存器內容和進位位相加
操作內容:A<-(A)+(Rn)+(C), n=0~7
位元組數: 1
機器周期:1
影響標志位:C,AC,OV
7、ADDC A,direct
指令名稱:直接定址帶進位加法指令
指令代碼:35H
指令功能:累加器內容、內部RAM低128單元或專用寄存器內容與進位位加
操作內容:A<-(A)+(direct)+(C)
位元組數: 2
機器周期:1
影響標志位:C,AC,OV
8、ADDC A,@Ri
指令名稱:間接定址帶進位加法指令
指令代碼:36H~37H
指令功能:累加器內容、內部RAM低128單元內容及進位位相加
操作內容:A<-(A)+((Ri))+(C), i=0,1
位元組數: 1
機器周期:1
影響標志位:C,AC,OV
9、ADDC A,#data
指令名稱:立即數帶進位加法指令
指令代碼:34H
指令功能:累加器內容、立即數及進位位相加
操作內容:A<-(A)+data+(C)
位元組數: 2
機器周期:1
影響標志位:C,AC,OV
10、AJMP addr11
指令名稱:絕對轉移指令
指令代碼:{A10,A9,A8,00001},A[7:0]
指令功能:構造目的地址,實現程序轉移。其方法是以指令提供的11位地址,取代PC的低11位,.而PC的高5位保持不變。
操作內容:PC<-(PC)+2
PCl0~0<-addrll
位元組數: 2
機器周期:2
使用說明:由於addrll的最小值是000H,最大值是7FFH,因此地址轉移范圍是2KB。
11、ANL A,Rn
指令名稱:寄存器邏輯與指令
指令代碼:58H~5FH
指令功能:累加器內容邏輯與寄存器內容
操作內容:A<-(A)^(Rn), n=0~7
位元組數: 1
機器周期:1
12、ANL A,direct
指令名稱:直接定址邏輯與指令
指令代碼:55H
指令功能:累加器內容邏輯與內部RAM低128單元或專用寄存器內容
操作內容:A<-(A)^(diret)
位元組數: 2
機器周期:1
13、ANL A,@Ri
指令名稱:間接定址邏輯與指令
指令代碼:56H~57H
指令功能:累加器內容邏輯與內部RAM低128單元內容
操作內容:A<-(A)^((Ri)) i=0,1
位元組數: 1
機器周期:1
14、ANL A,#data
指令名稱:立即數邏輯與指令
指令代碼:54H
指令功能:累加器內容邏輯與立即數
操作內容:A<-(A)^data
位元組數: 2
機器周期:1
15、ANL direct,A
指令名稱:累加器邏輯與指令
指令代碼:52H
指令功能:內部RAM低128單元或專用寄存器內容邏輯與累加器內容
操作內容:direct<-(A)^(direct)
位元組數: 2
機器周期:1
16、ANL direct, #data
指令名稱:邏輯與指令
指令代碼:53H
指令功能:內部RAM低128單元或專用寄存器內容邏輯與立即數
操作內容:direct<-(direct)^data
位元組數: 3
機器周期:2
17、ANL C,bit
指令名稱:位邏輯與指令
指令代碼:82H
指令功能:進位標志邏輯與直接定址位
操作內容:C<-(C)^(bit)
位元組數: 2
機器周期:2
18、ANL C,/bit
指令名稱:位邏輯與指令
指令代碼:B0H
指令功能:進位標志邏輯與直接定址位的反
操作內容:C<-(C)^(bit)
位元組數: 2
以C開頭的指令有10條,分別為:
1、CJNE A,dircet,rel
指令名稱:數值比較轉移指令
指令代碼:B5H
指令功能:累加器內容與內部RAM低128位元組或專用寄存器內容比較,不等則轉移。
操作內容:若(A)=(direct),則PC<-(PC)+3,C<-0
若(A)>(direct),則PC<-(PC)+3+rel,C<-0
若(A)<(direct),則PC<-(PC)+3+rel,C<-1
位元組數: 3
機器周期:2
2、CJNE A,#data,rel
指令名稱:數值比較轉移指令
指令代碼:B4H
指令功能:累加器內容與立即數比較,不等則轉移。
操作內容:若(A)=data,則PC<-(PC)+3,C<-0
若(A)>data,則PC<-(PC)+3+rel,C<-0
若(A)<data,則PC<-(PC)+3+rel,C<-1
位元組數: 3
機器周期:2
3、CJNE Rn,#data,rel
指令名稱:數值比較轉移指令
指令代碼:B8H~BFH
指令功能:寄存器內容與立即數比較,不等則轉移。
操作內容:若(Rn)=data,則PC<-(PC)+3,C<-0
若(Rn)>data,則PC<-(PC)+3+rel,C<-0
若(Rn)<data,則PC<-(PC)+3+rel,C<-1
位元組數: 3
機器周期:2
4、CJNE @Ri,#data,rel
指令名稱:數值比較轉移指令
指令代碼:B6H~B7H
指令功能:內部RAM低128單元內容與立即數比較,不等則轉移。
操作內容:若((Ri))=data,則PC<-(PC)+3,C<-0
若((Ri))>data,則PC<-(PC)+3+rel,C<-0
若((Ri))<data,則PC<-(PC)+3+rel,C<-1
位元組數: 3
機器周期:2
5、CLR A
指令名稱:累加器清0指令
指令代碼:E4H
指令功能:累加器清0
操作內容:A<-0
位元組數: 1
機器周期:1
6、CLR C
指令名稱:進位標志清0指令
指令代碼:C3H
指令功能:進位位清0
操作內容:C<-0
位元組數: 1
機器周期:1
7、CLR bit
指令名稱:直接定址位清0指令
指令代碼:C2H
指令功能:直接定址位清0
操作內容:bit<-0
位元組數: 2
機器周期:1
8、CPL A
指令名稱:累加器取反指令
指令代碼:F4H
指令功能:累加器取反
操作內容:A<-(A)
位元組數: 1
機器周期:1
9、CPL C
指令名稱:進位標志取反指令
指令代碼:B3H
指令功能:進位標志位狀態取反
操作內容:C<-(c取反)
位元組數: 1
機器周期:1
10、 CPL bit
指令名稱:直接定址位取反指令
指令代碼:B2H
指令功能:直接定址位取反
操作內容:bit<-(bit取反)
位元組數: 2
機器周期:1
以D開頭的指令有8條,分別為:
1、DA A
指令名稱:十進制調整指令
指令代碼:D4H
指令功能:對BCD碼加法運算的結果進行有條件的修正
操作內容:若(A)3~0>9|(AC)=1,則A3~0<-(A)3~0+6
若(A)7~4>9|(C)=1,則A7~4<-(A)7~4+6
若(A)7~4=9^(A)3~0>9,則A7~4<-(A)7~4+6
位元組數: 1
機器周期:1
使用說明:DA指令不影響溢出標志
2、DEC A
指令名稱:累加器減1指令
指令代碼:14H
指令功能:累加器內容減1
操作內容:A<-(A)-1
位元組數: 1
機器周期:1
3、DEC Rn
指令名稱:寄存器減1指令
指令代碼:18H~1FH
指令功能:寄存器內容減1
操作內容:Rn<-(Rn)-1,n=0~7
位元組數: 1
機器周期:1
4、DEC direct
指令名稱:直接定址減1指令
指令代碼:15H
指令功能:內部RAM低128單元及專用寄存器內容減1
操作內容:direct<-(direct)-1
位元組數: 2
機器周期:1
5、DEC @Ri
指令名稱:間接定址減1指令
指令代碼:16H~17H
指令功能:內部RAM低128單元內容減1
操作內容:(Ri)<-((Ri))-1, i=0,1
位元組數: 1
機器周期:1
6、DIV AB
指令名稱:無符號數除法指令;
指令代碼:84H
指令功能:A的內容被B的內容除。指令執行後,商存於A中,余數存於B中。
操作內容:A<-(A)/(B)的商
B<-(A)/(B)的余數
位元組數: 1
機器周期:4
影響標志位:C被清0;若B=00H,除法無法進行,並使OV=1;否則OV=0。
7、DJNZ Rn,rel
指令名稱:寄存器減1條件轉移指令
指令代碼:D8H~DFH
指令功能:寄存器內容減1。不為0轉移;為0順序執行。
操作內容:Rn<-(Rn)-l,n=0~7
若(Rn)≠0,則PC<-(PC)+2+rel
若(Rn)=0,則PC<-(PC)+2
位元組數: 2
機器周期:2
8、DJNZ direct,rel
指令名稱:直接定址單元減1條件轉移指令
指令代碼:D5H
指令功能:內部RAM低128單元內容減1。不為0轉移;為0順序執行。
操作內容:direct<-(direct)-1
若(direct)≠0,則PC<-(PC)+3+rel
若(direct)=0,則PC<-(PC)+3
位元組數: 3
機器周期:2
以I開頭的指令有5條,分別為:
1、INC A
指令名稱:累加器加1指令
指令代碼:04H
指令功能:累加器內容加1
操作內容:A<-(A)+1
位元組數: 1
機器周期:1
2、INC Rn
指令名稱:寄存器加1指令
指令代碼:08H~0FH
指令功能:寄存器內容加1
操作內容:Rn<-(Rn)+1,n=0~7
位元組數: 1
機器周期:1
3、INC direct
指令名稱:直接定址單元加1指令
指令代碼:05H
指令功能:內部BAM低128單元或專用寄存器內容加1
操作內容:direct<-(direct)+1
位元組數: 2
機器周期:1
4、INC @Ri
指令名稱:間接定址單元加1指令
指令代碼:06H~07H
指令功能:內部RAM低128單元內容加1
操作內容:(Ri)<-((Ri))+1;i=0,l
位元組數: 1
機器周期:1
5、INC DPTR
指令名稱:16位數據指針加1指令
指令代碼:A3H
指令功能:數據指針寄存器DPTR內容加1
操作內容:DPTR<-(DPTR)+1
位元組數: 1
機器周期:2
以J開頭的指令有8條,分別為:
1、JB bit,rel
指令名稱:位條件轉移指令。
指令代碼:20H
指令功能:根據指定位的狀態,決定程序是否轉移。若為1則轉移;否則順序執行。
操作內容:若(bit)=1,則PC<-(PC)+3+rel
若(bit)≠1,則PC<-(PC)+3
位元組數: 3
機器周期:2
2、JBC bit,rel
指令名稱:位條件轉移清0指令
指令代碼:10H
指令功能:對指定位的狀態進行測試。若為1,則把該位清0並進行轉移;否則程序順序執行。
操作內容:若(bit)=1,則PC<-(PC)+3+rel,bit<-0
若(bit)≠1,則PC<-(PC)+3
位元組數: 3
機器周期:2
3、JC rel
指令名稱:累加位條件轉移指令
指令代碼:40H
指令功能:根據累加位(C)的狀態決定程序是否轉移,若為1則轉移,否則順序執行。
操作內容:若(C)=1,則PC<-(PC)+2+rel
若(C)≠1,則PC<-(PC)+2
位元組數: 2
機器周期:2
4、JMP @A+DPTR
指令名稱:無條件間接轉移指令
指令代碼:72H
指令功能:A內容與DPTR內容相加作為轉移目的地址,進行程序轉移。
操作內容:PC<-(A)+(DPTR)
位元組數: 1
機器周期;2
5、JNB bit,rel
指令名稱:位條件轉移指令
指令代碼:30H
指令功能:根據指定位的狀態,決定程序是否轉移。若為0則轉移;否則順序執行。
操作內容:若(bit)=0,則PC<-(PC)+3+rel
若(bit)≠0,則PC<-(PC)+3
位元組數: 3
機器周期:2
6、JNC rel
指令名稱:累加位條件轉移指令
指令代碼:50H
指令功能:根據累加位(C)的狀態決定程序是否轉移。若為o則轉移;否則順序執行。
操作內容:若(C)=0,則PC<-(PC)+2+rel
若(C)≠0,則PC<-(PC)+2
位元組數: 2
機器周期:2
7、JNZ rel
指令名稱:判0轉移指令
指令代碼:70H
指令功能:累加位(A)的內容不為0,則程序轉移;否則程序順序執行。
操作內容:若(A)≠0,則PC<-(PC)+2+rel
若(A)=0,則PC<-(PC)+2
位元組數: 2
機器周期:2
8、JZ rel
指令名稱:判0轉移指令
指令代碼:60H
指令功能:累加位(A)的內容為o,則程序轉移;否則程序順序執行。
操作內容:若(A)=0,則PC<-(PC)+2+rel
若(A)≠0,則PC<-(PC)+2
位元組數: 2
機器周期:2
以L開頭的指令就2條,分別為:
1、LCALL addr16
指令名稱:長調用指令
指令代碼:12H
指令功能:按指令給定地址進行子程序調用
操作內容:PC<-(PC)+3
SP<-(SP)+1
(SP)<-(PC)7~0
SP<-(SP)+1
(SP)<-(PC)15~8
PC<-addrl6
位元組數: 3
機器周期:2
使用說明:在64KB的范圍內調用子程序
2、LJMP addrl6
指令名稱:長轉移指令
指令代碼:02H
指令功能:使程序按指定地址進行無條件轉移
操作內容:PC<-addrl6
位元組數: 3
機器周期:2
5. 單片機中屏蔽累加器的高4位且保持低4位不變的指令是什麼急求
這沒有直接的指令,但可以用一條與運算的邏輯運算指令實現
如:ANL A,#0FH
這樣,累加器A 的高4位被屏蔽成0,而低4位是不變的。