收藏 分享(赏)

MCS-51单片机原理及嵌入式系统应用汇编语言部分浙工大考点.pdf

上传人:精品资料 文档编号:10937794 上传时间:2020-01-22 格式:PDF 页数:22 大小:2.57MB
下载 相关 举报
MCS-51单片机原理及嵌入式系统应用汇编语言部分浙工大考点.pdf_第1页
第1页 / 共22页
MCS-51单片机原理及嵌入式系统应用汇编语言部分浙工大考点.pdf_第2页
第2页 / 共22页
MCS-51单片机原理及嵌入式系统应用汇编语言部分浙工大考点.pdf_第3页
第3页 / 共22页
MCS-51单片机原理及嵌入式系统应用汇编语言部分浙工大考点.pdf_第4页
第4页 / 共22页
MCS-51单片机原理及嵌入式系统应用汇编语言部分浙工大考点.pdf_第5页
第5页 / 共22页
点击查看更多>>
资源描述

1、 1 一、 MCS-51 单片机的硬件内核 1. 中央处理器 CPU 微处理器 ,简称 CPU,是计算机的核心,主要包括 运算器 、 控制器 、 寄存器组 。 具体: ALU、 PC、布尔(位)处理器;寄存器: SP、 ACC、 PSW、 DPTR 2. 算术逻辑运算单元 ALU ALU, MCS-51 单片机的运算器核心,所有算术运算和逻辑运算由他完成。 算术运算 (字节型四则运算 ) + - * / 逻辑运算 (基本逻辑运算和移位操作 ) 读锁存器指令: 将锁存器的内容取出,并进行处理,结果重新写入锁存器。 如: ANL、 ORL、 XRL、 JBC、 CPL、 INC、 DEC Q:当

2、P1 端口作为输入使用时 ,各个位对应的锁存器必须先锁存“ 1”。为什么 ? A:向锁存器写入 “1”,使对应 I/O 引脚处于高阻抗 ,则相应位的 电平由与其连 接的外部电阻决定 。 见书 p.20 图 2-7. 8 12. 特殊功能寄存器 A:相比 8051, 8052 多出了一个定时 /计数器 , 对应多出 6 个 SFR 用于控制、监视和管理这个功能单元。 9 13. 时钟与复位电路 复位信号 和 时钟信号 都是 MCS-51 单片机可靠工作的保障 。 a) MCS-51 单片机被复位后 , 其内部的各功能部件将根据特殊功能寄存器 (SFR)的初始内容工作 ; b) 时钟电路能够产生

3、MCS-51 单片机的各功能部件协调工作的基准节拍信号 (时钟信号 )。 大多数 MCS-51单片机都需要 外部复位电路 产生 复位信号 , 以及片 外振荡器 产生 时钟信号 。 复位后 , MCS-51 单片机的状态如下 : a) (PC)=0000H, 意味着 : 程序的起始地址为 0000H; b) (SP)=07H, 意味着 : 堆栈的初始栈底位于 07H; c) (PSW)=00H, 意味着 :运行程序使用的通用寄存器组选择 “组 0”; d) 4 个 8 位可编程 I/O 端口 P0P3 都为 FFH, 这些端口 D 型锁存器输出全部被锁存“ 1”, 即都为输入状态 ; e) (I

4、E)=0xx00000B, 意味着 : 所有中断被禁止 ,并禁止 CPU 响应所有中断请求; f) (IP)=xxx00000B, 意味着 : 所有中断 源的优先级 都为低优先级 g) 其它 SFR 都为 00H, 分别为对应功能部件的初始状态 ,详见 p.25 2.5.1. 一般来讲, MCS-51 复位电路包括 上电复位电路 和 软(手动)复位电路 (如下图) 。 工作原理: a) 上电复位 :打开电源瞬间, RC 串联电路开始充电 , RST 引脚处 电压快速上升 到 Vcc 电压 ( 高电平脉冲宽度大于单片机要求 复位 ) 又 通过 R 放 电 ,直到 RC 串联电路进入稳态,即 RS

5、T 保持低电平 ,单片机复 位结束并进入 运行状态 。 b) 手动复位 : 按下 PB,直接在 RST 引脚加上 +5V,单片机 进入 复位状态 ; 释放 PB, RST 被 R 拉至低电平 ,单片机 进入 运行状态 。 注:复位方式: 上电复位 、 手动复位 、 供电电源欠压复位 、 看门狗复位 。 10 为 解决因 外部 环境等因素 干扰 出现程序 “ 跑飞 ” 和意外进入 死循环 导致的 控制机构动作紊乱和死机的问题,需要 增加监控电路 ,即 监控电路 或 看门狗( Watchdog)电路 。 监控电路工作过程: 监视单片机程序运行状态,一旦出现跑飞和意外死循环 ,该电路发出单片机复位脉

6、冲,使其复位, 单片机 重新执行程序。 监控电路 的作用: a) Watchdog 定时器溢出指示 (WDO 输出 ) MAX813L 芯片内有 1 秒 Watchdog 定时器,单片机运行时,用 周期小于1 秒的脉冲信号 给 WDI 清除定时器 使其不会溢出 ,一旦 程序“跑飞”或“死机” ,定时器溢出,产生 Watchdog 复位信号给单片机。 b) 具有上电复位和手动复位功能 (RESET 输出 ); 通过内部比较器监控 Vcc,为单片机产生上电复位信号 。 可以在 MR连接一个手动复位按钮,当按钮按下, MR引脚出现低电平 ,为 单片机产生一个手工复位信号。 c) 供电电源欠压指示功能

7、 (PFO 输出 ) 外接两个电阻 R1 和 R2,与内部电压比较器 监测 电源电压 ,该比较器已与 1.25V 的内部基准电压源 连接, 一旦电源电压低于门限电压 , 产生欠压复位输 出信号 。 R1、 R2 的选取详见教材 p.28 2.5.2. 11 MCS-51 系列单片机的 一种 时钟电路 包括 片内的震荡电路 和 外部振荡器电路 两部分。还有一种 时钟电路 使用 外部 独立 时钟方式 片内震荡电路结构 MCS-51 单片机内部有一个用于构成稳定振荡器的高增益反向放大器, XTAL1和 XTAL2 分别是该 反向放大器 的 输入端 和 输出端 ,从而该 反向放大器 与 外部晶体或陶瓷

8、谐振器 一起构成一个稳定的 自激振荡器电路 。 下图中,外部并 联电容 C1 和 C2 的大小会影响 振荡器频率的稳定性 、 温度特性 以及 振荡器电路的起振速度 。 下图中 信号 ( 低电平有效进入掉电模式 ) 是特殊功能寄存器 PCON(PCON.1)的一个控制位,用于控制 MCS-51 单片机进入 低功耗掉电模式 ( Power Down Mode),这个模式下工作将关闭振荡器,单片机其他功能部件也随之停止工作,此时单片机消耗功率最低。 外部独立时钟电路 使用外部时钟源, XTAL1 是 外部时钟信号的输入端 ,而 XTAL2 引脚 悬空 ,如下图所示。使用该方式,需严格按照单片机制造商

9、提供手册,因为不同单片机提供 最高时钟频率 、 占空比 等不同。 12 可靠复位的要求 振荡周期 : 时钟电路通过 XTAL1 引脚提供给 MCS-51 单片机的振荡信号 (基准节拍 )的周期 ,记为 Tosc。 机器周期 : MCS-51 单片机一个执行单周期指令需要的时间 ,记为 Tm。 一般为振荡信号的整数倍 , 绝大多数 MCS-51 单片机的机器周期为振荡周期的 12 倍 , 即 Tm = 12Tosc 。 当 MCS-51 单片机加电后 ,且时钟电路已经工作 ,在 RST 引脚出现 宽度不小于两个机器周期 Tm(即 , 212Tosc)的高电平 ,MCS-51 单片机立即进入复位状

10、态 , 如果保持该电平 ,单片机始终处于复位状态 ,直到撤消该引脚的高电平 ,并保持低电平 , 则单片机立即进入运行状态 。 时钟信号和操作时序的关系 13 14. MCS-51 单片机的节电模式 空闲模式 : 单片机进入睡眠状态, CPU 停止取指令和执行指令操作, 但片内其他功能部件任然继续工作 。 掉电模式 : 单片机内部 RAM 中所有内容保持不变,其他所有部件包括 振荡器电路都停止工作 。 通过配置 PCON 实现选择单片机节电模式 节电模式和正常模式下消耗的电流见教材 p.31 的表 2-8。 14 二、 MCS-51 单片机的指令系统及程序设计 1. 指令概述 汇编语言优点: 执

11、行效率高 、 占用代码空间少 、 位操作指令丰富 汇编语言缺点: 难掌握 、 仅适合小型系统 MCS-51 系列单片机指令系统 ,简明高效,支持 8 位加减乘除及逻辑运算 指令,共有 111 条基本指令,其中:单字节指令 49 条,双字节指令 45 条,三字节指令 17 条; 按执行时间划分:单机器周期 64 条,双机器周期 45 条,四机器周期 2 条。 MCS-51 单片机汇编语言程序指令一般格式 : 符号地址 : 指令助记符 (目的) 操作数 1,(源) 操作数 2 ; 注释句 例如: ABC: MOV A , B ; 将寄存器 B 的内容传送到累加器 A 注意: ( 1) 符号地址 的

12、 命名规则(几乎与其他编程一样): 必须使用大小写英文字母、下划线、数字 等; _MOV: 、 ADD_6:( 合 法); 不许用加号、减号等 ; ADD+6: (非法); 不许用 MSC-51 指令助记符。 MOV: ( 非法) ; ( 2) 注释句 必须以“;”开始,其后的整行都属于注释内容; ( 3) 指令助记符 操作数 1,操作数 2详见 MCS-51 单片机指令集 ; ( 4) 其它某些特殊规则由汇编语言的编译器所确定。 Q: 为什么大多数汇编语言都需要掌握“寻址方式” ? Q: 绝大多数计算机系统的存储器系统都是相似的 , 可以分为 CPU 内部的寄存器 、 CPU 内部的数据存储

13、器 (RAM)、 片外的 (CPU 外部 )数据存储器 、程序存储器等, 不同的存储器空间需要不同的访问方式 。(对于 MCS-51 存储器对应寻址方式,见教材 p.34 表 3-1.) 2. 寻找操作数 立即 (数 ) 寻址 可访问 4 组 Rn、片内所有 RAM 及片内所有 SFR a) MOV A , #55H ; 加 “#”为数据 ,未加 “#”为地址 , A 地址 E0H b) MOV Rn, #01H ; = () Rn 为通用寄存器 c) MOV DPTR, #1FFFH ; 内部 RAM 存储器, 唯一一条 16 位传送 指令 DPTR DPH(高 8 位 寄存器 ,地址 83

14、H) direct 单片机内部 RAM 地址 可存数据 ,如 70H e) ADD A, #55H ;将立即数不考虑进位加到 A 中 f) SUBB A, #01H ;A 中的内容减去立即数,差值存入 A 中 注: 以“,”后的内容确定寻址方式,如上“,”后都为 立即数,为赋值语句 。 15 直接 (地址 )寻址 可访问 片内低 128 字节 RAM、片内 可位寻址区 及片内所有 SFR a) MOV A , 20H ; 将 20H 单元的内容送到 A 中 b) MOV Rn, 20H ; 直接地址 (20H)内容传到通用寄存器中 c) MOV direct, 30H ; 直接地址 间的数据传

15、递 d) MOV Ri, 30H ; 直接地址 (30H)内容传送到间接 寄存器 中 e) PUSH 12H ; 将直接地址 (12H)内容压入堆栈 f) POP 23H ; 将 SP 所指堆栈区内容弹出到直接地址 (23H) 寄存器 寻址 可访问片内 4 组 Rn 和 A a) MOV P1, A ; 将 寄存器 A 中内容传送到寄存器 P1 中 b) MOV P1, R4 ; 将 寄存器 R4 中内容传送到寄存器 P1 中 c) CLR A ;清零 寄存器 A 中内容 寄存器间接 寻址 访问片内所有 RAM 和 片内外 扩展 RAM 及 I/O 端口 通过寄存器间接找到操作数的地址 : M

16、OV A, Ri ; i = 0 或 1 将间接寄存器 Ri 内容作为地址,将地址所指单元内容赋给 A。 R0, R1 作为单片机内部 RAM 00H7FH 地址指针 , 也可指向 80H+的地址 。 DPTR 16 位指针 可 指向 单片机外部 RAM 0000HFFFFH 地址, 16 位, 64K。 MOV A, Ri ; 访问内部 RAM MOVX A, DPTR; 访问外部 RAM 变址 寻址 (即变址寄存器 +基址寄存器间接寻址) 访问 64K ROM 比如 已知 : 变址寄存器 A02H + 基址寄存器 DPTR0300H = 0302H(地址 ) 0302H 88H 注: 中为

17、寄存器或地址所对应单元内容 。 此时: MOVC A, A+DPTR ;将 88H 赋给 A MOVC A, A+PC ;PC 指下一条执行指令的地址 注: 区别于寄存器间接寻址 。 相对寻址 比如 : SJMP 03H ;相对短跳转 ,若此时 PC = 2003H。 结果: PC + 03H = 2006H。 位寻址 比如 : 使 27H 单元 D5 位置置一。 SETB 3DH 3DH 的计算过程: B = (C20H)08H = (27H20H)08H = 38H = 38H + 05H 注: 27H D5 位置 属于位寻址区,只能用位操作指令,需换算成位地址。 16 3. 指令系统 A

18、. 指令描述约定 Rn 通用寄存器 n = 07 Ri 间接 寻址的地址指针 i = 01 #data 8 位立即数 #data16 16 位立即数 addr16 16 位地址 addr11 11 位地址 direct 8 位直接地址 rel 带符号的 8 位偏移量 (十进制 -128127) bit 位寻址区的直接寻址位 (X) X 地址单元中的内容 , X 作为间接寻址寄存器时所指单元内容 B. MCS-51 指令 数据传送 类 指令( 29 条) 8 位数据传送指令( 15 条) MOV , MOV () , (# )注: 相同的不能互传。 16 位数据传送指令( 1 条) MOV DP

19、TR, #data16 外部数据传送指令( 4 条) MOV () , () 注: 只能传给 A,或者 A 传出 。 单片机与 ROM 间数据传送( 2 条) MOVC A, A+DPTR MOVC A, A+PC 注: 读取 ROM 中的数据 (通常以表格存放 ),只读,断电数据不丢失。 17 交换类指令( 5 条) XCH , () 注: A 与括号内内容交换(内部 RAM) 。 XCHD , Ri 注: A 与间接地址内容低四位交换。 比如: 已知 A 81H , R0 5BH , 5BH F5H ,则进行上述指令, A 中存放的是 85H 换。 SWAP ; A 中高四位和低四位交换。

20、 堆栈操作指令( 2 条) PUSH ;将直接地址的内容压入堆栈 POP ;将 SP 所指堆栈区的内容弹回直接地址 算术运算类指令( 24 条) 加法指令( 8 条) ADD , (#) ; 例如: A = A + Rn ADDC , (#) ; 例如: A = A + Rn + CY 减法指令( 4 条) SUBB , (#) ; 例如: A = A-Rn-CY BCD 码调整指令 ( 1 条) DA ;将 A 中的内容进行十进制调整 注: 一般与 DA 跟在 ADD 与 ADDC 加法指令后,不适用于减法指令。 调整过程: 与 AC(针对低四位进 /借 位)与 CY(针对进 /借位) 有关

21、 。 若 A 中 低四位 9H,或 AC = 1,则 A 中 低四位加 6H,若 有进 位,高四位加 1; 若 A 中高四位 9H,或 CY = 1,则 A 中 高 四位加 6H,若 有进位, CY = 1。 一般结果比如 : #34H 与 #89H 通过 ADD 后再 通 过 DA 为 #133H。 18 加 1 减 1 指令( 9 条) INC (); 例如: DPTR = DPTR+ 1、 (Ri) = (Ri) + 1 DEC () ; 例如: A = A - 1、 (direct) = (direct) -1 乘法指令( 1 条) MUL ; A 中放入结果的低 8 位, B 中放入

22、结果的高 8 位 除法指令( 1 条) DIV ; A 被除数, B 除数,结果商放入 A,余数放入 B 逻辑及移位类指令( 24 条) 逻辑与 指令( 6 条) ANL A , direct ; A = A 将 A 中的内容清零 CPL ;将 A 中的内容按位取反 循环移位指令( 4 条) RL ;将 A 中的 8 个位循环左移移 1 位 RR ;将 A 中的 8 个位循环 右 移移 1 位 RLC ;将 A 中的 8 个位与 CY 一起循环 右 移移 1 位 RRC ;将 A 中的 8 个位与 CY 一起循环左移移 1 位 注: 循环前,一般将 CY 清零 。 例如 : RRC : CY

23、A.7 A.0 CY; RR: A.7 A.0 A.7。 控制转移类指令( 17 条) 无 条件转移指令( 4 条) 长转移指令 : LJMP ;若 addr16 = AAAAH,则 PC = AAAAH, 0-64K 绝对转移指令: AJMP ;PC.10PC.0 = addr11, 0-2K 相对转移指令: SJMP ;若 rel 所在地址为 PC+03H, 则 PC = PC +03H 散转指令: JMP + 注: 不是间接寻址,将 DPTR(16 位 )中的内容作为基地 址通过修改 A 中的内容 ,两者内容构成地址, PC 指向地址, 实现散转。 有条件转移指令( 2 条) 累加器 A

24、 是否为零的条件相对转移指令: JZ ;若 A = 0, 则 PC = PC + rel,否则顺序执行 JNZ ;若 A 0,则 PC = PC + rel,否则顺序执行 注: PC 指向下一条指令地址 ; rel 可命名, 是 在 下条指令之前 128B 到之后 127B 间范围即可 20 减 1 非 0 转移指令( 2 条) DJNZ Rn , rel 注: Rn = Rn1,若 Rn 0, 则 PC = PC + rel。 DJNZ direct , rel 注: (direct) = (direct)1,若 (direct) 0, 则 PC = PC + rel。 比较转移指令( 4

25、条) CJNE A , direct , rel 注: A (direct), 则 PC = PC + rel,否则顺序; A (direct),则 CY = 1,否则 CY = 0。 CJNE A, #data , rel 注: A #data, 则 PC = PC + rel,否则顺序; A #data,则 CY = 1,否则 CY = 0。 CJNE Rn, #data , rel 注: Rn #data, 则 PC = PC + rel,否则顺序; Rn #data,则 CY = 1,否则 CY = 0。 CJNE Ri, #data , rel 注: (Ri) #data, 则 PC

26、 = PC + rel,否则顺序; (Ri) #data,则 CY = 1,否则 CY = 0。 注: 一般与 JC 和 JNC 联用 ,见下位操作指令。 调用子程序指令( 2 条) ACALL ;允许 2 KB 范围内调用,进入子程序 LCALL ;允许 64KB 范围内调用,进入子程序 注: 执行子程序过程中,遇到 RET,单片机自动返回 上述指令下一条指令 继续执行( 根据文字描述,想象 PC 的跳转问题 ,详见教材 p.53)。与 无条件跳转指 令唯一区别是遇到 RET 后结束并返回,而无条件跳转不 能。 子程序返回和中断返回指令( 2 条) RET ;作为一般子程序返回使用 RETI

27、 ;作为中断服务程序返回专用 注: 执行这两条指令后,首先自动恢复 PC 的高字节和低字节的值 ,然后返 回 PC 指向的程序地址继续执行程序。 空操作指令( 1 条) NOP ; PC = PC + 1 21 位操作指令 ( 17 条) 位传送指令 ( 2 条) MOV C, bit MOV bit, C 注: 位传送指令必须以 Cy 作为一个操作数 , Cy 即 C, 内容 一般取 0 或 1。 位变量修改指令 ( 6 条) CLR C CLR bit SETB C SETB bit CPL C CPL bit 注: 清零、置位、取反。 位变量逻辑运算 指令( 4 条) ANL C, bi

28、t ANL C, /bit ORL C, bit ORL C, /bit 注: 若源操作数前面带有“ /”,则表示执行逻辑运算时使用源操作数的反 码作为源操作码,不影响源操作数的值 。 符号数的三种表示方法: 原码 、 反码 、 补码 。 原码: 最高位为符号位,“ 0” 为 正,“ 1” 为 负,其余位表示数值的大小 ; 反码: 正数的反码与其原码相同, 负数的反码是对其原码逐位取反,但符 号位除外 ; 补码: 正数的补码与其原码相同 , 负数的补码是在其反码的末位加 1。 位条件相对转移 指令( 5 条) 判别进位标志 CY 状态指令: JC rel ; 若 CY = 1,则 PC = P

29、C+rel,否则顺序执行 JNC rel ; 若 CY = 0,则 PC = PC+rel,否则顺序执行 判别某位 bit 状态指令: JB bit, rel ; 若 bit = 1,则 PC = PC+rel,否则顺序执行 JNB bit, rel; 若 bit = 0,则 PC = PC+rel,否则顺序执行 JBC bit, rel; 若 bit = 1,则先 bit = 0,后 PC = PC+rel, 注: 指令中 只有 A、 B、 Rn、 DPTR、 PC、 C 或什么都没有,为 单字节指令 ; 指令中有且只有一个 #data、 direct、 addr11、 rel 或 bit,

30、为 双字节指令 ; 指令中有 addr16、 #data16 或上述双字节指令关键字 两两组合,为 三字节 。 这也是 ACALL addr11 和 LCALL addr16 运行后 PC 加 2 和加 3 的原因, 再进入子程序。 也与 SKIP(某个 rel)相对与 PC 下个指令地址的距离有关。 22 伪指令 ( 7 条) 伪指令由编译器来规定 , 仅用于程序编译过程 。 ORG addr16 DB constant8, constant8 DW constant16, constant16 var EQU constant var DATA direct var BIT bit END 三、 MCS-51 中断 系统、定时器 /计数器和串行口结构与编程控制 四、 MCS-51 外部资源扩展 五、 MCS-51 的 C 语言程序设计

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报