單片機(jī)匯編語言經(jīng)典一百例_第1頁
單片機(jī)匯編語言經(jīng)典一百例_第2頁
單片機(jī)匯編語言經(jīng)典一百例_第3頁
單片機(jī)匯編語言經(jīng)典一百例_第4頁
單片機(jī)匯編語言經(jīng)典一百例_第5頁
已閱讀5頁,還剩45頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、MOV P1,A 滅所有的燈51 單片機(jī)實用程序庫流水燈程序介紹:利用 P1 口通過一定延時輪流產(chǎn)生低電平 輸出,以達(dá)到發(fā)光二極管輪流亮的效果。實際應(yīng)用中例如: 廣告燈箱彩燈、霓虹燈閃爍。程序?qū)嵗ǎ㎡RG 0000HAJMP MAINORG 0030HMAIN:9MOV A,#00HMOV A,#BMAIN1:MOV P1,A ;開最左邊的燈ACALL DELAYS 時RL A 將; 開的燈向右邊移AJMP MAIN ;循環(huán)DELAY:MOV 30H,#0FFHD1: MOV 31H,#0FFHD2: DJNZ 31H,D2DJNZ 30H,D1RETEND方波輸出程序介紹: 口輸出高電平,

2、延時后再輸出低電 平,循環(huán)輸出產(chǎn)生方波。實際應(yīng)用中例如:波形發(fā)生器。程序?qū)嵗ǎ篛RG 0000HMAIN:;直接利用口產(chǎn)生高低電平地形成方波步移位;顯示個,十,百,千算機(jī)的內(nèi)部計算都是二進(jìn) 制,而二進(jìn)制每除一個 2,實際上是向右移一次。所以為 了計算方便,我們選擇取 6 個數(shù),最后在算除法的時候, 只需要用單片機(jī)自帶的右移位命令移 2 次就行了。27十六進(jìn)制六位數(shù)加法(數(shù)碼顯示)程序?qū)嵗?:ORG 0000HMAIN:ADNUMBER EQU 30H 鬥轉(zhuǎn)換值A(chǔ)DDNUMBER EQU 31H 加數(shù)值 1ADL EQU 32H ;/ADH EQU 33H ;AD 轉(zhuǎn)專換高低位值DISL E

3、QU 34H ;/DISH EQU 35H 顯示高低位值A(chǔ)DDTOTAL EQU 36H 第一次 AD 轉(zhuǎn)換值A(chǔ)DDJW EQU 37H 加法進(jìn)位數(shù)ADDHOLD EQU 38HADDFLAG EQU 39H 加標(biāo)志ENDFLAG EQU 40H; 賦初值 /MOV ADDHOLD,#00HMOV ADDNUMBER,#00HMOV ADL,#00HMOV ADH,#00HMOV DISL,#00HACALL CAIFENMOV DISH,#00HMOV ADDJW,#00HMOV ADDFLAG,#00HMOV ENDFLAG,#00HMOV ADDTOTAL,#00H;/MAIN1:28;

4、顯示 AD 值/ACALL DELAYACALL DELAYACALL ADMAIN3:ACALL DISPLAY;/;加這次的 AD 值,并判是否加了六次,是的話就進(jìn)入死循環(huán)ACALL DELAYACALL ADD1ACALL DISPLAYINC ADDFLAGMOV A,ADDFLAGCJNE A,#06H,MAIN2LOOP: AJMP LOOP;/;沒有加到六次,繼續(xù)取值加,如果沒有來新AD 值,還是去顯示上次加的值,有新 AD 值來了,顯示這次 AD 值,并加上上次 AD 值,顯示 /MAIN2: ACALL DELAYACALL ADMOV A,ADNUMBERCJN A,ADD

5、TOTAL,MAIN3AJM MAIN2;/;/ADAD:29MOV DPTR,#7F00H 指向轉(zhuǎn)換地址MOV A,#03H ;指向轉(zhuǎn)換口MOVX DPTR,A 轉(zhuǎn)換MOV R1,#64HD1: DJNZ R1,D1 等 100 微秒轉(zhuǎn)換完MOVX A,DPTR 轉(zhuǎn)換后的值給 AMOV ADNUMBER,A 轉(zhuǎn)換的值給 30HRET轉(zhuǎn)換;/;拆分 AD 值程序 /CAIFEN:MOV A,ADNUMBERANL A,#0FHMOV ADL,A 取; 低位MOV A,ADNUMBERANL A,#0F0HSWAP AMOV ADH,A ;取高位MOV DISL,ADLMOV DISH,ADH

6、給顯示值RET;/ ;顯示/MOV A,ADDJWDISPLAY:MOV A,DISLMOV DPTR,#SETTABMOVC A,A+DPTRMOV SBUF,A30D3: JNB TI,D3CLR TIMOV A,DISHMOV DPTR,#SETTABMOVC A,A+DPTRMOV SBUF,AD4: JNB TI,D4CLR TIMOV DPTR,#SETTABMOV A,ADNUMBERMOVC A,A+DPTRMOV SBUF,AD5: JNB TI,D5CLR TIMOV SBUF,#00HD6: JNB TI,D6CLR TIRET;/;加法程序 /ADD1:CLR CMOV

7、 ADDTOTAL,ADNUMBERADDC A,ADDHOLDMOV R3,#0AHMOV ADDHOLD,AJNC ADDJW1INC ADDJW31ADDJW1: ANL A,#0FHMOV DISL,A 加; 值取低位MOV A,ADDHOLDANL A,#0F0HSWAP AMOV DISH,A 加; 值取高位RET;/DELAY: 延; 時DD1: MOV R1,#0FFHD2 : MOV R2,#0FFHDJNZ R2,$DJNZ R1,D2DJNZ R3,DD1RETSETTAB:DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6

8、HDB 0EEH,3EH,9CH,7AH,9EH,8EHEND求六位和中的最大值和最小值(數(shù)碼顯示)程序?qū)嵗ǎ?:ORG 0000HMAIN:ADNUMBER EQU 30H 鬥轉(zhuǎn)換值A(chǔ)DL EQU 32H ;/32ADH EQU 33H ;AD 轉(zhuǎn)換高低位值DISL EQU 34H ;/DISH EQU 35H 顯示高低位值A(chǔ)DDTOTAL EQU 36H 第一次 AD 轉(zhuǎn)換值A(chǔ)DDJW EQU 37H 加法進(jìn)位數(shù)ADDHOLD EQU 38HADDFLAG EQU 39H 加標(biāo)志ENDFLAG EQU 40HADH1 EQU 41H ;AD 中 最大的值A(chǔ)DL1 EQU 42H ;AD

9、中 最小的值A(chǔ)DHOLDH EQU 43HADHOLDL EQU 44H 求 AD 最大值與最小值時 AD 的比較值,即以此兩個值為比較中轉(zhuǎn)FOUR EQU 45HSUB EQU 46H 減去高低位后的值JWHOLD EQU 47Hf 呆存進(jìn)位值;賦初值 /MOV ADDHOLD,#00HMOV ADL,#00HMOV ADH,#00HMOV DISL,#00HMOV DISH,#00HMOV ADDJW,#00HMOV ADDFLAG,#00HMOV ENDFLAG,#00HMOV ADDTOTAL,#00HMOV ADH1,#00HACALL DELAYMOV ADL1,#00H 33MO

10、V ADHOLDH,#00HMOV FOUR,#00HMOV ADHOLDL,#00HMOV JWHOLD,#00HMOV SUB,#00H;/MAIN1:ACALL DELAYACALL DELAYACALL AD 取 AD 值MAIN3: ACALL CAIFENACALL DISPLA 顯示ACALL DELAY ;算最大值和最小值 /ACALL DELAYACALL ADDHACALL ADDL;/;加和值顯示 /ACALL ADD1ACALL DISPLAY;/;判是否加到了 6 次/INC ADDFLAGMOV A,ADDFLAGCJNE A,#06H,MAIN2;/MOV A,A

11、DNUMBER34ACALL DELAYACALL DELAYACALL DELAYACALL DELAYACALL DELAYACALL CAIFE N 拆最小值A(chǔ)CALL CAIFEN 拆最大值A(chǔ)CALL DISPLAY示最大值最小值LOOP: AJMP LOOP;判有沒有來新 AD 值,沒有顯示以前,有顯示現(xiàn)在的MAIN2:ACALL DELAYACALL ADCJNE A,ADDTOTAL,MAIN3/35AJMP MAIN2;/;AD 轉(zhuǎn)換 /AD: MOV DPTR,#7F00H 指向轉(zhuǎn)換地址MOV A,#03H ;指向轉(zhuǎn)換口MOVX DPTR,A 轉(zhuǎn)換MOV R1,#64HD1:

12、 DJNZ R1,D1 等 100 微秒轉(zhuǎn)換完MOVX A,DPTR 轉(zhuǎn)換后的值給 AMOV ADNUMBER,A 轉(zhuǎn)換的值給 30HRET;/; 拆分 AD 值程序 /MOV A,DISLCAIFEN:MOV A,ADNUMBERANL A,#0FHMOV ADL,A 取; 低位MOV A,ADNUMBERANL A,#0F0HSWAP AMOV ADH,A ;取高位MOV DISL,ADLMOV DISH,ADH 給顯示值RET;/;顯示 /DISPLAY:MOVC A,A+DPTRMOV DPTR,#SETTABMOVC A,A+DPTRMOV SBUF,AD3: JNB TI,D3CL

13、R TIMOV A,DISHMOV DPTR,#SETTABMOVC A,A+DPTRMOV SBUF,AD4: JNB TI,D4CLR TIMOV A,ADDJWMOV DPTR,#SETTAB36MOV SBUF,AMOV ADDTOTAL,ADNUMBERD5: JNB TI,D5CLR TIMOV A,FOURMOV DPTR,#SETTABMOVC A,A+DPTRMOV SBUF,AD6: JNB TI,D6CLR TIRET;/;加法程序 /ADD1:CLR CMOV A,ADNUMBERADDC A,ADDHOLDMOV ADDHOLD,AJNC ADDJW1INC ADDJ

14、WADDJW1: ANL A,#0FHMOV DISL,A 加; 值取低位MOV A,ADDHOLDANL A,#0F0HSWAP AMOV DISH,A 加; 值取高位RET37;/ ;AD 值中的最大值/MOV A,ADL1ADDH:MOV A,ADH1CJNE A,#00H,ADDH1MOV ADH1,ADNUMBERAJMP READDH1: MOV A,ADNUMBERCLR CSUBB A,ADH1JC REMOV ADH1,ADNUMBERRE: RET;/;AD 值中的最小值 /ADDL:MOV A,ADL1CJNE A,#00H,ADDL1MOV ADL1,ADNUMBERA

15、JMP RE1ADDL1: MOV A,ADNUMBERCLR CSUBB A,ADL1JNC RE1MOV ADL1,ADNUMBERRE1: RET;/;分解 AD 最小值的個,十位 /38CAIFEN1:ANL A,#0FHMOV A,ADH1MOV ADL,A 取; 低位MOV A,ADL1ANL A,#0F0HSWAP AMOV ADH,A ;取高位MOV DISL,ADLMOV DISH,ADH 給顯示值RET;/;分解 AD 最大值的個,十位 /CAIFEN2:MOV A,ADH1ANL A,#0FHMOV ADL,A 取; 低位ANL A,#0F0HSWAP AMOV ADH,

16、A ;取高位MOV JWHOLD,ADDJWMOV ADDJW,ADLMOV FOUR,AD H 給顯示值RET;/DELAY: 延; 時MOV R3,#0AH39DD1: MOV R1,#0FFHD2 : MOV R2,#0FFHDJNZ R2,$DJNZ R1,D2ADH EQU 33H ;AD 轉(zhuǎn)換高低位值DJNZ R3,DD1RET;/SETTAB:DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6HDB 0EEH,3EH,9CH,7AH,9EH,8EHEND求減去最大和最小值后的值(數(shù)碼顯示)程序?qū)嵗ǎ㎡RG 0000HMAIN:AD

17、NUMBER EQU 30H 鬥轉(zhuǎn)換值A(chǔ)DL EQU 32H ;/SUB EQU 46H 減去高低位后的值DISL EQU 34H ;/DISH EQU 35H 顯示高低位值A(chǔ)DDTOTAL EQU 36H 第一次 AD 轉(zhuǎn)換值A(chǔ)DDJW EQU 37H 加法進(jìn)位數(shù)ADDHOLD EQU 38HADDFLAG EQU 39H 加標(biāo)志ENDFLAG EQU 40HADH1 EQU 41H ;AD 中 最大的值40ADL1 EQU 42H ;AD 中 最小的值A(chǔ)DHOLDH EQU 43HADHOLDL EQU 44H 求 AD 最大值與最小值時 AD 的比較值,即以此兩個值為比較中轉(zhuǎn)FOUR E

18、QU 45HMOV ADHOLDH,#00HJWHOLD EQU 47Hf 呆存進(jìn)位值 ;賦初值/MOV ADDHOLD,#00HMOV ADL,#00HMOV ADH,#00HMOV DISL,#00HMOV DISH,#00HMOV ADDJW,#00HMOV ADDFLAG,#00HMOV ENDFLAG,#00HMOV ADDTOTAL,#00HMOV ADH1,#00HMOV ADL1,#00HMOV FOUR,#00HACALL ADDHMOV ADHOLDL,#00HMOV JWHOLD,#00HMOV SUB,#00H;/MAIN1:ACALL DELAYACALL DELAY

19、41ACALL AD 取 AD 值MAIN3: ACALL CAIFENACALL DISPLA 顯示ACALL DELAYACALL DELAY; 算最大值和最小值 /ACALL DELAYACALL DELAYACALL ADDL ;/;加和值顯示 /ACALL ADD1ACALL DISPLAY;/;判是否加到了 6 次/INC ADDFLAGMOV A,ADDFLAGCJNE A,#06H,MAIN2;/ACALL DELAYACALL DELAYACALL DELAYACALL DELAYACALL DELAYACALL DELAYACALL CAIFE N 拆最小值A(chǔ)CALL CA

20、IFEN 拆最大值A(chǔ)CALL DISPLAY示最大值最小值A(chǔ)CALL DELAY42ACALL DELAYACALL JIAN1 呼叫減最大值最小值程序ACALL CAIFEN 拆分ACALL DISPLAY示減去最大值最小值后的值A(chǔ)CALL DELAYLOOP: AJMP LOOP;判有沒有來新 AD 值,沒有顯示以前,有顯示現(xiàn)在的/MOVX DPTR,A 轉(zhuǎn)換MAIN2:ACALL DELAYACALL ADMOV A,ADNUMBERCJNE A,ADDTOTAL,MAIN3AJMP MAIN2;/;AD 轉(zhuǎn)換 /AD:MOV DPTR,#7F00H 指向轉(zhuǎn)換地址MOV A,#03H ;

21、指向轉(zhuǎn)換口ANL A,#0F0HMOV R1,#64HD1: DJNZ R1,D1 等 100 微秒轉(zhuǎn)換完MOVX A,DPTR 轉(zhuǎn)換后的值給 AMOV ADNUMBER,A 轉(zhuǎn)換的值給 30HRET43;/;拆分 AD 值程序 /CAIFEN:MOV A,ADNUMBERANL A,#0FHMOV ADL,A 取; 低位MOV A,ADNUMBERSWAP AMOV A,DISHMOV ADH,A ;取高位MOV DISL,ADLMOV DISH,ADH 給顯示值RET;/;顯示 /DISPLAY:MOV A,DISLMOV DPTR,#SETTABMOVC A,A+DPTRMOV SBUF

22、,AD3: JNB TI,D3CLR TIMOV DPTR,#SETTABMOVC A,A+DPTRMOVC A,A+DPTRMOV SBUF,AD4: JNB TI,D4CLR TI44MOV A,ADDJWMOV DPTR,#SETTABMOVC A,A+DPTRMOV SBUF,AD5: JNB TI,D5CLR TIMOV A,FOURMOV DPTR,#SETTABMOV SBUF,AD6: JNB TI,D6CLR TIRET;/;加法程序 /ADD1:CLR CMOV ADDTOTAL,ADNUMBERMOV A,ADNUMBERADDC A,ADDHOLDMOV ADDHOLD

23、,AJNC ADDJW1INC ADDJWADDJW1:ANL A,#0FHMOV DISL,A 加; 值取低位MOV A,ADDHOLDANL A,#0F0H45SWAP AMOV DISH,A 加; 值取高位RET;/;AD 值中的最大值 /ADDH:MOV A,ADH1CJNE A,#00H,ADDH1MOV ADH1,ADNUMBERAJMP READDH1: MOV A,ADNUMBERSUBB A,ADL1CLR CSUBB A,ADH1JC REMOV ADH1,ADNUMBERRE: RET;/;AD 值中的最小值 /ADDL:MOV A,ADL1CJNE A,#00H,ADD

24、L1MOV ADL1,ADNUMBERAJMP RE1ADDL1: MOV A,ADNUMBERCLR CMOV ADH,A ;取高位JNC RE1MOV ADL1,ADNUMBER46RE1: RET;/;分解 AD 最小值的個,十位 /CAIFEN1:MOV A,ADL1ANL A,#0FHMOV ADL,A 取; 低位MOV A,ADL1ANL A,#0F0HSWAP AMOV DISL,ADLMOV ADDJW,ADLMOV DISH,ADH 給顯示值RET;/;分解 AD 最大值的個,十位 /CAIFEN2:MOV A,ADH1ANL A,#0FHMOV ADL,A 取; 低位MOV

25、 A,ADH1ANL A,#0F0HSWAP AMOV ADH,A ;取高位MOV JWHOLD,ADDJWMOV FOUR,AD H 給顯示值MOV DISH,ADHRET 47;/;分解減去最高位和最低位的數(shù) /CAIFEN3:MOV A,SUBANL A,#0FHMOV ADL,AMOV A,SUBANL A,#0F0HSWAP AMOV ADH,AMOV DISL,ADLRET;/ ;減去最高位和最低位/JIAN1:MOV FOUR,#00HMOV ADDJW,JWHOLDMOV A,ADDHOLD 取和值CLR CSUBB A,ADH1 減最高位JNC JIAN2DEC ADDJW

26、有進(jìn)位,高位減一JIAN2:CLR CSUBB A,ADL1 減低位JNC TUI 無進(jìn)位出去,有進(jìn)位高位減48DEC ADDJWTUI: MOV SUB,A 取減的值給 SUBRET;/;濾波 /DELAY: 延; 時MOV R3,#0AHDD1: MOV R1,#0FFHD2 : MOV R2,#0FFHDJNZ R2,$DJNZ R1,D2DJNZ R3,DD1RET ;/49SETTAB:DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6HDB 0EEH,3EH,9CH,7AH,9EH,8EHEND除 4 所得軟件濾波值(數(shù)碼顯示)程序?qū)嵗ǎ篛RG 0000HMAIN:ADNUMBER EQU 30H 鬥轉(zhuǎn)換值A(chǔ)DL EQU 32H ;/ADH EQU 33H ;AD 轉(zhuǎn)換高低位值DISL EQU 34H ;/DISH EQU 35H 顯示高低位值MOV ADDHOLD,#00HADDTOTAL EQU 36H 第;一次 AD 轉(zhuǎn)換值A(chǔ)DDJW EQU 37H 加法進(jìn)位數(shù)ADDHOLD EQU 38HADDFLAG EQU 39H 加標(biāo)志ENDFLAG EQU

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論