《8051单片机实践与应用-指令集229.pdf》由会员分享,可在线阅读,更多相关《8051单片机实践与应用-指令集229.pdf(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 1第二章 MCS-51 的指令集及指令说明 2.1 指令集 符号定义如表 2.1 所示:表 2.1 符号定义表 符号 含义 Rn R0R7 寄存器 n0 Direct 直 接 地 址,内 部 数 据 的 地 址RAM(00H 7FH)SFR(80H FFH)B,ACC,PSW,IP,P3,IE,P2,SCON,P1,TCON,PO Ri 间接地址 Ri=R0 或 R1 8051/31 RAM 地址(00H7FH)8052/32 RAM 地址(00HFFH)#data 8 位常数#data 16 16 位常数 Addr 16 16 位的目标地址 Addr 11 11 位的目标地址 rel 相关
2、地址 bit 内 部 数 据RAM(20H 2FH)特 殊 功 能 寄 存 器 的 直 接 地 址B,ACC,PSW,IP,P3,IE,P2,SCON,P1,TCON,PO 的位 指令集,如表 2.2 所示:表 2.2 指令介绍 指令 字节 周期动作说明 算数运算指令 1.ADD A,Rn 1 1 将累加器与寄存器的内容相加,结果存回累加器 2.ADD A,direct 2 1 将累加器与直接地址的内容相加,结果存回累加器 3.ADD A,Ri 1 1 将累加器与间接地直接地址的内容相加,结果存回累加器 4.ADD A,#data 2 1 将累加器与常数相加,结果存回累加器 5.ADDC A,
3、Rn 1 1 将累加器与寄存器的内容及进位 C 相加,结果存回累加器 6.ADDC A,direct 2 1 将累加器与直接地址的内容及进位 C 相加,结果存回累加器 7.ADDC A,Ri 1 1 将累加器与间接地址的内容及进位 C 相加,结果存回累加器 8.ADDC A,#data 2 1 将累加器与常数及进位 C 相加,结果存回累加器 9.SUBB A,Rn 1 1 将累加器的值减寄存器的值减借位C,结果存回累加器10.SUBB A,direct 2 1 将累加器的值减直接地址的值减借位C,结果存回累加器 11.SUBB A,Ri 1 1 将累加器的值减间接地址的值减借位C,结果存回累加
4、器 12.SUBB A,#data 2 1 将累加器的值减常数值减借位 C,结果存回累加器 13.INC A 1 1 将累加器的值加 1 14.INC Rn 1 1 将寄存器的值加 1 15.INC direct 2 1 将直接地址的内容加 1 216.INC Ri 1 1 将间接地址的内容加 1 17.INC DPTR 1 1 将数据指针寄存器值加 1 说明:将 16 位的数据指针加 1,当数据指针的低位字节(DPL)从 FFH 溢出至 00H 时,会使高位字节(DPH)加 1,不会影响任何标志位 18.DEC A 1 1 将累加器的值减 1 19.DEC Rn 1 1 将寄存器的值减 1
5、20.DEC direct 2 1 将直接地址的内容减 1 21.DEC Ri 1 1 将间接地址的内容减 1 22.MUL AB 1 4 将累加器的值与 B 寄存器的值相乘,乘积的低位字节存回累加器,高位字节存回B 寄存器 说明:将累加器 A 和寄存器 B 内的无符号整数相乘,产生 16 位的积,低位字节存入 A,高位字节存入 B 寄存器.如果积大于 FFH,23.DIV AB 1 4 将累加器的值除以 B 寄存器的值,结果的商存回累加器,余数存回 B 寄存器 说明:无符号的除法运算,将累加器 A 除以 B 寄存器的值,商存入 A,余数存入 B.执行本指令后,进位(C)及溢出位(OV)被清零
6、为 0 24.DA A 1 1 将累加器 A 作十进制调整,若(A)3-09 或(AC)=1,则(A)3-0(A)3-0+6,若(A)7-49 或(C)=1,则(A)7-4(A)7-4+6,逻辑运算指令 25.ANL A,Rn 1 1 将累加器的值与寄存器的值做 AND 的逻辑判断,结果存回累加器 26.ANL A,direct 2 1 将累加器的值与直接地址的内容做 AND 的逻辑判断,结果存回累加器 27.ANL A,Ri 1 1 将累加器的值与间接地址的内容做 AND 的逻辑判断,结果存回累加器 28.ANL A,#data 2 1 将累加器的值与常数做 AND 的逻辑判断,结果存回累加
7、器 29.ANL direct,A 2 1 将直接地址的内容与累加器的值做 AND 的逻辑判断,结果存回该直接地址 30.ANL direct,#data 3 2 将直接地址的内容与常数值做 AND 的逻辑判断,结果存回该直接地址 31.ORL A,Rn 1 1 将累加器的值与寄存器的值做 OR 的逻辑判断,结果存回累加器 32.ORL A,direct 2 1 将累加器的值与直接地址的内容做 OR 的逻辑判断,结果存回累加器 33.ORL A,Ri 1 1 将累加器的值与间接地址的内容做 OR 的逻辑判断,结果存回累加器 34.ORL A,#data 2 1 将累加器的值与常数做 OR 的逻
8、辑判断,结果存回累加器 35.ORL direct,A 2 1 将直接地址的内容与累加器的值做 OR 的逻辑判断,结果存回该直接地址 36.ORL direct,#data 3 2 将直接地址的内容与常数值做 OR 的逻辑判断,结果存回该直接地址 37.XRL A,Rn 1 1 将累加器的值与寄存器的值做 XOR 的逻辑判断,结果存回累加器 338.XRL A,direct 2 1 将累加器的值与直接地址的内容做 XOR 的逻辑判断,结果存回累加器 39.XRL A,Ri 1 1 将累加器的值与间接地址的内容做 XOR 的逻辑判断,结果存回累加器 40.XRL A,#data 2 1 将累加器
9、的值与常数做 XOR 的逻辑判断,结果存回累加器 41.XRL direct,A 2 1 将直接地址的内容与累加器的值做 XOR 的逻辑判断,结果存回该直接地址 42.XRL direct,#data 3 2 将直接地址的内容与常数值做 XOR 的逻辑判断,结果存回该直接地址 43.CLR A 1 1 清除累加器的值为零 44.CPL A 1 1 将累加器的值反相 45.RL A 1 1 将累加器的值左移一位 46.RLC A 1 1 将累加器含进位 C 左移一位 47.RR A 1 1 将累加器的值右移一位 48.RRC A 1 1 将累加器含进位 C 右移一位 49.SWAP A 1 1
10、将累加器的高 4 位与低 4 位的内容交换。(A)3-0(A)7-4 数据转移指令 50.MOV A,Rn 1 1 将寄存器的内容载入累加器 51.MOV A,direct 2 1 将直接地地址的内容载入累加器 52.MOV A,Ri 1 1 将间接地地址的内容载入累加器 53.MOV A,#data 2 1 将常数载入累加器 54.MOV Rn,A 1 1 将累加器的内容载入寄存器 55.MOV Rn,direct 2 2 将直拉接地址的内容载入寄存器 56.MOV Rn,#data 2 1 将常数载入寄存器 57.MOV direct,A 2 1 将累加器的内容存入直接地址 58.MOV
11、direct,Rn 2 2 将常数存入直接地址 59.MOV direct1,direct2 3 2 将直接地址 2 的内容存入直接地址 1 60.MOV direct,Ri 2 2 将间接地址的内容存入直接地址 61.MOV direct,#data 3 2 将常数存入直接地址 62.MOV Ri,A 1 1 将累加器的内容存入某间接地址 63.MOV Ri,direct 2 2 将直接地址的内容存入某间接地址 64.MOV Ri,#data 2 1 将常数存入某间接地址 65.MOV DPTR,#data16 3 2 将 16 位的常数存入数据指针寄存器 66.MOVC A,A+DPTR
12、1 2(A)(A)+(DPTR)累加器的值再加程序指针寄存器的值为其所指定地址,将该地址的内容读入累加器 67.MOVC A,A+PC 1 2(PC)(PC)+1(A)(A)+(PC)累加器的值再加程序计数器的值作为其所指定的地址,将该地址的内容读入累加器68.MOVX A,Ri 1 2 将间接地址所指定外部存储器的内容读入累加器(8位地址)69.MOVX A,DPTR 1 2 将数据指针所指定外部存储器的内容读入累加器(16位地址)470.MOVX Ri,A 1 2 将累加器的内容写入间接地址所指定的外部存储器(8位地址)71.MOVX DPTR,A 1 2 将累加器的内容写入数据指针所指定
13、的外部存储器(16位地址)72.PUSH direct 2 2 将直接地址的内容压入堆栈区 73.POP direct 2 2 将堆栈弹出该直接地址的内容 74.XCH A,Rn 1 1 将累加器的内容与寄存器的内容互换 75.XCH A,direct 2 1 将累加器的值与直接地址的内容互换 76.XCH A,Ri 1 1 将累加器的值与间接地址的内容互换 77.XCHD A,Ri 1 1 将累加器的低 4 位与间接地址的低 4 位互换 布尔代数运算 78.CLR C 1 1 清除进位 C 为 0 79.CLR bit 2 1 清除直接地址的某位为 0 80.SETB C 1 1 设定进位
14、C 为 1 81.SETB bit 2 1 设定直接地址的某位为 1 82.CPL C 1 1 将进位 C 的值反相 83.CPL bit 2 1 将直接地址的某位值反相 84.ANL C,bit 2 2 将进位 C 与直接地址的某位做 AND 的逻辑判断,结果存回进位 C 85.ANL C,/bit 2 2 将进位 C 与直接地址的某位的反相值做 AND 的逻辑判断,结果存回进位 C 86.ORL C,bit 2 2 将进位 C 与直接地址的某位做 OR 的逻辑判断,结果存回进位 C 87.ORL C,/bit 2 2 将进位 C 与直接地址的某位的反相值做 OR 的逻辑判断,结果存回进位
15、C 88.MOV C,bit 2 2 将直接地址的某位值存入进位 C 89.MOV bit,C 2 2 将进位 C 的值存入直接地址的某位 90.JC rel 2 2 若进位 C=1,则跳至 rel 的相关地址 91.JNC rel 2 2 若进位 C=0,则跳至 rel 的相关地址 92.JB bit,rel 3 2 若直接地址的某位为 1,则跳至 rel 的相关地址 93.JNB bit,rel 3 2 若直接地址的某位为 0,则跳至 rel 的相关地址 94.JBC bit,rel 3 2 若直接地址的某位为 1,则跳至 rel 的相关地址,并将直接地址的位值清除为 0 程序跳跃 95.
16、ACALL addr11 2 2 调用 2K 程序存储器范围内的子程序 96.LCALL addrl6 3 2 调用 64K 程序存储器范围内的子程序 97.RET 1 2 从子程序返回 98.RET1 1 2 从中断子程序返回 99.AJMP addr11 2 2 绝对跳跃(2K 内)100.LJMP addr16 3 2 长跳跃(64K 内)101.SJMP rel 2 2 短跳跃(2K 内)-128+127 字节 102.JMP A+DPTR 1 2 跳至累加器的内容加数据指针所指的相关地址 103.JZ rel 2 2 累加器的内容为 0,则跳至 rel 所指的相关地址 104.JNZ
17、 rel 2 2 累加器的内容不为 0,则跳至 rel 所指的相关地址 105.CJNE A,direct,rel3 2 将累加器的内容与直接地址的内容比较,若不相等则跳至 rel 所指的相关地址 5106.CJNE A,#data,rel 3 2 将累加器的内容与常数比较,若不相等则跳至 rel 所指的相关地址 107.CJNE Rn,#data,rel 3 2 将寄存器的内容与常数比较,若不相等则跳至 rel 所指的相关地址 108.CJNE Ri,#data,rel 3 2 将间接地址的内容与常数比较,若不相等则跳至 rel所指的相关地址 109.DJNZ Rn,rel 2 2 将寄存器
18、的内容减 1,不等于 0 则跳至 rel 所指的相关地址 110.DJNZ direct,rel 3 2 将直接地址的内容减 1,不等于 0 则跳至 rel 所指的相关地址 111.NOP 1 1 无动作 3.1.2 常用伪指令 所谓伪指令是编译程序所提供的指令,并非汇编语言的指令,因为伪指令不占存储器地址,它只是协助程序的编译工作。ORG:用来设定编译后机器码的起始地址,如程序的开头无 ORG 伪指令,则程序的起始地址会从 00H 开始。EQU:用来定义某一符号的值,如 TEMP EQU 20H,即 TEMP=20。BIT:用来定义寄存器地址的值,如 RS BIT P3.0,即 RS=P3.
19、0。DB:用来定义某存储器的值,它是以一个字节为单位。DW:用来定义某存储器的值,它是以二个字节为单位。$:表示目前的地址,程序计数器值不变。END:程序的结束点,编绎程序遇到 END 伪指令后,就不会再继续编绎。6 第 15 章 打印机的应用 (一)打印机接口种类(1)RS232 串行接口:数据传输较慢(每次转输一个bit),适合远距离传送。(2)Centronics 并行接口:数据转输较快(每次转输8 个 bit),适合短距离传送(2m以下)。大部分打印机都采用并行接口,打印机本身为 36pin D 型母接头,而连接另一头电脑的是 25pin DB 型的公接头。1、36pin D 型母接头
20、排列如图 15-1 所示,功能如表 15.1 所示。18 17 16 15 14 13 12 11 10 987654321 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19图 15-1 36pin 打印机接头排列图 表 15.1 打印机 36pin D 型母接头引脚表 引脚 名 称 功 能 1 HILO 时,将数据送入打印机的缓冲区 2 3 4 5 6 7 8 9 LSB 打印数据输入线 MSB 10 LO 时(5s),通知 CPU 打印机已接收到且准备好接收下一个数据 11 HI 时,表示打印机正忙碌,无法接收数据,其原因有:(1)
21、正在输送数据(2)正在打印(3)OFF LINE(4)在错误状态 12 HI 时表示打印机缺纸 13 HI 时表示打印机在 ON LINE 14 LO 时,每打印完 1 行,纸张自动换行(硬件换行)送 ODH、OAH 码,纸张自动换行(软件换行)15、18、34、35 空脚 16、19、20、21、22、23、24、25、26、27、28、29、30、33 接地 31/INIT LO 时(50s)可复位打印机为起始状态,并清除缓冲区 32/ERROR LO 时表示打印机动作错误,其原因如下:(1)缺纸(2)OFF LINE(3)其他 36/SLCTIN LO 时,数据才能输入打印机 72、25
22、pin DB 型公接头与 36pin D 型母接头的接线情形如表 15.2 所示。表 15.2 25pin DB 型公接头与 36pin D 型母接头的连拉接表 36pin D 型母接头引脚号码 25pin DB 型公接头引脚号码信 号 名 称 1 1/STROBE 29 29 DATA0 DATA7 10 10/ACKING 11 11 BUSY 12 12 PE 13 13 SLCT 14 14/AUTO FEED XT 15 NC 16 逻辑接地 17 逻辑接地 18 NC 1930 1825 GND(接地返回线)31 16/INIT 32 15/ERROR 33 GND 34 NC 35 经由 4.7k 接至+5V 36 17/SLCTIN (三)打印机常用的控制码,如表 15.3 所示 表 15.3 打印机常用的控制码 ASC11 名称 二 进 码 功 能 BELL 07H 响铃 BS 08H BACK SPACE 往回消去一个 Byte HT 09H 打印头向右跳一个 TAB=9 个字 LF 0AH 打印纸向上跳一行 VT 0BH 打印纸向上跳 TAB 行 FF 0CH 打印纸向上跳一页 CR 0DH 打印头向左跳回原点