單片機實用匯編程序庫word_第1頁
單片機實用匯編程序庫word_第2頁
單片機實用匯編程序庫word_第3頁
單片機實用匯編程序庫word_第4頁
單片機實用匯編程序庫word_第5頁
已閱讀5頁,還剩34頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、51 單片機實用程序庫4.1 流水燈程序介紹:利用P1 口通過一定延時輪流產生低電平輸出,以達到發光二極管輪流亮的效果。實際應用中例如:廣告燈箱彩燈、霓虹燈閃爍。程序實例(LAMP.ASM)ORG 0000HAJMP MAINORG 0030HMAIN:9MOV A,#00HMOV P1,A ;滅所有的燈MOV A,#11111110BMAIN1:MOV P1,A ;開最左邊的燈ACALL DELAY ;延時RL A ;將開的燈向右邊移AJMP MAIN ;循環DELAY:MOV 30H,#0FFHD1: MOV 31H,#0FFHD2: DJNZ 31H,D2DJNZ 30H,D1RETEN

2、D4.2 方波輸出程序介紹:P1.0 口輸出高電平,延時后再輸出低電平,循環輸出產生方波。實際應用中例如:波形發生器。程序實例(FAN.ASM):ORG 0000HMAIN:;直接利用P1.0 口產生高低電平地形成方波/ACALL DELAYSETB P1.0ACALL DELAY10CLR P1.0AJMP MAIN;/DELAY:MOV R1,#0FFHDJNZ R1,$RETEND五、定時器功能實例5.1 定時1 秒報警程序介紹:定時器1 每隔1 秒鐘將p1.o 的輸出狀態改變1次,以達到定時報警的目的。實際應用例如:定時報警器。程序實例(DIN1.ASM):ORG 0000HAJMP

3、MAINORG 000BHAJMP DIN0 ;定時器0 入口MAIN:TFLA G EQU 34H ;時間秒標志,判是否到50 個0.2 秒,即50*0.2=1 秒MOV TMOD,#00000001B;定時器0 工作于方式1MOV TL0,#0AFHMOV TH0,#3CH ;設定時時間為0.05 秒,定時20 次則一秒11SETB EA ;開總中斷SETB ET0 ;開定時器0 中斷允許SETB TR0 ;開定時0 運行SETB P1.0LOOP: AJMP LOOPDIN0:;是否到一秒/INCC: INC TFLAGMOV A,TFLAGCJNE A,#20,REMOV TFLAG,

4、#00HCPL P1.0;/RE:MOV TL0,#0AFHMOV TH0,#3CH ;設定時時間為0.05 秒,定時20 次則一秒RETIEND5.2 頻率輸出公式介紹:f=1/ts51 使用12M 晶振,一個周期是1 微秒使用定時器1工作于方式0,最大值為65535,以產生200HZ 的頻率為例:200=1/t:推出t=0.005 秒,即5000 微秒,即一個高電12平或低電平的時間為2500 微秒。這樣,定時值應設為65535-2500=63035,將它轉換為十六進制則為:F63B。具體程序請看f200.asm頻率遞增:200HZ:63035:F63B250HZ:63535:F82F30

5、0HZ:63868:F97C5.3 200HZ 頻率輸出程序介紹:利用定時器定時,在P1.0 口產生200HZ的頻率輸出。實際應用例如:傳感器前級推動。程序實例(F200.ASM):ORG 0000HAJMP MAINORG 001BHAJMP DIN0MAIN:CLR P1.0 ;產生一個低電平,實際上是從p1.0 口產生頻率MOV TMOD,#00010000B ;定時器1 工作于方式0MOV TH1,#0F6HMOV TL1,#3BH ;頻率產生的時間,詳細請見頻率公式SETB EA ;開總中斷13SETB TR1 ;開定時器1 運行SETB ET1 ;開定時器1 允許LOOP: AJM

6、P LOOP ;無限循環DIN0: CPL P1.0 ;產生一個高電平,下次來就是低電平(因為取反),一個高電平和一個低電平形成一個周期MOV TH1,#0F6HMOV TL1,#3BH ;重置頻率產生時間RETI ;返回END5.4 200250HZ 變化頻率輸出程序介紹:利用定時器定時時間的變化,由P1.0 口產生200250HZ 變化的頻率。實際應用例如:傳感器前級推動、頻率發生器。程序實例(F250.ASM):ORG 0000HAJMP MAINORG 001BHAJMP DIN1MAIN:;定義頻率200 和300/F2H EQU 30HF2L EQU 31HF3H EQU 32HF

7、3L EQU 33H14;/;定義頻率保持初值/MOV R1,#50MOV R2,#02H;/;頻率賦初值/MOV F2H,#0F6HMOV F2L,#3BHMOV F3H,#0F8HMOV F3L,#2FH;/CLR P1.0 ;在P1.0 口產生一個低電平,一個脈沖是由一個高電平和一個低電平組成的MOV TMOD,#00010000B ;定時器工作于方式1MOV TH1,F2HMOV TL1,F2L ;200HZ 輸出SETB EA ;開總中斷SETB TR1 ;開定時器1 運行SETB ET1 ;開定時器1 允許LOOP: AJMP LOOPDIN1:CPL P1.0 ;取反P1.0 口

8、,實際是為了不斷的將p1.0 的電平關系轉換,即產生了頻率;頻率保持時間/DJNZ R1,REMOV R1,#50DJNZ R2,REMOV R2,#02H15;/MOV A,F2HCJNE A,F3H,XIA ;頻率高位到300HZ的高位了嗎?AJMP JIA ;頻率高位沒到300HZ 的高位值,直接將低位值加1XIA: INC F2LMOV A,F2LCJNE A,#00H,REINC F2HMOV A,F2HCJNE A,F3H,RE;/;頻率高位加到300HZ 的高位值了,低位加一,到300HZ 的低位值了嗎,沒到出去,到了關定時器JIA:INC F2L ;到了將200HZ 頻率的低位

9、加1MOV A,F2LCJNE A,#F3L,RECLR TR1;/RE:MOV TH1,F2HMOV TL1,F2LRETIEND16六、數顯09999 顯示程序介紹:利用S51 的串行口功能,實現數碼管09999 的循環顯示。實際應用例如:電子計分牌。程序實例(9999.ASM):ORG 0000HMAIN:GEE EQU 30HSHI EQU 31HBEI EQU 32HQIAN EQU 33H ;定義個十百千MOV GEE,#00HMOV SHI,#00HMOV BEI,#00HMOV QIAN,#00H ;賦初值MOV SCON,#00H ;串行口工作于方式0.同步移位;顯示個,十,

10、百,千/DISPLAY:ACALL DELAY ;延時MOV DPTR,#SETTABMOV A,GEEMOVC A,A+DPTRMOV SBUF,AD1: JNB TI,D117CLR TIMOV DPTR,#SETTABMOV A,SHIMOVC A,A+DPTRMOV SBUF,AD2: JNB TI,D2CLR TIMOV DPTR,#SETTABMOV A,BEIMOVC A,A+DPTRMOV SBUF,AD3: JNB TI,D3CLR TIMOV DPTR,#SETTABMOV A,QIANMOVC A,A+DPTRMOV SBUF,AD4: JNB TI,D4CLR TI;/

11、;個,十,百,千的依次加一/INC GEEMOV A,GEECJNE A,#0AH,DISPLAYMOV GEE,#00HINC SHIMOV A,SHICJNE A,#0AH,DISPLAY18MOV SHI,#00HINC BEIMOV A,BEICJNE A,#0AH,DISPLAYMOV BEI,#00HINC QIANMOV A,QIANCJNE A,#0AH,DISPLAYMOV QIAN,#00HAJMP DISPLAY;/;延時/DELAY: MOV R1,#0FFHE1: MOV R2,#0FFHDJNZ R2,$DJNZ R1,E1RET;/SETTAB:DB 0FCH,6

12、0H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,F6H,0EEH,3EH,9CH,7AH,9EH,8EH ;數顯代碼END七、AD 轉換7.1 AD 轉換(數碼顯示)程序介紹:利用ADC0809 模擬通道3 輸入電壓,經單片機19處理后在數碼管上用相對應的16 進制數顯示出來,05V 對應為0-0FFH,實際應用例如:數據采集。程序操作:程序寫完上電運行后,用本機配帶的專用起微調圖15 所示電位器,會在數碼管上看到隨不同電壓而變化的對應16 進制值。也可以用萬用表實ADC0809IN3 腳電壓,來檢驗所對應顯示的16 進制數。圖15程序實例(ad.asm):ORG 0

13、000HMAIN1:ACALL DELAY ;延時ACALL AD ;呼叫AD 子程序;將轉換的數字量屏蔽高位低位送顯/MOV 31H,30HMOV A,30HANL A,#0FHMOV DPTR,#SETTABMOVC A,A+DPTRMOV SBUF,AD1: JNB TI,D1CLR TI;/;將轉換的數字量屏蔽低位高位送顯/MOV A,30H20ANL A,#0F0HSWAP AMOV DPTR,#SETTABMOVC A,A+DPTRMOV SBUF,AD2: JNB TI,D2CLR TI;/AJMP MAIN1 ;返回主程序AD: MOV DPTR,#7F00H ;指向轉換地址M

14、OV A,#03H ;指向轉換口MOVX DPTR,A ;轉換MOV R1,#64HD3: DJNZ R1,D3 ;等100 微秒轉換完MOVX A,DPTR ;轉換后的值給AMOV 30H,A ;轉換的值給30HRETDELAY: ;延時MOV R2,#0FFHD14: MOV R3,#0FFHD12: DJNZ R3,D12DJNZ R2,D14RETSETTAB:DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6HDB 0EEH,3EH,9CH,7AH,9EH,8EH217.2 十六進制兩位數加法器(數碼顯示)程序介紹:將ADC0809 輸

15、入的兩個不同電壓(相同電壓也可相加,只是為舉例說明,所以取不同電壓)所對應的16 進制數相加顯示出來。實際應用例如:取代加法運放電路。程序操作:程序寫完上電運行后,用本機配帶的鐘表起微調圖16 所示電位器,輸入兩個不同電壓,數碼管會顯示兩個不同的對應16 進制數,隨后數碼管會顯示兩個16進制數相加的值。程序實例(add2.asm):ORG 0000HMAIN:ADNUMBER EQU 30H ;AD 轉換值ADDNUMBER EQU 31H ;加數值1ADL EQU 32H ;/ADH EQU 33H ;ADL 轉換高低位值DISL EQU 34H ;/DISH EQU 35H ;顯示高低位值

16、ADDTOTAL EQU 36H ;第一次AD 轉換值ADDJW EQU 37H ;加法進位數ADDHOLD EQU 38H;賦初值/MOV ADDHOLD,#00HMOV ADDNUMBER,#00HMOV ADL,#00HMOV ADH,#00HMOV DISL,#00H22MOV DISH,#00HMOV ADDJW,#00HMOV ADDTOTAL,#00H;/MAIN1:ACALL AD ;呼叫AD 子程序ACALL DELAY ;延時ACALL CAIFEN ;呼叫AD 值拆分為高低的程序ACALL DISPLAY ;呼叫顯示子程序MOV A,ADNUMBER ;取AD 值CJNE

17、 A,ADDHOLD,ADD3 ;與上次AD 值比較,不相等,即輸入了新的AD 值,去AD3 執行AJMP MAIN1 ;是相等的,證明沒有輸入新的AD 值,回去顯示老的AD 值ADD3: MOV A,ADDHOLDCJNE A,#00H,ADD4MOV ADDHOLD,ADNUMBER ;有一種情況就是是第一次進來,AD 保持值里面是放的初值00,與取的AD 值不同,是這種情況,也返回去AJM MAIN1ADD4: MOV ADDNUMBER,ADDHOLD ;是真的輸入了新的AD 值,將上次AD 值給加數,為調加法程序做準備MOV ADDHOLD,ADNUMBER ;將這次的AD值也保持起

18、來。準備與上一個AD 值相加;顯示這次輸入的AD 值/ACALL DELAYACALL CAIFEN23ACALL DISPLAY;/DISPLAY1:ACALL DELAY ;延時ACALL ADD1 ;呼叫加法子程序ACALL DISPLAY ;顯示LOOP: AJMP LOOP ;返回主程序;/AD 轉換AD:MOV DPTR,#7F00H;指向轉換地址MOV A,#03H ;指向轉換口MOVX DPTR,A ;轉換MOV R1,#64HD1: DJNZ R1,D1 ;等100 微秒轉換完MOVX A,DPTR ;轉換后的值給AMOV ADNUMBER,A ;轉換的值給30HRET;/;

19、拆分AD 值程序/CAIFEN:MOV A,ADNUMBERANL A,#0FHMOV ADL,A ;取低位MOV A,ADNUMBERANL A,#0F0HSWAP AMOV ADH,A ;取高位MOV DISL,ADL24MOV DISH,ADH ;給顯示值RET;/;顯示/DISPLAY:MOV A,DISLMOV DPTR,#SETTABMOVC A,A+DPTRMOV SBUF,AD3: JNB TI,D3CLR TIMOV A,DISHMOV DPTR,#SETTABMOVC A,A+DPTRMOV SBUF,AD4: JNB TI,D4CLR TIMOV A,ADDJWMOV D

20、PTR,#SETTABMOVC A,A+DPTRMOV SBUF,AD5: JNB TI,D5CLR TIMOV SBUF,#00HD6: JNB TI,D6CLR TIRET;/25;加法程序/ADD1:CLR CMOV A,ADDNUMBER ;取上次AD 值ADDC A,ADDHOLD ;與這次AD 值相加MOV ADDTOTAL,A ;將此次加的值給和值JNC ADDJW1 ;有無進位?INC ADDJW ;有進位,進位值給ADDJWADDJW1: ANL A,#0FHMOV DISL,A ;加值取低位MOV A,ADDTOTALANL A,#0F0HSWAP AMOV DISH,A

21、;加值取高位RET;/DELAY: ;延時MOV R3,#0AHDD1: MOV R1,#0FFHD2 : MOV R2,#0FFHDJNZ R2,$DJNZ R1,D2DJNZ R3,DD1RETSETTAB:DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,260FEH,0F6HDB 0EEH,3EH,9CH,7AH,9EH,8EHEND7.3 軟件濾波程序介紹(7.317.34):您如果接觸過模電就知道,在采集電壓量時經常會碰到干擾,而在模電中經常所采用的方法就是加電容濾波,這是用硬件實現的。實際上軟件完全可以達到濾波的效果,現在介紹的是一種最經典的方法。

22、在一次電壓量的采集中,在很短的時間內對它進行6次采集,將它轉換為數字量后求和(7.31),分析出6 次輸入中的最大值和最小值(7.32),然后減去最大值和最小值(7.33),除以4(7.44)得到平均值。這樣實際上就完成了一次軟件濾波。省去了復雜的硬件,而且取得了好而精確的效果。實際應用例如:精確數據采集。程序操作:程序寫入上電運行后,用本實驗儀自帶的鐘表起微調電位器依次輸入6 個電壓量。7.31 程序會顯示和值,7.32 會繼續顯示最大和最小值,7.33 程序會繼續顯示減后所剩的值,7.34 程序會繼續顯示除4 后的值。算法說明:為什么要選擇取6 個數進行計算呢?因為在匯編中做計算是非常麻煩

23、的,取6 個數,減去最大值和最小值后,取平均值是除4.計算機的內部計算都是二進制,而二進制每除一個2,實際上是向右移一次。所以為了計算方便,我們選擇取6 個數,最后在算除法的時候,只需要用單片機自帶的右移位命令移2 次就行了。277.31 十六進制六位數加法(數碼顯示)程序實例(add6.asm):ORG 0000HMAIN:ADNUMBER EQU 30H ;AD 轉換值ADDNUMBER EQU 31H ;加數值1ADL EQU 32H ;/ADH EQU 33H ;ADL 轉換高低位值DISL EQU 34H ;/DISH EQU 35H ;顯示高低位值ADDTOTAL EQU 36H

24、;第一次AD 轉換值ADDJW EQU 37H ;加法進位數ADDHOLD EQU 38HADDFLAG EQU 39H ;加標志ENDFLAG EQU 40H;賦初值/MOV ADDHOLD,#00HMOV ADDNUMBER,#00HMOV ADL,#00HMOV ADH,#00HMOV DISL,#00HMOV DISH,#00HMOV ADDJW,#00HMOV ADDFLAG,#00HMOV ENDFLAG,#00HMOV ADDTOTAL,#00H;/MAIN1:28;顯示AD 值/ACALL DELAYACALL DELAYACALL ADMAIN3:ACALL CAIFENAC

25、ALL DISPLAY;/;加這次的AD 值,并判是否加了六次,是的話就進入死循環ACALL DELAYACALL ADD1ACALL DISPLAYINC ADDFLAGMOV A,ADDFLAGCJNE A,#06H,MAIN2LOOP: AJMP LOOP;/;沒有加到六次,繼續取值加,如果沒有來新AD 值,還是去顯示上次加的值,有新AD 值來了,顯示這次AD 值,并加上上次AD 值,顯示/MAIN2: ACALL DELAYACALL ADMOV A,ADNUMBERCJN A,ADDTOTAL,MAIN3AJM MAIN2;/;/AD 轉換AD:29MOV DPTR,#7F00H ;

26、指向轉換地址MOV A,#03H ;指向轉換口MOVX DPTR,A ;轉換MOV R1,#64HD1: DJNZ R1,D1 ;等100 微秒轉換完MOVX A,DPTR ;轉換后的值給AMOV ADNUMBER,A ;轉換的值給30HRET;/;拆分AD 值程序/CAIFEN:MOV A,ADNUMBERANL A,#0FHMOV ADL,A ;取低位MOV A,ADNUMBERANL A,#0F0HSWAP AMOV ADH,A ;取高位MOV DISL,ADLMOV DISH,ADH ;給顯示值RET;/;顯示/DISPLAY:MOV A,DISLMOV DPTR,#SETTABMOV

27、C A,A+DPTRMOV SBUF,A30D3: JNB TI,D3CLR TIMOV A,DISHMOV DPTR,#SETTABMOVC A,A+DPTRMOV SBUF,AD4: JNB TI,D4CLR TIMOV A,ADDJWMOV DPTR,#SETTABMOVC A,A+DPTRMOV SBUF,AD5: JNB TI,D5CLR TIMOV SBUF,#00HD6: JNB TI,D6CLR TIRET;/;加法程序/ADD1:CLR CMOV ADDTOTAL,ADNUMBERMOV A,ADNUMBERADDC A,ADDHOLDMOV ADDHOLD,AJNC ADD

28、JW1INC ADDJW31ADDJW1: ANL A,#0FHMOV DISL,A ;加值取低位MOV A,ADDHOLDANL A,#0F0HSWAP AMOV DISH,A ;加值取高位RET;/DELAY: ;延時MOV R3,#0AHDD1: MOV R1,#0FFHD2 : MOV R2,#0FFHDJNZ R2,$DJNZ R1,D2DJNZ R3,DD1RETSETTAB:DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6HDB 0EEH,3EH,9CH,7AH,9EH,8EHEND7.32 求六位和中的最大值和最小值(數碼顯示)

29、程序實例(add61.asm):ORG 0000HMAIN:ADNUMBER EQU 30H ;AD 轉換值ADL EQU 32H ;/32ADH EQU 33H ;ADL 轉換高低位值DISL EQU 34H ;/DISH EQU 35H ;顯示高低位值ADDTOTAL EQU 36H ;第一次AD 轉換值ADDJW EQU 37H ;加法進位數ADDHOLD EQU 38HADDFLAG EQU 39H ;加標志ENDFLAG EQU 40HADH1 EQU 41H ;AD 中最大的值ADL1 EQU 42H ;AD 中最小的值ADHOLDH EQU 43HADHOLDL EQU 44H

30、;求AD 最大值與最小值時AD 的比較值,即以此兩個值為比較中轉FOUR EQU 45HSUB EQU 46H ;減去高低位后的值JWHOLD EQU 47H ;保存進位值;賦初值/MOV ADDHOLD,#00HMOV ADL,#00HMOV ADH,#00HMOV DISL,#00HMOV DISH,#00HMOV ADDJW,#00HMOV ADDFLAG,#00HMOV ENDFLAG,#00HMOV ADDTOTAL,#00HMOV ADH1,#00HMOV ADL1,#00H33MOV ADHOLDH,#00HMOV FOUR,#00HMOV ADHOLDL,#00HMOV JWH

31、OLD,#00HMOV SUB,#00H;/MAIN1:ACALL DELAYACALL DELAYACALL AD ;取AD 值MAIN3: ACALL CAIFENACALL DISPLAY ;顯示ACALL DELAYACALL DELAY;算最大值和最小值/ACALL ADDHACALL ADDL;/;加和值顯示/ACALL ADD1ACALL DISPLAY;/;判是否加到了6 次/INC ADDFLAGMOV A,ADDFLAGCJNE A,#06H,MAIN2;/ACALL DELAY34ACALL DELAYACALL DELAYACALL DELAYACALL DELAYAC

32、ALL DELAYACALL CAIFEN1 ;拆最小值ACALL CAIFEN2 ;拆最大值ACALL DISPLAY ;顯示最大值最小值LOOP: AJMP LOOP;判有沒有來新AD 值,沒有顯示以前,有顯示現在的/MAIN2:ACALL DELAYACALL ADMOV A,ADNUMBERCJNE A,ADDTOTAL,MAIN3AJMP MAIN2;/;AD 轉換/AD: MOV DPTR,#7F00H ;指向轉換地址MOV A,#03H ;指向轉換口MOVX DPTR,A ;轉換MOV R1,#64HD1: DJNZ R1,D1 ;等100 微秒轉換完MOVX A,DPTR ;轉

33、換后的值給AMOV ADNUMBER,A ;轉換的值給30HRET;/;拆分AD 值程序/35CAIFEN:MOV A,ADNUMBERANL A,#0FHMOV ADL,A ;取低位MOV A,ADNUMBERANL A,#0F0HSWAP AMOV ADH,A ;取高位MOV DISL,ADLMOV DISH,ADH ;給顯示值RET;/;顯示/DISPLAY:MOV A,DISLMOV DPTR,#SETTABMOVC A,A+DPTRMOV SBUF,AD3: JNB TI,D3CLR TIMOV A,DISHMOV DPTR,#SETTABMOVC A,A+DPTRMOV SBUF,

34、AD4: JNB TI,D4CLR TIMOV A,ADDJWMOV DPTR,#SETTAB36MOVC A,A+DPTRMOV SBUF,AD5: JNB TI,D5CLR TIMOV A,FOURMOV DPTR,#SETTABMOVC A,A+DPTRMOV SBUF,AD6: JNB TI,D6CLR TIRET;/;加法程序/ADD1:CLR CMOV ADDTOTAL,ADNUMBERMOV A,ADNUMBERADDC A,ADDHOLDMOV ADDHOLD,AJNC ADDJW1INC ADDJWADDJW1: ANL A,#0FHMOV DISL,A ;加值取低位MOV

35、A,ADDHOLDANL A,#0F0HSWAP AMOV DISH,A ;加值取高位RET37;/;AD 值中的最大值/ADDH: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,ADNUMBERAJMP RE1ADDL1: MOV A,ADNUMBERCLR CSUBB A,ADL1JNC RE1MOV

36、 ADL1,ADNUMBERRE1: RET;/;分解AD 最小值的個,十位/38CAIFEN1:MOV A,ADL1ANL A,#0FHMOV 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 ;取低位MOV A,ADH1ANL A,#0F0HSWAP AMOV ADH,A ;取高位MOV JWHOLD,ADDJWMOV ADDJW,ADLMOV FOUR,ADH ;

37、給顯示值RET;/DELAY: ;延時MOV R3,#0AH39DD1: MOV R1,#0FFHD2 : MOV R2,#0FFHDJNZ R2,$DJNZ R1,D2DJNZ R3,DD1RET;/SETTAB:DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6HDB 0EEH,3EH,9CH,7AH,9EH,8EHEND7.33 求減去最大和最小值后的值(數碼顯示)程序實例(add62.asm)ORG 0000HMAIN:ADNUMBER EQU 30H ;AD 轉換值ADL EQU 32H ;/ADH EQU 33H ;ADL 轉換高低位

38、值DISL EQU 34H ;/DISH EQU 35H ;顯示高低位值ADDTOTAL EQU 36H ;第一次AD 轉換值ADDJW EQU 37H ;加法進位數ADDHOLD EQU 38HADDFLAG EQU 39H ;加標志ENDFLAG EQU 40HADH1 EQU 41H ;AD 中最大的值40ADL1 EQU 42H ;AD 中最小的值ADHOLDH EQU 43HADHOLDL EQU 44H ;求AD 最大值與最小值時AD 的比較值,即以此兩個值為比較中轉FOUR EQU 45HSUB EQU 46H ;減去高低位后的值JWHOLD EQU 47H ;保存進位值;賦初值

39、/MOV ADDHOLD,#00HMOV ADL,#00HMOV ADH,#00HMOV DISL,#00HMOV DISH,#00HMOV ADDJW,#00HMOV ADDFLAG,#00HMOV ENDFLAG,#00HMOV ADDTOTAL,#00HMOV ADH1,#00HMOV ADL1,#00HMOV ADHOLDH,#00HMOV FOUR,#00HMOV ADHOLDL,#00HMOV JWHOLD,#00HMOV SUB,#00H;/MAIN1:ACALL DELAYACALL DELAY41ACALL AD ;取AD 值MAIN3: ACALL CAIFENACALL

40、DISPLAY ;顯示ACALL DELAYACALL DELAY;算最大值和最小值/ACALL ADDHACALL ADDL;/;加和值顯示/ACALL ADD1ACALL DISPLAY;/;判是否加到了6 次/INC ADDFLAGMOV A,ADDFLAGCJNE A,#06H,MAIN2;/ACALL DELAYACALL DELAYACALL DELAYACALL DELAYACALL DELAYACALL DELAYACALL CAIFEN1 ;拆最小值ACALL CAIFEN2 ;拆最大值ACALL DISPLAY ;顯示最大值最小值ACALL DELAY42ACALL DELAYACALL JIAN1 ;呼叫減最大值最小值程序ACALL CAIFEN3 ;拆分ACALL DISPLAY ;顯示減去最大值最小值后的值ACALL DELAYACALL DELAYACALL DELAYLOOP: AJMP LOOP;判有沒有來新AD 值,沒有顯示以前,有顯示現在的/MAIN2:ACALL DELAYACALL A

溫馨提示

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

評論

0/150

提交評論