单片机实践

上传人:z**** 文档编号:169495979 上传时间:2022-11-15 格式:DOCX 页数:22 大小:31.30KB
收藏 版权申诉 举报 下载
单片机实践_第1页
第1页 / 共22页
单片机实践_第2页
第2页 / 共22页
单片机实践_第3页
第3页 / 共22页
资源描述:

《单片机实践》由会员分享,可在线阅读,更多相关《单片机实践(22页珍藏版)》请在装配图网上搜索。

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,D1RETE

2、ND4.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秒钟将pl.0的输出状态改变1次,以达到定时报警的目的。实际应 用例如淀时报警器。程序实例(DIN1.ASM):ORG 0000HAJM

3、P 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 TF

4、LAG,#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:

5、F82F300HZ:63868:F97C5.3 200HZ 频率输出 程序介绍:利用定时器定时,在 P1.0 口产生 200HZ 的频率输出。实际应用例如:传感器前级推 动。程序实例(F200.ASM):ORG 0000HAJMP MAINORG 001BHAJMP DIN0MAIN:CLR P1.0 ;产生一个低电平,实际上是从pl.O 口产生频率MOV TMOD,#00010000B ;定时器1 工作于方式 0MOV TH1,#0F6HMOV TL1,#3BH ;频率产生的时间,详细请见频率公式SETB EA ;开总中断13SETB TR1 ;开定时器 1 运行SETB ET1 ;开定时器

6、 1 允许LOOP: AJMP 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 30H

7、F2L EQU 31HF3H EQU 32HF3L EQU 33H14;/ ;定义频率保持初值/ MOV R1,#50 MOV 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 允许LOO

8、P: AJMP LOOPDIN1:CPL P1.0 ;取反 P1.0 口,实际是为了不断的将pl.o的电平关系转换,即产生了频率;频率保持时间/ 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的低位值了吗,没

9、到出去,到了关定时器 JIA:INC F2L ;到了将200HZ频率的低位加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 ;赋初值

10、MOV SCON,#00H ;串行口工作于方式0.同步移位;显示个,十,百,千/ DISPLAY:ACALL DELAY ;延时MOV DPTR,#SETTABMOV A,GEEMOVC A,A+DPTR MOV SBUF,AD1: JNB TI,D117CLR TIMOV DPTR,#SETTAB MOV A,SHIMOVC A,A+DPTR MOV SBUF,AD2: JNB TI,D2 CLR TIMOV DPTR,#SETTAB MOV A,BEIMOVC A,A+DPTR MOV SBUF,AD3: JNB TI,D3 CLR TIMOV DPTR,#SETTAB MOV A,QIA

11、N MOVC A,A+DPTR MOV SBUF,A D4: JNB TI,D4CLR TI;/;个,十,百,千的依次加一/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

12、 R2,#0FFHDJNZ R2,$DJNZ R1,E1RET;/ SETTAB:DB 0FCH,60H,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进制值。也可以用万用表实 ADC0

13、809IN3 脚电压,来检验所对应显示的 16 进制数。图15程序实例(ad.asm):ORG 0000HMAIN1: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,D2

14、CLR TI;/ AJMP MAIN1 ;返回主程序AD: MOV DPTR,#7F00H ;指向转换地址MOV 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

15、,3EH,9CH,7AH,9EH,8EH217.2 十六进制两位数加法器(数码显示)程序介绍:将 ADC0809 输入的两个不同电压(相同电 压也可相加,只是为举例说明,所以取不同电压)所对应的 16进制数相加显示出来。实际应用 例如:取代加法运放电路。程序操作:程序写完上电运行后,用本机配带的钟表 起微调图16所示电位器,输入两个不同电压,数码管会显示两个不同的对应 16进制数,随后数 码管会显示两个 16 进制数相加的值。程序实例(add2.asm):ORG 0000HMAIN:ADNUMBER EQU 30H ;AD 转换值ADDNUMBER EQU 31H ;加数值 1ADL EQU

16、32H ;/ADH EQU 33H ;ADL 转换高低位值DISL EQU 34H ;/DISH EQU 35H ;显示高低位值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 C

17、AIFEN ;呼叫 AD 值拆分为高低的程序ACALL DISPLAY ;呼叫显示子程序MOV A,ADNUMBER ;取 AD 值CJNE 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 ;是

18、真的输入了新的 AD 值,将上次 AD 值给加数,为调加法程序做准备 MOV ADDHOLD,ADNUMBER ;将 这次的 AD值也保持起来。准备与上一个AD值相加;显示这次输入的 AD 值/ ACALL DELAYACALL CAIFEN23ACALL DISPLAY;/ DISPLAY1:ACALL DELAY ;延时ACALL ADD1 ;呼叫加法子程序ACALL DISPLAY ;显示LOOP: AJMP LOOP ;返回主程序;/AD 转换AD:MOV DPTR,#7F00 H;指向转换地址MOV A,#03H ;指向转换口MOVX DPTR,A ;转换MOV R1,#64HD1:

19、 DJNZ R1,D1 ;等100微秒转换完MOVX A,DPTR ;转换后的值给 AMOV ADNUMBER,A ;转换的值给 30HRETI/ ;拆分 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

20、,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 ;/ 25 ;加法程序/ ADD1:CLR CMOV A,ADDNUMBER ;取上次 AD 值ADDC A,ADDHOLD ;与这次 AD 值相加MOV ADDTOTAL,A ;将此次加的值给和值JNC ADDJW1 ;有无进位?INC ADDJW ;有进位,进

21、位值给ADDJWADDJW1: ANL A,#0FHMOV DISL,A ;加值取低位MOV A,ADDTOTALANL 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,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程序

23、会显示和值,7.32 会继续显示最大和最小值,7.33 程序会继续显示减后所剩的值,7.34程序会继续显示除 4后的值。算法说明:为什么要选择取 6个数进行计算呢?因为在汇编中做计算是非常麻烦的,取6个数,减去最大值和最小值后,取平均值是除4.计算机的内 部计算都是二进制,而二进制每除一个 2,实际上是向右移一次。所以为了计算方便,我们选择取6 个数,最后在算除法的时候,只需要用单片机自带的右移位命令移 2 次就行了。277.31 十六进制六位数加法(数码显示)程序实例(add6.asm):ORG 0000HMAIN:ADNUMBER EQU 30H ;AD 转换值ADDNUMBER EQU

24、31H ;加数值 1ADL EQU 32H ;/ADH EQU 33H ;ADL 转换高低位值DISL EQU 34H ;/DISH EQU 35H ;显示高低位值ADDTOTAL EQU 36H ;第一次 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,#00H

25、MOV ENDFLAG,#00HMOV ADDTOTAL,#00H;/ MAIN1:28;显示 AD 值/ ACALL DELAYACALL DELAYACALL ADMAIN3:ACALL CAIFENACALL DISPLAY;/ ;加这次的 AD 值,并判是否加了六次,是的话就进入死循环ACALL DELAYACALL ADD1ACALL DISPLAYINC ADDFLAGMOV A,ADDFLAGCJNE A,#06H,MAIN2LOOP: AJMP LOOP;/ ;没有加到六次,继续取值加,如果没有来新 AD 值,还是去 显示上次加的值,有新AD值来了,显示这次AD值,并加上上次A

26、D值,显示/ MAIN2: ACALL DELAYACALL ADMOV A,ADNUMBERCJN A,ADDTOTAL,MAIN3AJM MAIN2;/ ;/AD 转换 AD:29MOV DPTR,#7F00H ;指向转换地址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,A

27、DNUMBERANL 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 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 SB

28、UF,#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,ADDHOLDANL A,#0F0HSWAP AMOV DISH,A ;加值取高位RET;/ DELAY: ;延时MOV R3,#0AHDD1: MOV R1,#0FFHD2 : MOV R2,#0FFHDJNZ R2,$DJNZ R1,D2DJNZ

29、R3,DD1RETSETTAB:DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6HDB 0EEH,3EH,9CH,7AH,9EH,8EHEND7.32求六位和中的最大值和最小值(数码显示)程序实例(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 ;加法进位数ADDHO

30、LD EQU 38HADDFLAG EQU 39H ;加标志ENDFLAG EQU 40HADH1 EQU 41H ;AD 中最大的值ADL1 EQU 42H ;AD 中最小的值ADHOLDH EQU 43HADHOLDL EQU 44H ;求 AD 最大值与最小 值时 AD 的比较值,即以此两个值为比较中转FOUR EQU 45HSUB EQU 46H ;减去高低位后的值JWHOLD EQU 47H ;保存进位值;赋初值/ MOV ADDHOLD,#00H MOV ADL,#00HMOV ADH,#00HMOV DISL,#00HMOV DISH,#00HMOV ADDJW,#00HMOV

31、ADDFLAG,#00HMOV ENDFLAG,#00HMOV ADDTOTAL,#00HMOV ADH1,#00HMOV ADL1,#00H33MOV ADHOLDH,#00HMOV FOUR,#00HMOV ADHOLDL,#00HMOV JWHOLD,#00HMOV SUB,#00HMAIN1:ACALL DELAYACALL DELAYACALL AD ;取 AD 值MAIN3: ACALL CAIFENACALL DISPLAY ;显示ACALL DELAYACALL DELAY ;算最大值和最小值/ ACALL ADDH ACALL ADDL;/ ;加和值显示/ ACALL ADD

32、1 ACALL DISPLAY;/ ;判是否加到了 6 次/ INC ADDFLAG MOV A,ADDFLAGCJNE A,#06H,MAIN2;/ ACALL DELAY34ACALL DELAYACALL DELAYACALL DELAYACALL DELAYACALL DELAYACALL CAIFEN1 ;拆最小值ACALL CAIFEN2 ;拆最大值ACALL DISPLAY ;显示最大值最小值LOOP: AJMP LOOP;判有没有来新 AD 值,没有显示以前,有显示现在的/ MAIN2:ACALL DELAYACALL ADMOV A,ADNUMBERCJNE A,ADDTOT

33、AL,MAIN3AJMP MAIN2;/ ;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;/ ;拆分 AD 值程序/ 35CAIFEN:MOV A,ADNUMBERANL A,#0FHMOV ADL,A ;取低位MOV A,ADNUMBERANL A,#0F0HSWAP AMOV ADH,A ;取高位MOV DISL,ADLMOV DI

34、SH,ADH ;给显示值RET;/ ;显示/ DISPLAY:MOV A,DISLMOV DPTR,#SETTAB MOVC A,A+DPTR MOV SBUF,AD3: JNB TI,D3 CLR TIMOV A,DISHMOV DPTR,#SETTAB MOVC A,A+DPTR MOV SBUF,AD4: JNB TI,D4 CLR TIMOV A,ADDJW MOV DPTR,#SETTAB 36MOVC A,A+DPTR MOV SBUF,AD5: JNB TI,D5 CLR TIMOV A,FOURMOV DPTR,#SETTAB MOVC A,A+DPTRMOV SBUF,AD6

35、: 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 ;加值取高位RET37;/ ;AD 值中的最大值/ ADDH: MOV A,ADH1CJNE A,#00H,ADDH1MOV ADH1,ADNUMBERAJMP READDH1: MOV A,ADNUMBE

36、RCLR 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 最小值的个,十位/ 38 CAIFEN1:MOV A,ADL1ANL A,#0FHMOV ADL,A ;取低位MOV A,ADL1ANL A,#0F0HSWAP AMOV ADH,A ;取高位MOV DI

37、SL,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 ;给显示值RET;/ DELAY: ;延时MOV R3,#0AH39DD1: MOV R1,#0FFHD2 : MOV R2,#0FFHDJNZ R2,$DJNZ R1,D2DJNZ R3,DD1RET;/ SETTAB:DB 0FCH,60H,0DAH,0

38、F2H,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 转换高低位值DISL EQU 34H ;/DISH EQU 35H ;显示高低位值ADDTOTAL EQU 36H ;第一次 AD 转换值ADDJW EQU 37H ;加法进位数ADDHOLD EQU 38HADDFLAG EQU 39H ;加标志ENDFLAG

39、 EQU 40HADH1 EQU 41H ;AD 中最大的值40ADL1 EQU 42H ;AD 中最小的值ADHOLDH EQU 43HADHOLDL EQU 44H ;求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 ADDTOTA

40、L,#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 ;/ ;加和值显示/ ACALL ADD1ACALL DISPLAY;/ ;判是否加到了 6 次/ INC AD

41、DFLAG MOV 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: A

42、JMP 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 ;转换后的值给 AMOV ADNUMBER,A ;转换的值给 30HRET43;/ ;拆分 AD 值程序/ CAIFEN: MOV A,ADNUMBE

43、RANL 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 TI44MOV A,ADDJWMOV DPTR,#SETTABMOVC A,A+DPTRMO

44、V SBUF,AD5: JNB TI,D5CLR TIMOV A,FOURMOV DPTR,#SETTABMOVC A,A+DPTRMOV SBUF,AD6: JNB TI,D6CLR TIRET;/ ;加法程序/ ADD1:CLR CMOV ADDTOTAL,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 RE1

45、MOV ADL1,ADNUMBER46RE1: RET;/ ;分解 AD 最小值的个,十位/ CAIFEN1: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 ;给显示值RET47;/ ;分解减去最高位和最低位的数/ CAIFEN3: MOV A,SUBANL A,#0FHMOV ADL,AMOV A,SUBANL A,#0F0HSWAP AMOV ADH,AMOV DISL,ADLMOV DISH,ADHRET;/ ;减去最高位和最低位/ JIAN1:MOV FOUR,#00HMOV ADDJW,JWHOLDMOV A,ADDHOLD ;取和值

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!