導航:首頁 > 操作系統 > 單片機中出現除0的操作

單片機中出現除0的操作

發布時間:2022-12-31 11:42:23

『壹』 將單片機片內一組RAM單元清0的函數,大佬說一下每一步的步驟含義吧

沒啥好說的,這個函數僅適用於51單片機。清零也限於從片內RAM的30h開始的32個位元組。就是在主函數里調用一個專用清零函數,指定起始偏移和清零長度;在清零函數里循環賦零。

『貳』 單片機中的置位和清零分別是什麼意思

單片機內部有各種功能的寄存器,比如PIC,C51系列8位的單片機,寄存器的寬度就是八個二進制位,一般是高位在前低位在後,例如:11000011,一共是八位,高四位數據是1100,低四位數據是0011。單片機是可以進行位操作的,一個8位的寄存器我們可以只針對其中一個位或者某些位進行操作,將寄存器相應的位賦值1(高電平)為置位,相反賦值0(低電平)為清零。...
例如c51:
置位指令:SETB,舉例:SETB P3.7 ;執行過後P3.7輸出為高電平
清零指令 CLR,舉例:CLR P3.7 ;執行過後P3.7輸出為低電平,這些操作均不影響其它的位。
以上是通過軟體來實現的,有的特殊功能寄存器就可能是由硬體自動實現的,比如一些標志位,有些是具有隻讀屬性,用於供程序提供參考。

『叄』 單片機中,怎麼處理除數為零的問題

單片機中,處理除數為零的問題解決方法如下:
當CCR寄存器的DIV_0_TRP位被配置0時,即使發生除以0操作也不會觸發異常,只有當該位被置1前提下,當發生除以0操作時才觸發異常事件並產生相應中斷。測試代碼很簡單,就是下面截圖中的幾行,簡單的閃燈操作,裡面夾了一句除法操作。SCB->CCR被賦值0x00000210即置位了DIV_0_TRP,當被賦值0x00000200時對其進行清零。經過測試,當我們置位上面CCR寄存器的DIV_0_TRP位,在發生除以0操作時就會進入HardFault中斷,同時被除數的結果【Result】即商變為0.

『肆』 求一MCS-51系列單片機指令表

傳送指令是指令系統中最基本,使用最多的一類指令,主要用於數據的傳送、保存以及交換等場合。

1.以累加器A為目的操作數的指令(4條)

這組指令的功能是把源操作數指定的內容送入累加器A中。

有寄存器、直接、寄存器間接和立即4種定址方式。

MOV A, Rn MOV A, data
MOV A,@Rn MOV A,#data

2.以寄存器Rn為目的的操作數的指令(3條)
這組指令的功能是把源操作數指定的內容送到所選定的工作寄存器Rn中。

有寄存器、直接和立即3種定址方式。

MOV Rn, A MOV Rn,data
MOV Rn,#data

3.以直接地址為目的操作數的指令(5條)
這組指令的功能是把源操作數指定的內容送到由直接地址data所指定的片內RAM中。

有寄存器、直接、寄存器間接和立即4種定址方式。

MOV data,A MOV data,Rn
MOV data1,data2 MOV data,@Ri
MOV data,#data

4.以間接地址為目的操作數的指令(3條)
這組指令的功能是把源操作數指定的內容送到以Ri中的內容為地址的片內RAM中。

有寄存器、直接和立即3種定址方式。

MOV @Ri,A MOV @Ri,data
MOV @Ri,#data

5.查表指令(2條)
這組指令的功能是對存放於程序存儲器中的數據表格進行查找傳送。使用變址定址方式。

MOVC A,@A+DPTR MOVC A, @A+PC

6.累加器A與片外AM傳送指令(4條)
這組指令的功能為累加器A與片RAM間的相互傳送。由於MCS-51指令系統中沒有專門的輸入/輸出指令,且片外擴展的I/O口與片外RAM是統一編址的,故以下4條指令也可作為輸入/輸出指令。使用寄存器間接定址方式。

MOVX A,@DPAR MOVX @DPTR,A
MOVX A,@Ri MOVX @Ri,A

7.堆棧操作類指令(2條)
該類指令的功能是把直接定址單元的內容傳送到堆棧指針SP所指的單元中,以及把SP所指單元的內容送到直接定址單元中。

PUSH data POP data

前一條指令稱為入棧操作指令,後一條指令稱為出棧指令。由於開機復位後,(SP)=07H,故一般需重新設置SP的初值。由於壓入堆棧的第一個數必須存放在SP+1所指存儲單元,故實際的棧底為SP+1所指存儲單元。

8.交換指令(4條)
該類指令的功能是把累加器A中的內容與源操作數所指出的數據相互交換。

有寄存器、直接和寄存器間接3種定址方式。

XCH A,Rn XCH A,data
XCH A,@Ri XCHD A,@Ri

9.16位數據傳送類指令(1條)
MOV DPTR,#data

該指令的功能是把16位常數送入數據指針寄存器,使用立即定址方式。譯成機器碼時,是高位位元組在前,低位位元組在後。
MCS-51具有強大的加、減、乘、除四則算術運算指令。

1.程序狀態字PSW

MCS-51有一個程序狀態字寄存器PSW,用來保存指令執行結果的標志,供程序查訊和判別。PSW是特殊功能寄存器中的一個,其格式如下:
PSW7--既是布爾處理機的累加器C,又是進位標志CY,如果操作結果在最高位有進位輸出(加法時)或借位輸入(減法時),置位CY,否則清「0」CY。
AC--輔助進位(半進位)標志。如果操作結果的低4位有進位(加法時)或向高4位借位時(減法),置AC,否則清「0」AC,AC主要用於二-十進制數加法調整。
OV--溢出標志。如果操作結果有進位進入最高位,但最高位沒有產生進位,或者最高位產生進位而低位沒有向最高位進位,這時置位溢出標志位,否則OV清「0」。溢出標志位用於補碼運算,當有符號的數運算結果不能用8位二進制數表示時,OV將置位。
P--累加器A的奇偶標志位,如果累加器A的8位的模2和為1(奇),則P=1;否則P=0。由於P總是表示A的奇偶性,隨著A的內容變化的,所以一個值寫入PSW的P位的值不變。
RS1、RS0--指示當前使用的工作寄存器區。
F0--用戶標志位。可作為軟體標志,它的作用和內部RAM位定址區的各位相似。
PSW1--保留位,對它的操作無效。

2.加法指令

1、不帶進位加法指令
ADD A,#data ADD A,data
ADD A,@Ri ADD A,Rn

工作寄存器、內部RAM單元內容或立即數的8位無符號二進制數和累加器A中數相加,所得和存放於累加器A中,當和的第3、7位有進位時,分別將AC,CY標志位置1;否則為0。
上述指令的執行將影響標志位AC、CY、OV、P。

對於無符號數,進位標志位CY=1,表示溢出;CY=0表示無溢出。帶符號數運算的溢出取決於第6、7位中有一位產生進位,而另一位不產生進位,溢出標志位OV置「1」否則被清「0」。OV=1表示兩個正數相加,和變為負數,或兩個負數相加,和變為正數的錯誤結果。
源操作數有四種定址方式:寄存器、直接、間接和立即數。

2、帶進位加法指令:
ADDC A,#data ADDC A,data
ADDC A,@Ri ADDC A,Rn

這是四條帶進位的加法指令。將累加器A內容加當前CY標志位內容,再加無符號單位元組的數,和存於累加器A中。當運算結果第3、7位產生進位溢出時,則分別置位AC、CY和OV標志位。本指令執行將影響標志位AC、CY、OV、P。
本指令常用於多位元組加法。

3、加1指令:
INC A INC data
INC @Ri INC Rn
INC DPTR

INC指令將指定的內容加1,結果仍存放於原A或原單元中。如原值為0FFH,加1運算後將變成00H,運算結果不影響標志位。
本指令可對累加器A、工作寄存器RN、RI間址和直接定址的單元內容進行加1運算。可見MCS-51加1指令是較豐富的。
注意:當用本指令使輸出並行I/O內容加1時,用作輸出口原始值,將從輸出口的數據鎖存器中讀入,而不是從輸出口的引腳上讀入。

4、二-十進制調正指令:
DA A

若[(A0-3)>9]或[(AC)=1),則(A0-3)(A0-3)+06H

本指令是對A的BCD碼加法結果進行調正。兩個壓縮型BCD碼按二進制數相加之後,必須經本指令調正,才能得到壓縮型BCD碼的和數。

本指令的操作為:若累加器A的低4位數值大於9或者第3位向第4位產生進位,即AC輔助進位位為1,則需將A的低4位內容加6調正,以產生低4位正確的BCD碼值。如果加0調正後,低4位產生進位,且高4位均為1時,則內部加法將置位CY,反之,它並不清「0」CY標志位。
若累加器A的高4位值大於9或最高進位位CY=1,則高位4位需加6調正,以產生高4位的正確BCD碼值。同樣,在加6調正後產生最高進位,則置位CY,反之,不清「0」CY這時CY的置位,表示和數BCD碼值大於等於100。這對多位元組十進制加法有用。不影響OV標志。
由此可見,本指令是根據累加器A的原始數值和PSW的狀態,對累加器A進行加O6H、60H或66H的操作。
必須注意:本指令不能簡單地把累加器A中的16進制數交換成BCD碼,也不能用於十進制減法的調正。

3.減法指令

MCS-51在MCS-48的基礎上增加了帶借位減法指令,加強了計算機的運算功能。
1、帶借位減法指令:

SUBB A,#data SUBB A,data
SUBB A,@Ri SUBB A,Rn

帶借位減法指令SUBB,從累加器A中減去進位標志位CY和指定的變數,結果在累加器A中,若第七位有借位,則置位位CY,否則CY清0。若第3位有錯位,則置位輔助進位標志AC,否則清0 AC。若第7和第6位中有一位需借位,而另一位不借位,則置位溢出標志OV。溢出位OV用於帶符號的整數減法,它表示(OV=1)一個正數減負數結果為負數;或一個負數減正數結果為正數的錯誤結果。
源操作數允許有四種定址方式:寄存器RN,直接地址direct,間址Ri或立即數。
當在進行單位元組或多位元組減法前,不知道進位標志位CY的值,則應在減法指令前先將CY清「0」。

4.乘法指令

MUL AB

乘法指令是MCS-51新增加的,運算速度只需4個機器周期。它大大增加了MCS-51單片機的運算功能,克服了MCS-48系列單片機的不足。
本指令將累加器A和寄存器B中二個8位無符號整數進行相乘,16位乘積的低8位存於A中,高8位存於B中,如果乘積大於255(0FFH),即B的內容不為0時,則置位溢出標志位OV,否則清「0」OV。進位標志位CY總是清「0」。

5.除法指令

DIV AB

MCS-51系列單片機增加的除法指令,運算時間亦只需4個機器周期,同樣也增強了MCS-51的運算功能,使它能適用於復雜的且要求運算功能較強的控制系統。除法指令格式:
本指令將累加器A中8位無符號整數除以B寄存器中8位無符號整數,所得結果商的整數部分存於A中,整數作數部分存於寄存器B中。清「0」CY和OV標志位。當除數(B中內容)為00H時,則執行結果將為不定值,即執行結果送往A和B中的為不定值,且置位溢出標志位OV。在任何情況下,均清「0」CY。

6.減一指令

DEC A DEC data
DEC @Ri DEC Rn

DEC指令把所指的寄存器內容減1,結果仍送回原寄存器,若原來寄存器的內容為00H,則減1後將為FFH,運算結果不影響任何標志位,該組指令使用了直接、寄存器和寄存器間定址。同加1指令一樣,在第二條指令中,若直接地址是I/O口,則進行「讀-改-寫」操作。

邏輯操作類指令共有效25條,有與、或、異或、求反、左右移位、清0等邏輯操作,對應的定址方式有直接、寄存器和間接定址,該類指令的執行一般不影響PSW。

1.循環移位指令(4條)

RL A; RR A;
RLC A; RRC A;

前兩條指令的功能分別是將累加器A的內容循環左移一位,後兩條指令的功能分別是將累加器A的內容連同進位位CY一起循環左移或右移一位。

2.累加器半位元組交換指令(1條)

SWAP A;

這條指令的功能是將累加器A的高低兩半位元組交換。如(A)=56H,執行指令SWAP A 後,結果(A)=65H。

3.求反指令(1條)

CPL A;

4.清0指令(1條)

CLR A;

5.邏輯與指令(6條)

ANL A,#data; ANL data,#data
ANL A,Rn ANL A,data
ANL data,A ANL A,@Ri

這組指令的第二條和第五條指令中,若直接地址正好是I/O口,則也是「讀-改-寫」操作。

6.邏輯或指令(6條)

ORL A,#data ORL data,#data
ORL A,Rn ORL A,data
ORL data,A ORL A,@Ri

這組指令的第二條和第五條也具有「讀-改-寫」功能。

7.邏輯異或指令(6條)

XRL A,#data XRL data,#data
XRL A,Rn XRL A,data
XRL data,A XRL A,@Ri

同樣,這組指令的第二條和第五條也具有「讀-寫-改」功能。

控制轉移類指令用於控製程序的走向,故其作用區間是程序存儲器空間。利用具有16位地址的長調用、長轉移指令可對64K程序存儲器的任一地址單元進行訪問,也可用具有11位地址的絕對調用和絕對轉移指令,訪問2K位元組的空間。另外,還有在一頁范圍的短相對轉移以及許多條件轉移指令,這類指令一般不影響標志位,不面分別給予介紹。

1.無條件轉移語句(4條)

LJMP addr16 AJMP addr11 SJMP rel JMP @(A)+DPTR

上述指令的功能是當程序執行完該指令時,程序就無條件地轉移到指令所提供的地址上去。

第一條指令稱為長轉移指令,指令提供16位目標地址,將指令中第二位元組和第三位元組地址碼分別裝入PC的高8位中,所以無條件轉移的目標地址范圍是64K位元組空間。

第二條指令稱為絕對轉移指令,指令提供11位目標地址,所以,無條件轉移的目標地址范圍是從下條指令開始的2K位元組空間。

第三條指令稱為相對短轉移指令,指令控製程序無條件的轉向指定地址。該指令的rel是一個帶符號的相對偏移量,范圍為-128~+127。負數表示向後轉移,正數表示向前轉移。這條指令的優點是指令給出的是相對轉移地址,不具體指出地址值,這樣當程序地址發生變化時,只要相對地址不發生變化,該指令就不需作任何改動。在用匯編語言寫程序時,rel是一個標號,由匯編程序在匯編過程中自動計算偏移地址。在手工匯編時,可用下式計算偏移地址:

向後轉移時:rel=FEH-(源、目的地址的絕對值)

向前轉移時:rel=(源、目的地址差的絕對值)-2

第四條指令稱為散轉指令(又稱為間接轉移指令),該指令把累加器A中的8位無符號數與作為基址寄存器DPTR中的16位數據相加,所得的值送入PC作為轉移的目的地址。該指令執行後不影響累加器A和數據指針DPTR中的原內容,也不影響任何標志位。這條指令的特點是其轉移地址不是編程時確定的,而是在程序運行時動態決定的。因此,可以在DPTR中裝入多條轉移程序的首地址,而由累加器A中的內容來動態選擇該時刻應轉向那一條分支程序。

2.條件轉移指令(8條)

1.JZ rel 2.JNZ rel
3.CJNEA,data,rel 4.CJNE A,#data,rel
5. CJNE Rn,#data,rel
6.CJNE @Ri,data,rel
7.DJNZ Rn,rel
8.DJNZ data,rel

上述指令執行滿足某種特定條件的轉移,其目標在以下一條指令的起始地址為中心的256個位元組范圍內(-128~+127)。

第一條和第二條指令是判別累加器A中的內容是否為0來確定是順序執行還是轉移。

第三條至第六條是比較轉移指令,該指令通過比較前面兩個操作數的大小,如果它們的值不相等則轉移,相等則繼續執行。指令執行後要影響進位位CY,若操作數1小於操作數2,則CY=1;若操作數1大於操作數2,則CY=0。

3.調用指程序及返回指令(4條)

1.LCALL addr16 2.ACALL addr11 3.RET 4.RETI

在程序設計中,經常需要對某段程序反復執行,為了減少程序的編寫以及浪費不必要的地址空間,於是引入了主程序和子程序的概念,通常把某一段需要反復調用的程序稱為子程序,子程序的最後一條指令為返回主程序指令(RET),而對具有調用子程序功能的指令稱為調用指令。

第一條指令稱為長調用指令,其與LJMP一樣提供16位地址,可調用64K位元組范圍內的子程序。由於其為三位元組指令,所以執行時首先(PC)+3,以獲得下一條指令地址,並把此時的PC內容壓入堆棧,作為返回地址,然後把地址addr16裝入PC,轉去執行子程序。

第二條指令稱為絕對調用指令,該指令提供11位目標地址,限制在2K位元組范圍內調用,由於是雙位元組指令,所以執行時(PC)+2以獲得下一條指令的地址,然後把該地址壓入堆棧作為返回地址。其操作碼的形成與AJMP指令相同。

第三條指令稱為子程序返回指令,表示子程序結束需返回主程序,所以執行該指令時,分別從堆棧中彈出調用子程序時壓入的返回地址。

第四條指令稱為中斷返回指令,該指令的執行過程類似指令RET,但其還能恢復中斷邏輯,RETI和RET決不能互換使用。

4.空操作指令(1條)

NOP;

空操作指令除了PC加1外,CPC不作任何操作,而轉向下一條指令去執行。這條指令常用於產生一個機器周期的延時。

位操作類指令共有17條,均以位為操作對象,分別完成位傳送、位狀態控制、位邏輯運算、位條件轉移等功能,在匯編語言中,位地址的表示方式有以下4種:

直接用位地址表示:如91H。
位元組地址位數方式:如P1.0(90H)。
位名稱方式:如RS0。
用戶使用偽指令事先定義過的符號地址。
1.位數據傳送指令(2條)

MOV C,bit MOV bit,C

上述指令把源操作數指定的變數傳送到目的操作數指定的單元中。第二條指令若是對I/O口的位進行操作,則也是「讀-改-寫」操作。

2.位狀態控制指令(6條)

CLR C CLR bit CPL C
CPL bit SETB C SETB bit

上述指令的功能是分別對進位標志和直接定址進行清0、求反以及直接位地址是I/O口的某一位時,也具有「讀-改-寫」功能。

3.位邏輯運算指令(4條)

ANL C,bit ANL C,/bit
ORL C,bit ORL C/bit

上述指令的功能是將位累加器C的內容與直接位地址的內容或直接位地址內容的反進行邏輯與、邏輯或,結果仍送回C中。

4.位條件轉移指令(5)

JC rel JNC rel
JB bit,rel JNB bit,rel
JBC bit,rel

上述指令的功能分別是判別進位位C和直接位地址的內容是「1」還是「0」,以此來決定程序的走向。最後一條指令的功能是:若直接位址的內容為「1」則轉移,並且同時將該位清0,否則順序執行。這條指令若是對I/O口某一位操作,也具有「讀-改-寫」功能。

『伍』 單片機的基本指令有哪些

不知道你是問的哪種單片機下面給你的是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

『陸』 51單片機的中斷標志位 什麼時候清除0

51單片機的中斷標志位,在產生該中斷時置位,執行該中斷程序後,由硬體自動清除。

閱讀全文

與單片機中出現除0的操作相關的資料

熱點內容
如何截獲手機app連接的ip 瀏覽:330
冰箱壓縮機是否需要電容 瀏覽:344
python列表每一行數據求和 瀏覽:274
自己有一台伺服器可以玩什麼 瀏覽:656
社會學波普諾pdf 瀏覽:584
解壓做食物的小視頻 瀏覽:758
pdf怎麼單獨設置文件夾 瀏覽:474
業務邏輯程序員 瀏覽:659
addto新建文件夾什麼意思 瀏覽:160
有伺服器地址怎麼安裝軟體 瀏覽:659
安卓如何完全清除數據 瀏覽:690
安卓安卓證書怎麼信任 瀏覽:53
伺服器被攻擊如何解決 瀏覽:221
學霸變成程序員 瀏覽:881
c語言編譯錯誤fatalerror 瀏覽:441
ipv4內部伺服器地址怎麼分配 瀏覽:463
java線程安全的方法 瀏覽:951
重復命令畫梯形 瀏覽:164
在疫情就是命令 瀏覽:329
自己搭建一個什麼伺服器好玩 瀏覽:254