单片机原理及应用教案第4章Word文档下载推荐.docx
- 文档编号:17620297
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:20
- 大小:89.04KB
单片机原理及应用教案第4章Word文档下载推荐.docx
《单片机原理及应用教案第4章Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《单片机原理及应用教案第4章Word文档下载推荐.docx(20页珍藏版)》请在冰豆网上搜索。
13条(直接寻址、寄存器间接寻址)(B)=#10H
MOV@R1,P1;
14条(寄存器间接寻址,直接寻址)(40H)=#11001010B
MOVP2,P1;
15条(直接寻址、直接寻址)(P2)=#11001010B
MOV10H,#20H;
10条(直接寻址、立即寻址)(10H)=#20H
指令执行以后,P1口的内容均为11001010B,其它内容如上。
立即数
#data
寄存器
R7──R0
DPTR
直接数据
Data
C
寄存器间接
@SP
累加器
A
@R1,@R0
图2-1数据传送途径
例2:
设一系统配有2KB的外部RAM,设计一段程序把250单元的内容传送到650H单元。
MOVDPTR,#0650H;
设置地址指针
MOVR0,#0FAH;
MOVXA,@R0;
取出250单元的数
MOVX@DPTR,A;
送到650H单元
改进:
MOVP2,#00H;
锁存,使高8位地址线为0
送到650H单元P2口瞬间为06H,后又回到00H
(对于原来程序和改进程序,后面增4条语句,程序执行结果如何,说明什么?
实验解答.
INCR0;
INCDPTR;
MOVXA,@R0;
MOVX@DPTR,A)
例3:
累加器的内容是一个BCD数,用查表法获得相应的ASCII码。
其子程序为:
(设程序在ROM中存放的地址如下,当(A)=05H时,程序执行过程为:
注释)
1009HBCD_ASC1:
INCA;
累加器加;
(A)=06H
100AHMOVCA,@A+PC;
(PC)=100AH,(PC)+1=100BH
100BHRET(A)+(PC)=06H+100BH=1011H
100CHTAB:
DB30H(A)=35H,(A)《=ROM(1011H)
100DHDB31H
100EHDB32H
100FHDB33H
1010HDB34H
1011HDB35H
1012HDB36H
1013HDB37H
1014HDB38H
1015HDB39H
INCA指令是为了‘绕过’RET指令使基变址相加的地址能正确的指向表格TAB中的相应字节。
当TAB与MOVC指令之间有更多的指令时,就应用相应的指令代码字节数修正变址寄存器A。
一般,采用PC作基址寄存器时,常数表与MOVC指令放在一起,称为近程查表。
当采用DPTR作基址寄存器室,程序如例4所示,TAB可以放64KB程序存贮器空间的任何地址上,称为远程查表,不用考虑查表指令与表格之间的距离。
例4:
BCD_ASC2:
MOVDPTR,#TAB;
TAB首址送DPTR
MOVCA,@A+DPTR;
查表
RET
(可以有很多语句,BCD_ASC2与TAB的位置无关紧要)
TAB:
同例3
例5:
若栈顶为压入的PSW,用POP指令修改PSW,使F0、RS1、RS0均为1。
MOVR0,SP;
取栈针(R0)=#60H
ORL@R0,#38H;
修改栈顶(60H)<
=PSW.or.00111000B
POPPSW;
修改PSWPSW<
=修改后的PSW
5FHXX且(SP)=#5FH
设程序执行时(SP)=#60HPSW
61HXX
堆栈区
例6:
进入中断服务子程序时,把数据指针DPTR、程序状态字PSW和累加器A保护进栈,当前SP为38H。
;
(SP)=38HXX
PUSHDPL;
39H(DPL)
PUSHDPH;
3AH(DPH)
PUSHPSW;
3BH(PSW)
PUSHACC;
(SP)=3CH(A)
执行4条指令之后,SP将修改为3CH。
MCS-51提供了一个向上升的堆栈,所以SP的初值的存贮空间中留出适当的单元。
数据传送指令是程序设计中用得最多的一类指令,读者应熟记8种助积符的功能以及能采用的操作数寻址方法。
数据传送类指令说明:
1)如果direct是P0----P3之一,红字指令是读端口引脚或写端口指令;
粉字指令是“读--修改写”类指令
(读端口对应的锁存器的8位,修改8位,把8位数据写到端口锁存器)
(对于后面要介绍的布尔处理指令说:
读端口对应的锁存器的8位,修改1位,把8位数据写到端口锁存器)
2)如何访问-52子系列中内部的一般数据存储器中的高128个单元?
回答:
只能用寄存器间接寻址的办法来访问-52子系列中一般数据存储器的高128个单元。
举例:
要访问-52子系列中一般数据存储器的第80H单元(地址是80H的单元),要用以下形式的语句:
写数据:
MOVR0,#80H
MOV@R0,A(#data,direct);
把数据=》RAM80H单元
读数据:
MOVA,@R1;
把RAM80H单元的数据取出来
(或MOVdirect,@R1);
比较:
MOV80H,A;
把A中的内容送到P0口
(=MOVP0,A)
和
MOVA,80H;
把P0口的内容送到A
(=MOVA,P0)
标明:
访问-52子系列中一般数据存储器的高128个单元,只能用寄存器间接寻址
访问专用寄存器,只能用直接寻址
3)访问51单片机内部的一般数据存储器的低128个字节:
两种方法:
直接寻址如MOV20H,#56H
MOVA,127
寄存器间接寻址如MOVR0,#20H
MOV@R0,#56H
或MOVR0,#127
MOVA,@R0
2算术操作类指令
1)算术操作类指令共有24条,包括加减乘除4种基本的算术操作。
2)作用:
*对8位的无符号数进行直接运算;
*借助溢出标志,可对带符号数进行2的补码运算;
*借助进位标志,可以实现多精度的加、减和环移;
*借助十进制调整,可对压缩的BCD数进行运算。
*多字节、多精度数的运算
3)标志位:
算术操作类指令执行的结果将使进位(CY)、辅助进位(AC)、溢出(OV)
3种标志置位或复位。
但是加1和减1指令不影响这些标志。
(看P73)表2-2的前6条是算术操作类指令对标志位的影响;
后面的指令是其它类型的指令,这些指令对标志位也有影响。
4)算术操作类指令用到的助记符:
ADD、ADDC、INC、DA、SUBB、DEC、MUL和DIV8种。
例7:
累加器的内容为0B3H,寄存器R1的内容为56H,试分析说明执行指令
ADDA,R1后的A、R1及有关标志的内容和结果的大小。
0B3H11010011
+56H01010110
(1)09H00001001
指令执行后,累加器为09H,C置位,AC、OV复位。
R1仍为56H。
结果的意义?
1)若操作数定义为无符号数,相加结果为09H,是错误的,但把进位标志计算再内,和数为109H(265),结果是正确的;
2)若操作数定义为带符号数,根据2的补码原理,0B3H为-77,56H为+86,和数应为+9,现在OV为零,说明未溢出,则累加器中的内容就是结果。
例8:
累加器内容为0C3H,数据指针低位DPL的内容为0ABH,进位标志已置位。
分析执行ADDCA,DPL后A及各标志位的结果。
(A)0C3H11000011
(DPL)0ABH10101011
+(C)11
(1)6FH
(1)01101111
原来的C
新的C
指令执行时,累加器修改为6FH,C和OV置位,AC复位。
这个结果意义,要根据操作数是无符号数还是有符号数来确定。
1)对于无符号数,因产生进位,和数溢出,结果错误;
但把C也考虑在和数之内,得16FH(367)√;
2)对于带符号数,两个负数相加,结果得正,OV置位,溢出,结果错误;
但把符号位也考虑在和数之内,得6FH,求它的补码得-145)√;
。
(0C3H+0ABH+1=—3DH—55H+1=—61—85+1=—145)
例9设R0的内容为7EH,内部RAM7EH及7FH单元的内容分别为0FFH及38H,DPTR的内容为10FEH,下列指令执行后,分析各单元的内容应是什么。
INC@R0;
使7EH单元由FFH变为00H
使R0的内容由7EH变为7FH
INC@R0;
使7FH单元由38H变为39H
INCDPTR;
使DPL为0FFH,DPH不变
使DPL为00H,DPH为11H
使DPL为01H,DPH
不变
例10对累加器中压缩的BCD数减1
ADDA,#99H
DAA
(A)36HCFHD5H
+99H+06H+60H
CFHD5135H
例11:
4位压缩的BCD数的相加程序。
设一个加数存放在30H、31H单元,另一个加数存放在32H、33H单元。
和数放到30H、31H单元。
(31H)
(30H)
(33H)
(32H)
+
(CY)
设置地址指针指向个位十位数
MOVR1,#32H
MOVA,@R0
MOVA,@R1;
个位十位数相加
DAA
MOV@R0,A
INCR0
INCR1;
指向百位千位数
ADDCA,@R1;
百位千位数相加
百位千位数相加时用ADDC指令,是考虑到当个位十位数相加的结果超过99时,将产生进位,在对百位千位数相加时应把它加进去。
例12当累加器中有0C9H,R0中有54H,C已置位时,执行SUBBA,R0后,各部分的状态。
指令执行后,A中的差值74H,C和AC复位,OV置位。
如果这是一次无符号数的减法操作,则A的内容就是差值;
如果是一次带符号数的运算,那么OV置位说明差值溢出。
此例属于负数减正数差为正数的情况。
例13:
把累加器中的二进制数转换为3位BCD数的子程序。
百位数放在HUND,十位、个位数放在TENONE中。
HUND和TENONE为内部RAM的两个单元。
设(A)=0C6H=198HUNDTENONE
98
01
千百十个
BINtoBCD转换原理:
198/100的商是1,余数98;
98/10的商是9,余数8,合并9和8。
BINBCD:
MOVB,#100
DIVAB;
得到百位数,(A)=#01,(B)=#98
MOVHUND,A
MOVA,#10;
(A)=#10
XCHA,B;
(A)=#98
得到十位和个位数,(A)=#9,(B)=#8
SWAPA;
(A)=#90H
ADDA,B;
组成压缩的BCD数,(A)=#98H
MOVTENONE,A
RET
本例利用DIV指令实现二进制数到BCD数的转换,程序简练。
先对要转换的二进制数除以100,商数即百位数,余数部分再除以10,商数余数分别为十位和个位数。
它们在A和B的低4位,最后通过SWAP和ADD指令把它们组成一个压缩的BCD数,使十位数放在A的高4位,个位数放在A的低4位。
当dircet是P0----P3之一时,红字对应的指令是读端口引脚指令。
当dircet是P0----P3之一时,粉字对应的指令是“读—修改—写”类指令。
说明:
在算术操作指令,如何访问-52子系列中内部的一般数据存储器中的高128个单元?
与数据传送类指令的操作类似,只能用寄存器间接寻址的办法来访问-52子系列中一般数据存储器的高128个单元。
另外,访问51单片机内部的一般数据存储器的低128个字节,可用直接寻址和寄存器间接寻址两种方法。
访问51单片机内部的部分专用寄存器,只能用直接寻址。
在其它类型的指令中,访问—52子系列的高128字节的方法与这里的类似,不在赘述。
3.逻辑操作类指令
逻辑操作类指令共有24条,包括与、或、异或、清除、求反、左右移位等逻辑操作。
本节中的指令操作数都是8位,大量的位逻辑指令将放到布尔变量操作类指令中介绍。
逻辑操作类指令用到的助记符有ANL、ORL、XRL、RL、RLC、RR、RRC、CLR和CPL。
逻辑操作类指令都是按位进行操作。
例14:
根据累加器中位4~0的状态用逻辑与、或指令控制P1口位4~0的状态。
ANLA,#00011111B;
屏蔽
ANLP1,#11100000B;
清P1口的低5位
ORLP1,A;
按
设置P1.4~P1.0
分析这段程序读者可能发现需要置位的口线上先输出0状态。
这样就将发生为时1个机器周期的短暂的“闪烁”。
例如,设(A)=#XXX10101B,(P1)=#01001001B,程序执行后,(P1)=#01010101B。
对于P1.0,原来是1,中间为0,结果为1,中间的“0”就是“闪烁”。
语第二条指令结束第三条指令结束
P1.0波形
Tcy=?
(ORLP1,A的执行时间)
如果在应用上不允许这样的闪烁,则应把程序改为:
使
置位
ORLA,#11100000B;
ANLP1,A;
复位
程序先使该置位的口线置位,然后再按累加器低5位中状态为0的位复位响应口线,这样就避免了置位口线上的“闪烁“现象。
4.控制程序转移类指令
1)控制程序转移类指令共有17条,不包括按布尔变量控制程序转移的指令。
2)包括:
全存贮空间的长调用、长转移
按2KB分块的程序空间内的绝对调用和绝对转移;
全空间的长相对转移及一页范围(256字节)的短相对转移;
条件转移指令
3)指令用到的助记符有ACALL、AJMP、LCALL、LJMP、SJMP、JMP、JZ、JNZ、CJNE、DJNZ。
例子15地址代码标号助记符
0060H80HERE:
SJMPHERE
0061HFE
SJMP$=HERE:
SJMPHERE
例17当P1口输入为43H时,程序进行下去,否则进入等待直至P1口出现43H。
MOVA,#43H
WAIT:
CJNZA,P1,WAIT
┆┆
例18:
从P1.7输出个方波。
MOVR2,#10;
预置方波数
PULSE:
CPLP1.7;
1个机器周期
DJNZR2,PULSE;
2个机器周期
方波的宽度为3个机器周期,通过CPL指令切换方向,若P1.7初始为低电平,图2-2表示进入这段程序后P1.7的输出波形。
3个机器周期
5.布尔变量操作类指令
MCS-51硬件结构中有一个布尔处理器:
由以下几部分组成
1)布尔累加器C或CY(进位标志):
相当于累加器A,可完成位的传送和逻辑运算;
2)按位寻址的专用寄存器:
按字节寻址的专用寄存器中的可寻址位,实现控制等功能,专用寄存器中的B、ACC、PSW、IP、P3、IE、P2、SCON、P1、TCON和P0共11个寄存器可按位寻址;
3)按位寻址的一般存储器:
位地址为00H——7FH(对应的字节地址是20H——2FH),用做软件标志或存放布尔变量等;
4)I/O口:
P0.0——P0.7、P1.0——P1.7、P2.0——P2.7、P3.0——P3.7共32根口线;
5)处理布尔变量的指令子集:
包括布尔变量的传送、逻辑运算、控制程序转移等指令,子集共有17条指令,助记符有MOV、CLR、CPL、SETB、ANL、ORL、JC、JNC、JB、JNB和JBC共11种
布尔处理器中的指令格式可以归纳为4种形式,如图2-3所示。
图中位地址可以是布尔处理机中的一般存储器和专用寄存器中的可寻址位。
图2-3布尔变量指令子集的格式
指令中位地址的表达有多种方式:
1)直接地址方式,如0D5H,213,11010101B;
2)点操作符方式,如PSW.5;
3)位名称方式,如F0;
4)用户定义名方式,如用伪指令BIT
USR_FLGBITF0;
BIT是一种伪指令
经定义后,允许指令中用USR_FLG用代替F0。
以上4种方式都是指PSW中的位5,它的地址是0D5H,而名称为F0,用户定名为SUSR_FLG。
下面6条语句的机器码是一致的(即在功能、作用等方面是完全相同的):
CLR0D5H
CLR213(D,d)
CLR11010101B
CLRPSW.5
CLRF0
CLRUSR_FLG
例19把P1.3的状态传送到P1.6
MOVC,P1.3
MOVP1.6,C;
读口(8位),修改位6,然后把
;
8位写到的锁存器。
例20比较内部RAMNUMB_1,NUMB_2中的两个无符号数的大小,大数存入单元M,小数存入单元N,若两数相等使内部RAM的127位置1。
MOVA,NUMB_1
CJNEA,NUMB_2,BIG;
两数比较
SETB127;
两数相等
BIG:
JCLESS;
若C置位则NUMB_1小
MOVM,A;
NUMB_1较大
MOVN,NUMB_2
LESS:
MOVN,A;
NUMB_1较小
MOVM,NUMB_2
二、教学方式
在课堂讲授教学内容后,留10分钟,学生作报告。
课堂讲授为主,结合电子CAI课件和教学网站,提供教学效果。
三、作业
13.总结PSW中Cy、OV位的作用。
14.讨论哪些指令影响Cy、OV位。
15.讨论哪些指令依靠Cy位来操作(转移)。
16.什么情况下用Cy来判断运算结果。
17.什么情况下用OV来判断运算结果。
18.MCS-51型单片机有几种寻址方式?
各有什么特点?
19.指出下列指令中各操作数的寻址方式。
(1)MOVA,40H
(2)MOVA,#50H(3)MOVA,@R0
(4)MOVA,R0(5)MOVCA,@A+DPTR(6)SJMP8FH
20.要访问片内RAM的00H单元有几种寻址方式?
举例说明。
21.写出下列指令的机器码,并指出指令中的50H和60H各代表什么?
(1)MOVA,#50H
(2)MOV@R0,60H
MOVA,50HMOVR0,#60H
MOV50H,#20HMOV60H,#45H
MOVC,50HMOV60H,C
MOV50H,20HMOV60H,R0
22.写出下列指令的机器码,指出下列程序执行后的结果:
(1)MOVA,#60H
(2)MOVDPTR,#2000H
MOVR0,#40HMOVA,#18H
MOV@R0,AMOV20H,38H
MOV41H,R0MOVR0,#230H
XCHA,R0XCHA,@R0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 原理 应用 教案