51单片机总汇编语言Word下载.docx
- 文档编号:5922930
- 上传时间:2023-05-05
- 格式:DOCX
- 页数:11
- 大小:231.65KB
51单片机总汇编语言Word下载.docx
《51单片机总汇编语言Word下载.docx》由会员分享,可在线阅读,更多相关《51单片机总汇编语言Word下载.docx(11页珍藏版)》请在冰点文库上搜索。
TABshuziyang:
//阳极管(共阴极管取反即可)
DB(数字0~F)
C0H,F9H,A4H,B0H,99H,92H,82H,F8H,80H,90H,88H,83H,C6H,A1H,86H,8EH
TABshuziyin:
//阴极管(共阳极管取反即可)
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:
MOVP0.0,C
MOVP1.1,C
MOVP2.2,CMOVP3.3,C
ACALLDELAY;
SJMPMAIN;
相对转移时间短,用AJMP绝对转移时间长,RET是用于子程序的返回
延时子程序-这是一个非常有用、而且常见的一个子程序
MOVR5,#04H;
MOVR6,#0FFH;
MOVR7,#0FFH;
DJNZR7,F1;
DJNZR6,F2;
DJNZR5,F3;
注意延时子程序中的DJNZR7,F1;
通过增加或减少循环数目控制或改变延时时间
c)单个与多个LED灯流动&
位循环、字节循环与延时子程序
;
****************位循环&
扫描&
流水灯&
逐级增加灯的数目*******************
ACALLDELAY;
调延时子程序
MOVP0.1,CACALLDELAYMOVP0.2,C
ACALLDELAYMOVP0.3,C
ACALLDELAY
MOVP0.4,C
ACALLDELAY
MOVP0.5,C
MOVP0.6,C
ACALLDELAYMOVP0.7,C
ACALLDELAY;
注意前面各位状态一直持续。
P0口各位电平保持不变
逐个改变灯亮与灭*******************
CPLC
MOVP0.0,CACALLDELAY
MOVP0.1,CACALLDELAY
MOVP0.1,C
MOVP0.2,C
MOVP0.3,C
CPLCMOVP0.4,CACALLDELAY
CLRCMOVP0.5,C
CPLCMOVP0.5,CACALLDELAY;
注意前面各位状态&
电平、输出状态变化
&
hellip;
、&
*******************字节循环&
逐级增加输出口的数目********************
CPLAMOVP0,AACALLDELAYMOVP1,AACALLDELAY
MOVP2,AACALLDELAYMOVP3,AACALLDELAY
逐渐改变灯的亮灭状态*************
MOVP2,#01H;
注意:
#01H#02H#04H#08H#80H#40H#20H#10H阳极管
MOVP2,#02H;
#FEH#FDH#FBH#F7H#7FH#BFH#DFH#EFH阴极管
ACALLDELAYMOVP2,#04HACALLDELAYMOVP2,#08H
MOVP2,#10HACALLDELAYMOVP2,#20H
ACALLDELAYMOVP2,#40HACALLDELAYMOVP2,#80H
****************字节循环&
数码管&
字符(数字、字母等)**************
MOVP1,#40H;
改变字节中各位的电平状态,以便控制输出、显示所要求的容
ACALLDELAYMOVP1,#79HACALLDELAYMOVP1,#24H
ACALLDELAYMOVP1,#30HACALLDELAYMOVP1,#19H
ACALLDELAYMOVP1,#12HACALLDELAYMOVP1,#02H
ACALLDELAYMOVP1,#78HACALLDELAY
*******************延时子程序***************************
去除一个循环,时间变短了。
MOVR6,#04H;
将16进制数04H传递给工作寄存器R6。
改变#04H为#3FH时间变长
将16进制数0FFH传递给工作寄存器R7
RET
;
********字节循环&
字符(数字、字母等)&
数表与指针***********
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循环。
相等则顺序执行
//阳极管
DBC0H,F9H,A4H,B0H,99H,92H,82H,F8H,80H,90H,88H,83H,C6H,A1H,86H,8EH,0FFH
//阴极管
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H,0FFH
*************字节循环&
移位控制***********
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等)。
这是伪指令,机器并不执行。
只是为了汇编语言讲故事的可理解性
MAIN:
;
伪指令,主程序,用于区别子程序
PC&
rarr;
MOVA,#00H;
将立即数00000000B(常数0D)传送给累加器ACC(专用寄存器,可用于存放计算结果等)。
要通过累加器A和其它存储地址进行数据交换。
注意PC是自动移位(自动+1)到下一个语句的地址。
使用该语句实质上是让PC具有初始位置。
PC&
MOVP1,A;
将累加器中的数(常数0D)传送给端口P1(P1口8位全部置0,低电平,P1端口各位处于关闭状态,LED灯处于系统响应的准备状态),按字节传送数据。
特别记忆:
表示指针所指地址,并会自动加1。
输出口&
字节
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。
输入口&
位
MOVP1.0,C;
等价于MOV90H,C;
将位累加器C地址中的值传送给P1.0口(90H是其直接地址),也就是将P2.0口的状态(由直接地址0A0H状态决定)传送给直接地址90H,P1.0口,输出口&
MOVP1.1,C;
等价于MOV91H,C
MOVP1.2,C;
等价于MOV92H,C
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为汇编指令集&
汇编程序。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51 单片机 汇编语言