51单片机实用汇编程序库.docx

上传人:b****7 文档编号:15491101 上传时间:2023-07-05 格式:DOCX 页数:71 大小:37.10KB
下载 相关 举报
51单片机实用汇编程序库.docx_第1页
第1页 / 共71页
51单片机实用汇编程序库.docx_第2页
第2页 / 共71页
51单片机实用汇编程序库.docx_第3页
第3页 / 共71页
51单片机实用汇编程序库.docx_第4页
第4页 / 共71页
51单片机实用汇编程序库.docx_第5页
第5页 / 共71页
51单片机实用汇编程序库.docx_第6页
第6页 / 共71页
51单片机实用汇编程序库.docx_第7页
第7页 / 共71页
51单片机实用汇编程序库.docx_第8页
第8页 / 共71页
51单片机实用汇编程序库.docx_第9页
第9页 / 共71页
51单片机实用汇编程序库.docx_第10页
第10页 / 共71页
51单片机实用汇编程序库.docx_第11页
第11页 / 共71页
51单片机实用汇编程序库.docx_第12页
第12页 / 共71页
51单片机实用汇编程序库.docx_第13页
第13页 / 共71页
51单片机实用汇编程序库.docx_第14页
第14页 / 共71页
51单片机实用汇编程序库.docx_第15页
第15页 / 共71页
51单片机实用汇编程序库.docx_第16页
第16页 / 共71页
51单片机实用汇编程序库.docx_第17页
第17页 / 共71页
51单片机实用汇编程序库.docx_第18页
第18页 / 共71页
51单片机实用汇编程序库.docx_第19页
第19页 / 共71页
51单片机实用汇编程序库.docx_第20页
第20页 / 共71页
亲,该文档总共71页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

51单片机实用汇编程序库.docx

《51单片机实用汇编程序库.docx》由会员分享,可在线阅读,更多相关《51单片机实用汇编程序库.docx(71页珍藏版)》请在冰点文库上搜索。

51单片机实用汇编程序库.docx

51单片机实用汇编程序库

51单片机实用程序库

4、1流水灯

程序介绍:

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

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

实际应用中例如:

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

程序实例(LAMP、ASM)

ORG0000H

AJMPMAIN

ORG 0030H

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

ORG 0000H

MAIN:

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

ACALLDELAY

SETBP1、0

ACALLDELAY

10

CLRP1、0

AJMP MAIN

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

DELAY:

MOVR1,#0FFH

DJNZR1,$

RET

END

五、定时器功能实例

5、1定时1秒报警

程序介绍:

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

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

实际应用例如:

定时报警器。

程序实例(DIN1、ASM):

ORG 0000H

AJMPMAIN

ORG000BH

AJMPDIN0;定时器0入口

MAIN:

TFLAGEQU 34H;时间秒标志,判就是否到50个

0、2秒,即50*0、2=1 秒

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

1

MOV TL0,#0AFH

MOV TH0,#3CH;设定时时间为0、05 秒,定时

20 次则一秒

11

SETBEA;开总中断

SETB ET0;开定时器0中断允许

SETBTR0;开定时0运行

SETBP1、0

LOOP:

 AJMPLOOP

DIN0:

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

INCC:

INCTFLAG

MOVA,TFLAG

CJNEA,#20,RE

MOVTFLAG,#00H

CPL P1、0

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

RE:

MOV TL0,#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):

ORG 0000H

AJMPMAIN

ORG001BH

AJMPDIN0

MAIN:

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

就是从p1、0口产生频率

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

MOV TH1,#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):

ORG 0000H

AJMPMAIN

ORG001BH

AJMPDIN1

MAIN:

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

F2HEQU30H

F2L EQU31H

F3HEQU32H

F3LEQU33H

14

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

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

MOVR1,#50

MOVR2,#02H

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

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

MOV F2H,#0F6H

MOV F2L,#3BH

MOVF3H,#0F8H

MOVF3L,#2FH

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

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

电平,一个脉冲就是由一个高电平与一个低电平组成得

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

MOVTH1,F2H

MOVTL1,F2L;200HZ输出

SETBEA;开总中断

SETB TR1 ;开定时器1 运行

SETB ET1 ;开定时器1允许

LOOP:

AJMPLOOP

DIN1:

CPL P1、0 ;取反P1、0口,实际

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

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

DJNZR1,RE

MOVR1,#50

DJNZR2,RE

MOVR2,#02H

15

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

MOVA,F2H

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

得高位了吗?

AJMP JIA;频率高位没到

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

XIA:

INC F2L

MOVA,F2L

CJNEA,#00H,RE

INCF2H

MOV A,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:

GEEEQU 30H

SHI EQU31H

BEIEQU32H

QIAN EQU33H;定义个十百千

MOVGEE,#00H

MOVSHI,#00H

MOV BEI,#00H

MOVQIAN,#00H ;赋初值

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

0、同步移位

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

DISPLAY:

ACALL DELAY ;延时

MOVDPTR,#SETTAB

MOVA,GEE

MOVCA,A+DPTR

MOVSBUF,A

D1:

 JNBTI,D1

17

CLRTI

MOV DPTR,#SETTAB

MOV A,SHI

MOVCA,A+DPTR

MOV SBUF,A

D2:

JNBTI,D2

CLRTI

MOVDPTR,#SETTAB

MOVA,BEI

MOVC A,A+DPTR

MOVSBUF,A

D3:

JNB TI,D3

CLRTI

MOVDPTR,#SETTAB

MOVA,QIAN

MOVCA,A+DPTR

MOV SBUF,A

D4:

 JNBTI,D4

CLR TI

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

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

INCGEE

MOVA,GEE

CJNEA,#0AH,DISPLAY

MOVGEE,#00H

INCSHI

MOVA,SHI

CJNEA,#0AH,DISPLAY

18

MOV SHI,#00H

INCBEI

MOVA,BEI

CJNE A,#0AH,DISPLAY

MOVBEI,#00H

INC QIAN

MOV A,QIAN

CJNE A,#0AH,DISPLAY

MOV QIAN,#00H

AJMP DISPLAY

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

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

DELAY:

MOVR1,#0FFH

E1:

 MOVR2,#0FFH

DJNZR2,$

DJNZ R1,E1

RET

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

SETTAB:

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

F6H,0EEH,3EH,9CH,7AH,9EH,8EH;数显代码

END

七、AD转换

7、1 AD转换(数码显示)

程序介绍:

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

19

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

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

数据采集。

程序操作:

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

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

应16进制值。

也可以用

万用表实ADC0809IN3 脚

电压,来检验所对应显

示得16进制数。

图15

程序实例(ad、asm):

ORG0000H

MAIN1:

ACALLDELAY;延时

ACALLAD ;呼叫AD 子程序

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

MOV31H,30H

MOVA,30H

ANLA,#0FH

MOVDPTR,#SETTAB

MOVCA,A+DPTR

MOVSBUF,A

D1:

 JNBTI,D1

CLRTI

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

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

MOVA,30H

20

ANLA,#0F0H

SWAPA

MOV DPTR,#SETTAB

MOVCA,A+DPTR

MOVSBUF,A

D2:

JNB TI,D2

CLRTI

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

AJMPMAIN1;返回主程序

AD:

MOVDPTR,#7F00H;指向转换地址

MOVA,#03H;指向转换口

MOVXDPTR,A;转换

MOVR1,#64H

D3:

DJNZR1,D3;等100微秒转换完

MOVXA,DPTR;转换后得值给A

MOV30H,A ;转换得值给30H

RET

DELAY:

;延时

MOV R2,#0FFH

D14:

MOVR3,#0FFH

D12:

DJNZR3,D12

DJNZ R2,D14

RET

SETTAB:

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

0FEH,0F6H

DB 0EEH,3EH,9CH,7AH,9EH,8EH

21

7、2十六进制两位数加法器(数码显示)

程序介绍:

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

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

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

实际应用例如:

取代加法运放

电路.

程序操作:

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

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

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

进制数相加得值.

程序实例(add2、asm):

ORG 0000H

MAIN:

ADNUMBER EQU30H ;AD转换值

ADDNUMBEREQU31H;加数值1

ADLEQU32H;//

ADHEQU33H ;ADL转换高低位值

DISL EQU34H;//

DISH EQU35H ;显示高低位值

ADDTOTAL EQU36H;第一次AD转换值

ADDJWEQU37H;加法进位数

ADDHOLDEQU38H

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

MOVADDHOLD,#00H

MOV ADDNUMBER,#00H

MOVADL,#00H

MOVADH,#00H

MOVDISL,#00H

22

MOVDISH,#00H

MOVADDJW,#00H

MOVADDTOTAL,#00H

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

MAIN1:

ACALLAD;呼叫AD 子程序

ACALLDELAY;延时

ACALLCAIFEN;呼叫AD值拆分为高

低得程序

ACALLDISPLAY;呼叫显示子程序

MOVA,ADNUMBER ;取AD值

CJNEA,ADDHOLD,ADD3;与上次AD值比

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

AJMPMAIN1;就是相等得,证

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

ADD3:

MOVA,ADDHOLD

CJNEA,#00H,ADD4

MOV ADDHOLD,ADNUMBER;有一种情况就

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

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

AJMMAIN1

ADD4:

MOVADDNUMBER,ADDHOLD;就是真得输入

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

MOVADDHOLD,ADNUMBER;将这次得AD

值也保持起来.准备与上一个AD 值相加

;显示这次输入得AD值////////////////////////////////

ACALLDELAY

ACALLCAIFEN

23

ACALLDISPLAY

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

DISPLAY1:

ACALLDELAY;延时

ACALLADD1;呼叫加法子程序

ACALLDISPLAY ;显示

LOOP:

AJMPLOOP;返回主程序

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

AD:

MOVDPTR,#7F00H;指向转换地址

MOV A,#03H;指向转换口

MOVX DPTR,A ;转换

MOV R1,#64H

D1:

 DJNZR1,D1 ;等100微秒转换完

MOVX A,DPTR;转换后得值给A

MOV ADNUMBER,A ;转换得值给30H

RET

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

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

CAIFEN:

MOVA,ADNUMBER

ANLA,#0FH

MOVADL,A;取低位

MOVA,ADNUMBER

ANLA,#0F0H

SWAPA

MOVADH,A;取高位

MOVDISL,ADL

24

MOVDISH,ADH;给显示值

RET

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

;显示//////////////////////////////////////////////

DISPLAY:

MOVA,DISL

MOVDPTR,#SETTAB

MOVCA,A+DPTR

MOVSBUF,A

D3:

JNBTI,D3

CLR TI

MOVA,DISH

MOV DPTR,#SETTAB

MOVC A,A+DPTR

MOVSBUF,A

D4:

JNBTI,D4

CLRTI

MOVA,ADDJW

MOV DPTR,#SETTAB

MOVCA,A+DPTR

MOVSBUF,A

D5:

JNBTI,D5

CLRTI

MOVSBUF,#00H

D6:

 JNBTI,D6

CLR TI

RET

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

25

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

ADD1:

CLRC

MOVA,ADDNUMBER;取上次AD值

ADDCA,ADDHOLD;与这次AD 值相加

MOVADDTOTAL,A ;将此次加得值给与

JNCADDJW1;有无进位?

INCADDJW;有进位,进位值给

ADDJW

ADDJW1:

ANL A,#0FH

MOVDISL,A;加值取低位

MOVA,ADDTOTAL

ANLA,#0F0H

SWAPA

MOVDISH,A;加值取高位

RET

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

DELAY:

 ;延时

MOVR3,#0AH

DD1:

 MOVR1,#0FFH

D2:

MOVR2,#0FFH

DJNZR2,$

DJNZR1,D2

DJNZR3,DD1

RET

SETTAB:

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

26

0FEH,0F6H

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

END

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

ORG0000H

MAIN:

ADNUMBEREQU30H;AD转换值

ADDNUMBEREQU 31H;加数值1

ADL EQU32H ;//

ADHEQU33H;ADL转换高低位值

DISLEQU34H;//

DISHEQU35H ;显示高低位值

ADDTOTALEQU36H;第一次AD转换值

ADDJW EQU37H;加法进位数

ADDHOLD EQU38H

ADDFLAGEQU 39H;加标志

ENDFLAGEQU40H

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

MOVADDHOLD,#00H

MOVADDNUMBER,#00H

MOVADL,#00H

MOV ADH,#00H

MOVDISL,#00H

MOVDISH,#00H

MOV ADDJW,#00H

MOV ADDFLAG,#00H

MOV ENDFLAG,#00H

MOV ADDTOTAL,#00H

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

MAIN1:

28

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

ACALLDELAY

ACALLDELAY

ACALL AD

MAIN3:

ACALL CAIFEN

ACALL DISPLAY

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

;加这次得

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

当前位置:首页 > 经管营销 > 经济市场

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

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