




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第一节 汇编语言与指令系统一 、汇编语言程序设计的重要性 对于要求反应灵敏性高的实时控制系统以及要求体积小系统小的许多“电脑化”产品,应用汇编语言特别好。二、MCS51系统单片机的指令系统 通常用符号指令(即汇编语言)来描述计算机的指令系统。MCS51的指令系统有42种操作码助记符,用来描述33种操作功能(因为有的操作功能可用多种助记符)共有111条指令。1、指令分类、指令分类 按字节数分:按字节数分: 49条 单字节指令 操作码 45条 双字节指令 操作码 数据或寻址方式 17条 三字节指令 操作码 数据或寻址方式 数据或寻址方式 按指令执行时间分:按指令执行时间分: 64条 单周期指令 1
2、2T 45条 双周期指令 24T 2条 四周期指令(乘除) 48T 按功能分:按功能分: 数据传送类 27条 1 算术运算类 24条 SWAP 逻辑运算类 24条 + 1 控制转移类 17条 + 5 判位转移指令 布尔处理类 17条 52、常用的缩写符号、常用的缩写符号 在描述MCS51指令系统的功能时,我门经常使用下面的缩写符号,其意义如下: A 累加器ACC * 乘 AB 累加器ACC和寄存器B组成的寄存器 / 除 direct 直接地址 与#data 立即数,表示一 个常数 或 间接寻址 异或 大于 不等于 传送 寄存器 ( ) 寄存器内容() 由寄存器寻址的存储器单元内容( ) 寄存器
3、的内容取反 r r r 指令编码中r r r三位值由工作寄存器Rn确定, R0R7对应的r r r为000111。$ 指本条指令起始地址(指令地址)rel 相对偏移量,其值为128 +127 第二节第二节 寻址方式寻址方式 指令给出参与运算的数据的形式称为寻址方式。MCS51的指令系统包含了以下6种指令寻址方式。 一一 、立即寻址、立即寻址 指令字节中包含了 操作数,该操作数便被 称为立即数。 例如 MOV A, #70H 其指令执行过程见左图二、寄存器寻址二、寄存器寻址 由指令指出某一寄存器(R0R7 、 A 、 B 、 CY 、 AB 、 DPTR)的内容作为操作数。 例如 INC R0;
4、 (R0)+ 1 R0 其指令执行过程见下图:三、寄存器间接寻址三、寄存器间接寻址 由指令指出某一寄存器(R0 、R1 、 DPTR)的内 容作为操作数的地址。访问的存储空间:内部RAM(00H0FFH),外部RAM。 如 ANL A,R0;(A)(R0) A 其指令执行过程见下图: 四四 、直接寻址、直接寻址 指令中含有操作数的直接地址,该地址表达参与传送或运算的数据所在的字节单元或位单元的地址。此方式可访问以下四种存储空间: 特殊功能寄存器SFR(只能用直接寻址) 内部数据RAM 低 128B(00H7FH) 位地址空间 程序存储器(0000H0FFFFH) 如 ANL 70H,#48H;
5、(78H)48H 70H 其指令执行过程见下图:五、基寄存器加变址寄存器间接寻址五、基寄存器加变址寄存器间接寻址 即以PC或DPTR为基寄存器,以A作为变址寄存器,二者间内容相加形成16位的地址,该地址即为操作数的地址。访问空间是程序存储器。 例 MOVC A,A+PC; (A)+(PC) A MOVC A,A+DPTR;(A)+(DPTR) A六、相对寻址六、相对寻址 (PC)+指令中的偏移量rel(128+127) 转移地址。 例 JC 80H;C=1时执行过程如下图所示: 七、七、MCS51不同存储空间与所用指令及其寻址方式的不同存储空间与所用指令及其寻址方式的对应关系对应关系 见表2-
6、5八、数据操作八、数据操作 MCS51系列单片机能对位、半字节、字节和双字节数据进行各种操作。为保存数据操作的结果标志, MCS51系列单片机在特殊功能寄存器中包含一个状态字寄存器PSW,其格式和功能如下:进位标志或位处理机的累加器C辅助进位标志用户标志位工作寄存器选择高 位工作寄存器选择低 位溢出标志用户标志位进位标志第三节第三节 数据传送类指令数据传送类指令 数据传送类指令有29条,是指令系统中量最多、使 用也最多的指令。其数据传送操作如下图所示:direct (直接寻址)Ri(间接寻址)Rn寄存器data立即数累加器A一一 、以累加器、以累加器A为目的操作数的指令(为目的操作数的指令(4
7、条)条) 机器码MOV A , Rn ; 1110 1r r r (Rn)(A)MOV A , direct ; 1110 0101 (direct)(A) directMOV A , Ri ; 1110 011i (Ri)(A)MOV A , #data ; 1111 0100 #datd(A) #data 其中 r r r R0R7 000 R0 001 R1 010 R2 011 R3 100 R4 101 R5 110 R6 111 R7 i=0 时 R0 R0 i=1 时 R1 R1 二、二、以以Rn为目的操作数的指令(为目的操作数的指令(3条)条) MOV Rn , A ; (A)
8、 (Rn ) MOV Rn , direct ; (direct ) (Rn) MOV Rn , #data ; #data (Rn) 三、以直接寻址的单元为目的操作数的指令(三、以直接寻址的单元为目的操作数的指令(5条)条) MOV direct , A ; (A) (direct) MOV direct , Rn ; (Rn) (direct) MOV direct , direct; 85H 源地址 目的地址 MOV direct , Ri ; (Ri) (direct) MOV direct , #data ; #data (direct)四、以寄存器间接寻址的单元为目的操作数的指令四
9、、以寄存器间接寻址的单元为目的操作数的指令 (3条)条) MOV Ri , A; (A) (Ri) MOV Ri , direct; (direct) (Ri) MOV Ri , #data ; #data (Ri) 若direct(直接地址)是P0口P3口,则表明是对口 进行操作 例 MOV P1 , A ; (A) (P1口)若不写P1口, 指令可写成 MOV 90H , A 以上指令中,累加器A特别重要。因为CPU对它具有寄存器所没有的操作指令五、五、16位数据传送指令位数据传送指令 MOV DPTR ,#data16; 90H 高8位 低8位 即 高8位DPH 低8位DPL 例 设(7
10、0H)=60H,(60H)=20H,P1口为输入口,当前(P1)=0B7H,执行下面程序的结果是什么? MOV R0,#70H;70H R0 R0 MOV A , R0;(R0)=(70H)=60H A MOV R1,A ; (A)=60H R1 R1 MOV B , R1;(R1)=(60H)=20H B MOV R0,P1 ;(P1)=0B7H (R0)= (70H)=0B7H (70H)=0B7H (60H)=20H (B)=20H (A)=60H (R1)=60H (R0)=70H 执行前: 内部 RAM : 60H 20H : 70H 60H : 执行后: 内部 RAM : 60H
11、20H : 70H B7H :六、栈操作指令六、栈操作指令 1 、进栈指令 PUSH direct;(SP)+1 (SP),(direct) (sp)例 设 (SP)=60H (ACC)=30H (B)=70H执行下述指令 PUSH ACC ;(SP)+1 (SP) 即61H (SP), (ACC)=30H (SP)=(61H) PUSH B ;(SP)+1 (SP) 即62H (SP), (B)=70H (SP)=(62H) 结果 (61H)=30H (62H)=70H (SP)=6 栈及堆栈指针的变化见下图: SP+162H 70HSP+161H 30H SP60H SP62H 70HSP
12、161H 30HSP160H 2 、退栈指令 POP direct; (SP) (direct) , (SP)1 (SP) 例 设 (SP)=62H (62H)=70H (61H)=30H 执行下述指令 POP DPH ; (SP)=(62H )=70H (DPH ) , (SP) 1 (SP) 即61H (SP ) POP DPL ; (SP)=(61H )=30H (DPL ) , (SP) 1 (SP) 即60H (SP ) 结果 (SP)=60H (DPTR)=7030H 栈及堆栈指针的变化见上图。 七、字节交换指令七、字节交换指令 XCH A,Rn; (A)(Rn) XCH A,di
13、rect; (A)(direct) XCH A,Ri ; (A)(Ri) ) 八、半字节交换指令八、半字节交换指令 XCHD A,Ri ; (A)03(Ri) )03 SWAP A ; (A)03(A )47 例 (A)=15H (R0)=30H (30H)=34H XCHD A,R0 结果 (A)=14H (30H)=35H 九、累加器九、累加器A与外部数据存储器传送指令与外部数据存储器传送指令 MOVX A,DPTR;(DPTR) (A)MOVX A,Ri ;(P2)(Ri) (A) MOVX DPTR,A ;(A) (DPTR)MOVX Ri ,A ;( A )( (P2)(Ri) 十、
14、查表指令十、查表指令 1 、 MOVC A,A+PC (A)+(PC) (A) 例 (A)=30H 指令 1000H 83H MOVC A,A+PC执行后的结果 (PC)+(A)=(1001H+30H) =(1031H) (A) 显然PC与该查表指令的地址有关, (A)=00H0FFH(256),因此所查的表格只能存放在该查表指令以下的 256单元内,表格的大小也受到此限制。 例 ORG 8000H 8000H E430 MOV A ,#30H 8002H 83 MOVC A,A+PC : : ORG 8030H DB 41H,42H,43H, 44H,45H DB 46H,47H,48H,
15、49H,4AH : : (PC)=8003H (A)=30H (PC)+(A)=(8003H+30H)=(8033H)=44H 44H (A) 即 (A)=44H 2 、 MOVC A,A+DPTR;(A)+(DPTR) (A) 显然上述指令与指令存放地址无关,因此所查的表格的大小及位置可在程序存储器中的任意位置。十一、数据传送类指令汇总一览表十一、数据传送类指令汇总一览表 见表3-1第四节第四节 算术操作指令算术操作指令 算术操作类指令有24条。 一、加法指令一、加法指令 1 、不带进位的加法指令 ADD A,Rn ;(Rn)+(A) (A)ADD A,direct ;(direct)+(A
16、) (A) ADD A,Ri ;(Ri)+(A) (A)ADD A,#data ;#data+(A) (A) 对标志位的影响: 指令执行后 累加器中 A7 有进位,则 Cy=1 否则 Cy=0 A3 有进位,则 AC=1 否则 AC=0 当 A6 有进位A7 无进位或 A7有进位A6无进位时, 则 OV=1 否则 OV=0 当ACC中有奇个“1”时,P=1;有偶个“1”时,P=0 例 (A)=53H (R0)=0FCH 执行指令 ADD A, R0 后 0101 0011 + 1111 1100 1 0100 1111 Cy OV=0 AC=0 P=1 (A)=4FH 2、带进位的加法指令 A
17、DDC A,Rn ; Cy+ (Rn)+(A) (A)ADDC A,direct ; Cy+ (direct)+(A) (A) ADDC A,Ri ; Cy+ (Ri)+(A) (A)ADDC A,#data ; Cy+ #data+(A) (A) 影响标志位:( Cy 、OV 、AC 、P)同不带进位的加法指令。 二、减法指令(只有带进位的减法指令)二、减法指令(只有带进位的减法指令) SUBB A,Rn ; ( A)(Rn)-Cy (A)SUBB A,direct ; ( A)(direct)-Cy (A) SUBB A,Ri ;( A)(Ri)-Cy (A) SUBB A,#data ;
18、( A)#dataCy (A) 影响标志位: Cy :A7 有借位,则 Cy=1 否则 Cy=0 AC: A3 有借位,则 AC=1 否则 AC=0 OV: A6 有借位A7 无借位或 A7有借位A6 无借位时,则 OV=1 否则 OV=0 P: ACC中有奇个“1”时,P=1; 有偶个“1”时,P=0 三、加三、加 1指令指令 INC A ;(A)+1 (A) INC Rn ;(Rn)+1 (Rn) INC direct ;(direct)+1 (direct) INC Ri ;(Ri)+1 (Ri) INC DPTR ;(DPTR)+1 (DPTR) 注意:若原数为0FFH,则+1后变成
19、00H。 此类运算不影响任何标志位(除 INC A 对 P 有影响外)。当修改输出口Pi时, 原来口数据的值将从口锁存器读入,而不是读引脚. 四、减四、减 1指令指令 DEC A ;(A)-1 (A) DEC Rn ;(Rn)-1 (Rn) DEC direct ;(direct)-1 (direct) DEC Ri ;(Ri)-1 (Ri) 注意:若原数为00H,则-1后变成 0FFH。 此类运算不影响任何标志位(除 INC A 对 P 有影响外)。当修改输出口Pi时,原来口数据的值将从口锁存器读入,而不是读引脚。 五、其他算术操作指令五、其他算术操作指令 1 、累加器内容十进制调整指令 D
20、A A ;不影响溢出标志 该指令对A的上一条加法指令所得的结果进行调整,使它调整为压缩BCD码。 操作过程是: 若(A)309(AC)=1,则 (A)+06H (A) 若(A)749(Cy)=1,则 (A)+60H (A) 注意: 不能用DA A 对十进制减法操作的结果调整。 借助Cy可实现多位BCD数相加(ADDC)。 2 、乘法指令 MUL AB;积的高8位 B,积的低8位 A若积大于255 OV=1 否则 OV=0; Cy0 3 、除法指令 DIV AB;A/B 商 A,余数 B 若 B=0 则 OV=1 否则 OV=0; Cy0 六、算术操作类指令汇总一览表六、算术操作类指令汇总一览表
21、 见表3-2第五节第五节 逻辑操作类指令逻辑操作类指令 逻辑操作类指令有24条。 一、与指令一、与指令 ANL A,Rn ;(A)(Rn) (A) ANL A,direct ;(A)(direct ) (A) ANL A,Ri ;(A)(Ri) ) (A) ANL A,#data ;(A) #data (A) ANL direct , A ; ( direct)(A ) ( direct )ANL direct,#data;(direct ) #data ( direct ) 二、或指令二、或指令 ORL A,Rn ;(A)(Rn) (A) ORL A,direct ;(A)(direct )
22、 (A) ORL A,Ri ;(A)(Ri) ) (A)ORL A,#data ;(A) #data (A) ORL direct , A ; ( direct)(A ) ( direct )ORL direct,#data;(direct ) #data ( direct) 三、异或指令三、异或指令 XRL A,Rn ;(A)(Rn) (A) XRL A,direct ;(A) (direct ) (A)XRL A,Ri ;(A) (Ri) ) (A)XRL A,#data ;(A) #data (A) XRL direct , A ; ( direct) (A ) ( direct )XR
23、L direct,#data;(direct ) #data ( direct ) 上述三组指令(ANL、ORL 、 XRL)中,若以输出口Pi作 为目的操作数时,读入原始数据来自口锁存器,而非引脚。四、四、A操作指令操作指令 1 、取反指令 CPL A 2 、清零指令 CLR A 3 、左循环指令 RL A 4 、右循环指令 RR A 5 、带进位左循环指令 RLC A 6 、带进位右循环指令 RRC A 第36条操作指令功能见图3-1。 五、逻辑操作类指令汇总一览表五、逻辑操作类指令汇总一览表 见表3-4第六节第六节 程序转移类指令程序转移类指令 归入本类指令有17条(也可22条,此时位转
24、移指令可归入此类)。 一、无条件转移指令一、无条件转移指令 1 、绝对转移(短跳转)指令、绝对转移(短跳转)指令 AJMP addr11(标号);(PC)+2 (PC), 指令中的a10a0 (PC)100 目的地址范围:AJMP指令后面一条指令的同一个 2KB区域的程序存储器中。 PC AJMPa10a8 a7a0PC+2 H 2KB 2 、 长转移(长跳转)指令长转移(长跳转)指令 LJMP addr16(标号);指令中的a15a0 (PC) 目的地址范围:64KB区域的程序存储器内任意单元。 3 、 相对短转移(相对跳转)指令相对短转移(相对跳转)指令 SJMP rel(标号);(PC)
25、+2 (PC), (PC)+ rel (PC) 注: rel是有符号数,其范围为-128 rel+127 目的地址=源地址+2+ rel例 KRD: SJMP PKRD 若 KRD=0100H PKRD=0123H 则 0123H=0100H+2+rel rel=21H 若 KRD=0100H PKRD=00F0H 则 0123H=0100H+2+rel rel=0FFEEH rel=0EEH P C S JM P re lP C + 2 H -126+129-128+127转移地址范围4 、相对长转移(散转)指令、相对长转移(散转)指令 JMP A+DPTR;(DPTR)+(A) (PC)
26、利用此指令能实现程序在64KB程序存储器内的散转。 例 (A)0,2,4,6,8,TAB=1800H,请 分析执行下列指令后PC的变化情况 MOV DPTR,#TAB;(DPTR)=1800H JMP A+DPTR;(1800H+(A) (PC) : : 1800H TAB:AJMP 100H ; 指令中的a10a0 (PC)100, (PC)1511不变 AJMP 200H AJMP 300H AJMP 400H AJMP 500H 该段程序执行后,若(A)=0,程序将转移到1800H ,执行完 AJMP 100H 后, (PC)1511 =0001 1B,(PC)100 = 100 000
27、0 0000 B (PC)=0001 1100 0000 0000B=1900H二、无条件转移指令二、无条件转移指令 1 、测试条件符合转移指令、测试条件符合转移指令 转移条件 JZ rel ; (A)=0 JNZ rel ; (A)0 JC rel ; Cy =1 JNC rel ; Cy =0 转移条件 JB bit,rel ; (bit)=1 JNB bit,rel ; (bit)=0 JBC bit,rel ; (bit)=1, 执行后 0 (bit) 条件满足转移否则顺序执行 2 、比较不相等转移指令、比较不相等转移指令 CJNE A ,direct,rel CJNE A ,#dat
28、a ,rel CJNE Rn ,#data ,rel CJNE Ri,#data ,rel 判Cy:当第一操作数第二操作数时, Cy =1 否则 Cy=0 例: CJNE A ,#60H,NEQ ;(A)60H 转至 NEQ : ;(A)= 60H 处理程序 : NEQ:JC LOW ;(A) 60H 处理程序 : LOW: ; (A) 60H 处理程序 : : 3 、减、减1不为不为 0转移指令转移指令 DJNZ Rn ,rel;(Rn)-1 (Rn) 若 (Rn) =0 则 (PC)+2 (PC) ; (Rn) 0 则 (PC)+2+rel (PC) DJNZ direct ,rel;(d
29、irect)-1 (direct) 若 (direct) =0 则 (PC)+3 (PC) ; (direct) 0 则 (PC)+3+rel (PC) 例 延时程序START: SETB P1.0 ;1 P1.0 DL: MOV 30H,#30H DL0: MOV 31H,#0F0H DL1: DJNZ 31H,DL1 DJNZ 30H,DL0 CPL P1.0 ;0 P1.0 AJMP DL P1.0输出波形见图3-2。三、调子指令三、调子指令 1 、绝对调子(短调用)指令、绝对调子(短调用)指令 ACALL addr11; (PC)+2 (PC) , (SP)+1 (SP) , (PC7
30、0) (SP) ; (SP)+1 (SP) , (PC158) (SP) ;指令中的2KB区域地址 a100 ( PC100) 2 、长调子(长调用)指令、长调子(长调用)指令 LCALL addr16; (PC)+3 (PC) , (SP)+1 (SP) , (PC70) (SP) ; (SP)+1 (SP) , (PC158) (SP) ; 指令中地址 a150 ( PC)3 、返主(返回)指令 RET ; (SP) (PC158) , (SP)1 (SP) , (SP) (PC70) , (SP)-1 (SP) 不影响任何标志,一般与ACALL,LCALL指令相连。 4 、中断返主(返回
31、)指令 RETI ;除RET指令的功能外,还清除内部相应 的中断状态寄存器。 四、空操作指令四、空操作指令 NOP ; (PC)+1 (PC) , 不影响状态。五、程序转移类指令汇总一览表五、程序转移类指令汇总一览表 见表3-7第七节第七节 位操作类指令位操作类指令 Cy作为布尔处理机的累加器以RAM和SFR的位寻址区的位单元作为操作数。 一、位传送指令一、位传送指令 MOV C ,bit ;(bit) (C) MOV bit,C ; (C) (bit) 二、位逻辑操作指令二、位逻辑操作指令 1、位变量修改指令 CLR C ; 0 (C) CLR bit ; 0 ( bit ) CPL C ;
32、 (C) (C) CPL bit ; ( bit ) ( bit ) SETB C ; 1 (C) SETB bit ; 1 ( bit ) 2、逻辑操作指令 ANL C ,bit ;(C)(bit) (C) ANL C ,/bit ;(C)(bit) (C) ORL C ,bit ;(C)(bit) (C) ORL C ,/bit ;(C)(bit) (C) 三、位条件转移指令三、位条件转移指令 见测试条件符合转移指令 四、位操作类指令汇总一览表四、位操作类指令汇总一览表 见表3-8。 再次重申一下:把输出口Pi作为目的操作数的指令中,原 来口数据的值将从口锁存器读入,而不是从引脚读入。这些
33、 指令是:ANL;ORL;XRL;JBC;CPL;INC; DEC;DJNZ;MOV Px.y , C; CLR Px.y 和 SETB Px.y 。第八节第八节 汇编语言源程序的格式和伪指令汇编语言源程序的格式和伪指令 一、汇编语言源程序的格式汇编语言源程序的格式 1、指令格式、指令格式: 操作码 操作数1, 操作数2, 操作数3 指令操作码助记符 2、标号和注释、标号和注释 标号加在指令以前,它必须以字母开始,后跟18个 字母或数字,并以冒号“:”结尾。标号不能与汇编保留 符号重复,标号的值是它后面的指令存储地址。 注释是对某一条指令或某一段程序的功能说明,它必 须以分号“;”开始,如果一
34、行写不下,可以另起一行, 但都必须以分号“;”开始,下面为含有标号和注释的程 序行: 标号:操作码 操作数1, 操作数2, 操作数3;注释 二、伪指令二、伪指令 伪指令也称汇编指令,大多数伪指令在汇编时不产生机器语言指令,它仅提供汇编控制信息。以下是几种常用的伪指令。 1、ORG 指令指令 格式: ORG m 十进制或十六进制数 它是定位伪指令,表明(汇编地址)生成的机器指令起始存储器地址为m。 2、END 指令指令 格式: END 或 END 标号 它是结束汇编伪指令,表明汇编到此结束。 3、DB 指令指令 格式: 标号 DB X1, X2 , X3 , , Xn 它是定义字节伪指令, Xi
35、为单字节数据可用十进制或十六进制数、 表达式或单引号“ ”所括起来的一个字符串表示。 例如 ORG 1000H DB ASCII 1000H A S C I I程序存储器 4、DW 指令指令 格式: 标号 DW Y1, Y2 , Y3 , , Yn 它是定义字伪指令, Yi为双字节数据,其表达方式同DB中的Xi ,每个字的低8位先放, 高8位后放 5、DS 指令指令 格式: 标号: DS X 数字 它是定义保留字节数伪指令, 它表明应保留X个单元的字节数。 6、bit 指令指令 格式: 标号 DS 项 它是定义某特定位标号的伪指令, 项是所定义的位,经定义后可用标号来代替项所定义的位。第九节第
36、九节 算术逻辑处理程序算术逻辑处理程序 例3-2 多字节无符号数相加。设被加数与加数已分别在以ADR1与ADR2为初址的片内数据存储器区域中,自低字节起,由低到高依次存放;它们的字节数为L;要求加得的和放回原放被加数的单元。 程序的流程框图见图3-5 相应的程序如下: MOV R0,#ADR1 | MOV R0,A MOV R1,#ADR2 | INC R0 MOV R2,#L | INC R1 CLR C | DJNZ R2,LOOPLOOP:MOV A,R0 | DONE: ADDC A,R1设 ADR1=30H,ADR2=40H,L=03H,则程序执行过程为: (R0)=30H (R1)
37、=40H (R2)=03H CY=“0” (R0)A,即(30H)A(R1)+(A) A 即 (40H)+(30H)A A (R0)= (30H) (R0)+1 (R0)即30H+1=31H,31H (R0) (R1)+1 (R1)即40H+1=41H,41H (R1) R21 R2 即 3 1 =2 R2 判R2=0? (R2)=02H0转至LOOP即 (R2)=01H0转至LOOP即 (R2)=0DONE R030H R140H 第十节第十节 数制转换程序数制转换程序 例 3-11 CJNE A,#09H,NEQ SJMP LOW NEQ: JC LOW ADD A,#37H SJMP D
38、ONE LOW: ADD A,#30H DONE: 子程序设计中参数传递的方法用下面例子说明一、用工作寄存器或累加器来传递参数一、用工作寄存器或累加器来传递参数 例 3-13 将某BCD码数据转换为ASCII码的子程序。 TRANS1: MOV DPTR,#TAB MOVC A,A+DPTR RET TAB: DB 30H,31H,32H,33H,34H DB 35H,36H,37H,38H,39H TRANS2: INC A MOVC A ,A+PC RET TAB: DB 30H,31H,32H,33H,34H DB 35H,36H,37H,38H,39H 二、用指针寄存器来传递参数二、用
39、指针寄存器来传递参数 MOV R0,#ADR1 MOV R1,#ADR2 MOV R2,#L CLR C LOOP:MOV A,R0 ADDC A,R1 MOV R0,A INC R0 INC R1 DJNZ R2,LOOP RET三、用堆栈来传递参数三、用堆栈来传递参数 主程序:进栈 PUSH 子程序:出栈 POP TRANS3:MOV R0,SP DEC R0 DEC R0 XCH A ,R0 MOV DPTR,#TAB MOVC A, A+DPTR XCH A ,R0 RET TAB: DB 30H,31H,32H,33H,34H DB 35H,36H,37H, 38H,39H 例:把内
40、部单元的RAM中50H压缩BCD码转换成2位ASCII码,转换结果存放于R1指向的2个内部RAM的单元中。 BASC: MOV A,50H SWAP A ANL A,#0FH PUSH ACC ACALL TRANS3 POP ACC MOV R1,A INC R1 MOV A,50H ANL A,#0FH PUSH ACC ACALL TRANS3 POP ACC MOV R1,A DONE: 第十一节第十一节 多分支转移(散转)程序多分支转移(散转)程序 单片机可方便的实现很多分支出口的转移,也称散转,在多种程序中用得很多,其示意图见图 3-7 例 3-15 设计有256路分支出口的转移地
41、址,要转移到某分支的信息存放在R2中。 MOV DPTR,#TAB MOV A,R2 CLR C RLC A JNC LOW INC DPH LOW: MOV R3,A MOVC A ,A+DPTR PUSH A MOV A,R3 INC A MOVC A ,A+DPTR RETTAB: DW ADDR 00,ADDR 01,ADDR 02, ADDR 0FFH例如 转移分支为第81H路,则DPTR、SP指针变化如下: SP Addr81H815 Addr81H07 SP 程序ROM内部RAM第十二节第十二节 延时程序延时程序 例 3-16 设计一延时程序,延时时间为1ms。 (设晶振为12M
42、HZ) DELAY1:MOV R1,#0AH;1 DL2:MOV R2,#18H ;1 DL1:NOP ;1 NOP ;1 DJNZ R2,DL1 ; 2 DJNZ R1,DL2 ;2 RET 延时时间= 1+ 1+(1+1+2)24+2 10+2 1s = 993 s =0.993ms第十三节第十三节 定时器定时器 / 计数器应用程序计数器应用程序例 3-18 要求利用单片机内部的定时器 / 计数器,达到 1min 延时。程序准备工作: 1min 延时,显然用一个定时器 / 计数器 不行,因用T0作定时不发生中断(定时 1ms ), T1计数6000次 (600001ms=1min)发生中断
43、,因此要 对T0 、T1相应的SFR进行设置。 1、方式控制字(TMOD) T0不用门控,方式1定时,则(TMOD)03=0001B T1不用门控,方式1计数,则(TMOD)47=0101B即(TMOD)=01010001B2、16位计数器的初值确定位计数器的初值确定T0 :1ms=65536X 03E8H=10000HX X=0FC18H TH0=0FCH TL0=18H T1 :60000=65536X 0EA60H=10000HX X=15A0H TH1=15H TL1=0A0Ht = (216x)s 12 fosc = (655366x)s 12 fosc 晶振频率计数初值3、确定控制
44、寄存器、确定控制寄存器TCON及中断允许控制寄存器及中断允许控制寄存器IE EA=1 ET1=1 即 IE=88H TR0=1 TR1=1 中断入口地址:001BH D7 D6 D5 D4 D3 D2 D1 D0 IE EA / ET2 ES ET1 EX1 ET0 EX0 D7 D6 D5 D4 D3 D2 D1 D0 TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 4、程序框图、程序框图 主程序框图T0 、T1 初始化T1 引脚清零允许T0 、T1工作程序工作1ms定时到?NY1ms定时到?T1 计数值+1重置TH0、TL0初值 继续 N中断子程序框图置位1min
45、时间到的位标志中断返回 5、程序清单 见 P126127第十三节第十三节 外部中断应用程序外部中断应用程序 例 3-20 某工业监控系统,具有温度、压力、PH值等多路监控功能。在PH7时将向CPU申请中断,CPU相应后令P3.0引脚输出高电平,经驱动,使加碱管道电磁阀接通1 s,以调整PH值。(0003H是 INT0的中断入口地址)温度1超限?压力超限?PH超限?温度2超限?中断返回中断子程序散转框图转温超1服务程序转温超2服务程序转压超服务程序转PH超服务程序PH超限服务程序框图保护现场中断返回加减1 s撤除中断恢复现场习题 1 、多字节无符号压缩BCD码数相加。设被加数与 加数已分别在以A
46、DR1与 ADR2为初址的片内数据 存储器区域中,自高字节起,由高到低要依次存放;它们的字节数为L;求加得的和放 回原放被加数的单元。 2 、请写出例3-3的程序流程框图,并简述程序执行 过程。 3 、试改用CJNE指令重编例3-7的程序。第一节第一节 最小系统与程序存储器的扩展最小系统与程序存储器的扩展 MCS5151单片机在扩展时,其引脚构成三总线结构:地址总线AB(P2、P0口)、数据总线DB(P0口分时复用)和控制总线CB(P3口及P1口部分引脚)。 各种扩展电路的外接芯片都通过该三总线与单片机连接。从图4-1中可看出P0分时复用地址总线和数据总线,ALE连接至地址锁存器的使能端。当A
47、LE为高时,锁存器内容更新;当ALE 时,实现锁存。因而可看出当ALE为高时,P0口输出地址线A0A7,当ALE 时, 锁存在地址锁存器的输出端,从而达到分时复用的目的。 当外接芯片过多超过总线的驱动能力时,系统将不能可靠工作,此时因加用总线驱动器。常用的单向驱动器有74LS244、74LS240(带反向输出)、 74LS241;双向总线驱动器有74LS245图4-2列出了74LS244、 74LS245两种芯片的引脚图。从图中可看出: 74LS244: xAx输入、xYx输出,且是三态驱动,并分成二组分别 由1G、2G 控制。 74LS245:双向驱动 A B 当G=“0”且DIR=“1”时
48、,AB(输出允许), 当G=“0”且DIR=“0”时,BA(输入允许)。 图4-3是74LS244、74LS245用于MCS51总线驱动器时的具体连接图。 从图中可看出:P0口分时复用数据总线(有输入、输出),因此要用双向驱动器74LS245。 故当PSENRD=“0”即DIR=“0”时,BA 即A/D P0口, 当PSENRD=“1”即DIR=“1”时,AB 即P0口A/D (数据/地址)。 P2口只要加用74LS244且1G=2G=“0”,保证任何时候P2口A。 一、最小系统一、最小系统 图4-4示出了8031的最小系统。由于8031片内无ROM,因此我们要用片外程序存储器来存放程序。图中
49、2716用作片外程序存储器、74LS373用作地址锁存器,这样系统就要用到地址和数据总线。下面我们将按照地址总线、数据总线、控制总线的具体连接方式来说明8031是如何和片外芯片相连接的,在说明图4-4之前,让我们先了解一下常用的EPROM芯片和地址锁存器以及8031的工作时序。1、EPROM芯片芯片 常用EPROM芯片有2716(2k8bit)、 2732(4k8bit)、 2764(8k8bit)、27128(16k8bit)、 27256(32k8bit)、 27512(64k8bit)等,图4-6所示的是常用EPROM芯片的引脚图。其引脚说明与工作方式为: 引脚说明 A0A15:地址线。
50、其中2716为A0A10 、 2732为 A0A11 、2764为A0A12 、 27128为A0A13、 27256为A0A14、 27512为A0A15 。 O0O7 :输出数据线。 CE :片选信号,低电平有效。 VPP :编程电源端。 PGM:编程控制信号。 VCC :电源端。+5V GND:接地端。 工作方式 见表4-1 2、地址锁存器、地址锁存器 常用的地址锁存器芯片有74LS373、74LS273、8282、8212等。 74LS373 74LS373是8D锁存器,其结构示意图见图4-7。 74LS273 带清除端CLR的8D触发器,当CLR=“0”时,D=“0”,CLK在上升沿
51、时触发器内容更新。 74LS373、74LS273、8282与MCS51的连接 见图4-9。 3、工作时序、工作时序 最小系统的工作时序见图4-5,从图中可看出: ALE 时,PCL输出锁存(ALE=“1”时PCL 出现在P0口、 PCH出现在P2口上)。 PSEN=“0”时,程序存储器根据地址总线上出 现的地址(此时为PC 值) 输出指令代码,在 时 通过数据总线把指令输入到 单片机内。 在一个机器周期内ALE、PSEN两次有效,即在一个机 器周期内可两次取指。 4、MCS51单片机与外围芯片的连接单片机与外围芯片的连接 单片机扩展时的三总线结构单片机扩展时的三总线结构 8031单片机与74
52、LS373连接从而构成系统扩展时的三总线结构。即P0口是数据总线(分时复用);74LS373输出地址线A0A7 、P2口输出地址线A8A15从而构成地址总线;其余各控制信号构成控制总线。(具体见图4-1、4-4)。 数据线连接数据线连接 P0.0P0.7 2716 O0O7 地址线连接地址线连接 P0.0P0.7 74LS373 D0D7 ; Q0Q7 2716 A0A7 ;P2.0 2716 A8 ; P2.1 2716 A9 ;P2.2 2716 A10 。 注意:尽管P2口有余下的引脚,但也不能再作为一般I/O口线使用。 控制线连接控制线连接 ALE 74LS373 G ;PSEN 27
53、16 OE; 74LS373 OE、2716 CE接地。 其它电路其它电路(复位、时钟见图4-4) 二、用二、用EPROM 的程序存储器扩展的程序存储器扩展 1、用单片、用单片EPROM 的扩展电路的扩展电路 对于8051、8751、9052、8752等片内含程序存储器的机型来说,图4-4便是扩展片外存储器的电路。 若扩展2K单元不够,可将图4-4中的2716改为2732、2764、27128、27256或27512等容量更大的EPROM,则扩展的容量依次为4K、8K、16K、32K、64K。当然每递升一档,地址线将多用一根,P2口更高一位口线将用于传送这位的地址信息。例如在图4-4的基础上改用2732时,添用P2.3来传递A11 ;改用2764时,再添用P2.4来传递A12 ;图4-10示出了应用27128的扩展电路 在既用片内程序存储器又有片外程序存储器的情况下,EA一般应接高电平,当PC片内程序存储器容量时,选用片内程序存储器,否则选用片外程序存储器 2、用多片、用多片EPROM 的扩展电路的扩展电路 用多片E
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 北海市检测合同范例
- 代建房屋租赁合同范本
- 企业消防合同范本
- 主体变更合同范本
- 个人建设工程合同范本
- 农村房屋验收合同范本
- 办证代理合同范本
- 代理土地合同范本
- 乳胶卷材供货合同范本
- 加工辅料采购合同范本
- AI在知识库领域的应用
- 易制毒化学品经营管理制度
- 2024年中国成人心肌炎临床诊断与治疗指南解读课件
- 全国川教版信息技术八年级下册第一单元第2节《制作创意挂件》信息技术教学设计
- 2024山东能源集团中级人才库选拔【重点基础提升】模拟试题(共500题)附带答案详解
- 中国古典风格设计
- 市政综合项目工程竣工项目验收总结报告自评
- GB/T 22919.8-2024水产配合饲料第8部分:巴沙鱼配合饲料
- T-BJCC 1003-2024 首店、首发活动、首发中心界定标准
- 网络营销推广与策划教学大纲
- 北师大版五年级数学下册教材分析解读课件完整版
评论
0/150
提交评论