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

上传人:b****2 文档编号:878353 上传时间:2023-04-29 格式:DOCX 页数:45 大小:28.27KB
下载 相关 举报
单片机汇编语言经典一百例Word格式.docx_第1页
第1页 / 共45页
单片机汇编语言经典一百例Word格式.docx_第2页
第2页 / 共45页
单片机汇编语言经典一百例Word格式.docx_第3页
第3页 / 共45页
单片机汇编语言经典一百例Word格式.docx_第4页
第4页 / 共45页
单片机汇编语言经典一百例Word格式.docx_第5页
第5页 / 共45页
单片机汇编语言经典一百例Word格式.docx_第6页
第6页 / 共45页
单片机汇编语言经典一百例Word格式.docx_第7页
第7页 / 共45页
单片机汇编语言经典一百例Word格式.docx_第8页
第8页 / 共45页
单片机汇编语言经典一百例Word格式.docx_第9页
第9页 / 共45页
单片机汇编语言经典一百例Word格式.docx_第10页
第10页 / 共45页
单片机汇编语言经典一百例Word格式.docx_第11页
第11页 / 共45页
单片机汇编语言经典一百例Word格式.docx_第12页
第12页 / 共45页
单片机汇编语言经典一百例Word格式.docx_第13页
第13页 / 共45页
单片机汇编语言经典一百例Word格式.docx_第14页
第14页 / 共45页
单片机汇编语言经典一百例Word格式.docx_第15页
第15页 / 共45页
单片机汇编语言经典一百例Word格式.docx_第16页
第16页 / 共45页
单片机汇编语言经典一百例Word格式.docx_第17页
第17页 / 共45页
单片机汇编语言经典一百例Word格式.docx_第18页
第18页 / 共45页
单片机汇编语言经典一百例Word格式.docx_第19页
第19页 / 共45页
单片机汇编语言经典一百例Word格式.docx_第20页
第20页 / 共45页
亲,该文档总共45页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

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

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

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

MOVR1,#0FFH

DJNZR1,$

五、定时器功能实例

5.1定时1秒报警

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

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

实际应用例如:

定时报警器。

程序实例(DIN1.ASM):

ORG000BH

AJMPDIN0;

定时器0入口

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运行

LOOP:

AJMPLOOP

DIN0:

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

INCC:

INCTFLAG

MOVA,TFLAG

CJNEA,#20,RE

MOVTFLAG,#00H

CPLP1.0

RE:

RETI

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

ORG001BH

AJMPDIN0

CLRP1.0;

产生一个低电平,实际上

是从p1.0口产生频率

MOVTMOD,#00010000B;

定时器1工作于方式0

MOVTH1,#0F6H

MOVTL1,#3BH;

频率产生的时间,详细请

见频率公式

13

SETBTR1;

开定时器1运行

SETBET1;

开定时器1允许

AJMPLOOP;

无限循环

CPLP1.0;

产生一个高电平,

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

形成一个周期

重置频率产生时间

RETI;

返回

5.4200——250HZ变化频率输出

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

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

传感器

前级推动、频率发生器。

程序实例(F250.ASM):

AJMPDIN1

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

F2HEQU30H

F2LEQU31H

F3HEQU32H

F3LEQU33H

14

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

MOVR1,#50

MOVR2,#02H

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

MOVF2H,#0F6H

MOVF2L,#3BH

MOVF3H,#0F8H

MOVF3L,#2FH

在P1.0口产生一个低

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

定时器工作于方式1

MOVTH1,F2H

MOVTL1,F2L;

200HZ输出

DIN1:

CPLP1.0;

取反P1.0口,实际

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

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

DJNZR1,RE

DJNZR2,RE

15

MOVA,F2H

CJNEA,F3H,XIA;

频率高位到300HZ

的高位了吗?

AJMPJIA;

频率高位没到

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

XIA:

INCF2L

MOVA,F2L

CJNEA,#00H,RE

INCF2H

CJNEA,F3H,RE

/////////////////////////////////////////////

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

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

JIA:

INCF2L;

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

CJNEA,#F3L,RE

CLRTR1

MOVTL1,F2L

16

六、数显

0——9999显示

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

—9999的循环显示。

电子计分牌。

程序实例(9999.ASM):

GEEEQU30H

SHIEQU31H

BEIEQU32H

QIANEQU33H;

定义个十百千

MOVGEE,#00H

MOVSHI,#00H

MOVBEI,#00H

MOVQIAN,#00H;

赋初值

MOVSCON,#00H;

串行口工作于方式

0.同步移位

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

DISPLAY:

MOVDPTR,#SETTAB

MOVA,GEE

MOVCA,@A+DPTR

MOVSBUF,A

JNBTI,D1

17

CLRTI

MOVA,SHI

JNBTI,D2

MOVA,BEI

D3:

JNBTI,D3

MOVA,QIAN

D4:

JNBTI,D4

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

INCGEE

CJNEA,#0AH,DISPLAY

INCSHI

18

INCBEI

INCQIAN

MOVQIAN,#00H

AJMPDISPLAY

延时//////////////////////////////////////////////

MOVR1,#0FFH

E1:

MOVR2,#0FFH

DJNZR2,$

DJNZR1,E1

SETTAB:

DB0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,

F6H,0EEH,3EH,9CH,7AH,9EH,8EH;

数显代码

七、AD转换

7.1AD转换(数码显示)

利用ADC0809模拟通道3输入电压,经单片机

19

处理后在数码管上用相对应的16进制数显示出来,0—5V对

应为0--0FFH,实际应用例如:

数据采集。

程序操作:

程序写完上电运行后,用本机配带的专用起微调

图15所示电位器,会在数码管上看到随不同电压而变化的对

应16进制值。

也可以用

万用表实ADC0809IN3脚

电压,来检验所对应显

示的16进制数。

图15

程序实例(ad.asm):

ACALLAD;

呼叫AD子程序

将转换的数字量屏蔽高位低位送显////////////////////

MOV31H,30H

MOVA,30H

ANLA,#0FH

将转换的数字量屏蔽低位高位送显////////////////////

20

ANLA,#0F0H

SWAPA

AJMPMAIN1;

返回主程序

AD:

MOVDPTR,#7F00H;

指向转换地址

MOVA,#03H;

指向转换口

MOVX@DPTR,A;

转换

MOVR1,#64H

DJNZR1,D3;

等100微秒转换完

MOVXA,@DPTR;

转换后的值给A

MOV30H,A;

转换的值给30H

;

MOVR2,#0FFH

D14:

MOVR3,#0FFH

D12:

DJNZR3,D12

DJNZR2,D14

DB0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,

0FEH,0F6H

DB0EEH,3EH,9CH,7AH,9EH,8EH

21

7.2十六进制两位数加法器(数码显示)

将ADC0809输入的两个不同电压(相同电

压也可相加,只是为举例说明,所以取不同电压)所对应

的16进制数相加显示出来。

取代加法运放

电路。

程序写完上电运行后,用本机配带的钟表

起微调图16所示电位器,输入两个不同电压,数码管会显

示两个不同的对应16进制数,随后数码管会显示两个16

进制数相加的值。

程序实例(add2.asm):

ADNUMBEREQU30H;

AD转换值

ADDNUMBEREQU31H;

加数值1

ADLEQU32H;

//

ADHEQU33H;

ADL转换高低位值

DISLEQU34H;

DISHEQU35H;

显示高低位值

ADDTOTALEQU36H;

第一次AD转换值

ADDJWEQU37H;

加法进位数

ADDHOLDEQU38H

赋初值////////////////////////////////////////////

MOVADDHOLD,#00H

MOVADDNUMBER,#00H

MOVADL,#00H

MOVADH,#00H

MOVDISL,#00H

22

MOVDISH,#00H

MOVADDJW,#00H

MOVADDTOTAL,#00H

ACALLCAIFEN;

呼叫AD值拆分为高

低的程序

ACALLDISPLAY;

呼叫显示子程序

MOVA,ADNUMBER;

取AD值

CJNEA,ADDHOLD,ADD3;

与上次AD值比

较,不相等,即输入了新的AD值,去AD3执行

是相等的,证

明没有输入新的AD值,回去显示老的AD值

ADD3:

MOVA,ADDHOLD

CJNEA,#00H,ADD4

MOVADDHOLD,ADNUMBER;

有一种情况就

是是第一次进来,AD保持值里面是放的初值00,与取的AD值

不同,是这种情况,也返回去

AJMMAIN1

ADD4:

MOVADDNUMBER,ADDHOLD;

是真的输入

了新的AD值,将上次AD值给加数,为调加法程序做准备

将这次的AD

值也保持起来。

准备与上一个AD值相加

显示这次输入的AD值////////////////////////////////

ACALLCAIFEN

23

ACALLDISPLAY

DISPLAY1:

ACALLADD1;

呼叫加法子程序

显示

///////////////////////////////////////AD转换

MOVDPTR,#7F00H;

DJNZR1,D1;

MOVADNUMBER,A;

拆分AD值程序//////////////////////////////////////

CAIFEN:

MOVA,ADNUMBER

MOVADL,A;

取低位

MOVADH,A;

取高位

MOVDISL,ADL

24

MOVDISH,ADH;

给显示值

显示//////////////////////////////////////////////

MOVA,DISL

MOVA,DISH

MOVA,ADDJW

D5:

JNBTI,D5

MOVSBUF,#00H

D6:

JNBTI,D6

25

加法程序//////////////////////////////////////////

ADD1:

CLRC

MOVA,ADDNUMBER;

取上次AD值

ADDCA,ADDHOLD;

与这次AD值相加

MOVADDTOTAL,A;

将此次加的值给和

JNCADDJW1;

有无进位?

INCADDJW;

有进位,进位值给

ADDJW

ADDJW1:

ANLA,#0FH

MOVDISL,A;

加值取低位

MOVA,ADDTOTAL

MOVDISH,A;

加值取高位

MOVR3,#0AH

DD1:

D2:

DJNZR1,D2

DJNZR3,DD1

26

7.3软件滤波

程序介绍(7.31—7.34):

您如果接触过模电就知道,

在采集电压量时经常会碰到干扰,而在模电中经常所采用

的方法就是加电容滤波,这是用硬件实现的。

实际上软件

完全可以达到滤波的效果,现在介绍的是一种最经典的方

法。

在一次电压量的采集中,在很短的时间内对它进行6

次采集,将它转换为数字量后求和(7.31),分析出6次

输入中的最大值和最小值(7.32),然后减去最大值和最

小值(7.33),除以4(7.44)得到平均值。

这样实际上

就完成了一次软件滤波。

省去了复杂的硬件,而且取得了

好而精确的效果。

精确数据采集。

程序写入上电运行后,用本实验仪自带的

钟表起微调电位器依次输入6个电压量。

7.31程序会显示

和值,7.32会继续显示最大和最小值,7.33程序会继续显

示减后所剩的值,7.34程序会继续显示除4后的值。

算法说明:

为什么要选择取6个数进行计算呢?

因为

在汇编中做计算是非常麻烦的,取6个数,减去最大值和

最小值后,取平均值是除4.计算机的内部计算都是二进

制,而二进制每除一个2,实际上是向右移一次。

所以为

了计算方便,我们选择取6个数,最后在算除法的时候,

只需要用单片机自带的右移位命令移2次就行了。

27

7.31十六进制六位数加法(数码显示)

程序实例(add6.asm):

ADDFLAGEQU39H;

加标志

ENDFLAGEQU40H

MOVADDFLAG,#00H

MOVENDFLAG,#00H

28

显示AD值//////////////////////////////////////////

ACALLAD

MAIN3:

加这次的AD值,并判是否加了六次,是的话就进入死循环

ACALLADD1

INCADDFLAG

MOVA,ADDFLAG

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

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2