51单片机总汇编语言.docx

上传人:b****2 文档编号:3397127 上传时间:2023-05-05 格式:DOCX 页数:11 大小:231.65KB
下载 相关 举报
51单片机总汇编语言.docx_第1页
第1页 / 共11页
51单片机总汇编语言.docx_第2页
第2页 / 共11页
51单片机总汇编语言.docx_第3页
第3页 / 共11页
51单片机总汇编语言.docx_第4页
第4页 / 共11页
51单片机总汇编语言.docx_第5页
第5页 / 共11页
51单片机总汇编语言.docx_第6页
第6页 / 共11页
51单片机总汇编语言.docx_第7页
第7页 / 共11页
51单片机总汇编语言.docx_第8页
第8页 / 共11页
51单片机总汇编语言.docx_第9页
第9页 / 共11页
51单片机总汇编语言.docx_第10页
第10页 / 共11页
51单片机总汇编语言.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

51单片机总汇编语言.docx

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

51单片机总汇编语言.docx

51单片机总汇编语言

51单片机汇编语言

a)单个与多个LED灯,位操作与字节操作—输出

ORG0000H

START:

CLRC

MOVP0.0,C

MOVP1.1,C

MOVP2.2,C

MOVP3.3,C

CLRA

CPLA

MOVP0,A

MOVP1,A

MOVP2,A

MOVP3,A

END

程序说明:

可以用7段数码管来代替各端口的8个LED灯,硬件的这种显示方式使得数字表达成为实用。

数字显示由数码管的硬件结构与工作原理(7个LED灯的几何变形组合)和数字表达的数据格式确定。

如:

共阳极数码管显示数字3,则有P1口送数据#4FH;

MOVP1,#0B0H

共阴极数码管显示数字8,则有P1口送数据#80H;

MOVP1,#7FH

用数据表表示则有:

TABshuziyang:

//阳极管(共阴极管取反即可)

DB(数字0~F)

C0H,F9H,A4H,B0H,99H,92H,82H,F8H,80H,90H,88H,83H,C6H,A1H,86H,8EH

TABshuziyin:

//阴极管(共阳极管取反即可)

DB(数字0~F)

3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H

b)单个与多个LED灯闪烁—延时子程序—注意定时器

前边已经看到,通过改变位或字节的赋值,可以使得LED灯亮或灭,以此形成闪烁效果。

但是硬件的响应时间太短,使得效果不佳。

虽然可以通过改变单片机的时钟设置来改变效果。

但时钟的改变极其不方便,因此需要利用延时指令(注意定时器功能)获得理想的效果。

延时效果是利用单片机空转来实现的。

ACALLDELAY;调延时子程序

*************************************************************************

DELAY:

;延时子程序—这是一个非常有用、而且常见的一个子程序

MOVR5,#04H;将16进制数04H传递给寄存器R5

F3:

MOVR6,#0FFH;将16进制数0FFH传递给寄存器R6

F2:

MOVR7,#0FFH;将16进制数0FFH传递给寄存器R7

F1:

DJNZR7,F1;寄存器R7减1非0跳转到F1,直到减为0顺序执行下一指令

DJNZR6,F2;寄存器R6减1非0跳转到F2,直到减为0顺序执行下一指令

DJNZR5,F3;寄存器R5减1非0跳转到F3,直到减为0顺序执行下一指令

RET;子程序结束,返回子程序入口处ACALLDELAY;调延时子程序

***************************************************************************

应用实例

MAIN:

CLRC

MOVP0.0,C

MOVP1.1,C

MOVP2.2,CMOVP3.3,C

ACALLDELAY;调延时子程序

;CLRA

CPLA

MOVP0,A

MOVP1,A

MOVP2,A

MOVP3,A

ACALLDELAY;调延时子程序

SJMPMAIN;相对转移时间短,用AJMP绝对转移时间长,RET是用于子程序的返回

DELAY:

;延时子程序-这是一个非常有用、而且常见的一个子程序

MOVR5,#04H;将16进制数04H传递给寄存器R5

F3:

MOVR6,#0FFH;将16进制数0FFH传递给寄存器R6

F2:

MOVR7,#0FFH;将16进制数0FFH传递给寄存器R7

F1:

DJNZR7,F1;寄存器R7减1非0跳转到F1,直到减为0顺序执行下一指令

DJNZR6,F2;寄存器R6减1非0跳转到F2,直到减为0顺序执行下一指令

DJNZR5,F3;寄存器R5减1非0跳转到F3,直到减为0顺序执行下一指令

RET;子程序结束,返回子程序入口处ACALLDELAY;调延时子程序

END

程序说明:

注意延时子程序中的DJNZR7,F1;DJNZR6,F2;DJNZR5,F3;通过增加或减少循环数目控制或改变延时时间

c)单个与多个LED灯流动—位循环、字节循环与延时子程序

ORG0000H

MAIN:

;****************位循环—扫描—流水灯—逐级增加灯的数目*******************

CLRC

MOVP0.0,C

ACALLDELAY;调延时子程序

MOVP0.1,CACALLDELAYMOVP0.2,C

ACALLDELAYMOVP0.3,C

ACALLDELAY

MOVP0.4,C

ACALLDELAY

MOVP0.5,C

ACALLDELAY

MOVP0.6,C

ACALLDELAYMOVP0.7,C

ACALLDELAY;注意前面各位状态一直持续。

P0口各位电平保持不变

;****************位循环—流水灯—逐个改变灯亮与灭*******************

CLRC

MOVP0.0,C

ACALLDELAY;调延时子程序

CPLC

MOVP0.0,CACALLDELAY

CLRC

MOVP0.1,CACALLDELAY

CPLC

MOVP0.1,C

ACALLDELAY

CLRC

MOVP0.2,C

ACALLDELAY

CPLC

MOVP0.2,C

ACALLDELAY

CLRC

MOVP0.3,C

ACALLDELAY

CPLC

MOVP0.3,C

ACALLDELAY

CLRC

MOVP0.4,C

ACALLDELAY

CPLCMOVP0.4,CACALLDELAY

CLRCMOVP0.5,C

ACALLDELAY

CPLCMOVP0.5,CACALLDELAY;注意前面各位状态—电平、输出状态变化

……、……

;*******************字节循环—逐级增加输出口的数目********************

CPLAMOVP0,AACALLDELAYMOVP1,AACALLDELAY

MOVP2,AACALLDELAYMOVP3,AACALLDELAY

;*******************字节循环—流水灯—逐渐改变灯的亮灭状态*************

MOVP2,#01H;注意:

#01H#02H#04H#08H#80H#40H#20H#10H阳极管

ACALLDELAY

MOVP2,#02H;注意:

#FEH#FDH#FBH#F7H#7FH#BFH#DFH#EFH阴极管

ACALLDELAYMOVP2,#04HACALLDELAYMOVP2,#08H

ACALLDELAY

MOVP2,#10HACALLDELAYMOVP2,#20H

ACALLDELAYMOVP2,#40HACALLDELAYMOVP2,#80H

ACALLDELAY

;****************字节循环—数码管—字符(数字、字母等)**************

MOVP1,#40H;改变字节中各位的电平状态,以便控制输出、显示所要求的容

ACALLDELAYMOVP1,#79HACALLDELAYMOVP1,#24H

ACALLDELAYMOVP1,#30HACALLDELAYMOVP1,#19H

ACALLDELAYMOVP1,#12HACALLDELAYMOVP1,#02H

ACALLDELAYMOVP1,#78HACALLDELAY

SJMPMAIN;相对转移时间短,用AJMP绝对转移时间长,RET是用于子程序的返回

;*******************延时子程序***************************

DELAY:

;延时子程序—去除一个循环,时间变短了。

MOVR6,#04H;将16进制数04H传递给工作寄存器R6。

改变#04H为#3FH时间变长

F2:

MOVR7,#0FFH;将16进制数0FFH传递给工作寄存器R7

F1:

DJNZR7,F1;寄存器R7减1非0跳转到F1,直到减为0顺序执行下一指令

DJNZR6,F2;寄存器R6减1非0跳转到F2,直到减为0顺序执行下一指令

RET

;子程序结束,返回子程序入口处ACALLDELAY;调延时子程序

END

;********字节循环—数码管—字符(数字、字母等)—数表与指针***********

MAIN:

CLRA

MOVP3,#00H

MOVP0,#00H

MOVP2,#00H

MOVR0,#00H;寄存器中放数值0

MOVDPTR,#TABZshuzi;指针PC指向数表

DISP:

;段标记

MOVA,R0;将寄存器中的数值转移到累加器中

MOVCA,A+DPTR;以DPTR作为基础,与累加器相加得到新地址给累加器

MOVP3,A;将累加器的地址给P3口

MOVP0,A

SETBp2.3;一位数显示位控制;个位

SETBp2.7

ACALLDELAY;调延时子程序

ACALLDELAY

INCR0;寄存器R0加1

CJNER0,#16H,DISP;寄存器与立即数18比较,不相等则转移到DISP循环。

相等则顺序执行

TABshuziyang:

//阳极管

DBC0H,F9H,A4H,B0H,99H,92H,82H,F8H,80H,90H,88H,83H,C6H,A1H,86H,8EH,0FFH

TABshuziyin:

//阴极管

DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H,0FFH

END

;*************字节循环—数码管—字符(数字、字母等)—移位控制***********

RLA将累加器的值左移一位

RLCA将累加器含进位C左移一位

RRA将累加器的值右移一位

RRCA将累加器含进位C右移一位

1.单个按键,单个与多个LED灯—最小系统—位输入与位、字节输出—判断与子程序

a)单个按键与单个LED灯(位操作—输入与输出)—判断与子程序

b)单个按键与多个LED灯(位操作—输入与字节操作—输出)

c)单个按键与多个LED灯(位操作—输入与位、字节操作—输出)

d)单个按键与单个电机控制—开环控制

1.单个按键,单个与多个LED(位操作—输入与位、字节操作—输出)—最小系统

a)单个按键,单个LED灯(位操作与位输入、输出)—有、无判断而传送数据

通过三个方面(程序指令、虚拟仿真、实体电路)探讨单输入与单输出:

主要是理解位数据传送,包括汇编语言的数据传送指令实践、实际虚拟电路的数据传送响应,以体现抽象与具体的可理解性。

?

?

单输出的电子线路—静态特性—动态特性,指令控制输出

?

?

单输入与单的电子线路—静态特性(线路组成与结构)

?

?

单输入与单输出电子线路的控制指令—动态特性(行为与状态)

;分号,这是一种注释方式符号

ORG0000H;这是伪指令,机器并不执行,用于程序的交流。

指令执行的起始地址,十进制用D表示,十六进制用H表示,二进制用B表示。

一个字节(8位机、16位机、32位机、64位机)一次执行。

也可以按位来执行,也就是一个bit。

ORG00000000B与ORG0000H作用相同。

注意8位(bit)一个字节。

16位的处理器需要用00000000H表示。

16或32位以上,使用操作系统(Wince、Linux等)更有效,可以利用大量的、底层的、专业化、标准化的面向控制的库函数(如:

API等)。

START:

;这是伪指令,机器并不执行。

只是为了汇编语言讲故事的可理解性

 MAIN:

;伪指令,主程序,用于区别子程序

 PC→MOVA,#00H;将立即数00000000B(常数0D)传送给累加器ACC(专用寄存器,可用于存放计算结果等)。

要通过累加器A和其它存储地址进行数据交换。

注意PC是自动移位(自动+1)到下一个语句的地址。

使用该语句实质上是让PC具有初始位置。

PC→MOVP1,A;将累加器中的数(常数0D)传送给端口P1(P1口8位全部置0,低电平,P1端口各位处于关闭状态,LED灯处于系统响应的准备状态),按字节传送数据。

特别记忆:

PC→表示指针所指地址,并会自动加1。

输出口—字节

PC→MOVC,0A0H;检测P2.0口的状态,将P2.0口的状态(由按键状态决定)传送给位累加器C,位累加器C的地址是PSW(程序状态字寄存器)的进位标志位CY(D7H\PSW.7)。

P2.0口可以是开或关,也就是置1或0,高电平或低电平),按字节传送数据。

要通过位累加器C和其它存储地址进行数据交换。

该语句也可以写成:

MOVC,P2.0,比较字节数据传送MOVA,#00H或MOVA,P1。

输入口—位

PC→MOVP1.0,C;等价于MOV90H,C;将位累加器C地址中的值传送给P1.0口(90H是其直接地址),也就是将P2.0口的状态(由直接地址0A0H状态决定)传送给直接地址90H,P1.0口,输出口—位

PC→MOVP1.1,C;等价于MOV91H,C

PC→MOVP1.2,C;等价于MOV92H,C

PC→MOVP1.3,C;等价于MOV93H,C等等

END;伪指令,程序结束标志

程序说明:

单个按键控制单个LED灯及其状态,也可以控制若干个LED灯及其状态。

也就是多个LED灯,单个按键。

反过来,可以是多个按键控制单个灯或多个按键控制多个LED灯。

通过简单硬件连接和汇编语言的位指令运用,理解单片机作为数字电路的特点,门电路的特点,开关电路的特点,高与低电平时的电子线路处于开或关的状态,或叫关闭与导通。

图1-单个LED灯-单个按键的实现。

用P2.0口的状态来控制其它Px.i口的状态,从而实现灯的开与关。

其中:

左图为Proteus软件的界面,右图为Keil软件的界面。

图2-单个LED灯与数码管-单个按键的实现。

用P2.0口的位状态来控制其它P1口的字节状态,从而用字节数据传输实现数码管的开与关。

详细的说明,后续再谈。

其中:

图2的左图为Proteus软件的界面,右图为Keil软件的界面。

图3为汇编指令集—汇编程序。

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

当前位置:首页 > 表格模板 > 合同协议

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

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