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

上传人:b****6 文档编号:7877686 上传时间:2023-01-26 格式:DOCX 页数:84 大小:25.37KB
下载 相关 举报
单片机汇编语言一百例doc.docx_第1页
第1页 / 共84页
单片机汇编语言一百例doc.docx_第2页
第2页 / 共84页
单片机汇编语言一百例doc.docx_第3页
第3页 / 共84页
单片机汇编语言一百例doc.docx_第4页
第4页 / 共84页
单片机汇编语言一百例doc.docx_第5页
第5页 / 共84页
点击查看更多>>
下载资源
资源描述

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

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

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

单片机汇编语言一百例doc

 

51单片机实用程序库

 

流水灯

 

程序介绍:

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

 

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

实际应用中例如:

 

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

 

程序实例()

 

ORG0000H

 

AJMPMAIN

 

ORG0030H

 

MAIN:

 

9

 

MOVA,#00H

 

MOVP1,A;灭所有的灯

 

MOVA,#B

 

MAIN1:

 

MOVP1,A;开最左边的灯

 

ACALLDELAY延;时

 

RLA将;开的灯向右边移

 

AJMPMAIN;循环

 

DELAY:

 

MOV30H,#0FFH

 

D1:

MOV31H,#0FFH

 

D2:

DJNZ31H,D2

 

DJNZ30H,D1

 

RET

 

END

 

方波输出

 

程序介绍:

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

 

平,循环输出产生方波。

实际应用中例如:

波形发生器。

 

程序实例():

 

ORG0000H

 

MAIN:

 

;直接利用口产生高低电平地形成方波步移位

 

;显示个,十,百,千算机的内部计算都是二进

 

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

所以为

 

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

 

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

 

27

 

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

 

程序实例:

 

ORG0000H

 

MAIN:

 

ADNUMBEREQU30H;AD转换值

 

ADDNUMBEREQU31H加;数值1

 

ADLEQU32H;//

 

ADHEQU33H;ADL转换高低位值

 

DISLEQU34H;//

 

DISHEQU35H显;示高低位值

 

ADDTOTALEQU36H第;一次AD转换值

 

ADDJWEQU37H加;法进位数

 

ADDHOLDEQU38H

 

ADDFLAGEQU39H加;标志

 

ENDFLAGEQU40H

 

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

 

MOVADDHOLD,#00H

 

MOVADDNUMBER,#00H

 

MOVADL,#00H

 

MOVADH,#00H

 

MOVDISL,#00H

 

MOVDISH,#00H

 

MOVADDJW,#00H

 

MOVADDFLAG,#00H

 

MOVENDFLAG,#00H

 

MOVADDTOTAL,#00H

 

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

 

MAIN1:

 

28

 

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

 

ACALLDELAY

 

ACALLDELAY

 

ACALLAD

 

MAIN3:

 

ACALLCAIFEN

 

ACALLDISPLAY

 

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

 

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

 

ACALLDELAY

 

ACALLADD1

 

ACALLDISPLAY

 

INCADDFLAG

 

MOVA,ADDFLAG

 

CJNEA,#06H,MAIN2

 

LOOP:

AJMPLOOP

 

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

 

;没有加到六次,继续取值加,如果没有来新AD值,还是去

 

显示上次加的值,有新AD值来了,显示这次AD值,并加上上

 

次AD值,显示///////////////////////////////////////

 

MAIN2:

ACALLDELAY

 

ACALLAD

 

MOVA,ADNUMBER

 

CJNA,ADDTOTAL,MAIN3

 

AJMMAIN2

 

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

 

;////////////////////////////////////////////AD

 

AD:

 

29

 

转换

 

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

 

MOVA,#03H;指向转换口

 

MOVX@DPTR,A转;换

 

MOVR1,#64H

 

D1:

DJNZR1,D1等;

 

100微秒转换完

 

MOVXA,@DPTR转;换后的值给

 

A

 

MOVADNUMBER,A转;换的值给RET

 

30H

 

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

 

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

 

CAIFEN:

 

MOVA,ADNUMBER

 

ANLA,#0FH

 

MOVADL,A取;低位

 

MOVA,ADNUMBER

 

ANLA,#0F0H

 

SWAPA

 

MOVADH,A;取高位

 

MOVDISL,ADL

 

MOVDISH,ADH给;显示值

 

RET

 

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

 

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

 

DISPLAY:

 

MOVA,DISL

 

MOVDPTR,#SETTAB

 

MOVCA,@A+DPTR

 

MOVSBUF,A

 

30

 

D3:

JNBTI,D3

 

CLRTI

 

MOVA,DISH

 

MOVDPTR,#SETTAB

 

MOVCA,@A+DPTR

 

MOVSBUF,A

 

D4:

JNBTI,D4

 

CLRTI

 

MOVA,ADDJW

 

MOVDPTR,#SETTAB

 

MOVCA,@A+DPTR

 

MOVSBUF,A

 

D5:

JNBTI,D5

 

CLRTI

 

MOVSBUF,#00H

 

D6:

JNBTI,D6

 

CLRTI

 

RET

 

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

 

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

 

ADD1:

 

CLRC

 

MOVADDTOTAL,ADNUMBER

 

MOVA,ADNUMBER

 

ADDCA,ADDHOLD

 

MOVADDHOLD,A

 

JNCADDJW1

 

INCADDJW

 

31

 

ADDJW1:

ANLA,#0FH

 

MOVDISL,A加;值取低位

 

MOVA,ADDHOLD

 

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,

 

0FEH,0F6H

 

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

 

END

 

求六位和中的最大值和最小值(数码显示)

 

程序实例():

 

ORG0000H

 

MAIN:

 

ADNUMBEREQU30H;AD转换值

 

ADLEQU32H;//

 

32

 

ADHEQU33H;ADL转换高低位值

 

DISLEQU34H;//

 

DISHEQU35H显;示高低位值

 

ADDTOTALEQU36H第;一次AD转换值

 

ADDJWEQU37H加;法进位数

 

ADDHOLDEQU38H

 

ADDFLAGEQU39H加;标志

 

ENDFLAGEQU40H

 

ADH1EQU41H;AD中最大的值

 

ADL1EQU42H;AD中最小的值

 

ADHOLDHEQU43H

 

ADHOLDLEQU44H求;AD最大值与最小

 

值时AD的比较值,即以此两个值为比较中转

 

FOUREQU45H

 

SUBEQU46H减;去高低位后的值

 

JWHOLDEQU47H保;存进位值

 

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

 

MOVADDHOLD,#00H

 

MOVADL,#00H

 

MOVADH,#00H

 

MOVDISL,#00H

 

MOVDISH,#00H

 

MOVADDJW,#00H

 

MOVADDFLAG,#00H

 

MOVENDFLAG,#00H

 

MOVADDTOTAL,#00H

 

MOVADH1,#00H

 

MOVADL1,#00H

 

33

 

MOVADHOLDH,#00H

 

MOVFOUR,#00H

 

MOVADHOLDL,#00H

 

MOVJWHOLD,#00H

 

MOVSUB,#00H

 

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

 

MAIN1:

 

ACALLDELAY

 

ACALLDELAY

 

ACALLAD取;AD值

 

MAIN3:

ACALLCAIFEN

 

ACALLDISPLAY显;示

 

ACALLDELAY

 

ACALLDELAY

 

;算最大值和最小值//////////////////////////////////

 

ACALLADDH

 

ACALLADDL

 

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

 

;加和值显示///////////////////////////////////////

 

ACALLADD1

 

ACALLDISPLAY

 

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

 

;判是否加到了6次///////////////////////////////////

 

INCADDFLAG

 

MOVA,ADDFLAG

 

CJNEA,#06H,MAIN2

 

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

 

ACALLDELAY

 

34

 

ACALLDELAY

 

ACALLDELAY

 

ACALLDELAY

 

ACALLDELAY

 

ACALLDELAY

 

ACALLCAIFEN1拆;最小值

 

ACALLCAIFEN2拆;最大值

 

ACALLDISPLAY显;示最大值最小值

 

LOOP:

AJMPLOOP

 

;判有没有来新AD值,没有显示以前,有显示现在的///////

 

MAIN2:

 

ACALLDELAY

 

ACALLAD

 

MOVA,ADNUMBER

 

CJNEA,ADDTOTAL,MAIN3

 

AJMPMAIN2

 

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

 

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

 

AD:

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

 

MOVA,#03H;指向转换口

 

MOVX@DPTR,A转;换

 

MOVR1,#64H

 

D1:

DJNZR1,D1等;100微秒转换完

 

MOVXA,@DPTR转;换后的值给A

 

MOVADNUMBER,A转;换的值给30H

 

RET

 

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

 

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

 

35

 

CAIFEN:

 

MOVA,ADNUMBER

 

ANLA,#0FH

 

MOVADL,A取;低位

 

MOVA,ADNUMBER

 

ANLA,#0F0H

 

SWAPA

 

MOVADH,A;取高位

 

MOVDISL,ADL

 

MOVDISH,ADH给;显示值

 

RET

 

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

 

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

 

DISPLAY:

 

MOVA,DISL

 

MOVDPTR,#SETTAB

 

MOVCA,@A+DPTR

 

MOVSBUF,A

 

D3:

JNBTI,D3

 

CLRTI

 

MOVA,DISH

 

MOVDPTR,#SETTAB

 

MOVCA,@A+DPTR

 

MOVSBUF,A

 

D4:

JNBTI,D4

 

CLRTI

 

MOVA,ADDJW

 

MOVDPTR,#SETTAB

 

36

 

MOVCA,@A+DPTR

 

MOVSBUF,A

 

D5:

JNBTI,D5

 

CLRTI

 

MOVA,FOUR

 

MOVDPTR,#SETTAB

 

MOVCA,@A+DPTR

 

MOVSBUF,A

 

D6:

JNBTI,D6

 

CLRTI

 

RET

 

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

 

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

 

ADD1:

 

CLRC

 

MOVADDTOTAL,ADNUMBER

 

MOVA,ADNUMBER

 

ADDCA,ADDHOLD

 

MOVADDHOLD,A

 

JNCADDJW1

 

INCADDJW

 

ADDJW1:

ANLA,#0FH

 

MOVDISL,A加;值取低位

 

MOVA,ADDHOLD

 

ANLA,#0F0H

 

SWAPA

 

MOVDISH,A加;值取高位

 

RET

 

37

 

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

 

;AD值中的最大值////////////////////////////////////

 

ADDH:

 

MOVA,ADH1

 

CJNEA,#00H,ADDH1

 

MOVADH1,ADNUMBER

 

AJMPRE

 

ADDH1:

MOVA,ADNUMBER

 

CLRC

 

SUBBA,ADH1

 

JCRE

 

MOVADH1,ADNUMBER

 

RE:

RET

 

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

 

;AD值中的最小值////////////////////////////////////

 

ADDL:

 

MOVA,ADL1

 

CJNEA,#00H,ADDL1

 

MOVADL1,ADNUMBER

 

AJMPRE1

 

ADDL1:

MOVA,ADNUMBER

 

CLRC

 

SUBBA,ADL1

 

JNCRE1

 

MOVADL1,ADNUMBER

 

RE1:

RET

 

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

 

;分解AD最小值的个,十位////////////////////////////

 

38

 

CAIFEN1:

 

MOVA,ADL1

 

ANLA,#0FH

 

MOVADL,A取;低位

 

MOVA,ADL1

 

ANLA,#0F0H

 

SWAPA

 

MOVADH,A;取高位

 

MOVDISL,ADL

 

MOVDISH,ADH给;显示值

 

RET

 

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

 

;分解AD最大值的个,十位///////////////////////

 

CAIFEN2:

 

MOVA,ADH1

 

ANLA,#0FH

 

MOVADL,A取;低位

 

MOVA,ADH1

 

ANLA,#0F0H

 

SWAPA

 

MOVADH,A;取高位

 

MOVJWHOLD,ADDJW

 

MOVADDJW,ADL

 

MOVFOUR,ADH给;显示值

 

RET

 

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

 

DELAY:

延;时

 

MOVR3,#0AH

 

39

 

DD1:

MOVR1,#0FFH

 

D2:

MOVR2,#0FFH

 

DJNZR2,$

 

DJNZR1,D2

 

DJNZR3,DD1

 

RET

 

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

 

SETTAB:

 

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

 

0FEH,0F6H

 

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

 

END

 

求减去最大和最小值后的值(数码显示)

 

程序实例()

 

ORG0000H

 

MAIN:

 

ADNUMBEREQU30H;AD转换值

 

ADLEQU32H;//

 

ADHEQU33H;ADL转换高低位值

 

DISLEQU34H;//

 

DISHEQU35H显;示高低位值

 

ADDTOTALEQU36H第;一次AD转换值

 

ADDJWEQU37H加;法进位数

 

ADDHOLDEQU38H

 

ADDFLAGEQU39H加;标志

 

ENDFLAGEQU40H

 

ADH1EQU41H;AD中最大的值

 

40

 

ADL1EQU42H;AD中最小的值

 

ADHOLDHEQU43H

 

ADHOLDLEQU44H求;AD最大值与最小

 

值时AD的比较值,即以此两个值为比较中转

 

FOUREQU45H

 

SUBEQU46H减;去高低位后的值

 

JWHOLDEQU47H保;存进位值

 

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

 

MOVADDHOLD,#00H

 

MOVADL,#00H

 

MOVADH,#00H

 

MOVDISL,#00H

 

MOVDISH,#00H

 

MOVADDJW,#00H

 

MOVADDFLAG,#00H

 

MOVENDFLAG,#00H

 

MOVADDTOTAL,#00H

 

MOVADH1,#00H

 

MOVADL1,#00H

 

MOVADHOLDH,#00H

 

MOVFOUR,#00H

 

MOVADHOLDL,#00H

 

MOVJWHOLD,#00H

 

MOVSUB,#00H

 

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

 

MAIN1:

 

ACALLDELAY

 

ACALLDELAY

 

41

 

ACALLAD取;AD值

 

MAIN3:

ACALLCAIFEN

 

ACALLDISPLAY显;示

 

ACALLDELAY

 

ACALLDELAY

 

;算最大值和最小值//////////////////////////////////

 

ACALLADDH

 

ACALLADDL

 

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

 

;加和值显示///////////////////////////////////////

 

ACALLADD1

 

ACALLDISPLAY

 

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

 

;判是否加到了6次//////////////////////////////////

 

INCADDFLAG

 

MOVA,ADDFLAG

 

CJNEA,#

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

当前位置:首页 > 高等教育 > 历史学

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

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