




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机原理与应用课程目标掌握:了解单片机的基本结构及工作原理;掌握单片机指令系统及使用;掌握汇编语言及编程;了解和掌握单片机的中断系统;《单片机原理与应用》
《单片机原理与应用》第一章MCS-51单片机的硬件结构与工作原理
第二章指令系统与程序设计
第三章汇编语言
第四章单片机的中断系统总目录本章目录第一节MCS-51单片机的基本组成第二节并行输入/输出接口第三节存储器组织第四节特殊寄存器2.1MCS-51单片机的硬件结构1.五大部分:微处理器(CPU)、存贮器、I/O端口、定时/计数器和中断系统。2.八大部件:
微处理器、数据存储器、程序存储器、I/O接口、串行口、定时/计数器、中断系统、特殊寄存器2.1MCS-51单片机的硬件结构CPU运算部件控制部件BRAMP0口P2口ROM(EPROM)串行口
C/T中断系统SFRP1口8P3口888XTAL1XTAL2PSENALEEARESETVccVss按功能可分成8个部件,通过片内单一总线连接起来1.微处理器2.数据存储器3.程序存储器4.I/O口5.串行口6.定时/计数器7.中断系统8.特殊功能寄存器控制方式:SFR对各功能部件集中控制内部总线输入/输出引脚说明:(1)P0口(39~32脚):P0.0~P0.7统称为P0口。在不接片外存储器与不扩展I/O口时,可作为准双向输入/输出口。在接有片外存储器或扩展I/O口时,P0口分时复用为低8位地址总线和双向数据总线。
1
2
3
4
5
6
7
8
9
10111213141516171819
2040
39
38
37
36
35
34
33
32
313029282726252424222180318051875189C51VCCVSSXTAL2
XTAL1RSTP0.0
P0.1
P0.2P0.3P0.4P0.5P0.6P0.7P1.0
P1.1
P1.2P1.3P1.4P1.5P1.6P1.7P2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.0ALEP3.0
P3.1
P3.2P3.3P3.4P3.5P3.6P3.7EA第一节(2)P1口(1~8脚):P1.0~P1.7统称为P1口,可作为准双向I/O口使用。对于52子系列,P1.0与P1.1还有第二功能:P1.0可用作定时器/计数器2的计数脉冲输入端T2,P1.1可用作定时器/计数器2的外部控制端T2EX。1
2
3
4
5
6
7
8
9
10111213141516171819
2040
39
38
37
36
35
34
33
32
313029282726252424222180318051875189C51VCCVSSXTAL2
XTAL1RSTP0.0
P0.1
P0.2P0.3P0.4P0.5P0.6P0.7P1.0
P1.1
P1.2P1.3P1.4P1.5P1.6P1.7P2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.0ALEP3.0
P3.1
P3.2P3.3P3.4P3.5P3.6P3.7EA第一节(3)P2口(21~28脚):P2.0~P2.7统称为P2口,一般可作为准双向I/O口使用;在接有片外存储器或扩展I/O口且寻址范围超过256字节时,P2口用作高8位地址总线。1
2
3
4
5
6
7
8
9
10111213141516171819
2040
39
38
37
36
35
34
33
32
313029282726252424222180318051875189C51VCCVSSXTAL2
XTAL1RSTP0.0
P0.1
P0.2P0.3P0.4P0.5P0.6P0.7P1.0
P1.1
P1.2P1.3P1.4P1.5P1.6P1.7P2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.0ALEP3.0
P3.1
P3.2P3.3P3.4P3.5P3.6P3.7EA第一节
(4)P3口(10~17脚):P3.0~P3.7统称为P3口。除作为准双向I/O口使用外,还可以将每一位用于第二功能,而且P3口的每一条引脚均可独立定义为第一功能的输入输出或第二功能。P3口的第二功能如表2.1所示。1
2
3
4
5
6
7
8
9
10111213141516171819
2040
39
38
37
36
35
34
33
32
313029282726252424222180318051875189C51VCCVSSXTAL2
XTAL1RSTP0.0
P0.1
P0.2P0.3P0.4P0.5P0.6P0.7P1.0
P1.1
P1.2P1.3P1.4P1.5P1.6P1.7P2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.0ALEP3.0
P3.1
P3.2P3.3P3.4P3.5P3.6P3.7EA第一节表2.1P3口第二功能表引脚第二功能P3.0串行口输入端P3.1串行口输出端P3.2外部中断0请求输入端,低电平有效P3.3外部中断1请求输入端,低电平有效P3.4定时器/计数器0计数脉冲输入端P3.5定时器/计数器1计数脉冲输入端P3.6外部数据存储器写选通信号输出端,低电平有效P3.7RXDTXDINT0INT1T0T1WRRD外部数据存储器读选通信号输出端,低电平有效第一节1
2
3
4
5
6
7
8
9
10111213141516171819
2040
39
38
37
36
35
34
33
32
313029282726252424222189C51片内RAM片内PLASH256字节4K第四节00HFFH20H1FH30H2FH80H7FH工作寄存器组区位寻址区用户RAM区SFR片内RAM●
00H~1FH共32个单元为工作寄存器区,分为4组,每组8个字节,用R0~R7表示,用PSW的RS1RS0设置●
20H~2FH共16个单元为位寻址区,128个位(00H~1FH),也可字节寻址,作一般RAM用●
30H~7FH共80个单元为用户区,作数据缓冲和堆栈区用●
80H~FFH为特殊功能寄存器SFR区,离散分布着21个专用寄存器RS1RS0寄存器组RAM地址
00第0组00H~07H
10第2组10H~17H
11第3组18H~1FH
01第1组08H~0FH第四节字节地址2FH2EH2DH2CH2BH2AH29H28H27H26H25H24H23H22H21H20H7F776F675F574F473F372F271F170F077E766E665E564E463E362E261E160E067D756D655D554D453D352D251D150D057C746C645C544C443C342C241C140C047B736B635B534B433B332B231B130B037A726A625A524A423A322A221A120A027971696159514941393129211911090178706860585048403830282018100800D7D6D5D4D3D2D1D0位地址注意:一个字节地址对应有8个位地址位寻址区位地址第四节特殊功能寄存器1、累加器ACC(0E0H)
Accumulator,是一8位特殊功能寄存器,很多运算都要用A,结果一般放在A中。A是51单片机中使用最频繁的寄存器。2、寄存器B(0F0H)
8位R,与A配合,用于乘、除法指令中。3、程序状态字PSW(0D0H)
ProgramStatusWord,是一8位寄存器,用来存放程序执行后的状态信息,供程序查询或判断。
CYACF0RS1RS0OV---P
D7
D6D5D4D3D2D1D0
PSW(D0H)第四节
CYACF0RS1RS0OV---P
D7
D6D5D4D3D2D1D0
PSW(D0H)●
CY——进位标志位,有进/借位CY=1,否则CY=0●AC——半进位标志位,低半字节向高半字节有进/借位,
AC=1,否则AC=0,可用于BCD码运算判断位●
F0——用户标志位,用户自己定义用●
RS1、RS0——工作寄存器组选择位RS1RS0选择工作寄存器组000组(00H~07H)011组(08H~0FH)102组(10H~17H)113组(18H~1FH)●
OV——溢出标志位,补码运算有溢出,结果超过-128~127,
OV=1,无溢出,OV=0。OV=D7CD6C●P——奇偶标志位,指令执行后A中1的个数为奇数,P=1,为偶数,P=0第四节特殊功能寄存器4、堆栈指针SP(81H)是一8位专用寄存器,8位指针。堆栈是一个特殊的存储区,设在片内RAM中。5、数据指针DPTR(82H、83H)
16位寄存器,存放16位地址,可分为DPH和DPL两个8位寄存器使用。DPTR主要用于操作片外RAM。6、I/O口P0~P3
专用寄存器P0~P3是输入输出端口P0~P3的锁存器。I/O口的操作没有专用指令,用操作RAM的指令。7、程序计数器PC
ProgramCounter,是一个16位的指针,存放将要执行指令的地址。用户不可读写它,复位时PC=0000H。第四节wyx讲授内容:MCS-51单片机的寻址方式MCS-51单片机指令分类应用举例第三章
MCS-51单片机的指令系统本章重点:1.指令的寻址方式2.指令功能及使用方法本章目录第一节MCS51单片机的寻址方式
第二节MCS51单片机的指令分类第三节应用举例一、立即寻址
第一节MCS51单片机的寻址方式MOVA,#30H;把立即数30H送给A
操作数就在指令中,称为立即数,用#号标识。有7种寻址方式第一节二、直接寻址
指令中直接给出操作数所在的地址,用于访问片内RAM
MOVA,30H;将片内RAM中30H单元的内容给A
用直接寻址可以访问片内RAM的低128字节单元、位地址空间及SFR,且位地址空间和SFR只能用直接寻址。
三、寄存器寻址
操作数在寄存器中,指令中给出存放操作数的寄存器A、B、DPTR、R0~R7MOVA,R2;将R2中的内容给A
设30H单元中为05H
(A)=?MOVA,#30HMOVR2,#0A5HMOVA,R2
程序执行后A=?第一节●指令中通过寄存器给出操作数所在的地址,即寄存器中存放的是操作数的地址,还不是要找的操作数,称为指针方式
●间接寻址用于访问RAM,包括片内RAM和片外RAM
●能用于寄存器间接寻址的寄存器有:四、寄存器间接寻址
MOV30H,#0FFHMOVR0,#30HMOVA,@R0R0,R1——8位指针,主要用于访问片内RAMDPTR——16位指针,主要用于访问片外RAM
程序执行后A=?30H31H32H片内RAMFFHXXHXXH(R0)AFFHR030H例第一节五、变址寻址(基址加变址寻址)
以DPTR或PC为基址寄存器,A为变址寄存器,两者相加后的地址作为有效地址的寻址方式。MOVCA,@A+DPTR
(查表)MOVCA,@A+PC(查表)
JMP@A+DPTR(散转)第一节MOVA,#04HMOVDPTR,#2000HMOVCA,@A+DPTR
程序执行后A=?ROM(DPTR)A55H变址寻址用于访问程序存储器,只读,不能写。有效地址的计算:(DPTR+A)(PC+A)55H5CH4BH6DH3AH2000H2001H2002H2003H2004H2004H(DPTR+A)A、DPTR可以赋值,但PC不能赋值,由程序执行后PC当前值决定PC值,自动产生。55H第一节注意●相对跳转指令都是相对寻址●以PC当前值为基础,加上指令中给出的偏移量作为转移地址
六、相对寻址
相对寻址用于修改PC值,实现程序的分支转移例如:SJMP08H;PC←PC+2+08H偏移量为一个8位带符号补码,范围为+127~-128转移的目的地址=PC当前值+偏移量LP:CPLP1.0LCALL
DELAY
SJMPLP
一般用符号地址表示PC当前值=指令地址+指令字节数第一节七、位寻址
指对能位寻址的片内RAM区(20H~2FH)、可位寻址的SFR进行位操作的寻址方式。位地址表示MOVC,20H;将20H位内容给CYSETBP1.7;置1,P1.7=1CLRP1.7;清0,P1.7=0MOV20H,C;CY的内容给20H位1)直接位地址——20H2)位名称——C、F0、OV3)专用寄存器+位序号——P1.04)单元地址加序号——80H.6●位地址与字节地址完全一样,由指令区分●指令中有多个操作数,可能有多种寻址方式●内部RAM与内部I/O口统一编址,外部RAM与外部I/O口统一编址,用相同的操作指令。第一节注意一、指令格式
操作码——指出CPU要做的操作代码操作数——指出要操作的对象例如:
ADDA,#05H
操作码操作数★单字节指令——操作码和操作数在同一个字节中★双字节指令——操作码一个字节,操作数一个字节★三字节指令——操作码、操作数、操作数指令组成:第二节MCS51单片机的指令分类二、指令分类数据传送类指令算术运算类指令逻辑运算类指令控制转移类指令位操作类指令一、一般传送类指令MOV
数据传送类指令用于片内RAM数据传送1、以A为目的操作数MOVA,Rn
;A←(Rn)MOVA,direct ;A←(direct)MOVA,@Ri
;A←((Ri))MOVA,#data ;A←#dataMOVA,R2;将R2中的内容给A
目的操作数源操作数
返回2、以Rn为目的操作数MOVR0,30H;30H单元内容给R0
MOVRn,A ;Rn←AMOVRn,direct ;Rn←(direct)MOVRn,#data ;Rn←#data传送类指令MOV3、以direct为目的操作数MOVdirect,A MOVdirect,
Rn
MOVdirect,
direct MOVdirect,
@RiMOVdirect,#data4、以间接地址为目的操作数MOV@Ri,A ;((Ri))←AMOV@Ri,direct ;((Ri))←(direct)MOV@Ri,#data ;((Ri))←#data传送类指令MOVMOV30H,A ;(30H)←AMOV30H,#30H ;(30H)←30HMOV40H,50H;(40H)←(50H)例如:5、16位数据传送指令MOVDPTR,#data16 二、片外RAM传送指令MOVX
用于片外RAM中数据的存取MOVXA,@DPTR ;A←(DPTR)MOVXA,@Ri
;A←(P2Ri)MOVX@DPTR,A ;(DPTR)←AMOVX@Ri,A ;(P2Ri)←A●片外RAM的操作,只有4条指令,而且必须通过A进行●A与外部RAM之间传送数据,属间接寻址●@Ri,寻址范围只有256单元,@DPTR寻址范围为64K读片外RAM写片外RAM一输入设备,口地址为A000H,口上数据为90H,欲将其存入片内30H单元例MOVDPTR,#0A000H
;设指针MOVXA,@DPTR;取外设的数MOV30H,A
;存到片内三、程序存储器传送指令MOVC
用于程序存储器ROM中数据的读取MOVCA,@A+DPTR ;A←(A+DPTR)MOVCA,@A+PC ;A←(A+PC)●取程序存储器中的数据,只有2条指令,变址寻址●单方向只读操作,叫查表指令●表地址=表首地址(TAB)+序号(A)设在ROM1000H开始存放有5个字节数,编程将第二个字节数取出存入片内RAM30H单元。例MOVDPTR,#1000H;设指针MOVA,#01H;序号MOVCA,@A+DPTR;取1001H单元的数MOV30H,A;存到片内10H04H01H09H00H1000H1001H1002H1003H1004H四、数据交换指令
目的操作数为A1、整字节交换XCHA,Rn
;A<=>(Rn)XCHA,direct;A<=>(direct)XCHA,@Ri
;A<=>((Ri))XCHDA,@Ri
;低四位交换,高四位不变SWAPA ;A的高四位与低四位交换2、半字节交换MOVA,#45HSWAPA
程序执行后A=?例A=54H五、堆栈操作指令
1、堆栈的概念1)堆栈指针SP的初值叫栈底,可由指令设置
MOVSP,#60H;栈底为60H2)数据由低地址向高地址存放3)SP总是指向栈顶栈顶是栈区已存放数据的最高地址4)堆栈采用“先进后出”的原则栈底封死(固定),栈顶开放(活动)5)数据的入栈出栈由指针SP统一管理2、堆栈操作指令堆栈是开辟在片内RAM区的一个专用的存储区PUSHdirect
;SP←(SP+1),((SP))←(direct)POP direct
;(direct)←((SP)),SP←SP-104H09H62H61H60H栈底栈顶(SP)MOVSP,#60HMOV30H,#15HPUSH30H
例堆栈操作15H62H61H60H栈底栈顶(SP)MOVSP,#60HMOV30H,#15HPUSH30HPOP40H
15H62H61H60H(SP)结果:(40H)=15H
(SP)=60H压栈操作:出栈操作:利用堆栈如何实现数据交换
返回一、加法指令(Addition)
算术运算类指令指加、减、乘、除等运算,共24条,都要用A,结果存放在A中
有ADD,ADDCADDA,Rn
;A←A+RnADDA,direct ;A←A+(direct)ADDA,@Ri
;A←A+((Ri))ADDA,#data ;A←A+#data上述指令影响CY、AC、OV、P四个标志位1、不带进位的加法指令
返回例:执行下列指令后A=?PSW=?
101101101B
6DH
————————————————————
11000011BC3H+)10101010BAAH
MOVA,#0C3HMOVR0,#0AAHADDA,R0
进位结果:A=6DH,CY=1、AC=0、OV=1、P=1
CYACF0RS1RS0OV---P
PSW
10000101
PSW==85H溢出标志位OV=D7CD6C=10=1ADD用法多了加进位标志位CY,主要用于多字节的加运算2、带进位的加法指令加法指令ADDCA,Rn
;A←A+Rn+CADDCA,direct;A←A+(direct)+CADDCA,@Ri
;A←A+((Ri))+CADDCA,#data;A←A+#data+C两个双字节数存放在内部RAM30H、31H单元及40H、41H单元,设低位在前,高位在后,求和。
MOVA,30H;取低8位ADDA,40H
;低8位相加MOV30H,A;存结果MOVA,31H;取高8位ADDCA,41H
;高8位带进位加MOV31H,A;存结果例:多字节加4条带借位减法指令A=0C9H,R2=54H,CY=1,执行SUBBA,R2后A=?PSW=?例:二、减法指令(Subtraction)
SUBBA,Rn
;A←A-Rn-CSUBBA,direct ;A←A-(direct)-CSUBBA,@Ri
;A←A–((Ri))-CSUBBA,#data ;A←A-#data–C结果:A=74H,CY=0、AC=0、OV=1、P=0多字节减设被减数5678H在30H、31H中,减数4496H在40H、41H中,低位在前,高位在后,求差值。CLRCMOVA,30H;取低8位SUBBA,40H;低8位相减MOV30H,A;存结果MOVA,31H;取高8位SUBBA,41H;高8位减MOV31H,A;存结果例:●低字节减时,要注意对借位位清0,●高字节减时,SUBB会将低字节减时的借位减去注意例:三、乘法指令(Multiply)
MULAB ;BA←A×B
A和B中各存放一个8位无符号数,指令执行后,16位乘积的低8位在A中,高8位在B中。A=30H,B=60H,执行MULAB后:
例:四、除法指令(Divide)
A=30H,B=07H,执行DIVAB后:DIVAB ;A÷B→商在A中,余数在B中●
8位无符号数相除,A放被除数,B放除数。●
指令执行后,A中存放商,B中存放余数。A=06H,B=06H
A=00H,B=12H五、加1减1指令
1、加1指令(Increment)
INCA ;A←A+1INCRn
;Rn←Rn+1INCdirect ;(direct)←(direct)+1INC@Ri
;((Ri))←((Ri))+1INCDPTR ;DPTR←DPTR+1DECA ;A←A-1DECRn
;Rn←Rn-1DECdirect ;direct←(direct)-1DEC@Ri
;((Ri))←((Ri))-12、减1指令(Decrement)
无DPTR减1指令MOVR7,#0FFHINCR7结果:R7=?MOV30H,#00HDEC30H结果(30H)=?把A中按二进制相加的结果调整成按BCD码相加的结果
1
00100001B21H
————————————————————
————————————————————
六、十进制调整指令
DAA
10111011B
BBH
01101000B68H+)
01010011B53H例:BCD码运算:68+53=121
+)
01100110B66H
MOVA,#68HADDA,#53H;A=BBHDAA;A=21H写出指令结果:CY=1,A=21H进位调整
返回一、逻辑与
逻辑运算类指令20条逻辑运算指令加上4条移位指令=24条目的操作数大多要用A,有几条用directANLA,#data ;A←A∧dataANLA,direct ;A←A∧(direct)
ANLA,Rn
;A←A∧RnANLA,@Ri
;A←A∧((Ri))ANLdirect,#data;(direct)←(direct)∧dataANLdirect,A ;(direct)←(direct)∧A用途:用来对某些位清0,将要清0的位和“0”相“与”
例:MOVA,#56HANLA,#0FH结果:A=06H
返回二、逻辑或
ORLA,#data;A←A∨dataORLA,direct ;A←A∨(direct)ORLA,Rn
;A←A∨RnORLA,@Ri
;A←A∨((Ri))ORLdirect,#data;(direct)←(direct)∨dataORLdirect,A;(direct)←(direct)∨A用途:用来对某些位置1,将要置1的位和“1”相“或”
例:MOVA,#06HORLA,#30H结果:A=36H
00110110B
36H
————————————————
00000110B06H∨00110000B30H三、逻辑异或
用途:对某些位取反,将要取反的位和“1”相“异或”
例:MOVA,#0FHXRLA,#0FFH结果:A=F0H
11110000B
F0H
————————————————
00001111B
0FH
11111111BFFHXRLA,#data ;A←A
dataXRLA,direct ;A←A
(direct)XRLA,Rn
;A←A
RnXRLA,@Ri
;A←A
((Ri))XRLdirect,#data ;(direct)←(direct)
dataXRLdirect,A ;(direct)←(direct)
A四、累加器清0取反指令
有4条,只对A操作CLRA;A←0CPLA;A←/AMOVA,#0;A=0MOVA,#0AAH;A=AAHCPLA
;A=?五、循环移位指令(Rotation)
RLA;A的内容循环左移RRA;A的内容循环右移RLCA;带进位循环左移RRCA;带进位循环右移A的内容循环左、右移位A带进位循环左、右移位
=CLRA10101010B求反01010101BA=55HA.0A.7A.0A.7A.0A.7CYA.0A.7CYRLARRARLCARRCA循环移位<128的数,左移相当于×了2D0=0时,右移相当于÷了2用途
返回一、无条件转移指令
控制转移类指令1、LJMP后跟16位地址,可实现64K范围的转移有17条无条件转移条件转移LJMPaddr16;长转移,指令3字节AJMPaddr11;绝对转移,指令2字节SJMPrel
;相对转移,2字节JMP@A+DPTR;间接转移指令(PC)←
addr16,16位地址值给PC
返回2、AJMP后跟11位地址,可实现2K范围的转移(PC)←(PC)+2,PC当前值(PC)←
addr11,11位地址值给PC低11位3、SJMPrel(PC)←(PC)+2,PC当前值(PC)←
PC+rel
,加上8位的偏移量rel为8位带符号数补码,转移范围为+127~-128rel一般用符号地址,用标号表示目的地址,如:
SJMPNEXTSJMP$=WAIT:SJMPWAIT$表示当前指令的首地址无条件转移4、JMP@A+DPTR
变址寻址,实现长转移,范围达64K,多分支散转(PC)←
DPTR+A目的地址=DPTR+A转移地一般放一个散转表,散转表处放一些跳转指令无条件转移例根据A中内容转移,A中只能是偶数MOVA,#data
MOVDPTR,#TABLE
JMP@A+DPTRTABLE:AJMPPROG1AJMPPROG2AJMPPROG3A=0,转到PROG1A=2,转到PROG2二、条件转移指令
1、A判0转移指令JZrel
;A=0,转移JNZrel
;A0,转移2、比较转移指令CJNEA,#data,rel
CJNEA,direct,relCJNERn,#data,relCJNE@Ri,#data,rel比较两个操作数,不相等则转移,相等顺序执行作减法,影响标志位CY,左右,CY=0,无借位左<
右,CY=1,有借位此指令与位(CY)判跳指令结合,可以产生三分支相等,顺序执行=
等于不相等,转移条件转移
,CY=0,大于
<
,CY=1,小于CJNE指令3、循环转移指令DJNZRn,rel
DJNZdirect,rel减1非零转移指令,操作数减1后,若不为0,则转移MOVR2,#30LOOP:CPLP1.0DJNZR2,LOOP例从P1.0输出15个方波P1.0三、子程序调用及返回指令
1、LCALLaddr16LCALLaddr16;长调用指令,3字节ACALLaddr11;绝对调用指令,2字节RET;字程序返回,1字节RETI;中断返回给出16位地址,可以转到64K任何地方执行子程序1)PCPC+3,得PC当前值(即断点地址)
2)将断点地址压入堆栈保护,即将PC当前值入栈:
SPSP+1,(SP)
PC低8位
SPSP+1,(SP)
PC高8位3)将子程序的入口地址给PC,实现转移
PCaddr16CPU要自动完成以下操作
PC低62H61H60H(SP)
PC高2、ACALLaddr11给出11位地址,可以转到2K范围执行子程序1)PCPC+2,得PC当前值(即断点地址)
2)保护断点,PC当前值入栈保护3)将子程序的入口地址给PC,实现转移
PCaddr11(PC高5位不变,低11位替换)CPU要自动完成以下操作
PC低62H61H60H(SP)
PC高MOVSP,#60H2000HLCALLDELAY2003HMOV30H,#05H
┇3000HDELAY:MOVR7,#15●断点值PC=2000H+3=2003H,入栈保护●SP=62H,转移到PC=3000H处执行子程序
03H62H61H60H(SP)
20H例3、返回指令RET子程序的最后必须是RET指令1)把存放在堆栈中的断点值弹出给PCPC高8位(SP),SPSP-1PC低8位(SP),SPSP-12)从断点处继续执行子程序CPU要自动完成以下操作
03H62H61H60H(SP)
20H例上例中,PC高20H,SP=61HPC低03H,SP=60H最后:PC=2003H,SP=60H返回到调用指令的下一条指令执行4、中断返回指令RETI与RET相似,自动弹出断点值给PC,返回中断处执行
MOVSP,#60H2000HLCALLDELAY2003HMOV30H,#05H
┇3000HDELAY:MOVR7,#15┇
RET
03H62H61H60H(SP)
20H
返回一、位传送指令
位操作类指令有17条,操作片内低128字节的位寻址区20H~2FH片内21个SFR中的11个可位寻址的SFRMOVC,bit;C←bitMOVbit,C;bit←C位操作只有两个操作数,C和bit(/bit)
MOVC,P1.0MOV20H,C如何实现:20H位→30H位例:bit——位单元,直接位地址C——位累加器
返回二、位修改指令
CLRbit;bit←0SETBRS1CLRRS0例:SETBbit;bit←1CPLC;C←/C位清0位置1位取反CLRC;C←0SETBC;C←1CPLbit;bit←/bit设置用第二组工作寄存器RS1=1RS0=0三、位逻辑运算指令
ANLC,/bit;C←C∧(/bit)将07H位内容给67H位
07H与67H位交换?例:ORLC,/bit;C←C∨(/bit)位逻辑与位逻辑或ANLC,bit;C←C∧(bit)ORLC,bit;C←C∨(bit)/bit——位地址内容取反(不改变原来的内容)
这4条指令必须用C作目的操作数MOVC,07HMOV67H,C如何实现四、位条件转移指令
JNC rel
;C=0转移从P1口输入一个数,若为正则存入30H单元,若为负则将其取反后存入30H单元。例:JNB bit,rel
;(bit)=0转移JC rel
;C=1转移JB bit,rel
;(bit)=1转移都是相对寻址,目的地址=PC当前值+rel(偏移量)MOVA,P1
JNBACC.7,ST;为正转移
CPLA;求反ST:MOV30H,A
;存数
JBC bit,rel
;(bit)=1转移,并清0该位
返回第五节中断及中断源一、中断(Interrupt)
1、CPU在执行程序时,CPU以外的设备请求停止现程序的执行,转去处理外设事件,处理后再回到原地执行,这一过程叫中断。主程序转移中断程序返回断点
2、中断流程
继续与子程序调用相似但有本质的区别第五节中断源3、定时器0溢出中断--T0
是内部中断,无外部输入。定时器T0溢出,使标志位TF0置1,向CPU申请中断。4、定时器1溢出中断—T1
与T0类似,T1溢出,TF1置1,向CPU申请中断。5、串行口中断—S
当串行口接收完一帧数据,中断标志位RI置1
当串行口发送完一帧数据,中断标志位TI置1第五节二、中断源
●向CPU提出中断请求的设备或部件叫中断源MCS-51有5种类型的中断源:外部中断2个——INT0、INT1内部中断3个——定时器溢出中断,串行口中断1、外部中断0--INT0(P3.2)
由P3.2引脚输入,一旦输入有效中断信号,便使标志位IE0置1,并向CPU申请中断。2、外部中断1—INT1(P3.3)
与INT0类似,P3.3有中断信号,IE1置1,申请中断。第五节每个中断源都有一个对应的中断标志位,中断标志位在两个特殊功能寄存器中
三、中断标志位
TCON——定时器控制寄存器,存放有4个标志位SCON——串行口控制寄存器,存放有2个标志位1、TCON中的中断标志位
TimerControl,为8位特殊功能寄存器,地址88H
●用4位放定时器T0、T1,外部中断INT0、INT1的中断标志位。
●TCON用来控制定时器的启/停和外部中断管理。
●TCON可读可写,可位操作。第五节定时器Timer外部中断Interrupt
高四位用于定时器,低四位用于外部中断1)TF1—TimerFlowing,定时器T1溢出中断标志位
T1溢出,硬件自动置标志位TF1=1,CPU响应中断,硬件自动清TF1=0。2)TF0—定时器T0溢出中断标志位3)IE1—InterruptExternal,外部中断1中断标志位若P3.3上有有效的中断信号,硬件置位IE1=14)IE0—外部中断0(P3.2)中断标志位另外4位中,TR0、TR1用于定时器T0和T1的启/停控制IT0、IT1用于设置外部中断的触发方式
TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
D7
D6D5D4D3D2D1D0TCON(88H)第五节
1)TI—串行口发送中断标志位,TransferInterruptCPU发送完一帧数据,硬件置位TI=1,响应中断,不能硬件自动清TF1=0,必须用软件清0。2)RI—串行口接收中断标志位,ReceiveInterruptCPU接收完一帧数据,硬件置位RI=1,必须用软件清02、SCON中的中断标志位
TI
RID7
D6
D5
D4D3D2D1
D0SCON(98H)SerialControl,为8位特殊功能寄存器,地址为98H与中断有关的为低两位第五节四、中断控制
中断是可控的,由软件设置实现对中断功能的控制IE——中断允许寄存器,用于中断的开放或禁止IP——中断优先级寄存器,用于中断响应优先管理1、中断允许寄存器IEInterruptEnable,为一8位寄存器,地址为A8H
EA
ESET1EX1ET0EX0
D7
D6D5D4D3D2D1D0IE(A8H)INT0
T0INT1
T1
S总控位第五节EA---EnableAmount,中断总允许位
EA=1,CPU开中断;EA=0,关中断,禁止所有中断ES---EnableSerial,串行口中断允许位
ES=1,允许串行口中断;ES=0,禁止串行口中断ET1---EnableTimer1,定时器T1溢出中断允许位
ET1=1,允许T1中断;ET1=0,禁止T1中断EX1---EnableeXternal,外部中断1中断允许位
EX1=1,允许外部中断1中断;EX1=0,禁止ET0---EnableTimer0,定时器T0中断允许位,类似ET1EX0---EnableeXternal0,外部中断0允许位,类似EX1EA
ESET1EX1ET0EX0
D7
D6D5D4D3D2D1D0IE(A8H)第五节举例例:设允许T0中断和外部中断0中断,禁止其它中断★用位操作指令编程如下:
SETB ET0 ;允许T0中断
SETB EX0 ;允许INT0中断
SETB EA ;开总开关★用字节操作指令编程如下:EA
ESET1EX1ET0EX010000011=83HMOV IE,#83H或MOV IE,#10000011B用字节操作指令或用位操作指令对IE进行初始化设置的方法
第五节2、中断优先级寄存器IP
PSPT1PX1PT0PX0
D7
D6D5D4D3D2D1D0IP(B8H)INT0
T0INT1
T1
S
IP为一8位特殊功能寄存器,地址为B8H每个中断源均可设置为高优先级或低优先级:
设置为1时,该中断源为高优先级设置为0时,该中断源为低优先级InterruptPreference
★高优先级中断源可中断正在执行的低优先级中断★同级或低优先级中断不能中断正在执行的中断管理原则第五节主程序转移返回断点继续转移高级中断程序返回中断嵌套★
51单片机有两级中断优先级,可实现两级中断嵌套。★只有在执行低级中断程序时,出现高级中断申请,才会有两级中断嵌套。●如果同时出现多个同一优先级中断,CPU内部硬件逻辑按自然优先级排队依此响应。第五节自然优先级
中断源
同级自然优先级外部中断0最高级最低级定时器T0溢出中断外部中断1定时器T1溢出中断串行口中断第五节
TF1TR1TF0TR0
IE1
IT1
IE0
IT0
D7
D6D5D4D3D2D1D0TCON(88H)外部中断触发方式ITX---InterruptTrigger,外部中断触发方式控制位外部中断有两种触发方式,通过设置IT0、IT1实现。设置IT0=0时——电平触发方式,低电平有效。设置IT0=1时——为边沿触发方式,下降沿有效。★
IT0=1时,下降沿触发,CPU响应中断,硬件自动清IE0=0★IT0=0时,低电平触发,CPU响应中断不会自动清除IE0标志位,必须撤消INT0引脚上的低电平信号,即使INT0=1,才能使IE0=0。
相当于有硬件连接的:
1IE0INT0INT0INT1第五节wyx
用汇编语言编写程序,一般可分为以下几个步骤1)分析题意,确定算法;2)设计程序流程图;3)确定数据结构:合理地选择和分配内存单元以及工作寄存器4)编写源程序。5)上机调试程序。第三节汇编语言及程序设计方法
MCS-51单片机汇编语言,包含两类不同性质的指令。(1)基本指令:即指令系统中的指令。它们都是机器能够执行的指令,每一条指令都有对应的机器码。(2)伪指令:汇编时用于控制汇编的指令。它们都是机器不执行的指令,无机器码汇编语言的语句格式汇编语言一般由四部分组成。
标号: 操作码操作数1,操作数2 ;注释
START: MOV A,30H ;A←(30H)可以为1项、2项、空一、程序设计语言
机器语言——用二进制码编写程序,目标程序汇编语言——用助记符编写程序,低级语言高级语言——用接近人的自然语言编写程序二、源程序的汇编
用汇编语言或高级语言编写的程序叫源程序,计算机只能识别机器语言,所以必须经过编译/汇编程序将源程序翻译成目标程序(机器语言),这称为汇编/编译。目标程序源程序汇编第三节程序设计方法START:MOVA,#05H;把05H给A
标号操作码操作数注释1)标号
符号地址,字母开头,由1~6个字母组成,以冒号结束2)操作码
指令助记符,后跟空格作分隔符3)操作数
有多个操作数时,先目的操作数,后源操作数,用逗号分开4)注释
说明解释作用,以分号开头包括4个域(或称为字段),用分隔符隔开三、伪指令
●伪指令——●基本指令——机器能够执行的指令,每一条指令都有对应的机器码。伪指令是在汇编时起辅助说明作用的指示性指令,汇编后不生成机器码1、ORG(origin)
指定程序存放的起始地址。
如:ORG0000H2、END(Endofassembly)汇编结束3、EQU(Equate)赋值,赋值后字符可作地址或立即数
如:DATAEQU40HMOVA,#DATAMOVR2,DATA当立即数当地址定义字节,字节数据依次存放形成一字节数据表。
如:ORG2000HTAB:DB30H,31H,32H,33H,34H,35HDB36H,37H,38H,39H;0-9的ASCII码表
标号TAB为符号地址=2000H
字节数据从2000H单元开始存放4、DB(Definebyte)
ROMTAB┇32H31H33H30H2000H2001H2002H2003H
┇定义字,字数据(16位)依次存放形成一字数据表
如:ORG1000HTABW:DW1234H,56H,10
标号TABW为符号地址=1000H
字数据从1000H单元开始存放ROMTABW┇00H34H56H12H1000H1001H1002H1003H
┇使用时按字数据取用,一般按字节取用无意义。5、DW(Defineword)
6、DS(Definestorage)
保留指定数量的存储单元备用。
ORG3000HTABS:DS10
;保留连续10个单元
7、BIT
位定义:
INPUTBITP1.0OUTPUTBITP1.1一、程序设计步骤
四、顺序程序设计1.分析问题2.确定算法3.设计程序流程图4.编写源程序5.调试程序6.反复修改二、程序的基本结构
顺序结构——简单程序分支结构循环结构拆字程序例1将30H单元内的两位BCD码拆开并转换成ASCII码,存入片内31H和32H单元。解:
1、确定算法1)BCD码有两种存储格式:2)ASCII码:用8位二进制码表示数字或字符34H30H31H32H
46H36H3)将30H单元的BCD码取出,拆出低四位,加30H存入32H单元;拆出高四位,加30H存入31H单元。BCD码ASCII码解题思路●一个字节存
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 美年大健康客服体系优化与服务提升
- 造口护理步骤流程
- 学前教育五大领域实践
- 肛周脓肿与肛瘘超声诊断
- 治具设计培训体系构建
- 运动健康小常识
- 硬膜下出血护理
- 健康促进学校创建工作汇报
- 2025年抗毒素类生物制品项目提案报告
- 书法教学汇报课件
- 乳腺癌病因的高危因素分析
- 新概念二英文课文字帖衡水体4Blesson2548
- 个人竞聘报告ppt范文
- GB/T 34300-2017城乡社区网格化服务管理规范
- GB/T 28267.1-2012钢丝绳芯输送带第1部分:普通用途输送带的设计、尺寸和机械要求
- GB/T 12334-2001金属和其他非有机覆盖层关于厚度测量的定义和一般规则
- DB22-T 5040-2020建设工程见证取样检测标准-(高清正版)
- 庆七一知识竞赛题库
- 妇幼相关公共卫生服务督导评估表
- 省级电子政务外网-统一云平台建设方案
- 柯南侦探原理详解之3柯南与干冰(专业应用)
评论
0/150
提交评论