您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 51单片机实用汇编程序库(word)
51单片机实用程序库4.1流水灯程序介绍:利用P1口通过一定延时轮流产生低电平输出,以达到发光二极管轮流亮的效果。实际应用中例如:广告灯箱彩灯、霓虹灯闪烁。程序实例(LAMP.ASM)ORG0000HAJMPMAINORG0030HMAIN:9MOVA,#00HMOVP1,A;灭所有的灯MOVA,#11111110BMAIN1:MOVP1,A;开最左边的灯ACALLDELAY;延时RLA;将开的灯向右边移AJMPMAIN;循环DELAY:MOV30H,#0FFHD1:MOV31H,#0FFHD2:DJNZ31H,D2DJNZ30H,D1RETEND4.2方波输出程序介绍:P1.0口输出高电平,延时后再输出低电平,循环输出产生方波。实际应用中例如:波形发生器。程序实例(FAN.ASM):ORG0000HMAIN:;直接利用P1.0口产生高低电平地形成方波//////////////ACALLDELAYSETBP1.0ACALLDELAY10CLRP1.0AJMPMAIN;//////////////////////////////////////////////////DELAY:MOVR1,#0FFHDJNZR1,$RETEND五、定时器功能实例5.1定时1秒报警程序介绍:定时器1每隔1秒钟将p1.o的输出状态改变1次,以达到定时报警的目的。实际应用例如:定时报警器。程序实例(DIN1.ASM):ORG0000HAJMPMAINORG000BHAJMPDIN0;定时器0入口MAIN:TFLAGEQU34H;时间秒标志,判是否到50个0.2秒,即50*0.2=1秒MOVTMOD,#00000001B;定时器0工作于方式1MOVTL0,#0AFHMOVTH0,#3CH;设定时时间为0.05秒,定时20次则一秒11SETBEA;开总中断SETBET0;开定时器0中断允许SETBTR0;开定时0运行SETBP1.0LOOP:AJMPLOOPDIN0:;是否到一秒////////////////////////////////////////INCC:INCTFLAGMOVA,TFLAGCJNEA,#20,REMOVTFLAG,#00HCPLP1.0;//////////////////////////////////////////////////RE:MOVTL0,#0AFHMOVTH0,#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.3200HZ频率输出程序介绍:利用定时器定时,在P1.0口产生200HZ的频率输出。实际应用例如:传感器前级推动。程序实例(F200.ASM):ORG0000HAJMPMAINORG001BHAJMPDIN0MAIN:CLRP1.0;产生一个低电平,实际上是从p1.0口产生频率MOVTMOD,#00010000B;定时器1工作于方式0MOVTH1,#0F6HMOVTL1,#3BH;频率产生的时间,详细请见频率公式SETBEA;开总中断13SETBTR1;开定时器1运行SETBET1;开定时器1允许LOOP:AJMPLOOP;无限循环DIN0:CPLP1.0;产生一个高电平,下次来就是低电平(因为取反),一个高电平和一个低电平形成一个周期MOVTH1,#0F6HMOVTL1,#3BH;重置频率产生时间RETI;返回END5.4200——250HZ变化频率输出程序介绍:利用定时器定时时间的变化,由P1.0口产生200——250HZ变化的频率。实际应用例如:传感器前级推动、频率发生器。程序实例(F250.ASM):ORG0000HAJMPMAINORG001BHAJMPDIN1MAIN:;定义频率200和300//////////////////////////////////F2HEQU30HF2LEQU31HF3HEQU32HF3LEQU33H14;//////////////////////////////////////////////////;定义频率保持初值//////////////////////////////////MOVR1,#50MOVR2,#02H;//////////////////////////////////////////////////;频率赋初值////////////////////////////////////////MOVF2H,#0F6HMOVF2L,#3BHMOVF3H,#0F8HMOVF3L,#2FH;//////////////////////////////////////////////////CLRP1.0;在P1.0口产生一个低电平,一个脉冲是由一个高电平和一个低电平组成的MOVTMOD,#00010000B;定时器工作于方式1MOVTH1,F2HMOVTL1,F2L;200HZ输出SETBEA;开总中断SETBTR1;开定时器1运行SETBET1;开定时器1允许LOOP:AJMPLOOPDIN1:CPLP1.0;取反P1.0口,实际是为了不断的将p1.0的电平关系转换,即产生了频率;频率保持时间//////////////////////////////////////DJNZR1,REMOVR1,#50DJNZR2,REMOVR2,#02H15;//////////////////////////////////////////////////MOVA,F2HCJNEA,F3H,XIA;频率高位到300HZ的高位了吗?AJMPJIA;频率高位没到300HZ的高位值,直接将低位值加1XIA:INCF2LMOVA,F2LCJNEA,#00H,REINCF2HMOVA,F2HCJNEA,F3H,RE;/////////////////////////////////////////////;频率高位加到300HZ的高位值了,低位加一,到300HZ的低位值了吗,没到出去,到了关定时器JIA:INCF2L;到了将200HZ频率的低位加1MOVA,F2LCJNEA,#F3L,RECLRTR1;/////////////////////////////////////////////RE:MOVTH1,F2HMOVTL1,F2LRETIEND16六、数显0——9999显示程序介绍:利用S51的串行口功能,实现数码管0——9999的循环显示。实际应用例如:电子计分牌。程序实例(9999.ASM):ORG0000HMAIN:GEEEQU30HSHIEQU31HBEIEQU32HQIANEQU33H;定义个十百千MOVGEE,#00HMOVSHI,#00HMOVBEI,#00HMOVQIAN,#00H;赋初值MOVSCON,#00H;串行口工作于方式0.同步移位;显示个,十,百,千//////////////////////////////////DISPLAY:ACALLDELAY;延时MOVDPTR,#SETTABMOVA,GEEMOVCA,@A+DPTRMOVSBUF,AD1:JNBTI,D117CLRTIMOVDPTR,#SETTABMOVA,SHIMOVCA,@A+DPTRMOVSBUF,AD2:JNBTI,D2CLRTIMOVDPTR,#SETTABMOVA,BEIMOVCA,@A+DPTRMOVSBUF,AD3:JNBTI,D3CLRTIMOVDPTR,#SETTABMOVA,QIANMOVCA,@A+DPTRMOVSBUF,AD4:JNBTI,D4CLRTI;/////////////////////////////////////////////;个,十,百,千的依次加一/////////////////////INCGEEMOVA,GEECJNEA,#0AH,DISPLAYMOVGEE,#00HINCSHIMOVA,SHICJNEA,#0AH,DISPLAY18MOVSHI,#00HINCBEIMOVA,BEICJNEA,#0AH,DISPLAYMOVBEI,#00HINCQIANMOVA,QIANCJNEA,#0AH,DISPLAYMOVQIAN,#00HAJMPDISPLAY;//////////////////////////////////////////////////;延时//////////////////////////////////////////////DELAY:MOVR1,#0FFHE1:MOVR2,#0FFHDJNZR2,$DJNZR1,E1RET;/////////////////////////////////////////////SETTAB:DB0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,F6H,0EEH,3EH,9CH,7AH,9EH,8EH;数显代码END七、AD转换7.1AD转换(数码显示)程序介绍:利用ADC0809模拟通道3输入电压,经单片机19处理后在数码管上用相对应的16进制数显示出来,0—5V对应为0--0FFH,实际应用例如:数据采集。程序操作:程序写完上电运行后,用本机配带的专用起微调图15所示电位器,会在数码管上看到随不同电压而变化的对应16进制值。也可以用万用表实ADC0809IN3脚电压,来检验所对应显示的16进制数。图15程序实例(ad.asm):ORG0000HMAIN1:ACALLDELAY;延时ACALLAD;呼叫AD子程序;将转换的数字量屏蔽高位低位送显////////////////////MOV31H,30HMOVA,30HANLA,#0FHMOVDPTR,#SETTABMOVCA,@A+DPTRMOVSBUF,AD1:JNBTI,D1CLRTI;//////////////////////////////////////////////////;将转换的数字量屏蔽低位高位送显////////////////////MOVA,30H20ANLA,#0F0HSWAPAMOVDPTR,#SETTABMOVCA,@A+DPTRMOVSBUF,AD2:JNBTI,D2CLRTI;//////////////////////////////////////////////////AJMPMAIN1;返回主程序AD:MOVDPTR,#7F00H;指向转换地址MOVA,#03H;指向转换口MOVX@DPTR,A;转换MOVR1,#64HD3:DJNZR1,D3;等100微秒转换完MOVXA,@DPTR;转换后的值给AMOV30H,A;转换的值给30HRETDELAY:;延时MOVR2,#0FFHD14:MOVR3,#0FFHD12:DJNZR3,D12DJNZR2,D14RETSETTAB:DB0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6HDB0EEH,3EH,9CH,7AH,9EH,8EH217.2十六进制两位数加法器(数码显示)程序介绍:将ADC0809输入的两个不同电压(相同电压也可相加,只是为举例说明,所以取不同电压)所对应的16进制数相加显示出来。实际应用例如:取代加法运放电路。程序操作:程序写完上电运行后,用本机配带的钟表起微调图16所示电位器,输入两个不同电压,数码管会显示两个不同的对应16进制数,随后数码管会显示两个16进制数相加的值。程序实例(add2.asm):ORG0000
本文标题:51单片机实用汇编程序库(word)
链接地址:https://www.777doc.com/doc-3319332 .html