《单片机汇编语言经典一百例》由会员分享,可在线阅读,更多相关《单片机汇编语言经典一百例(79页珍藏版)》请在人人文库网上搜索。

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,D1RE。

2、TEND4.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 MA。

3、INORG 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,#00HCPL P1.。

4、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:F82F300HZ:63868:F97C5.。

5、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: AJMP LOOP ;无限循环DIN0: CPL。

6、 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 32HF3L EQU 33H14;/;定义频率保持初值/。

7、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口,实际是为了不断的将p1.0的电平关系转换,即产生了频率;。

8、频率保持时间/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频率的低位加1MOV A,F2LCJNE A,#F3L,RECLR TR1;/。

9、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.同步移位;显示个,十,百,千/DISPLAY:ACALL DELAY ;延时MOV DPTR,。

10、#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;/;个,十,百,千的依次加一/INC GEEMOV A,GEECJNE A。

11、,#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,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH。

12、,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 0000HMAIN1:ACALL DELAY ;延时ACALL AD ;呼叫AD子程序;将转。

13、换的数字量屏蔽高位低位送显/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 ;指向转换地址MOV A,#03H ;指向转换口MOVX DPTR,A ;转换MOV R1,#64HD3: 。

14、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输入的两个不同电压(相同电压也可相加,只是为举例说明,所以取不同电压)所对应的16进制数相加显示出。

15、来。实际应用例如:取代加法运放电路。程序操作:程序写完上电运行后,用本机配带的钟表起微调图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 ;显示高低位值ADDTOTAL EQU 36H ;第一次AD转换值ADDJW EQU 37H ;加法进位数ADDHOLD。

16、 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 A,ADDHOLD,ADD3 ;与上次AD值比较,不相等,即输入了新的AD值,去AD3执行AJMP MAIN1 。

17、;是相等的,证明没有输入新的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值也保持起来。准备与上一个AD值相加;显示这次输入的AD值/ACALL DELAYACALL CAIFEN23ACALL DISPLAY;/D。

18、ISPLAY1: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;/;拆分AD值程序/CAIFEN:MOV A,ADNUMBERANL A,#0FHMOV ADL,A ;取低位MOV A,ADNUMBERANL。

19、 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 DPTR,#SETTABMOVC A,A+DPTRMOV SBUF,AD5: JNB TI,D5CLR TIMOV SBUF,#00HD6: J。

20、NB 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 ;加值取高位RET;/DELAY: ;延时MOV R3,#0AHDD1: MOV R1,#0FFHD2 : MOV R2,#0FFHDJNZ R2。

21、,$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):您如果接触过模电就知道,在采集电压量时经常会碰到干扰,而在模电中经常所采用的方法就是加电容滤波,这是用硬件实现的。实际上软件完全可以达到滤波的效果,现在介绍的是一种最经典的方法。在一次电压量的采集中,在很短的时间内对它进行6次采集,将它转换为数字量后求和(7.31),分析出6次输入中的最大值和最小值(7.32),然后减去最。

22、大值和最小值(7.33),除以4(7.44)得到平均值。这样实际上就完成了一次软件滤波。省去了复杂的硬件,而且取得了好而精确的效果。实际应用例如:精确数据采集。程序操作:程序写入上电运行后,用本实验仪自带的钟表起微调电位器依次输入6个电压量。7.31程序会显示和值,7.32会继续显示最大和最小值,7.33程序会继续显示减后所剩的值,7.34程序会继续显示除4后的值。算法说明:为什么要选择取6个数进行计算呢?因为在汇编中做计算是非常麻烦的,取6个数,减去最大值和最小值后,取平均值是除4.计算机的内部计算都是二进制,而二进制每除一个2,实际上是向右移一次。所以为了计算方便,我们选择取6个数,最后在。

23、算除法的时候,只需要用单片机自带的右移位命令移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 ;第一次AD转换值ADDJW EQU 37H ;加法进位数ADDHOLD EQU 38HADDFLAG EQU 39H ;加标志ENDFLAG EQU 40H;赋初值/MO。

24、V 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值,并判是否加了六次,是的话就进入死循环ACALL DELAYACALL ADD1ACALL DISPLAYINC ADDFLAGMOV。

25、 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 ;指向转换地址MOV A,#03H ;指向转换口MOVX DPTR,A ;转换MOV R1,#64HD1: DJNZ R1,D1 ;等100微秒转换完MOVX A,DPTR ;转换后的值给A。

26、MOV 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,#SETTABMOVC A,A+DPTRMOV SBUF,A30D3: JNB TI,D3CLR TIMOV A,DISHMOV DPTR,#SETTABMOVC A,A+DPTRMOV SBUF,AD4: JN。

27、B 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,ADDHOLDANL A,#0F0HSWAP AMOV DISH,A ;加值取高位。

28、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 求六位和中的最大值和最小值(数码显示)程序实例(add61.asm):ORG 0000HMAIN:ADNUMBER EQU 30H ;AD转换值ADL EQU 32H ;/32ADH EQU 33H ;ADL转换高低位值DISL 。

29、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 ;求AD最大值与最小值时AD的比较值,即以此两个值为比较中转FOUR EQU 45HSUB EQU 46H ;减去高低位后的值JWHOLD EQU 47H ;保存进位值;赋初值/MOV ADDHOLD,。

30、#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值MAIN3: ACALL CAIFENACALL DISPLAY ;显示ACA。

31、LL DELAYACALL DELAY;算最大值和最小值/ACALL ADDHACALL ADDL;/;加和值显示/ACALL ADD1ACALL DISPLAY;/;判是否加到了6次/INC ADDFLAGMOV A,ADDFLAGCJNE A,#06H,MAIN2;/ACALL DELAY34ACALL DELAYACALL DELAYACALL DELAYACALL DELAYACALL DELAYACALL CAIFEN1 ;拆最小值ACALL CAIFEN2 ;拆最大值ACALL DISPLAY ;显示最大值最小值LOOP: AJMP LOOP;判有没有来新AD值,没有显示以前,有显。

32、示现在的/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 ;转换的值给30HRET;/;拆分AD值程序/35CAIFEN:MOV A,ADNUMBERANL A,#0FHMOV ADL,A ;取低位MOV A,ADNUMBERANL。

33、 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 SBUF,AD5: JNB TI,D5CLR TIMOV A,FOURMOV DPTR。

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

35、AJMP 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最小值的个,十位/38CAIFEN1:MOV A,ADL1ANL A,#0FHMOV ADL,A ;取低位MOV A,ADL1ANL A,#0F0HSWAP AMO。

36、V 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 ;给显示值RET;/DELAY: ;延时MOV R3,#0AH39DD1: MOV R1,#0FFHD2 : MOV R2,#0FFHDJNZ R2,$DJNZ R1,D2DJNZ R3,DD1RET;/SETTAB:DB 0F。

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

38、标志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 ;保存进位值;赋初值/MOV ADDHOLD,#00HMOV ADL,#00HMOV ADH,#00HMOV DISL,#00HMOV DISH,#00HMOV ADDJW,#00HMOV ADDFLAG,#00HMOV ENDFLAG,#00HMOV ADD。

39、TOTAL,#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 ADDFLAGMOV。

40、 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;判有。

41、没有来新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,ADNUMBERANL A,#0FHMOV ADL,A ;取低位M。

42、OV 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+DPTRMOV SBUF,AD5: JNB TI,D5CLR TIMO。

43、V 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,#0F0H45SWAP AMOV DISH,A ;加值取高位RET;/;AD值中的最大值/ADDH:MOV A,ADH1CJNE A,#00H,ADDH1MO。

44、V 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,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。

汇编语言典型例子详解_单片机汇编语言经典一百例相关推荐

  1. 汇编语言典型例子详解_数据分析常用的7大思维方法详解

    今天老李继续给大家讲解数据分析经典的思维模型,上篇为大家介绍了目标思维.假设思维.溯源思维.逆向思维4个思维:数据分析必备7大经典模型详解!建议收藏!(上) 今天继续给大家介绍结构思维.演绎推理思维. ...

  2. 汇编语言典型例子详解_从架构到 RTOS 详解 DSP 和 MCU 的区别和联系

    ▍一.区别 两则的分流造成的主要原因是数字信号处理的简便性,考虑一个数字信号处理的实例,比如有限冲击响应滤波器(FIR).用数学语言来说,FIR滤波器是做一系列的点积.取一个输入量和一个序数向量,在系 ...

  3. 汇编语言典型例子详解_汇编语言例子_汇编语言 举例子

    最佳答案 不同的CPU及平台,有不同的汇编语言的(常用的有几十种) 以下是DOS下一个汇编的例子: disp.asm db "hello world!",0dh,0ah,0 D:\ ...

  4. c51汇编语言典型例子详解,51单片机典型开发实例大全.pdf

    51单片机典型开发实例大全 提供电子技术最新最实用设计方案 --单片机 C51 编程规范 typedef unsigned char INT8U; // 无符号 8 位整型变量 // typedef ...

  5. adc0832工作原理详解_单片机ADC的工作原理

    单片机的ADC可以将模拟量转化为数字量 不同品牌的单片机ADC的配置方法有一定的差异,但基本方法和原理是一样的,启动ADC转换后,可以等待转换完成然后读取数据,或者设置为转换完成产生中断然后读取数据. ...

  6. 汇编语言DEBUG命令详解||汇编命令||DEBUG的常用命令:A,U,R,T,D,E,Q 等等

    汇编命令 汇编语言Debug命令详解 DEBUG的常用命令:A,U,R,T,D,E,Q 等等 汇编语言DEBUG命令详解 文章目录 汇编语言DEBUG命令详解 R命令的使用 H命令的使用 D命令的使用 ...

  7. 信号与系统考研复习例题详解_小语种日语日本文学复习考研资料加藤周一《日本文学史序说(上)》笔记和考研真题详解...

    加藤周一<日本文学史序说(上)>笔记和考研真题详解 目录 序章 日本文学的特征 0.1 复习笔记 第一章 <万叶集>的时代 1.1 复习笔记 1.2 考研真题与典型题详解 第二 ...

  8. 论vue3.0和vue2.0区别之编程方式及例子详解

    系列文章目录 第一章 论vue3.0和vue2.0区别之编程方式及例子详解 第二章 同一台电脑 实现 vue-cli2和vue-cli3同时并存 及 常见命令 第三章 vue3.0项目实战 - Ele ...

  9. Spring事务管理详解_基本原理_事务管理方式

    Spring事务管理详解_基本原理_事务管理方式 1. 事务的基本原理 Spring事务的本质其实就是数据库对事务的支持,使用JDBC的事务管理机制,就是利用java.sql.Connection对象 ...

  10. Python算法教程第一章知识点:利用插入元素的例子详解list之本质

    声明:由于中译本翻译过于冗余,所以将有用处的知识点罗列出来. 微信公众号:geekkr 本文目录:一.利用插入元素的例子详解list之本质 </br> 一.利用插入元素的例子详解list之 ...

最新文章

  1. impala 本年格式化时间_hive,hbase,impala之间的对比
  2. android 原生分享界面_手机资讯:省时省力!直接在锁屏界面打开应用App
  3. 关键帧 关于decode_one_frame函数
  4. linux nginx 安装出错,Linux Nginx安装以及可能出现错误
  5. sql学习之笔记(时间)季度的第一天
  6. oracle_导致实例逐出的五大问题
  7. 五万pv的小程序需要什么服务器,一个公式,告诉你PV千万的刷屏小程序都是怎么玩的...
  8. postman工具 如何传递当前时间戳和MD5加密
  9. python爬虫项目报告需求分析_网络爬虫需求分析报告
  10. 30种大脑训练方法:提高你的注意力(修订本) - 目录
  11. codesys写文件到远程并在远程读取文件
  12. oracle中的删除与数据库中的回收站
  13. smplayer中使用srt字幕乱码问题
  14. 【步兵 经验篇】one step
  15. 中医证型关联规则----apriori算法挖掘及plotly数据可视化
  16. python生成二维码_使用python生成二维码
  17. HNU--计算机网络实验2
  18. swagger工具编写接口文档
  19. 基于宜搭的《T恤尺码收集》应用搭建最佳实践
  20. 如何在Java中将double转换为int?

热门文章

  1. My97DatePicker日历实现开始日期小于结束日期验证
  2. PSP 版本6.60 破解 PRO-B10自制系统升级图文教程
  3. [NOIP2013 提高组] 花匠
  4. Hadoop 入门教程(超详细)
  5. ios html5 苹方字体,iOS中使用自定义字体-苹方字体
  6. 预付费客户抄表管理系统的应用
  7. python list转json对象_将列表转换为json对象
  8. 浅谈下对volatile的理解
  9. 欧姆龙rxd指令讲解_欧姆龙plc的指令-机电之家网PLC技术网
  10. Github视频教程-黄棒清-专题视频课程