版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、51單片機(jī)實(shí)用程序庫(kù)4.1流水燈程序介紹:利用P1 通過(guò)一定延時(shí)輪流產(chǎn)生低電平輸出,以達(dá)到發(fā)光二極管輪流亮的效果。實(shí)際應(yīng)用中例如:廣告燈箱彩燈、霓虹燈閃爍。程序?qū)嵗↙AMP.ASMORG 0000HAJMP MAINORG 0030HMAIN:9MOV A,#00HMOV P1,A ;滅所有的燈MOV A,#11111110BMAIN1:MOV P1,A ;開(kāi)最左邊的燈ACALL DELAY 延時(shí)RL A ;將開(kāi)的燈向右邊移AJMP MAIN ;循環(huán)DELAY:MOV 30H,#0FFHD1: MOV 31H,#0FFHD2: DJNZ 31H,D2DJNZ 30H,D1RETEND4.2
2、方波輸出程序介紹:P1.0 口輸出高電平,延時(shí)后再輸出低電平,循環(huán)輸出產(chǎn)生方波。實(shí)際應(yīng)用中例如:波形發(fā)生器。程序?qū)嵗‵AN.ASM):ORG 0000HMAIN:; 直接利用 P1.0 口產(chǎn)生高低電平地形成方波/ACALL DELAYSETB P1.0ACALL DELAY10CLR P1.0AJMP MAIN;/DELAY:MOV R1,#0FFHDJNZ R1,$RETEND五、定時(shí)器功能實(shí)例5.1 定時(shí) 1 秒報(bào)警程序介紹:定時(shí)器1 每隔 1 秒鐘將 p1.o 的輸出狀態(tài)改變1次,以達(dá)到定時(shí)報(bào)警的目的。實(shí)際應(yīng)用例如:定時(shí)報(bào)警器。程序?qū)嵗?DIN1.ASM):ORG 0000HAJMP
3、MAINORG 000BHAJMP DIN0 ;定時(shí)器 0入口MAIN:TFLA G EQU 34H ;時(shí)間秒標(biāo)志,判是否到 50 個(gè)0.2 秒,即 50*0.2=1 秒MOV TMOD,#00000001盅時(shí)器0工作于方式 1MOV TL0,#0AFHMOV TH0,#3CH ;設(shè)定時(shí)時(shí)間為0.05 秒,定時(shí)20 次則一秒11SETB EA ;開(kāi)總中斷SETB ET0 ; 開(kāi)定時(shí)器 0 中斷允許SETB TR0 ;開(kāi)定時(shí)0運(yùn)行SETB P1.0LOOP: AJMP LOOPDIN0:; 是否到一秒/INCC: INC TFLAGMOV A,TFLAGCJNE A,#20,REMOV TFLA
4、G,#00HCPL P1.0;/RE:MOV TL0,#0AFHMOV TH0,#3CH ;設(shè)定時(shí)時(shí)間為0.05 秒,定時(shí)20 次則一秒RETIEND5.2 頻率輸出公式介紹: f=1/ts51使用12M晶振,一個(gè)周期是1微秒使用定時(shí)器1工作于方式0,最大值為65535,以產(chǎn)生200HZ 的頻率為例:200=1/t: 推出 t=0.005 秒,即 5000 微秒 , 即一個(gè)高電12平或低電平的時(shí)間為 2500 微秒。這樣,定時(shí)值應(yīng)設(shè)為65535-2500=63035,將它轉(zhuǎn)換為十六進(jìn)制則為:F63B 。具體程序請(qǐng)看f200.asm頻率遞增:200HZ:63035:F63B250HZ:63535
5、:F82F300HZ:63868:F97C5.3 200HZ 頻率輸出程序介紹:利用定時(shí)器定時(shí),在P1.0 口產(chǎn)生 200HZ的頻率輸出。實(shí)際應(yīng)用例如:傳感器前級(jí)推動(dòng)。程序?qū)嵗?F200.ASM):ORG 0000HAJMP MAINORG 001BHAJMP DIN0MAIN:CLR P1.0 ; 產(chǎn)生一個(gè)低電平,實(shí)際上是從 p1.0 口產(chǎn)生頻率MOV TMOD,#00010000B定時(shí)器1工作于方式0MOV TH1,#0F6HMOV TL1,#3BH ;頻率產(chǎn)生的時(shí)間,詳細(xì)請(qǐng)見(jiàn)頻率公式SETB EA ;開(kāi)總中斷13SETB TR1 ;開(kāi)定時(shí)器 1 運(yùn)行SETB ET1 ; 開(kāi)定時(shí)器 1 允
6、許LOOP: AJMP LOOP無(wú)限循環(huán)DIN0: CPL P1.0 ; 產(chǎn)生一個(gè)高電平,下次來(lái)就是低電平(因?yàn)槿》?,一個(gè)高電平和一個(gè)低電平形成一個(gè)周期MOV TH1,#0F6HMOV TL1,#3BH ;重置頻率產(chǎn)生時(shí)間RETI ; 返回END5.4 200250Hz變化頻率輸出程序介紹:利用定時(shí)器定時(shí)時(shí)間的變化,由 P1.0 口產(chǎn)生200250Hz變化的頻率。實(shí)際應(yīng)用例如:傳感器前級(jí)推動(dòng)、頻率發(fā)生器。程序?qū)嵗?F250.ASM):ORG 0000HAJMP MAINORG 001BHAJMP DIN1MAIN:; 定義頻率 200 和 300/F2H EQU 30HF2L EQU 31H
7、F3H EQU 32HF3L EQU 33H14;/; 定義頻率保持初值/MOV R1,#50MOV R2,#02H;/; 頻率賦初值/MOV F2H,#0F6HMOV F2L,#3BHMOV F3H,#0F8HMOV F3L,#2FH;/CLR P1.0 ; 在 P1.0 口產(chǎn)生一個(gè)低電平,一個(gè)脈沖是由一個(gè)高電平和一個(gè)低電平組成的MOV TMOD,#00010000B定時(shí)器工作于方式1MOV TH1,F2HMOV TL1,F2L ;200Hz 輸出SETB EA ;開(kāi)總中斷SETB TR1 ; 開(kāi)定時(shí)器1 運(yùn)行SETB ET1 ; 開(kāi)定時(shí)器1 允許LOOP: AJMP LOOPDIN1:CP
8、L P1.0 ; 取反 P1.0 口,實(shí)際是為了不斷的將p1.0 的電平關(guān)系轉(zhuǎn)換,即產(chǎn)生了頻率; 頻率保持時(shí)間 /DJNz R1,REMOV R1,#50DJNz R2,REMOV R2,#02H15;/MOV A,F2HCJNE A,F3H,XIA ; 頻率高位到 300Hz的高位了嗎?AJMP JIA ; 頻率高位沒(méi)到300Hz的高位值,直接將低位值加 1XIA: INC F2LMOV A,F2LCJNE A,#00H,REINC F2HMOV A,F2HCJNE A,F3H,RE;/;頻率高位加到300Hz的高位值了,低位加一,至U300Hz的低位值了嗎,沒(méi)到出去,到了關(guān)定時(shí)器JIA:I
9、NC F2L ;至(J了將200Hz頻率的低位力口 1MOV A,F2LCJNE A,#F3L,RECLR TR1;/RE:MOV TH1,F2HMOV TL1,F2LRETIEND16六、數(shù)顯0 9999 顯示程序介紹:利用 S51 的串行口功能,實(shí)現(xiàn)數(shù)碼管0 9999 的循環(huán)顯示。實(shí)際應(yīng)用例如:電子計(jì)分牌。程序?qū)嵗?9999.ASM):ORG 0000HMAIN:GEE EQU 30HSHI EQU 31HBEI EQU 32HQIAN EQU 33H ;定義個(gè)十百千MOV GEE,#00HMOV SHI,#00HMOV BEI,#00HMOV QIAN,#00H ;賦初值MOV SCON
10、,#00H串行口工作于方式0. 同步移位; 顯示個(gè),十,百,千/DISPLAY:ACALL DELAY ;延時(shí)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
11、 SBUF,AD4: JNB TI,D4CLR TI ;/; 個(gè),十,百,千的依次加一/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;/; 延時(shí) /DELAY: MOV R1,#0FFHE1: MOV R2,#0FFHDJNZ R2,
12、$DJNZ R1,E1RET;/SETTAB:DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,F6H,0EEH,3EH,9CH,7AH,9EH,8EH ;數(shù)顯代碼END七、 AD 轉(zhuǎn)換7.1 AD 轉(zhuǎn)換(數(shù)碼顯示)程序介紹:利用ADC0809莫擬通道3輸入電壓,經(jīng)單片機(jī)19處理后在數(shù)碼管上用相對(duì)應(yīng)的 16 進(jìn)制數(shù)顯示出來(lái),0 5V 對(duì)應(yīng)為0-0FFH, 實(shí)際應(yīng)用例如:數(shù)據(jù)采集。程序操作:程序?qū)懲晟想娺\(yùn)行后,用本機(jī)配帶的專用起微調(diào)圖 15所示電位器,會(huì)在數(shù)碼管上看到隨不同電壓而變化的對(duì)應(yīng) 16 進(jìn)制值。也可以用萬(wàn)用表實(shí)ADC0809IN3卻 電壓,來(lái)檢
13、驗(yàn)所對(duì)應(yīng)顯示的 16 進(jìn)制數(shù)。圖15程序?qū)嵗╝d.asm) :ORG 0000HMAIN1:ACALL DELAY ;延時(shí)ACALL AD ;呼叫AD子程序; 將轉(zhuǎn)換的數(shù)字量屏蔽高位低位送顯MOV 31H,30HMOV A,30HANL A,#0FHMOV DPTR,#SETTABMOVC A,A+DPTRMOV SBUF,AD1: JNB TI,D1CLR TI;/; 將轉(zhuǎn)換的數(shù)字量屏蔽低位高位送顯MOV A,30H20ANL A,#0F0H/SWAP AMOV DPTR,#SETTABMOVC A,A+DPTRMOV SBUF,AD2: JNB TI,D2CLR TI;/AJMP MAI
14、N1 ;返回主程序AD: MOV DPTR,#7F00H ;指向轉(zhuǎn)換地址MOV A,#03H ;指向轉(zhuǎn)換口MOVX DPTR,A換MOV R1,#64HD3: DJNZ R1,D3 ; 等 100微秒轉(zhuǎn)換完MOVX A,DPTR換后的值給AMOV 30H,A ;轉(zhuǎn)換的值給30HRETDELAY: ; 延時(shí)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.
15、2 十六進(jìn)制兩位數(shù)加法器(數(shù)碼顯示)程序介紹:將ADC0809俞入的兩個(gè)不同電壓(相同電壓也可相加,只是為舉例說(shuō)明,所以取不同電壓)所對(duì)應(yīng)的 16進(jìn)制數(shù)相加顯示出來(lái)。實(shí)際應(yīng)用例如:取代加法運(yùn)放電路。程序操作:程序?qū)懲晟想娺\(yùn)行后,用本機(jī)配帶的鐘表起微調(diào)圖16 所示電位器,輸入兩個(gè)不同電壓,數(shù)碼管會(huì)顯示兩個(gè)不同的對(duì)應(yīng) 16 進(jìn)制數(shù),隨后數(shù)碼管會(huì)顯示兩個(gè)16進(jìn)制數(shù)相加的值。程序?qū)嵗╝dd2.asm) :ORG 0000HMAIN:ADNUMBER EQU 30H ;AD 值A(chǔ)DDNUMBER EQU 311Hl 數(shù)值 1ADL EQU 32H ;/ADH EQU 33H ;ADlM換高低位值DIS
16、L EQU 34H ;/DISH EQU 35H ;顯示高低位值A(chǔ)DDTOTAL EQU 36H第一次 AD轉(zhuǎn)換值A(chǔ)DDJW EQU 37H加法進(jìn)位數(shù)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 ;延時(shí)ACALL CAIFEN ;呼叫AD值拆分為高低的程序ACALL DISPLAY ;呼叫顯示
17、子程序MOV A,ADNUMBER; AD值CJNE A,ADDHOLD,ADD碼上次 AD值比較,不相等,即輸入了新的 AD值,去AD3執(zhí)行AJMP MAIN1 ;是相等的,證明沒(méi)有輸入新的AD值,回去顯示老的AD值A(chǔ)DD3: MOV A,ADDHOLDCJNE A,#00H,ADD4MOV ADDHOLD,ADNUMBER7種情況就是是第一次進(jìn)來(lái),AD保持值里面是放的初值00,與取的AD值不同,是這種情況,也返回去AJM MAIN1ADD4: MOV ADDNUMBER,ADDHOLD;的輸入了新的AD值,將上次AD直給加數(shù),為調(diào)加法程序做準(zhǔn)備MOV ADDHOLD,ADNUMBER次的
18、AD值也保持起來(lái)。準(zhǔn)備與上一個(gè) AD值相加;顯示這次輸入的 AD值/ACALL DELAYACALL CAIFEN23ACALL DISPLAY;/DISPLAY1:ACALL DELAY ;延時(shí)ACALL DISPLAY ;顯示LOOP: AJMP LOOP返回主程序轉(zhuǎn)換;/ADAD:MOV DPTR,#7F00時(shí)旨向轉(zhuǎn)換地址MOV A,#03H ;指向轉(zhuǎn)換口MOVX DPTR,A換MOV R1,#64HD1: DJNZ R1,D1 ; 等 100微秒轉(zhuǎn)換完MOVX A,DPTR換后的值給AMOV ADNUMBER屈換的值給30HRET;/;拆分 AD值程序 /CAIFEN:MOV A,AD
19、NUMBERANL A,#0FHMOV ADL,A ;取低位MOV A,ADNUMBERANL A,#0F0HSWAP AMOV ADH,A ;取高位MOV DISL,ADL 24MOV 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 DPTR,#SETTABMOV SBUF,A
20、D5: JNB TI,D5CLR TIMOV SBUF,#00HD6: JNB TI,D6CLR TIRET;/25; 加法程序 /ADD1:CLR CMOV A,ADDNUMBE取上次 AD<ADDC A,ADDHOLg這次 AD值相力口MOV ADDTOTAL,A條此次力口的值給和值JNC ADDJW1 有無(wú)進(jìn)位?;INC ADDJW ;有進(jìn)位,進(jìn)位值給ADDJWADDJW1: ANL A,#0FHMOV DISL,A ;加值取低位MOV A,ADDTOTALANL A,#0F0HSWAP AMOV DISH,A ;加值取高位RET;/DELAY: ; 延時(shí)MOV R3,#0AHDD
21、1: 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.31 7.34 ):您如果接觸過(guò)模電就知道,在采集電壓量時(shí)經(jīng)常會(huì)碰到干擾,而在模電中經(jīng)常所采用的方法就是加電容濾波,這是用硬件實(shí)現(xiàn)的。實(shí)際上軟件完全可以達(dá)到濾波的效果,現(xiàn)在介紹的是一種最經(jīng)典的方法。在一次電壓量的采集中,在很短的時(shí)間內(nèi)對(duì)它進(jìn)行6次采集,將它轉(zhuǎn)換
22、為數(shù)字量后求和( 7.31 ),分析出 6次輸入中的最大值和最小值( 7.32 ),然后減去最大值和最小值( 7.33 ),除以 4(7.44 )得到平均值。這樣實(shí)際上就完成了一次軟件濾波。省去了復(fù)雜的硬件,而且取得了好而精確的效果。實(shí)際應(yīng)用例如:精確數(shù)據(jù)采集。程序操作:程序?qū)懭肷想娺\(yùn)行后,用本實(shí)驗(yàn)儀自帶的鐘表起微調(diào)電位器依次輸入6 個(gè)電壓量。 7.31 程序會(huì)顯示和值, 7.32 會(huì)繼續(xù)顯示最大和最小值, 7.33 程序會(huì)繼續(xù)顯示減后所剩的值, 7.34 程序會(huì)繼續(xù)顯示除4 后的值。算法說(shuō)明:為什么要選擇取6 個(gè)數(shù)進(jìn)行計(jì)算呢?因?yàn)樵趨R編中做計(jì)算是非常麻煩的,取6 個(gè)數(shù),減去最大值和最小值后,
23、取平均值是除4.計(jì)算機(jī)的內(nèi)部計(jì)算都是二進(jìn)制,而二進(jìn)制每除一個(gè)2,實(shí)際上是向右移一次。所以為了計(jì)算方便,我們選擇取6 個(gè)數(shù),最后在算除法的時(shí)候,只需要用單片機(jī)自帶的右移位命令移 2 次就行了。277.31 十六進(jìn)制六位數(shù)加法(數(shù)碼顯示)程序?qū)嵗?(add6.asm):MAIN:ADNUMBER EQU 30H ;AD 值A(chǔ)DDNUMBER EQU 311Hl 數(shù)值 1ADL EQU 32H ;/ADH EQU 33H ;ADlM換高低位值DISL EQU 34H ;/DISH EQU 35H ;顯示高低位值A(chǔ)DDTOTAL EQU 36H第一次 AD轉(zhuǎn)換值A(chǔ)DDJW EQU 37H加法進(jìn)位數(shù)AD
24、DHOLD EQU 38HADDFLAG EQU 39H力口標(biāo)志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 CAIFENACALL DISPLAY;/;加這次的AD值,并判是否加了六次
25、,是的話就進(jìn)入死循環(huán)ACALL DELAYACALL ADD1ACALL DISPLAYINC ADDFLAGMOV A,ADDFLAGCJNE A,#06H,MAIN2LOOP: AJMP LOOP;/;沒(méi)有加到六次,繼續(xù)取值加,如果沒(méi)有來(lái)新AD值,還是去顯示上次加的值,有新 AD值來(lái)了,顯示這次 AD值,并加上上次 AD值,顯示/MAIN2: ACALL DELAYACALL ADMOV A,ADNUMBERCJN A,ADDTOTAL,MAIN3AJM MAIN2;/轉(zhuǎn)換;/ADAD:29MOV DPTR,#7F00H指向轉(zhuǎn)換地址MOV A,#03H ;指向轉(zhuǎn)換口MOVX DPTR,A換
26、MOV R1,#64HD1: DJNZ R1,D1 ; 等 100微秒轉(zhuǎn)換完MOVX A,DPTR換后的值給AMOV ADNUMBER屈換的值給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,#SETTABMOVC A,A+DPTRMOV SBUF,A30D3: JNB TI,D3CLR TI
27、MOV A,DISHMOVC 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 ADDJW1INC ADDJW31ADDJW1: ANL A,#0FHMOV DISL,A ;加值取低位MOV A,
28、ADDHOLDANL A,#0F0HSWAP AMOV DISH,A ;加值取高位RET;/DELAY: ; 延時(shí)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 求六位和中的最大值和最小值(數(shù)碼顯示)程序?qū)嵗?add61.asm) :ORG 0000HMAIN:ADNUMBER EQU 30H ;AD 值A(chǔ)
29、DL EQU 32H ;/32ADH EQU 33H ;ADlM換高低位值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 ;A并最大的值A(chǔ)DL1 EQU 42H ;AD中最小的值A(chǔ)DHOLDH EQU 43HADHOLDL EQU 44H求AD最大值與最小值時(shí)AD的比較值,即以此兩個(gè)值為比較中轉(zhuǎn)FOUR EQU 45HSUB EQU 46H ;減去高低位后的值JWH
30、OLD EQU 47H保存進(jìn)位值; 賦初值 /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 JWHOLD,#00HMOV SUB,#00H;/MAIN1:ACALL DELAYACALL DELAYACALL AD ;取 AD<
31、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 DELAYACALL DELAYACALL CAIFEN1 ;拆最小值A(chǔ)CALL CAIFEN2 ;拆最大值A(chǔ)CALL DISPLAY
32、 ;顯示最大值最小值LOOP: AJMP LOOP;判有沒(méi)有來(lái)新AD值,沒(méi)有顯示以前,有顯示現(xiàn)在的/MAIN2:ACALL DELAYACALL ADMOV A,ADNUMBERCJNE A,ADDTOTAL,MAIN3AJMP MAIN2;/;AD 轉(zhuǎn)換/AD: MOV DPTR,#7F00H ;指向轉(zhuǎn)換地址MOV A,#03H ;指向轉(zhuǎn)換口MOVX DPTR,A換MOV R1,#64HD1: DJNZ R1,D1 ; 等 100微秒轉(zhuǎn)換完MOVX A,DPTR換后的值給AMOV ADNUMBER屈換的值給30HRET;/;拆分 AD值程序 /35CAIFEN:MOV A,ADNUMBERA
33、NL 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,AD4: JNB TI,D4CLR TIMOV A,ADDJWMOV DPTR,#SETTAB36MOVC A,A+DPTRMOV S
34、BUF,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 A,ADDHOLDANL A,#0F0HSWAP AMOV DISH,A ;加值取高位RET 37;/;AD 值中的最大值/ADD
35、H: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 ADL1,ADNUMBERRE1: RET;/;分解 AD最小值的個(gè),十位 /38CAIFEN1:MOV A,ADL1ANL
36、A,#0FHMOV ADL,A ;取低位MOV A,ADL1ANL A,#0F0HSWAP AMOV ADH,A ;取高位MOV DISL,ADLMOV DISH,ADH 給顯示值;RET;/;分解AD最大值的個(gè),十位/CAIFEN2:MOV A,ADH1ANL A,#0FHMOV ADL,A ;取低位MOV A,ADH1ANL A,#0F0HSWAP AMOV ADH,A ;取高位MOV JWHOLD,ADDJWMOV ADDJW,ADLMOV FOUR,ADH 顯示值RET;/DELAY: ; 延時(shí)MOV R3,#0AH39DD1: MOV R1,#0FFHD2 : MOV R2,#0FF
37、HDJNZ 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 求減去最大和最小值后的值(數(shù)碼顯示)程序?qū)嵗?add62.asm)ORG 0000HMAIN:ADNUMBER EQU 30H ;AD 值A(chǔ)DL EQU 32H ;/ADH EQU 33H ;ADlM換高低位值DISL EQU 34H ;/DISH EQU 35H ;顯示高低位值A(chǔ)DDTOTAL EQU 36H第一次 AD轉(zhuǎn)換值A(chǔ)DDJW
38、EQU 37H加法進(jìn)位數(shù)ADDHOLD EQU 38HADDFLAG EQU 39H力口標(biāo)志ENDFLAG EQU 40HADH1 EQU 41H ;A并最大的值40ADL1 EQU 42H ;AD中最小的值A(chǔ)DHOLDH EQU 43HADHOLDL EQU 44H求AD最大值與最小值時(shí)AD的比較值,即以此兩個(gè)值為比較中轉(zhuǎn)FOUR EQU 45HSUB EQU 46H ;減去高低位后的值JWHOLD EQU 47H保存進(jìn)位值; 賦初值 /MOV ADDHOLD,#00HMOV ADL,#00HMOV ADH,#00HMOV DISL,#00HMOV DISH,#00HMOV ADDJW,#0
39、0HMOV 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 DISPLAY ;顯示ACALL DELAYACALL DELAY; 算最大值和最小值/ACALL ADDHACALL ADDL;/; 加和值顯示/AC
40、ALL ADD1ACALL DISPLAY;/; 判是否加到了 6 次 /INC ADDFLAGMOV A,ADDFLAGCJNE A,#06H,MAIN2;/ACALL DELAYACALL DELAYACALL DELAYACALL DELAYACALL DELAYACALL DELAYACALL CAIFEN1 ;拆最小值A(chǔ)CALL CAIFEN2 ;拆最大值A(chǔ)CALL DISPLAY ;顯示最大值最小值A(chǔ)CALL DELAY42ACALL DELAYACALL JIAN1 ; 呼叫減最大值最小值程序ACALL CAIFEN3 ;拆分ACALL DISPLAY ;顯示減去最大值最小值后的值A(chǔ)CALL DELAYACALL DELAYACALL DELAYLOOP: AJMP LOOP;判有沒(méi)有來(lái)新AD值,沒(méi)有顯示以前,有顯示現(xiàn)在的/MAIN2:ACALL
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度戶外露營(yíng)床具購(gòu)銷合同標(biāo)準(zhǔn)4篇
- 2025年度城市綜合體場(chǎng)地租賃與餐飲品牌合作合同3篇
- 2025年度出國(guó)定居文化活動(dòng)策劃與執(zhí)行服務(wù)合同4篇
- 二零二五年度高校教師校園文化活動(dòng)策劃與執(zhí)行合同4篇
- 二零二五年度虛擬現(xiàn)實(shí)設(shè)備代理授權(quán)銷售合同樣本4篇
- 2025年度平房使用權(quán)轉(zhuǎn)讓合同范本
- 二零二五年度房屋買賣借貸糾紛解決合同4篇
- 2025年度代理記賬企業(yè)年度財(cái)務(wù)盤點(diǎn)合同3篇
- 二零二五版成都上灶師父招聘與人才輸送合同
- 2025年度零副食品環(huán)保包裝設(shè)計(jì)與制作合同4篇
- 第1本書出體旅程journeys out of the body精教版2003版
- 臺(tái)資企業(yè)A股上市相關(guān)資料
- 電 梯 工 程 預(yù) 算 書
- 羅盤超高清圖
- 參會(huì)嘉賓簽到表
- 機(jī)械車間員工績(jī)效考核表
- 2.48低危胸痛患者后繼治療評(píng)估流程圖
- 人力資源管理之績(jī)效考核 一、什么是績(jī)效 所謂績(jī)效簡(jiǎn)單的講就是對(duì)
- 山東省醫(yī)院目錄
- 云南地方本科高校部分基礎(chǔ)研究
- 廢品管理流程圖
評(píng)論
0/150
提交評(píng)論