单片机汇编语言经典一百例.docx

上传人:b****1 文档编号:1332442 上传时间:2022-10-20 格式:DOCX 页数:36 大小:27.23KB
下载 相关 举报
单片机汇编语言经典一百例.docx_第1页
第1页 / 共36页
单片机汇编语言经典一百例.docx_第2页
第2页 / 共36页
单片机汇编语言经典一百例.docx_第3页
第3页 / 共36页
单片机汇编语言经典一百例.docx_第4页
第4页 / 共36页
单片机汇编语言经典一百例.docx_第5页
第5页 / 共36页
点击查看更多>>
下载资源
资源描述

单片机汇编语言经典一百例.docx

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

单片机汇编语言经典一百例.docx

单片机汇编语言经典一百例

51单片机实用程序库

  

 4.1流水灯

程序介绍:

利用P1口通过一定延时轮流产生低电平

输出,以达到发光二极管轮流亮的效果。

实际应用中例如:

广告灯箱彩灯、霓虹灯闪烁。

程序实例(LAMP.ASM)

ORG0000H

AJMPMAIN

ORG0030H

MAIN:

9

MOVA,#00H

MOVP1,A;灭所有的灯

MOVA,#11111110B

MAIN1:

MOVP1,A;开最左边的灯

ACALLDELAY;延时

RLA;将开的灯向右边移

AJMPMAIN;循环

DELAY:

MOV30H,#0FFH

D1:

MOV31H,#0FFH

D2:

DJNZ31H,D2

DJNZ30H,D1

RET

END

4.2方波输出

程序介绍:

P1.0口输出高电平,延时后再输出低电

平,循环输出产生方波。

实际应用中例如:

波形发生器。

程序实例(FAN.ASM):

ORG0000H

MAIN:

;直接利用P1.0口产生高低电平地形成方波//////////////

ACALLDELAY

SETBP1.0

ACALLDELAY

10

CLRP1.0

AJMPMAIN

;//////////////////////////////////////////////////

DELAY:

MOVR1,#0FFH

DJNZR1,$

RET

END

五、定时器功能实例

5.1定时1秒报警

程序介绍:

定时器1每隔1秒钟将p1.o的输出状态改变1

次,以达到定时报警的目的。

实际应用例如:

定时报警器。

程序实例(DIN1.ASM):

ORG0000H

AJMPMAIN

ORG000BH

AJMPDIN0;定时器0入口

MAIN:

TFLAGEQU34H;时间秒标志,判是否到50个

0.2秒,即50*0.2=1秒

MOVTMOD,#00000001B;定时器0工作于方式

1

MOVTL0,#0AFH

MOVTH0,#3CH;设定时时间为0.05秒,定时

20次则一秒

11

SETBEA;开总中断

SETBET0;开定时器0中断允许

SETBTR0;开定时0运行

SETBP1.0

LOOP:

AJMPLOOP

DIN0:

;是否到一秒////////////////////////////////////////

INCC:

INCTFLAG

MOVA,TFLAG

CJNEA,#20,RE

MOVTFLAG,#00H

CPLP1.0

;//////////////////////////////////////////////////

RE:

MOVTL0,#0AFH

MOVTH0,#3CH;设定时时间为0.05秒,定时

20次则一秒

RETI

END

5.2频率输出公式

介绍:

f=1/t

s51使用12M晶振,一个周期是1微秒使用定时器1

工作于方式0,最大值为65535,以产生200HZ的频率为

例:

200=1/t:

推出t=0.005秒,即5000微秒,即一个高电

12

平或低电平的时间为2500微秒。

这样,定时值应设为

65535-2500=63035,将它转换为十六进制则为:

F63B。

具体程序请看f200.asm

频率递增:

200HZ:

63035:

F63B

250HZ:

63535:

F82F

300HZ:

63868:

F97C

5.3200HZ频率输出

程序介绍:

利用定时器定时,在P1.0口产生200HZ

的频率输出。

实际应用例如:

传感器前级推动。

程序实例(F200.ASM):

ORG0000H

AJMPMAIN

ORG001BH

AJMPDIN0

MAIN:

CLRP1.0;产生一个低电平,实际上

是从p1.0口产生频率

MOVTMOD,#00010000B;定时器1工作于方式0

MOVTH1,#0F6H

MOVTL1,#3BH;频率产生的时间,详细请

见频率公式

SETBEA;开总中断

13

SETBTR1;开定时器1运行

SETBET1;开定时器1允许

LOOP:

AJMPLOOP;无限循环

DIN0:

CPLP1.0;产生一个高电平,

下次来就是低电平(因为取反),一个高电平和一个低电平

形成一个周期

MOVTH1,#0F6H

MOVTL1,#3BH;重置频率产生时间

RETI;返回

END

5.4200——250HZ变化频率输出

程序介绍:

利用定时器定时时间的变化,由P1.0口

产生200——250HZ变化的频率。

实际应用例如:

传感器

前级推动、频率发生器。

程序实例(F250.ASM):

ORG0000H

AJMPMAIN

ORG001BH

AJMPDIN1

MAIN:

;定义频率200和300//////////////////////////////////

F2HEQU30H

F2LEQU31H

F3HEQU32H

F3LEQU33H

14

;//////////////////////////////////////////////////

;定义频率保持初值//////////////////////////////////

MOVR1,#50

MOVR2,#02H

;//////////////////////////////////////////////////

;频率赋初值////////////////////////////////////////

MOVF2H,#0F6H

MOVF2L,#3BH

MOVF3H,#0F8H

MOVF3L,#2FH

;//////////////////////////////////////////////////

CLRP1.0;在P1.0口产生一个低

电平,一个脉冲是由一个高电平和一个低电平组成的

MOVTMOD,#00010000B;定时器工作于方式1

MOVTH1,F2H

MOVTL1,F2L;200HZ输出

SETBEA;开总中断

SETBTR1;开定时器1运行

SETBET1;开定时器1允许

LOOP:

AJMPLOOP

DIN1:

CPLP1.0;取反P1.0口,实际

是为了不断的将p1.0的电平关系转换,即产生了频率

;频率保持时间//////////////////////////////////////

DJNZR1,RE

MOVR1,#50

DJNZR2,RE

MOVR2,#02H

15

;//////////////////////////////////////////////////

MOVA,F2H

CJNEA,F3H,XIA;频率高位到300HZ

的高位了吗?

AJMPJIA;频率高位没到

300HZ的高位值,直接将低位值加1

XIA:

INCF2L

MOVA,F2L

CJNEA,#00H,RE

INCF2H

MOVA,F2H

CJNEA,F3H,RE

;/////////////////////////////////////////////

;频率高位加到300HZ的高位值了,低位加一,到300HZ的低

位值了吗,没到出去,到了关定时器

JIA:

INCF2L;到了将200HZ频率的低位加1

MOVA,F2L

CJNEA,#F3L,RE

CLRTR1

;/////////////////////////////////////////////

RE:

MOVTH1,F2H

MOVTL1,F2L

RETI

END

16

六、数显

0——9999显示

程序介绍:

利用S51的串行口功能,实现数码管0—

—9999的循环显示。

实际应用例如:

电子计分牌。

程序实例(9999.ASM):

ORG0000H

MAIN:

GEEEQU30H

SHIEQU31H

BEIEQU32H

QIANEQU33H;定义个十百千

MOVGEE,#00H

MOVSHI,#00H

MOVBEI,#00H

MOVQIAN,#00H;赋初值

MOVSCON,#00H;串行口工作于方式

0.同步移位

;显示个,十,百,千//////////////////////////////////

DISPLAY:

ACALLDELAY;延时

MOVDPTR,#SETTAB

MOVA,GEE

MOVCA,A+DPTR

MOVSBUF,A

D1:

JNBTI,D1

17

CLRTI

MOVDPTR,#SETTAB

MOVA,SHI

MOVCA,A+DPTR

MOVSBUF,A

D2:

JNBTI,D2

CLRTI

MOVDPTR,#SETTAB

MOVA,BEI

MOVCA,A+DPTR

MOVSBUF,A

D3:

JNBTI,D3

CLRTI

MOVDPTR,#SETTAB

MOVA,QIAN

MOVCA,A+DPTR

MOVSBUF,A

D4:

JNBTI,D4

CLRTI

;/////////////////////////////////////////////

;个,十,百,千的依次加一/////////////////////

INCGEE

MOVA,GEE

CJNEA,#0AH,DISPLAY

MOVGEE,#00H

INCSHI

MOVA,SHI

CJNEA,#0AH,DISPLAY

18

MOVSHI,#00H

INCBEI

MOVA,BEI

CJNEA,#0AH,DISPLAY

MOVBEI,#00H

INCQIAN

MOVA,QIAN

CJNEA,#0AH,DISPLAY

MOVQIAN,#00H

AJMPDISPLAY

;//////////////////////////////////////////////////

;延时//////////////////////////////////////////////

DELAY:

MOVR1,#0FFH

E1:

MOVR2,#0FFH

DJNZR2,$

DJNZR1,E1

RET

;/////////////////////////////////////////////

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):

ORG0000H

MAIN1:

ACALLDELAY;延时

ACALL

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 公共行政管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1