资源描述
3.1 指令和指令程序指令和助记符:计算机能直接识别和执行的命令称为指令。一台计算机所能执行的全部指令的集合称为这台计算机的指令系统。MCS-51单片机的指令系统包含了111条指令。机器语言:01110100;(740AH)把10送累加器A0000101000100100;(2414H)A加20,结果仍在A中00010100上述指令的汇编形式:(740AH)MOVA,#0AH(2414H)ADDA,#14H指令的字节数:1字节指令既含操作码也含操作数(49条):指令的含义和对象明确eg. 10100011INC DPTR;用一个字节中的几位来表示操作数eg.1101rrrMOV A,Rn2字节指令一个字节表示操作码,另一个字节表示操作数(45条):eg.01110100 操作数;MOVA,#data3字节指令一个字节表示操作码,两个字节表示操作数3.2 寻址方式MCS-51系统中, 操作数的寻址方式有7种:寄存器寻址 直接用寄存器名;寄存器指R0R7=用Rn表示; eg.MOV A,R0 ADD A,R5直接寻址直接给出操作数地址内部RAM包括21个SFR的地址=用direct表示;对于特殊功能寄存器,使用其定义名称和直接地址效果完全相同。 eg.MOV A,3AH MOV A,PCON MOV A,87H立即寻址 直接给出8位或16位的数值=用#data或#data16表示; eg.MOV A,# 3AH; MOV DPTR,# 3A87H系统仅此一条16位立即数传指令;寄存器间接寻址仅R0; R1及DPTR可用作间址寄存器=用Ri及DPTR表示;用此寻址方式可访问内部RAM和外部RAM,但不能访问SFR; 当被访问的是内部RAM或外部RAM的低256位时, 可用Ri; 要访问全部64k外部RAM时,用DPTR; eg.MOV A,R0 MOVX A,R1 MOVX A,DPTR3.2 寻址方式变址寻址 DPTR+A; PC+A=主要用于访问ROM eg.MOVC A,A+DPTR MOVC A,A+PC JMP A+DPTR 相对寻址 (给出偏移量; 只出现在相对转移指令中 =用rel 表示偏移量带符号数:-128127) eg.JZ 3AH(目的地址 = 源地址 + 转移指令字节数 + rel)位寻址给出位地址=用bit表示; eg.MOV C,07H 位地址有下列几种表示方法: 直接用位地址: 07H; (00HF7H中再剔除CxH, D8DF;合计224bit) 采用第几单元 .第几位: 25H . 5; SFR名.位数: TCON. 3; 用伪指令定义: eg. A1 BIT P1.0 ; A2 BIT 20H3.3 数据传送指令MCS-51指令系统中的指令,可分为五大类:数据传送指令28条算术运算指令24条逻辑运算及移位指令25条控制转移指令25条位操作(布尔操作)指令17条=合计111条一. 内部RAM之间的数据传送指令(15条)1.立即寻址(4条) MOV A, # data;MOV Rn, # data;MOV Ri, # data; MOV direct, # data2.直接寻址(5条) MOV A, direct;MOV direct, A MOV Rn, direct MOV Ri, directMOV direct2, direct1;3.间接寻址(3条) MOV A, Ri MOV Ri, A; MOV direct, Ri4.寄存器寻址(3条) MOV A, Rn MOV Rn, AMOV direct, Rn3.3 数据传送指令MOV指令(15条)图解基本规律:两两互访,两例外:立即数只能作为源操作数; Ri与Rn无联系两特例: direct可自访; Ri不能访问SFR3.3 数据传送指令二. 涉及外部存储器的数据传送指令 1. 16位地址传送指令(仅此一条16位数传指令) MOV DPTR,# data16(data16-16位立即数,通常是外部RAM或ROM的地址) 2. 访问ROM的指令 MOVC A,A+DPTR;A (A+DPTR) MOVC A,A+PC;PC PC+1, A (A+PC) 3. 访问外部RAM的指令 MOVX A,Ri ;只能寻址外部RAM的0000H00FFH;比较: MOV A,Ri MOVX Ri,A MOVX A,DPTR MOVX DPTR,A三. 堆栈操作指令 PUSH direct;SPSP+1, (SP)(direct) POP direct ;(direct)(SP), SPSP-1四.数据交换指令 XCH A,Rn XCH A,direct XCH A,Ri XCHD A,Ri;ACC.0ACC.3与(Ri)03交换, 高位保持不变;*数传指令不影响各标志位,仅P标志受A内容的影响; 数据传送类指令课堂练习11.如何用MCS-51指令实现以下的数据传送1)R1内容传送到R02)外部RAM 20H单元内容送R03)外部RAM 20H单元内容送内部RAM 20H单元4)外部RAM 1000H单元内容送内部RAM 20H单元5)ROM 2000H单元内容送R06)ROM 2000H单元内容送内部RAM 20H单元7)ROM 2000H单元内容送外部RAM 20H单元数据传送类指令课堂练习22.设内部RAM的30H单元的内容为40H, 即(30H)=40H, 还知(40H)=10H, (10H)=00H,端口P1=CAH,问执行以下指令后,各有关存储单元、寄存器及端口的内容?MOVR0,#30H;R0=30HMOVA,R0;A=40HMOVR1,A;R1=40HMOVB,R1;B=10HMOVR1,P1;(40H)=CAHMOVP2,P1;P2=CAHMOV10H,#20H;(10H)=20HMOV30H,10H;(30H)=20H3.4 算术运算指令 此类指令分为6组, 每组4条; 四条指令的目的操作数是累加器A时,源操作数采用寄存器; 直接; 间接和立即数四种寻址方式 。1. 加法指令(ADD): ADD A,Rn; ADD A,direct; ADD A,Ri; ADD A,#data 2. 带进位加法指令(ADDC): ADDC A,Rn; ADDC A,direct; ADDC A,Ri; ADDC A,#data3. 加 1指令(INC): (标志位不受影响; 但P标志受A内容的影响) INC A; INC Rn; INC direct; INC Ri4.带借位减法指令(SUBB): SUBB A,Rn; SUBB A,direct; SUBB A,Ri; SUBB A,#data5.减 1指令(DEC):(标志位不受影响; 但P标志受A内容的影响) DEC A; DEC Rn; DEC direct; DEC Ri6.乘除指令和其他运算指令 A. 乘除指令: MUL AB;DIV AB(影响Cy, OV, P标志;执行乘除操作后Cy=0;相乘后若B0, 则OV=1, 否则OV=0;做除法时若除数B=0, 则OV=1;否则OV=0) B. 十进制调整指令:DA A(两个压缩的BCD数相加后应进行此调整;该指令仅影响Cy) C. 数据指针加1指令: INC DPTR(唯一的一条16位算术运算指令)3.5 逻辑运算及移位指令1. 逻辑与运算指令:ANL A,Rn; ANL A,direct; ANL A,Ri; ANL A,#dataANL direct,A; ANL direct,#data;2. 逻辑或运算指令:ORL A,Rn; ORL A,direct; ORL A,Ri; ORL A,#dataORL direct,A; ORL direct,#data;3. 逻辑异或运算指令:XRL A,Rn; XRL A,direct; XRL A,Ri; XRL A,#dataXRL direct,A; XRL direct,#data;4.累加器清零及取反指令CLRA;CPLA;*以上逻辑运算都是按位进行的;对Cy,AC和OV都没有影响。5. 移位及半字节交换指令(只能针对A,移位全部是循环移位)RLA循环左移RLCA带进位循环左移RRA循环右移RRCA带进位循环右移SWAPA半字节交换(相当于执行4次循环左移)*循环指令执行一次,移一位;若想多移几位,则应编写循环程序 算术运算/逻辑运算类指令课堂练习33.已知A=7AH,R0=30H,(30H)=A5H,PSW=80H,问执行以下各指令的结果(每条指令都以题中规定的数据参加操作)。1)XCHA,R0;A=30HR0=7AH2)XCHA,30H;A=0A5H3)XCHA,R0;A=0A5H4)XCHDA,R0;A=75H5)SWAPA;A=0A7H6)ADDA,R0;A=0AAHCy=0 OV=17)ADDA,30H;A=1FHCy=1 OV=08)ADDA,#30H;A=0AAHCy=0 OV=19)ADDCA,30H;A=20HCy=1 OV=010)SUBBA,30H;A=0D4HCy=1 OV=111)SUBBA,#30H;A=49HCy=0 OV=0算术运算/逻辑运算类指令课堂练习44.设A=83H, R0=17H, (17H)=34H, 执行以下指令后, A=?ANLA,#17H;A=03HORL17H,A;(17H)=37HXRLA,R0;A=34HCPLA;答A=0CBH3.6 控制转移指令1. 无条件转移指令(4条)长转移指令:LJMP addr16 ;PCaddr16;在汇编语言中addr16可以直接用一个16位的地址,也可以用标号由汇编语言算出其16位的地址。eg. LJMP 35ECH;LJMP lable绝对转移指令:AJMP addr11 ; PC PC+2; PC.100addr11; 在汇编语言中addr11可以直接用一个16位的地址, 也可以用标号由汇编语言算出其16位的地址;但仅取该16位地址的低11位用于替换PC中的低11位;可获得2k的转移范围;但目标地址必须与该条指令地址+2在同一个2k区域;所以指令“lab:AJMP lab”不一定能实现。 eg. AJMP 27BCH;AJMP lable短转移指令: SJMP rel ; PC PC+2+rel; rel相对寻址, 8位带符号数表示地址偏移量; 在汇编语言中通常用标号表示: eg. HERE: SJMP HERE; SJMP $; SJMP FEH变址方式的转移指令:JMP A+DPTR ; PC A+DPTR; 这条指令的特点是转移的地址可以在程序运行中加以改变。例如,当DPTR为确定的值时,根据A的不同的值就可以实现多分支的转移,起到一条指令完成多条指令的功能。3.6 控制转移指令2. 条件转移类指令累加器判零条件转移指令(2条) JZ rel;若A=0, 则PCPC+2+rel; 若A0, 则PCPC+2;eg. Lable: JZ Lable JNZ rel ;若A0, 则PCPC+2+rel; 若A =0, 则PCPC+2比较条件转移指令(4条) CJNE A, direct, rel ; CJNE A, #data, rel ; CJNE Rn, #data, rel ; CJNE Ri, #data, rel ; 在汇编语言中通常用标号表达rel; eg. lable : CJNE A, #data, lable减 1条件转移指令(2条) DJNZ Rn , rel ;RnRn-1;若Rn0, 则PCPC+2+rel; 否则PCPC+2; DJNZ direct, rel ;(direct)(direct)-1;若(direct)0, 则PCPC+2+rel; 否则PCPC+2; *条件转移指令均为相对转移,转移范围-128127;若要大范围转移需与无条件转移配合使用。3.6 控制转移指令3. 子程序调用及返回指令调用指令ACALL addr11;PCPC+2; SPSP+1, (SP)PC70;(绝对调用指令);SPSP+1, (SP)PC158; (低位低地址,) ;PC100addr11; (不在同一2k块,则转不过去) LCALL addr16;PCPC+3; SPSP+1, (SP)PC70;(长调用指令);SPSP+1, (SP)PC158; (,高位高地址) ;PCaddr16;返回指令RET ;(子程序返回);PC158 (SP), SPSP-1; PC70 (SP), ;SPSP-1 (高地址高位,低地址低位) RETI ;(中断返回);PC158 (SP), SPSP-1; PC70 (SP), ;SPSP-14. 空操作指令NOP ;PC PC+1单字节单周期指令;仅消耗了一个机器周期。3.7 布尔变量操作指令1. 位传送指令(可位寻址的各位和位累加器C之间可以互相传送内容) MOVC, bit;MOVbit, C2. 复位/置位指令(4条) CLR C;CLR bit;SETB C;SETB bit;3. 位运算指令(6条) ANL C, bit;ORL C, bit;CPL C; ANL C, /bit;ORL C, /bit;CPL bit;*(ANL C, /bit;表示将bit取反后再与C相与,该指令不会影响原bit的内容)4. 位控制转移指令(5条)以Cy内容为条件的转移指令: JCrel;若Cy=1,PCPC+2+rel;否则,PCPC+2 JNCrel;若Cy1,PCPC+2+rel;否则,PCPC+2以位地址内容为条件的转移指令 JBbit,rel;若(bit)=1,PCPC+3+rel;否则,PCPC+3 JNBbit,rel;若(bit)1,PCPC+3+rel;否则,PCPC+3 JBCbit,rel;若(bit)=1,PCPC+3+rel,且使(bit=0); 否则,PCPC+3控制转移类指令课堂练习55.已知SP=25H, PC=2345H, (24H)=12H, (25H)=34H, (26H)=56H, 问在这种条件下执行RET指令以后, SP=? PC=?答:SP=23H;PC=3412H6.若SP=25H, PC=2345H, 标号LABEL所在的地址为3456H,问执行长调用指令”LCALL LABEL” 之后, 堆栈指针和堆栈内容发生什么变化?PC=?答:SP=27H; (26H)=48H; (27H)=23H; PC=3456H7.在上题中的LCALL指令能否直接换成ACALL指令?为什么?答:不能;因为不在同一个2k区域实例:例4.1若在外部ROM中2000H单元开始存放09的平方值,要求根据累加器A中的值(09)来查找所对应的平方值。解1: MOVA,#8MOVDPTR,#2000HMOVCA, A+DPTRORG2000HTAB: DB 0, 1, 4, 9, 16, 25, 36, 49, 64, 81解2: MOVA,#8ADDA,#0FH(1ff0h)MOVCA, A+PCORG2000HTAB: DB 0, 1, 4, 9, 16, 25, 36, 49, 64, 81实例:例4.3有2个无符号16位数, 分别存放在从M1和M2开始的数据区中, 低8位先存, 高8位在后, 和存于R3(高8位); R4(低8位), 设和不超过16位。MOVR0,#M1MOVR1,#M2MOVA,R0ADDA,R1MOVR4,AINCR0INCR1MOVA,R0ADDCA,R1MOVR3,A4.1 汇编语言源程序的格式汇编语言源程序的一般形式:标号:操作码操作数;注释1. 标号: 标号由8个或8个以下的字母、数字、下划线组成,标号的第一个字符必须是字母;此外,系统中保留使用的字符或字符串不能用作标号。以下标号非法: 2A; S+N; EQU.2. 操作数A. 对于#data: #10010010B; #10; #9BH; #0ABH注意不能丢掉前面的0; 否则按符号地址ABH处理。eg. MOV A,#0ABH MOV A,#ABHB. 对于直接地址direct可以用:10010011B;98;0F9H;eg. MOVA,98标号地址:eg. MOVA,SUM带 +、-号的表达式 = 直接地址:eg. MOVA,SUM+3SFR名:eg. MOVA,P2C. 对于相对寻址的 rel:除可以采用上面提到的 外,还允许采用一个专门的符号“$”,它表示相对转移指令所在的地址。eg. JNB TF0,$*源程序中除“注释”外,不能出现全角符号;即必须全为西文字符。4.2 伪指令 每种汇编语言都会定义若干条伪指令,用来对汇编过程进行某种控制,或者对符号、标号赋值。1. ORG(汇编起始命令)用于规定下面的目标程序的起始地址,在源程序中可以多次使用,但所规定的地址必须从小到大,且不能造成地址重叠。格式:OGR16位地址eg.ORG 2000H START:MOVA,#64H2. END(汇编结束)在END以后所写的指令,汇编程序都不予处理。源程序中只能有一条END,放在所有指令的最后。格式:END3. EQU(等值命令)将一个数或特定的汇编符号赋予规定的字符名称。用EQU定义的字符名称,必须先定义后使用,且通常不能用于表达式中。格式:字符名称 EQU数或汇编符号4. DATA(数据地址赋值命令)将数据地址或代码地址赋予规定的字符名称; 用DATA定义的字符名称,允许先使用后定义,且可用在表达式中。格式:字符名称 DATA表达式4.2 伪指令5. BIT(位地址符号命令)将位地址赋予所规定的字符名称。格式:字符名称BIT 位地址;eg. A1 BIT P1.0 ; A2 BIT 20H6. DB/DW(定义字节/字命令)从指定地址单元开始, 定义若干个8/16位内存单元内容格式:标号:DB8位二进制数表;标号:DW16位二进制数表;(*高8位在前,低8位在后)eg. lab:DB 45H, 73, “5”, “A”DW 45H, 73, “5”, “A”*注意2者的区别7. DS(定义空间命令)从指定地址单元开始,保留由表达式所指定的个数存储单元作为内存备用空间。格式:标号:DS表达式;ORG 3000HBUF:DS50 ;从地址3000H开始保留50个存储单元作为备用单元;*以上6、7两条伪指令均只能作用于ROM4.3 MCS-51程序设计举例1. 分支程序设计例5.6_设变量X存放在VAR单元, 函数值Y存放在FUNC单元。按下式给Y赋值: -1 X 10 Y= 0 10X20 1 20 R0,高8位地址=R1。MOVA, R3MOVDPTR,#BRTABMOVCA, A+DPTRJMPA+DPTRBRTAB:DB BR0 -BRTAB DBBR1 -BRTAB DBBR2 -BRTAB DBBR3 -BRTAB4.3 MCS-51程序设计举例2. 循环程序设计例5.11 从BLOCK单元开始有一个无符号数据块,其长度存于LEN单元,试求出数据块中最大的数,并存入MAX单元。LEN DATA 20HMAX DATA 21HBLOCK DATA 22H CLR A MOV R2,LEN MOV R1,#BLOCKLOOP: CLR C SUBB A,R1 JNC NEXT MOV A,R1 SJMP NEXT1NEXT: ADD A,R1NEXT1: INC R1 DJNZ R2,LOOP MOV MAX,A4.3 MCS-51程序设计举例例5.13 有10组3字节的被加数和加数, 分别存在两个数据块中, 首地址分别存于R0和R1中, 求这10组数的10组和, 各组的和仍送回以R0为指针的单元。MOVTEMP, R0MOVTEMP+1, R1MOVR3, #10LOOP:MOVR2, #3CLRCLOOP1:MOVA, R0ADDCA, R1MOVR0, AINCR0INCR1DJNZR2, LOOP1DJNZR3, LOOPMOVR0, TEMPMOVR1, TEMP+1TEMPDATA20H4.3 MCS-51程序设计举例3. 查表程序例5.16若A中存放的是某一位十进制数的7段码, 通过查表程序, 将其转换为相应的BCD码, 仍存于A中。MOVR1,#00HMOVB,AMOVDPTR,#KTABLOOP:MOVA,R1MOVCA,A+DPTRCJNEA, B, NEXTSJMPRESUNEXT:INCR1SJMPLOOPRESU:MOVA,R1RETKTAB:DB40H, 79H, 24HDB0H, 19H, 12HDB02H, 78H, 00H, 18H4.3 MCS-51程序设计举例3. 查表程序例5.15 将一组16进制数转换为ASCII码。每个字节内存放两个16进制数。16进制数据块首地址存于R0,存放ASCII码区域的首地址存于R1,数据块长度存于R2。MOVTEMP,R0MOVTEMP+1,R1LOOP:MOVA,R0ANLA,#0FHADDA,#18MOVCA,A+PCMOVR1,AINCR1MOVA,R04.3 MCS-51程序设计举例4. 子程序通过R0R7或A来传送数据例5.17 用程序实现c=a2+b2。设a,b,c存于内部RAM的D1,D2,D3。MOVA,D1ACALLSQRMOVR1,AMOVA,D2ACALLSQRADDA, R1MOVD3,ASJMP$SQR:INCAMOVCA,A+PCRETTAB:DB0, 1, 4, 9, 16DB25, 36, 49, 64, 81END4.3 MCS-51程序设计举例TEMDATA20HMOVR1, #BLOCK1ACALLFMAXMOVTEM,AMOVR1, #BLOCK2ACALLFMAXCJNEA, TEM, NEXNEX:JNCNEX1MOVA,TEMNEX1:MOVMAX,ASJMP$4.3 MCS-51程序设计举例4. 子程序通过堆栈传递参数例5.19 在HEX单元有2个16进制数, 试将它们分别转换成ASCII码, 存入ASC和ASC+1单元。HEXDATA30HASCDATA31HPUSH HEXACALL HASCPOP ASCMOV A,HEXSWAP APUSH ACCACALL HASCPOP ASC+1SJMP $4.3 MCS-51程序设计举例MOVR0,#BLOCKMOVR1,#SUMSUB:MOVR2,#0MOVR3,#0MOVA,R0JNBACC.7,N1MOVR2,#0FFHN1:INCR0MOVB,R0JNBB.7,N2MOVR3,#0FFH4.3 MCS-51程序设计举例例5.21 2个16位无符号数乘法程序;设R7R6存放乘数, R5R4存乘数,乘积存入以R0开始的单元(低位积先存)。MOVA,R6MOVB,R4MULABMOVR0AMOVR3,BMOVA,R7MOVB,R4MULABADDA,R3MOVR3,AMOVA,BADDCA,#0MOVR2,AMOVA,R6MOVB,R5MULABADDA,R3INCR0MOVR0,AMOVR1,#0MOVA,R24.3 MCS-51程序设计举例例5.22 两个8位带符号数乘法程序 ;设两个数已存在R0和R1, 16位乘积送R3, R2保存。SBITBIT20.0SBIT1BIT20.1SBIT2BIT20.2MOVA,R0RLCAMOVSBIT1,CMOVA,R1RLCAMOVSBIT2,CANLC,/SBIT1MOVBIT,CMOVC,SBIT1ANLC,/SBIT2ORLC,SBITMOVSBIT,CMOVA,R14.3 MCS-51程序设计举例例5.23 16位被除数已存于R7R6, 16位除数存于R5R4; 除数若为0, 则置单元OVER为 0FFH, 以表示溢出; 若被除数为0, 则置单元OVER为 0(商:R7R6; 余数:R3R2)。SUB:MOVA,R5JNZSTARTMOVA,R4JZOVERFSTART:MOVA,R7JNZSTART1MOVA,R6JNZSTART1MOVOVER,#0RETSTART1:CLRAMOVR2,AMOVR3,AMOVR1,#16DIV:CLRCMOVA,R6RLCAMOVR6,A5.1 中断概述中断是cpu与外部设备交换信息的一种方式;它解决了CPU和外设之间的速度配合问题,提高了CPU的效率,使计算机可实时处理控制现场瞬息变化的信息、参数,提高了计算机处理故障的能力。因此,计算机中断系统的功能也是鉴别计算机性能好坏的重要标志之一。1.中断源引起中断的原因或发出中断申请的来源;一般可分为软件中断和硬件中断,MCS-51不支持软件中断,仅有5个硬件中断源。2.硬件中断的分类:A.屏蔽中断可直接称中断;B.非屏蔽中断,MCS-51不支持此类中断;3.中断的开放与关闭4.中断源的判别和中断优先级判别:单线中断,软件查询多线中断矢量中断中断优先级:A.若干个中断源同时发出申请B.中断嵌套5.2 中断处理过程1.中断请求是中断源向CPU发出的信号,可以是电平信号,也可以是脉冲信号,视CPU而定,MCS-51两种方式都支持。2.中断响应A.响应的条件 中断开放(IEEA;ES/ET1/EX1/ET0/EX0); 执行完当前指令(正执行RETI;访问IE/IP的指令时,需再执行一条指令); 无同级或更高优先级中断正在响应(IPPS/PT1/PX1/PT0/PX0) ;B.中断响应基本操作: 中止正在执行的程序;并保护断点(即将断点地址压入堆栈); 确定中断服务程序的入口地址;并将入口地址送入PC;*中断入口地址的获得:固定入口地址;中断向量表;3.中断处理 A.保护现场; B.处理开/关中断; C.执行中断服务程序; D.恢复现场; E.结束中断4.中断返回 RETI:CPU将断点地址弹回PC5.3 80C51 的中断系统及其控制MCS-51单片机和外设交换数据通常采用两种方式:查询方式和中断方式1.中断系统的一般功能 中断系统负责对多个中断源进行管理, 涉及4个SFR:TCON;SCON;IE;IP; 主要任务:对于中断申请的屏蔽或开放的管理 采用两级管理:总开关EA和5个中断源自己的开关EX0,ET0,EX1,ET1,ES中断的排队 对IP编程将中断分两级,同级时按系统规定的优先顺序执行;在未被屏蔽的前提下高级中断可中断低级中断。5.3 80C51 的中断系统及其控制中断的响应 当中断源产生中断申请时,MCS-51系统先把这些申请登记在各自的中断标志位中,然后在下一个周期按照内部优先顺序和规定的级别来查询这些中断标志,并在一个机器周期内完成检测和优先级排队,此时若系统满足下面的3个条件,则在下一个机器周期的S1状态开始响应其中优先级最高的中断。A.没有同级或更高级的中断正在响应;B.当前指令执行完毕;C.若正在执行的指令是RETI或任何访问IE、IP的指令,则必须在另外执行一条指令之后才可以响应中断;中断响应需要两个机器周期,完成两件事: 将PC推入堆栈(低地址放PC低8位,高地址放PC高8位)保护断点 将入口地址装入PC;=相当于内部调用LCALL。中断的撤除串行口发送/接受中断标志,需通过软件清除;外中断采用电平触发时,中断服务程序应使该I/O设备撤消中断申请;其余的中断标志,一旦被响应将会被自动清除。5.3 80C51的中断系统及其控制*电平触发时只要在S5P2时刻为低电平即可将IE0/1置位;而边沿触发时需两个S5P2才能检测到下降沿。5.3 80C51的中断系统及其控制2.中断方式应用举例(80C51和打印机的接口)例: 将内部RAM从20H开始的50个8位数据通过打印机打印出来。5.3 80C51的中断系统及其控制ORG0000H ;主程序入口LJMPMAINORG0003H ;中服程序入口LJMPROUTORG100H ;主程序MAIN:SETBIT0SETBEASETBEX0SETBPX0MOVR0,#20HMOVR1,#0F0HMOVR2,#49MOVA,R0MOVXR1,ALOOP:SJMP$5.4 80C51外部中断源的扩展1.借用定时/计数器溢出中断作为外部中断MOVTMOD,#06HMOVTL0,#0FFHMOVTH0,#0FFHSETBEASETBET0SETBTR02.用查询方式扩展中断源3.用8259可编程中断控制器扩展中断源(略)5.5 80C51内部定时/计数器及其应用 51系列内部带有2个16位的定时/计数器; 它们本质上都是“加法”计数器, 当计数器被加至“全1”后, 再计一个脉冲就会“溢出”使TF0/1被置1, 标识它已完成计数工作;可以通过将一个数写入TH0/1和TL0/1, 改变计数器的初值, 即使计数器在此初值的基础上开始计数。1. MCS-51内部定时/计数器的工作方式5.5 80C51内部定时/计数器及其应用方式0:13位计数方式初值=TH0/1+TL0/1的低5位;eg. 欲计数1000213-1000 =7192=1110000011000B将初值11100000B(E0H) =TH0/1; 11000B(18H) =TL0/1方式1:16位计数方式初值=TH0/1+TL0/1eg. 欲计数 58344216-58344=7192=1110000011000B;将初值11100B(1CH) =TH0/1; 00011000B(18H) =TL0/1方式2:8位自动重装计数方式TL0/1=8位计数器;TH0/1=寄存器;当TL0/1计满溢出后能将TH0/1的内容自动装入;方式3:T0拆为2个独立的8位计数器TL0和TH0;但2者的工作方式略有不同,TL0可用于定时/计数器;TH0只能用于计时器;但将占用T1的TR1,TF1;此时T1将不能使用中断;T1在方式3下相当于TR1=0,停止计数(内容保持不变)5.5 80C51内部定时/计数器及其应用2. MCS-51内部定时/计数器的控制A.定时/计数器工作方式控制寄存器TMOD(89H)M1M0确定计数器工作方式;C/-TT1/0是用作计数器(1)还是用作定时器(0);GATE起辅助控制作用;右上图为定时/计数器工作于方式0/方式1时的逻辑结构图。方式0时的计数器由TH0和TL0的低5位构成13位的计数器; 方式1时的计数器由TH0和TL0构成16位计数器。定时/计数器工作于方式2时的逻辑结构如右下图所示:TL0溢出, 使TF0置1的同时将TH0的内容重装入TL0,并重新开始计数;5.5 80C51内部定时/计数器及其应用应用 定时/计数器0工作于方式3及定时/计数器1与之相应的工作方式:注意:与定时/计数器1”GATE”配合使用的是INT1!5.5 80C51内部定时/计数器及其应用B.定时/计数器的启动和中断控制相关的SFR:C.定时计数器的初始化 对TMOD赋值,以确定其工作方式; 对TH0/1, TL0/1赋初值; 确定优先级、开放中断; 对TCON中的TR0或TR1置位,启动计数;5.5 80C51内部定时/计数器及其应用3. 应用举例eg.1 利用定时器输出周期2ms的方波,设单片机时钟频率为12MHz。答:用T0; 方式0; 定时1ms; TMOD = 0000 0000B用P1.0输出方波; 计算定时器初值X=213-1*10-3(1ms)/1*10-6(1us) =7192=11100000 11000B=0E0 18HORG0BH BRT0:MOVTH0,#0E0HAJMPBRT0 MOVTL0,#20H; *main:MOVTMOD,#00HCPLP1.0MOVTH0,#0E0HRETIMOVTL0,#18HSETBEA SETBET0 SETBTR0 SJMP$ 5.5 80C51内部定时/计数器及其应用*在定时器溢出发出中断申请,到重装完定时器初值并在此基础上继续计数定时,总会有一定的时间间隔,若要求定时/计数比较精确,就需对重装的初值作一些调整。一般考虑两个因素:一是中断响应所需的时间;二是重装指令及中断服务程序中在重装指令前的其它指令所用时间;修正量通常取78个机器周期,即少计78个数=重装初值+78。eg. 上题采用查询方式产生2ms的方波。MOVTMOD,#00HSETBTR0LOOP:MOVTH0,#0E0HMOVTL0,#18HJNBTF0,$CPLP1.0CLRTF0SJMPLOOP5.5 80C51内部定时/计数器及其应用ORG0BHAJMPBRT5START:ORG2000HMOVTMOD,#01HMOVTH0,#0B1HMOVTL0,#0E0HMOVIE,#82HSETBTR0MOVR0,#50LOOP:SJMP$6.1 计算机串行通信基础计算机与外部的信息交换称为通信;基本的通信方式:并行通信;串行通信。并行通信数据各位同时传送=并行接口;速度快,但使用的通信线多(数据线+控制信号线),且随着传输距离的增加,传输可靠性下降。串行通信在单根线上,按一位接一位从低位到高位的先后顺序进行传送/接收。串行通信中,按数据传送方向可分为:单工(Simplex)半双工(Half Duplex)全双工(Full Duplex)串行通信中,按照通信的收发双方是否有统一的时钟,可分为两种基本的传送方式:异步方式(Asynchronous);同步方式(Synchronous);6.1 计算机串行通信基础异步传送方式:1.如何同步?A.必须约定串行数据传送速率波特率(Baud Rate)=每秒钟所传送数据的位数,单位为Bd。常用国际标准波特率为:110、300、600、1200、2400、4800、9600和19200BdB.高于波特率的时钟频率:一般16倍或64倍C. 加1位起始位0;D. 加1/1.5/2位停止位1)2.异步传送从哪一位开始传?(从低位到高位)3.可以传送多少位数据?数据在线路上的传送不是连续的,数据是以一个字(或称字符)为单位来传送的,它可以是5/6/7/8位;4.如何纠错和区分数据/控制信息?可加1位奇偶校验位或=1位的控制位;例如用来确定这个字符所代表的性质:地址还是数据6.1 计算机串行通信基础同步传送方式: 同步传送是一种连续传送数据的方式,即字符与字符间没有间隙(不用起始位和停止位);仅在数据块开始时用同步字符SYNC来指示; 同步字符的插入可以是单同步字符方式或双同步字符方式;同步字符可以有用户约定,也可以采用ASCII码中规定的SYN代码,即16H;因此,一般在硬件设备上需要有插入同步字符或相应的监测手段。 在同步传送时,无论接收或发送,都要求x1时钟,即时钟频率和波特率一致。发送方除了传送数据外,还要把时钟信号同时传送。串行接口芯片UART和USARTUART通用异步收发器(Universal Asynchronous Receiver-Transmitter)USART通用同步异步收发器(Universal Synchronous-Asynchronous Receiver-Transmitter)6.2 80c51串行口51单片机的串口为:可编程/全双工/异步串行口=”SBUF”管脚:Rxd=P3.0;Txd=P3.1串口控制:SCON(98H);PCON(87H)不可位寻址!6.2 80c51串行口串口工作方式:SM2:多机通信控制位主要用于方式2/3,若允许多机通信,则为1,然后依据接收到的第九位数据的值来决定从机是否接收主机的信号。串口数据寄存器:SBUF串口的波特率:方式2:波特率(方式2)=(2MOD/64)fosc方式1和方式3的波特率都由定时器1的溢出率来决定:波特率(方式1/3)=(2MOD/32)T1溢出率 T1溢出率=(fosc/12)/(2k-初值) T1为方式0:k=13; T1为方式1:k=16; T1为方式2/3:k=8;6.2 80c51串行口方式0移位寄存器输入/输出方式: 是用同步的方式串行输出或串行输入数据,但是和同步通信不是一回事,因为它不能插入或检出同步字符,此时的串口相当于一个并入串出(发送)或串入并出的移位寄存器。 串行数据通过RXD线输入或输出,也就是接到外部移位寄存器的串行输入或串行输出;而TXD专用于输出时钟脉冲给外部移位寄存器; 方式0可用来同步输出或接收8位数据,波特率固定为fosc/12;此时SM2/RB8/TB8都不起作用; 方式0的发送操作是
展开阅读全文