杨欣王玉凤刘湘黔编著清华大学出版社 2008 年 1 月 ISBN 单片机应用从零开始 8051Microcontroller: An Applications Based Introduction 第 1 章 身边的单片机 欢迎访问电路飞翔网

Size: px
Start display at page:

Download "杨欣王玉凤刘湘黔编著清华大学出版社 2008 年 1 月 ISBN 单片机应用从零开始 8051Microcontroller: An Applications Based Introduction 第 1 章 身边的单片机 欢迎访问电路飞翔网"

Transcription

1 第 1 章 身边的单片机 欢迎访问电路飞翔网 获取更多信息 1.1 单片机在哪里 1.2 单片机是什么样子的 1.3 单片机如何控制其他器件 1.4 如何使用单片机 1.5 有哪些单片机 1.6 实例点拨 电子万年历

2 例 1: 空调机 1.1 单片机在哪里 制冷功能模块 温度监控功能模块 如何协调工作? 遥控器接收功能模块

3 1.1 单片机在哪里 数码管指示灯功能按键 例 2: 操作面板 水位 浸泡洗涤漂洗脱水 过程 剩余时间 ( 分 ) 预约 ( 小时后 ) 标准大物轻柔快速 程序 启动暂停 电源开 / 关 全自动洗衣机 洗衣机简化系统示意图 电源 ( 开 / 关 ) 启动 ( 暂停 ) 程序 过程 单片机 指示灯 数码管 排水阀 注水阀 重量传感器 水位 电机

4 1.2 单片机是什么样子的 全自动洗衣机的单片机和外围控制部件 数码管 指示灯 数码管 指示灯 5 个按键 单片机 重量传感器 单片机 电机 注水阀排水阀 5 个按键 电机 注水阀 重量传感器 排水阀 单片机模型 单片机电路符号

5 1.2 单片机是什么样子的 Vcc 管脚 AT89S51 12mm 12mm 电路符号 实际单片机器件

6 1.2 单片机是什么样子的 方形的单片机有两种常见的形式 PLCC 封装 管脚向内侧折起 TQFP 封装 管脚向外侧伸展

7 1.2 单片机是什么样子的 双列直插式 DIP 封装 Vcc DIP 封装的 单片机外形 52 mm 15mm 电路符号 1 DIP 封装单片机的管脚序号 电路符号 2 ( 省略供电管脚 ) 半月型小坑 圆形小坑

8 1.3 单片机如何控制其他器件 一个简单实验 ---- 点亮小灯 类比电路 端口控制模型

9 1.3 单片机如何控制其他器件 中文指令 : 向 P1.0 管脚输出 Vcc 单片机能接受的语句 : SETB P1.0 单片机的端口控制

10 1.3 单片机如何控制其他器件 单片机控制洗衣机中的电机 电机属于大功率器件, 所以需要用到驱动电路, 把单片机管脚输出的低压 Vcc 转变成能使电机工作的较高电压 向 P1.0 管脚输出高电平 SETB P1.0 持续一段时间 CALL DELAY 向 P1.0 管脚输出低电平 CLR P1.0 单片机控制电机

11 1.4 如何使用单片机 利用编程器烧写单片机 编程器的工作过程

12 1.4 如何使用单片机 利用下载线烧写单片机

13 1.5 有哪些单片机 不同厂商不同型号的单片机产品有不同的特点 : 存储器的容量 管脚数 内部结构 工作电压 运算速度 指令等

14 1.6 实例点拨 电子万年历 电子万年历的功能模块有 : 数码管显示模块 单片机模块 调整按钮模块 报时器模块 系统中单片机的作用 : 控制外围器件和处理内部计时

15 1. 电阻器 器件介绍 2. 发光二极管

16 器件介绍 3. 开关

17 第 2 章 第一个单片机系统 欢迎访问电路飞翔网 获取更多信息 2.1 什么是单片机系统 2.2 如何控制一个发光二极管 2.3 单片机系统开发过程 2.4 实例点拨 闪烁 5 次的发光二极管

18 2.1 什么是单片机系统 单片机本身 单片机本身就是一个电子器件, 可以根据指令的要求控制外围器件, 它的功能可以通过指令进行控制 单片机 液晶屏 数码管 串口 外围器件 按钮 电路板

19 2.1 什么是单片机系统 构成单片机系统 单片机 + 外围器件 电机控制盒实例

20 2.2 如何控制一个发光二极管 硬件设计 ( 系统电路图 ) Vcc R1 470O C1 20pF C2 20pF Y1 12MHz Vcc D1 C3 Vcc 10 礔 U1 EA/VPP XTAL1 XTAL2 RST P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5/MOSI P1.6/MISO P1.7/SCK GND AT89S51 Vcc AD0/P0.0 AD1/P0.1 AD2/P0.2 AD3/P0.3 AD4/P0.4 AD5/P0.5 AD6/P0.6 AD7/P0.7 A8/P2.0 A9/P2.1 A10/P2.2 A11/P2.3 A12/P2.4 A13/P2.5 A14/P2.6 A15/P2.7 PSEN ALE/PROG P3.6/WR P3.7/RD Vcc 电容 C1 电容 C2 电容 C3 电阻 R1 发光二极 管 D1 晶振 Y1

21 2.2 如何控制一个发光二极管 硬件设计 ( 搭建硬件电路的器材 ) 面包板用于电子技术实验 万用板用于电子技术实验

22 2.2 如何控制一个发光二极管 软件设计 ( 中文描述的程序设计思路 )

23 2.2 如何控制一个发光二极管 软件设计 ( 翻译成单片机的语言 ) START: MOV P1,#00H ; 向 P1 口输出低电平 CALL DELAY ; 调用延时子程序 MOV P1,#0FFH ; 向 P1 口输出高电平 CALL DELAY ; 调用延时子程序 JMP START ; 跳回 START, 循环执行

24 2.2 如何控制一个发光二极管 软件设计 ( 指令解析 ) 标号 可以是以英文字母开头的字母 数字或某些特殊符号的序列 助记符 用来表达指令的操作功能 目的操作数 指令最终作用的对象 源操作数 参与指令的操作 注释 分号后面的文字描述 START: MOV P1, #00H ; 向 P1 口输出低电平 标号 : 助记符目的操作数, 源操作数 ; 注释

25 2.2 如何控制一个发光二极管 软件设计 ( 完整的程序 1/2) ORG 00H ; 设置起始地址 START: ; 标号 MOV P1, #00H ; 向 P1 口输出低电平, 点亮二极管 CALL DELAY ; 调用延时子程序 MOV P1,#0FFH ; 向 P1 口输出高电平, 熄灭二极管 CALL DELAY ; 调用延时子程序 JMP START ; 跳回 START, 循环执行

26 2.2 如何控制一个发光二极管 软件设计 ( 完整的程序 2/2) DELAY: MOV R3,#50 ; 延时子程序 (500ms) D1: MOV R4,#20 D2: MOV R5,#248 DJNZ R5,$ DJNZ R4,D2 DJNZ R3,D1 RET ; 返回主程序 END ; 汇编程序结束

27 2.2 如何控制一个发光二极管 软件设计 ( 指令简析 ) ORG 00H 伪指令, 其功能是设定经汇编后的执行代码存储在单片机中的起始地址为 00H END 伪指令, 提示汇编器程序结束于此, 当汇编遇到 END 后, 就不会再继续进行 伪指令 (pseudo opcode) 汇编程序所提供的帮助汇编器进行汇编的指令, 并非单片机指令的一部分, 因此伪指令不占存储器空间, 只是协助程序的汇编工作

28 2.3 单片机系统开发过程 1. 明确系统功能 : 闪烁, 间隔 500ms 2. 硬件设计 : 系统电路图 Vcc Vcc 500ms 500ms 500ms Vcc C1 20pF C2 20pF R1 470 Y1 12MHz Vcc D1 10 礔 C U1 EA/VPP XTAL1 XTAL2 RST P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5/MOSI P1.6/MISO P1.7/SCK GND Vcc AD0/P0.0 AD1/P0.1 AD2/P0.2 AD3/P0.3 AD4/P0.4 AD5/P0.5 AD6/P0.6 AD7/P0.7 A8/P2.0 A9/P2.1 A10/P2.2 A11/P2.3 A12/P2.4 A13/P2.5 A14/P2.6 A15/P2.7 PSEN ALE/PROG P3.6/WR P3.7/RD AT89S51

29 2.3 单片机系统开发过程 3. 搭建硬件平台 : 在面包板 万用板或实验板上 4. 软件设计 : 在汇编语言开发环境中编写汇编程序

30 2.3 单片机系统开发过程 5. 下载程序到单片机并调试 下载线

31 2.4 实例点拨 闪烁 5 次的发光二极管 明确系统功能 系统启动后, 一支发光二极管闪烁 5 次后熄灭, 当按下一个按钮开关后再闪烁 5 次后熄灭 以后每次按下按钮开关, 发光二极管都会闪烁 5 次

32 2.4 实例点拨 闪烁 5 次的发光二极管 硬件设计 ( 单片机 + 外围器件 ) Vcc Vcc Vcc C1 20pF C2 20pF R1 470Ω Y1 12MHz Vcc D1 C3 10μF U1 EA/VPP XTAL1 XTAL2 RST P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5/MOSI P1.6/MISO P1.7/SCK GND Vcc AD0/P0.0 AD1/P0.1 AD2/P0.2 AD3/P0.3 AD4/P0.4 AD5/P0.5 AD6/P0.6 AD7/P0.7 A8/P2.0 A9/P2.1 A10/P2.2 A11/P2.3 A12/P2.4 A13/P2.5 A14/P2.6 A15/P2.7 PSEN ALE/PROG P3.6/WR P3.7/RD Vcc 外围器件 : R2 10kΩ S1 一个发光二极管 一个按钮开关 AT89S51

33 2.4 实例点拨 闪烁 5 次的发光二极管 搭建硬件平台 小扳手 普通 IC 插座 带小扳手的活 动型 IC 插座 在面包板或万用板上插入器件, 用导线完成电气连接

34 2.4 实例点拨 闪烁 5 次的发光二极管 软件设计 ORG 00H ; 设置起始地址 START: ; 标号 MOV R0, #5 ; 循环闪烁 5 次,R0 为计数器 LOOP: ; 标号 MOV P1,#00H ; 向 P1 口输出低电平, 点亮二极管 CALL DELAY ; 调用延时子程序 MOV P1,#0FFH ; 向 P1 口输出高电平, 熄灭二极管 CALL DELAY ; 调用延时子程序 DJNZ R0, LOOP ; R0 减 1, 如果不等于 0 跳到 LOOP 标号处

35 2.4 实例点拨 闪烁 5 次的发光二极管 软件设计 JB P2.0, $ ; 如果 P2.0 为高电平则循环执行本行 JMP START ; 跳到 START 标号处重新开始执行 DELAY: ; 延时子程序 (500ms) RET ; 返回主程序 END ; 汇编程序结束

36 2.4 实例点拨 闪烁 5 次的发光二极管 软件设计 ( 指令解析 ) MOV R0, #5 DJNZ R0, LOOP JB P2.0, $ JMP START

37 2.4 实例点拨 闪烁 5 次的发光二极管 下载程序到单片机并调试 在 µvision 中把目标程序编辑好, 生成单片机可执行的代码, 通过下载线下载到单片机系统板中, 开发环境 µvision 然后运行该程序

38 器件介绍 1. 电容器 2. 晶体振荡器 无源晶振 独石电容 有源晶振 电解电容 晶振的电路符号

39 第 3 章一开始遇到的问题 欢迎访问电路飞翔网 获取更多信息 3.1 µvision 软件的使用 3.2 开发的线索小结与软件仿真方法 3.3 单片机最简 ( 小 ) 系统分析 3.4 实例点拨 流水灯

40 3.1 µvision 软件的使用 1 新建和保存工程 建一个鸡蛋壳

41 3.1 µvision 软件的使用 2 往 蛋壳 中添加源程序文件.asm

42 3 汇编程序 3.1 µvision 软件的使用

43 3.1 µvision 软件的使用 4 生成下载到单片机中的文件

44 3.1 µvision 软件的使用 5 下载代码到单片机中 端口设置 器件选择

45 3.1 µvision 软件的使用 5 下载代码到单片机中 下载操作按钮 下载

46 3.2 开发的线索小结与软件仿真方法 µvision 的仿真功能 晶振频率设置 观察 P1 口的状态

47 3.2 开发的线索小结与软件仿真方法 明确系统功能 :P1.0 口上的发光二极管以 500ms 为间隔闪烁 完整的开发过程 硬件设计 : 单片机 + 外围器件 ( 发光二极管等 ), 完成电路图设计搭建硬件平台 : 在面包板上插入单片机和外围器件, 并加入下载接软件设计 : 在 µvision 中书写汇编程序, 进行汇编, 修改语法错误软件仿真 : 在 µvision 设置系统选项, 进入软件仿真功能, 观察结果 下载到单片机 : 如果软件仿真结果与设计相符, 则下载到单片机中

48 3.2 开发的线索小结与软件仿真方法 开发线索比较表 线索成本效率适用 AMI+ 下载线最低较低初学者 µvision+ 专用下载线 较高较高开发人员 编程器专用软件较高较高开发人员

49 3.3 单片机最简 ( 小 ) 系统分析 AT89S51 单片机最简系统只包含单片机 振荡器结构 复位电路和电源的系统 Vcc Vcc 振荡器结构 C1 20pF C2 20pF Y1 12MHz Vcc 复位电路 10 礔 C U1 EA/VPP XTAL1 XTAL2 RST P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5/MOSI P1.6/MISO P1.7/SCK GND AT89S51 AD0/P0.0 AD1/P0.1 AD2/P0.2 AD3/P0.3 AD4/P0.4 AD5/P0.5 AD6/P0.6 AD7/P0.7 A8/P2.0 A9/P2.1 A10/P2.2 A11/P2.3 A12/P2.4 A13/P2.5 A14/P2.6 A15/P2.7 PSEN ALE/PROG P3.6/WR P3.7/RD Vcc 电源直流 +4.0~+5.5V

50 3.3 单片机最简 ( 小 ) 系统分析 复位电路 两种常用的复位电路 20pF C2 20pF Y1 12MHz Vcc 10 礔 C RST 管脚上的电平跳变 EA/VPP XTAL1 XTAL2 RST P3.0/RXD P3.1/TXD P3.2/INT0 P3 3/INT1

51 3.3 单片机最简 ( 小 ) 系统分析 外部程序存储器访问控制端 ( EA/VPP) 如果 EA/VPP接高电平 Vcc, 单片机则执行本单片机内部程序存储器中的程序, 并在读取完 AT89S51 单片机内部程序存储器的 0FFFH 后自动转向读取外部的程序存储器 ; 如果 EA/VPP管脚接低电平, 则单片机访问的全部是外部程序存储器 ;

52 3.4 实例点拨 流水灯 开发步骤 : 明确系统功能 硬件设计 搭建硬件平台 软件设计 下载程序到单片机并调试

53 3.4 实例点拨 流水灯 1 明确系统功能 8 支发光二极管排成一列 ; 从左至右再从右至左, 做单一灯的流动, 如此反复 ; 每一支发光二极管点亮时间为 200ms ;

54 3.4 实例点拨 流水灯 2 硬件设计 Vcc Vcc C1 20pF C2 20pF Y1 12MHz Vcc 10 礔 C U1 EA/VP P XTAL1 XTAL2 RST P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5/MOSI P1.6/MISO P1.7/SCK GND Vcc AD0/P0.0 AD1/P0.1 AD2/P0.2 AD3/P0.3 AD4/P0.4 AD5/P0.5 AD6/P0.6 AD7/P0.7 A8/P2.0 A9/P2.1 A10/P2.2 A11/P2.3 A12/P2.4 A13/P2.5 A14/P2.6 A15/P2.7 PSEN ALE/P ROG P3.6/WR P3.7/RD 支发光二极管 AT89S51

55 3.4 实例点拨 流水灯 3 搭建硬件平台 在面包板或万用板上插器件并使用导线完成特定电气连接的过程 连接完成后, 需要仔细对照电路图进行检查, 最后连接电源, 务必确保正负极没有弄错

56 3.4 实例点拨 流水灯 4 软件设计 ( 赋值命令 ) p 十六进制 FEH FDH FCH F7H EFH DFH BFH FH

57 3.4 实例点拨 流水灯 4 软件设计 (RLC 和 RRC 命令 ) PSW 的 8 位 CY AC F0 RS1 RS0 OV 无用位 P

58 3.4 实例点拨 流水灯 4 软件设计 ( 主程序和子程序 ) 主程序 CALL DELAY DJNZ R1, LEFT 主程序 RET DELAY 子程序执行过程

59 3.4 实例点拨 流水灯 4 软件设计 ( 延时子程序 ) D1: MOV R4, #20 D2: MOV R5, #248 DJNZ R5, $ DJNZ R4, D = (498+2) +2=10002

60 3.4 实例点拨 流水灯 5 下载程序到单片机并调试 在 µvision 中进行编辑和汇编, 再进行软件仿真观察结果是否与设计相符, 成功后就可以通过下载线下载到硬件平台中

61 第 4 章 单片机的 触角 I/O 口 欢迎访问电路飞翔网 获取更多信息 4.1 解读 AT89S51 的 I/O 口 4.2 I/O 口作输入端口使用 流水控制灯 4.3 七段数码管的控制 秒表 4.4 小键盘的控制 4.5 实例点拨 计时提醒器

62 4.1 解读 AT89S51 的 I/O 口 I/O 口的整体印象 电源 ( 开 / 关 ) 启动 ( 暂停 ) 程序 过程 水位 系统示意图功能部件 I/O 功能 单片机 指示灯 数码管 排水阀 电机 注水阀 重量传感器 洗衣机与单片机的 I/O 控制 电源电源开关输入 启动 / 暂停启动 / 暂停按钮输入 过程指示指示灯输出 时间显示七段数码管输出 程序控制程序按钮输入 水位控制水位按钮输入 注水控制注水阀输出 称衣物重量重量传感器输入 排水控制排水阀输出 波轮旋转电动机输出

63 4.1 解读 AT89S51 的 I/O 口 I/O 口的整体印象 (89S51 的 I/O 口 ) P3 口具有双重功能 P0 和 P2 口访问外部存储器 P3 口具有双重功能

64 4.1 解读 AT89S51 的 I/O 口 深入观察 I/O 口的结构 (P1 口结构 )

65 4.1 解读 AT89S51 的 I/O 口 深入观察 I/O 口的结构 (P3 口结构 )

66 4.1 解读 AT89S51 的 I/O 口 深入观察 I/O 口的结构 (P0 口结构 )

67 4.1 解读 AT89S51 的 I/O 口 深入观察 I/O 口的结构 (P2 口结构 )

68 4.2 I/O 口作输入端口使用 明确系统功能 流水控制灯 8 支发光二极管作为显示器件, 两个按钮开关 A 和 B, 一开始,8 支发光二极管为全亮状态, 当按下按钮 A 时,8 支发光二极管做单一灯的从右向左流动, 当按下按钮 B 时,8 支发光二极管做单一灯的从左向右流动

69 4.2 I/O 口作输入端口使用 硬件设计 Vcc 流水控制灯 Vcc Vcc 0.2 IL IH C1 20pF C2 20pF Y1 12MHz Vcc 10 礔 C U1 EA/VPP XTAL1 XTAL2 RST P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5/MOSI P1.6/MISO P1.7/SCK GND Vcc AD0/P0.0 AD1/P0.1 AD2/P0.2 AD3/P0.3 AD4/P0.4 AD5/P0.5 AD6/P0.6 AD7/P0.7 A8/P2.0 A9/P2.1 A10/P2.2 A11/P2.3 A12/P2.4 A13/P2.5 A14/P2.6 A15/P2.7 PSEN ALE/PROG P3.6/WR P3.7/RD AT89S51

70 4.2 I/O 口作输入端口使用 硬件设计 ( 高低电平 ) 流水控制灯 表示符号 参数 最小值 最大 值 输入低电平 单位 V V H(max) 5.5V V H(min) 1.9V V L(max) 0.9V 高电平 1 分隔区 输入高电平 V V L(min) -0.5V 低电平 0 AT89S51 单片机的逻辑电平描述

71 4.2 I/O 口作输入端口使用 硬件设计 (I/O 口作为输入口 ) 流水控制灯 Vcc 10 P3.0/RXD 11 P3.1/TXD 12 P3.2/INT kO? R1 R2 P3.3/INT1 14 P3.4/T0 15 P3.5/T1 S1 1 P1.0 A 2 P1.1 3 P1.2 S2 4 P1.3 5 P1.4 6 B 7 P1.5/MOSI P1.6/MISO 8 P1.7/SCK 20 GND AT89S51 AD5/P0.5 AD6/P0.6 AD7/P0.7 A8/P2.0 A9/P2.1 A10/P2.2 A11/P2.3 A12/P2.4 A13/P2.5 A14/P2.6 A15/P2.7 PSEN ALE/PROG P3.6/WR P3.7/RD (a) 上拉电阻方案 S1 A S2 B Vcc Vcc P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5/MOSI P1.6/MISO P1.7/SCK GND AT89S51

72 4.2 I/O 口作输入端口使用 硬件设计 (I/O 口作为输入口 ) 流水控制灯 24 A11/P2.3 1 A12/P P P1.1 A13/P A14/P2.6 4 P P1.3 A15/P2.7 S1 S2 5 P1.4 A B 6 P1.5/MOSI PSEN P1.6/MISO ALE/PROG 8 P1.7/SCK 16 P3.6/WR GND P3.7/RD AT89S51 (b) 简易方案

73 4.2 I/O 口作输入端口使用 硬件设计 (I/O 口作为输入口 ) 流水控制灯 AD5/P P3.0/RXD AD6/P0.6 Vcc 11 AD7/P P3.1/TXD 12 P3.2/INT0 U2A 13 A8/P S1 P3.3/INT P3.4/T0 A9/P P3.5/T1 A10/P A 1 A11/P P1.0 A12/P2.4 2 A13/P U2B P S2 P1.2 A14/P P1.3 A15/P P B 4 7 P1.5/MOSI PSEN 30 P1.6/MISO ALE/PROG 8 P1.7/SCK P3.6/WR GND P3.7/RD AT89S51 (c) 缓冲器方案

74 4.2 I/O 口作输入端口使用 硬件设计 ( 系统电路图 ) Vcc 流水控制灯 Vcc S1 A S2 B C1 20pF C2 20pF Vcc Y1 12MHz Vcc 10kO? R1 R2 10 礔 C U1 EA/VPP XTAL1 XTAL2 RST P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5/MOSI P1.6/MISO P1.7/SCK GND Vcc AD0/P0.0 AD1/P0.1 AD2/P0.2 AD3/P0.3 AD4/P0.4 AD5/P0.5 AD6/P0.6 AD7/P0.7 A8/P2.0 A9/P2.1 A10/P2.2 A11/P2.3 A12/P2.4 A13/P2.5 A14/P2.6 A15/P2.7 PSEN ALE/PROG P3.6/WR P3.7/RD D1-D8 R3-R10 470O? 8 Vcc AT89S51

75 4.2 I/O 口作输入端口使用 搭建硬件平台 软件设计 1 初始化 流水控制灯 2 8 支发光二极管全亮 3 等待按下按钮 A 或 B 4 如果按下按钮 A( 或 B) 执行向左流动 ( 或向右 ) 程序设计思路

76 4.2 I/O 口作输入端口使用 流水控制灯 软件设计 ( 指令简析 JB P1.0, WAIT_A ) WAIT_A: JB P1.0, WAIT_A ; 如果按钮 A 没有按下, ; 循环执行本行以继续判断 JMP LEFT

77 4.3 七段数码管的控制 秒表 七段数码管介绍 数 字 亮 段 0 a,b,c,d,e,f 1 b,c 2 a,b,d,e,g 3 a,b,c,d,g 4 b,c,f,g 5 a,c,d,f,g 6 a,c,d,e,f,g 7 a,b,c 8 a,b,c,d,e,f,g 9 a,b,c,d,f,g

78 4.3 七段数码管的控制 秒表 七段数码管介绍 ( 解码器 7447 ) Vcc Vcc Vcc 解码器 7447 器件 1 BCD 码输入 解码器 RBI LT BI/RBO A B C D GND SN74LS47N VCC a b c d e f g P 共阳极 a b a c f d g b e e f c g d dp dp 7-segment display 七段数码管

79 4.3 七段数码管的控制 秒表 七段数码管介绍 ( 解码器 7447 ) 显示 BCD 码输入端亮段控制输出端 D C B A a b c d e f g

80 4.3 七段数码管的控制 秒表 明确系统功能 两位七段数码管在开机时显示 00, 第 1 次按下按钮开关后秒表开始计时, 第 2 次按下后计时停止, 第 3 次按下后两个数码管清 0, 并回到一开始的计时状态

81 4.3 七段数码管的控制 秒表 硬件设计 ( 系统电路图 ) Vcc Vcc Vcc C1 20pF C2 20pF S1 Y1 12MHz Vcc R1 10kO Vc c Vcc 10 礔 C U1 EA/VPP XTAL1 XTAL2 RST P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5/MOSI P1.6/MISO P1.7/SCK GND AT89S51 Vcc AD0/P0.0 AD1/P0.1 AD2/P0.2 AD3/P0.3 AD4/P0.4 AD5/P0.5 AD6/P0.6 AD7/P0.7 A8 /P2.0 A9 /P2.1 A10/P2.2 A11/P2.3 A12/P2.4 A13/P2.5 A14/P2.6 A15/P2.7 PSEN ALE/PROG P3.6/WR P3.7/RD Vcc Vc c U2 RBI LT BI/RBO A B C D GND SN74LS47N U3 RBI LT BI/RBO A B C D GND SN74LS47N VCC a b c d e f g VCC a b c d e f g 16 R2~ R15 470O? Vc c ?? a b a c f d g b e e f c g d dp dp 7-segment display Vc c?? a b a c f d g b e e f c g d dp dp 7-segment display

82 4.3 七段数码管的控制 秒表 软件设计前奏 ( 解决开关抖动 ) Vcc 按下开关时手指的抖动 A B 输出端的电平变化 t 解决开关抖动的办法 : 硬件的方法软件的方法

83 4.3 七段数码管的控制 秒表 软件设计前奏 ( 硬件的方法解决开关抖动 ) Vcc R1 62kΩ S 7404 至单片机 I/O 口 R2 62kΩ C 0.47μF 门控滤波电路

84 4.3 七段数码管的控制 秒表 软件设计前奏 ( 硬件的方法解决开关抖动 ) 振荡器滤波电路

85 4.3 七段数码管的控制 秒表 软件设计前奏 ( 软件的方法解决开关抖动 ) JB P1.0, $ ; 如果 P1.0 为高电平, 就重复执行本行 CALL FILTER ; 调消除开关抖动的子程序 JNB P1.0, $ ; 如果 P1.0 为低电平, 就重复执行本行 注释 : CALL FILTER 调用消除开关抖动的延时子程序

86 4.3 七段数码管的控制 秒表 软件设计 启动时, 显示 00 和等待按钮按下 秒表计时显示和 1 秒延时 处理第 2 次 第 3 次按下按钮的处理 延时程序

87 4.4 小键盘的控制 上拉电阻 ( 避免与 Vcc 直连, 开关断路无电流 ) Vcc Vcc Vcc C1 20pF C2 20pF Vcc Vcc Y1 12MHz 10 礔 C U1 EA/VPP XTAL1 XTAL2 RST P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5/MOSI P1.6/MISO P1.7/SCK GND Vcc AD0/P0.0 AD1/P0.1 AD2/P0.2 AD3/P0.3 AD4/P0.4 AD5/P0.5 AD6/P0.6 AD7/P0.7 A8/P2.0 A9/P2.1 A10/P2.2 A11/P2.3 A12/P2.4 A13/P2.5 A14/P2.6 A15/P2.7 PSEN ALE/PROG P3.6/WR P3.7/RD Vcc U2 RBI LT BI/RBO A B C D GND SN74LS47N VCC a b c d e f g R1~ R8 10kO? R9~ R15 470O? ?? a b a c f b d g e e c f g d dp dp 7-segment display Vcc S1~ S8 AT89S51

88 4.5 实例点拨 计时提醒器 明确系统功能 开机时, 七段数码管显示 00, 等待输入计时时间, 输入有误, 按 # 键取消重新输入, 按 * 键则确认, 计时提醒器开始工作, 计时完时, 蜂鸣器发出 嘀 嘀 的提示音, 在计时过程中, 如果按下 # 键则取消计时, 系统回到开机时的状态

89 4.5 实例点拨 计时提醒器 硬件设计 12 个按键, 两位七段数码管, 蜂鸣器和单片机最简系统 Vcc P kO R1 输入端??? 4.7kO R2 B C E Q 9014 三极管 9014 蜂鸣器及其驱动电路 + BP AT89S51 蜂鸣器

90 4.5 实例点拨 计时提醒器 硬件设计 两位七段数码管和解码器 Seg-LED Vcc P0.4 P0.5 P0.6 P0.7 Vcc P0.0 P0.1 P0.2 P0.3 P RBI LT BI/RBO U3 A B C D U2 RBI LT BI/RBO GND SN74LS47N A B C D GND SN74LS47N VCC a b c d e f g VCC a b c d e f g Vcc R13~ R27 470O? Vcc a b c d f e f e g dp 7-segment display a b c f d e f e g dp Vcc?? a g b c d dp Vcc?? a b g c d dp 7-segment display

91 4.5 实例点拨 计时提醒器 硬件设计 Vcc Vcc C1 20pF C2 20pF Keypad_8 Y1 12MHz Vcc 10 礔 C3 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P U1 EA/VPP XTAL1 XTAL2 RST P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5/MOSI P1.6/MISO P1.7/SCK GND AT89S51 AD0/P0.0 AD1/P0.1 AD2/P0.2 AD3/P0.3 AD4/P0.4 AD5/P0.5 AD6/P0.6 AD7/P0.7 A8/P2.0 A9/P2.1 A10/P2.2 A11/P2.3 A12/P2.4 A13/P2.5 A14/P2.6 A15/P2.7 PSEN ALE/PROG P3.6/WR P3.7/RD Vcc 最简系统和蜂鸣器 P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 P2.0 P2.1 P2.2 P2.3 P2.4 R29 4.7kO 7-Seg-LED Key pad_4 R28 4.7kO Vcc Q B1

92 4.5 实例点拨 计时提醒器 软件设计 ( SWAP 指令介绍 ) MOV A, # B ; 向累加器 ACC 中载入二进制数 , 后缀 B 代表二进制数 SWAP A ; 累加器 ACC 中的低 4 位与高 4 位对调, (A)=

93 4.5 实例点拨 计时提醒器 软件设计 ( 好习惯 1/2) 阅读程序的好习惯 MOV R1,#0F2H MOV A,R1 SWAP A ADD A,#01H MOV P0,A 在纸上用笔记录每一行 指令产生的影响和结果 程序中的标号应该尽量起得有实际 具体 确切的含义, 这样能提高程序的书写 编辑 调试的效率

94 4.5 实例点拨 计时提醒器 软件设计 ( 好习惯 2/2) 一般来说, 标号写在最左边, 最好给标号单独占一行 在它的下面接着写程序 每一行指令的起始点, 也就是汇编指令的助记符应该比标号偏右一些, 以利于区别标号和指令

95 4.5 实例点拨 计时提醒器 软件设计 ( 程序流程图 ) 系统初始设置清屏等 取消 扫描 10 个数字键 第 1 次按下数字键 取消 第 2 次按下数字键 组合两个输入的数字并显示 确认 计时开始进行更新七段数码管显示 1 分钟后 计时完成 蜂鸣器鸣响 5 次倒计时结束

96 4.5 实例点拨 计时提醒器 软件设计 ( 程序解析 ) 1. 计时提醒器接受键盘输入 CHK_0: JB P1.0,CHK_1 ; 判断按钮按下的 JB CALL FILTER ; 消除抖动子程序的 CALL JNB P1.0, $ ; 判断按钮松开的 JNB MOV R1, #0 JMP TIMERSET

97 4.5 实例点拨 计时提醒器 2. 显示和存储所设定的时间 ACC 01H SWAP ACC 10H + 30H 04H = ACC 14H

98 4.5 实例点拨 计时提醒器 3. * 号键确认, 或 # 号键取消

99 4.5 实例点拨 计时提醒器 4. 正常的计时阶段

100 4.5 实例点拨 计时提醒器 5. 蜂鸣器的 嘀 嘀 提示音

101 1. 七段数码管 器件介绍 共阳 共阴 管脚排布 2. 米字数码管 3. 蜂鸣器 蜂鸣器及其电路符号

102 4. 三极管 器件介绍 5. 三态缓冲器 74125

103 第 5 章解剖单片机 观察存储器 欢迎访问电路飞翔网 获取更多信息 5.1 从 I/O 口到单片机的 解剖结构 5.2 存储器家族 5.3 随机访问存储器 RAM 5.4 只读存储器 ROM 5.5 实例点拨 数据是如何保存在存储器中的

104 5.1 从 I/O 口到单片机的 解剖结构 I/O 口的 解剖图 读锁存器 Vcc 内部总线 D Q D LATCH G 写锁存器 CL Q S D 型锁存器 内部上拉电阻 场效应管 管脚 P1.X 总线 P1 口锁存器 P1 口驱动 读管脚 缓冲器 P1.X 口结构 P1.0 ~ P1.7 P1 口的抽象

105 5.1 从 I/O 口到单片机的 解剖结构 单片机的 解剖结构 Vcc GND RAM 地址寄存器 B 寄存器 RAM 累加器 ACC TMP2 P0.0~P0.7 P2.0~P2.7 P0 口驱动 P2 口驱动 P0 口锁存器 P2 口锁存器 TMP1 堆栈指针 FLASH 程序地址寄存器 缓冲器 ALU 程序计数 PSEN ALE/PROG EA/Vpp 时序与控制 指令寄存器 看门狗 程序状态字 PSW 中断 串行口通信和定时器寄存器组 P3 口锁存器 P1 口锁存器 ISP 口 程序计数器 双 DPTR 寄存器 编程逻辑 振荡器 P3 口驱动 P1 口驱动 XTAL1 XTAL2 P3.0~P3.7 P1.0~P1.7

106 5.1 从 I/O 口到单片机的 解剖结构 深入 解剖 算术逻辑单元 ALU 总线 TMP2 TMP1 A ALU B D R 程序状态字 PSW 总线

107 5.2 存储器家族 常见存储器的种类 存储器 RAM ROM 易失性非易失不可编程一次编程多次编程 DRAM SRAM NVRAM BRAM FRAM Mask ROM OTP EPROM UV EPROM EEPROM FLASH

108 5.3 随机访问存储器 RAM RAM 之所以称为随机访问存储器 (random access memory), 是因为它能在同样的时间内访问 RAM 中任意地址上的数据, 而不需要从头到尾顺序地对地址上的数据进行访问 RAM 每层有 8 个房间 128 楼 (R1) 2 楼 1 楼 7FH 7EH 30H 02H 01H 00H 层的大楼

109 5.3 随机访问存储器 RAM DRAM (Dynamic RAM, 动态 RAM 结构 ) 控制线 行地址多路分配器 S G Q D 数据线 C DRAM 的存储单元 复用 放大 DRAM 较为真实的内部结构 列地址锁存 三态 锁存 数据选择

110 5.3 随机访问存储器 RAM DRAM (DRAM 地址复用 ) Din RAS 地址线 A0 / A7 A1/ A8 A2 / A9 A / A A / A A / A A / A 复用地址线 行地址锁存器 列地址锁存器 行地址解码器 列地址解码器 动态存储单元 (16384 位 ) Dout DRAM 地址复用示意图 CAS 地址线 CS R/W 地址线 A0~A7 A8~A13 CAS RAS CS 地址复用的时序图

111 5.3 随机访问存储器 RAM DRAM ( 应用及分类 )

112 5.3 随机访问存储器 RAM DRAM ( 相关知识学习,TMS 为例 ) DJ 封装 DGA 封装 地址线 数据输入输出端 TMS A DRAM 的逻辑符号

113 5.3 随机访问存储器 RAM SRAM ( 静态随机访问存储器 static random access memory ) SRAM 可以进行随机访问, 不需要对数据进行重新装载, 只要保持给它供电, 它就能保持住原来存储的数据, 完成高速而低功耗的存储任务 SRAM DRAM 中央处理器 CPU 外部高速缓冲存储器 64KB~1MB 主存储器 ( 内存 ) 4~512MB 内部高速缓冲存储器 8~32KB 高速缓冲存储器 (cache)

114 5.3 随机访问存储器 RAM SRAM (SRAM 的存储单元 ) Word Line 字线也称为行地址 位线也称为列地址 B 双稳态触发器 B

115 5.3 随机访问存储器 RAM SRAM (SRAM 的读写操作 ) Word Line Word Line 读操作 写操作 Column Decode Column Decode 读出放大器????? (?????) ( 电压比较器 )????? 写操作电路 Dout Din

116 5.3 随机访问存储器 RAM SRAM ( 存储单元中双稳态触发器的结构 ) Word Line Word Line V DD VDD B B B B (a) 4 个场效应管 (b) 6 个场效应管

117 5.3 随机访问存储器 RAM SRAM ( 实际器件展示 ) 地址线 数据输入 A0 A1 A2 A3 A4 A5 A6 A7 D1 D2 D3 D4 R/W CS SRAM 256? [WRITE] [READ] EN Q1 Q2 Q3 Q4 数据输出

118 5.3 随机访问存储器 RAM SRAM ( 实际器件的组织结构 ) A0 A1 A2 A3 A4 A5 A6 A7 R/W CS 列地址解码器?????? D4 D3 D2 D ? 2???? 存 储单元????? 输入缓 冲器??????? 输入数据选择器 输出列地址解码器???????? 的存储单元矩阵????? 输出缓 冲器 Q4 Q3 Q2 Q1

119 5.3 随机访问存储器 RAM SRAM (SRAM 的操作时序图 ) A0~A7 当前地址 输入数据 输出数据 R/W CS D1~D4 Q1~Q4 读写读 tsu 有效数据 有效数据有效数据高阻态高阻态高阻态 t h t a(s) t a(r/ W) t a(s) : 访问时间, 从 CS 到数据输出 t a(r/ W) : 访问时间, 从 R/W 到数据输出 t : 写数据时间 su t : 保持时间 h

120 5.3 随机访问存储器 RAM SRAM (SRAM 6264 简介 ) Vss Vcc PDIP 封装 SOP 封装 管脚术语 A0~A12 DQ0~DQ7 地址线 E1( CE1) 使能 1 E2(CE2) 使能 2 G ( OE ) W Vcc Vss n.c. 解释 数据输入 / 输出线 输出使能 写操作使能 供电端 接地端 空脚, 不接

121 5.3 随机访问存储器 RAM SRAM (SRAM 6264 简介 ) 操作模式 E1 E2 W G DQ0~DQ7 待机 / 非被选中 H/L L H/L H/L 高阻态 H H/L H/L H/L 高阻态 内部读操作 L H H H 高阻态 读操作 L H H L 数据输出 写操作 L H L H/L 数据输入 Vss Vcc

122 5.3 随机访问存储器 RAM SRAM (SRAM 应用及分类 ) 异步同步特殊非易失性

123 5.3 随机访问存储器 RAM NVRAM ( 非易失性随机访问存储器 nonvolatile random access memory ) NVRAM 可以进行随机访问, 掉电后数据仍然保存着 A5 A6 A7 A8 A9 A11 A12 行地 址解 码器 SRAM 存储单元 EEPROM 存储单元 存储 调出 存储 / 调出控制 列地址解码器 A0 A1 A2 A3 A4 A10 SRAM+ EEPROM 的结构

124 5.4 只读存储器 ROM ROM (read-only memory ) ROM 只能读数据, 而不能往里面写数据 ROM 是非易失性存储器, 当存储器掉电后, 存储器中的数据不会丢失

125 5.4 只读存储器 ROM Mask ROM Mask ROM 存储的内容无法被用户修改, 所以它通常存储商品的信息, 如投影仪开机时显示的品牌名称和标志 ; 计算机开机时显示的主板版本和厂商信息等 (a) 存储 1 (b) 存储 0

126 5.4 只读存储器 ROM Mask ROM( 小规模 Mask ROM 简介 )????? 0 第 1 行?1? 地址线 A0 A1 A2 A3 地址解码器 第 3 行 第 14 行第 15 行 数据输出线 Q0 Q1 Q2 Q6 Q7 第 2 行?2??3?? 14?? 15? 16 8 位 ROM 的结构

127 5.4 只读存储器 ROM PROM (programmable ROM ) 用户可以对新买回来的可编程 ROM 器件进行编程, 也就是固化数据到 PROM 中, 一旦固化完成后, PROM 就像一个 Mask ROM 一样, 只能读取数据而不能再写入或更改数据了

128 5.4 只读存储器 ROM PROM (PROM 存储单元及烧写原理 ) V DD Vcc 地址线 熔丝 地址开关 A0 A1 PROM Q0 数据开关 A2 Q1 Q2??????? 编程脉冲发生器 Qn Am EN 存储器 数据线 熔丝连接场效应管的源极和 PROM 的数据线 便携式编程器

129 5.4 只读存储器 ROM EPROM (erasable PROM ) 可擦写 PROM 可以在任何时候把上一次烧写的数据擦除掉, 再往其中写入新的数据, 是一种可以重复编程的 ROM 器件 透明小窗口

130 5.4 只读存储器 ROM EPROM (erasable PROM ) 高强度的紫外线照射到透明小窗口上大概 20 分钟, EPROM 内的数据就会被擦除, 存储单元使用的是 NMOSFET 场效应管, 照射的时间足够长, 所有存储单元中场效应管栅极上的电子都被移除, 数据都恢复到原来的 1 透明小窗口

131 5.4 只读存储器 ROM EPROM ( 实例介绍 EPROM 27C256 ) 器件特色 : 读数据时 5V±10% 供电 快速访问时间 :45ns 低功耗 编程电压 :12.75V ±0.25V 编程时间 :100μs/ 字节 电子签名器件描述 : M27C256B 是一款 256Kbit 的 EPROM, 这个型号的器件有两个等级的产品 : 可多次通过紫外线擦写型 (UV) 和只供一次编程型 (OTP), 它特别适用于以 组织的单片机系统中 该器件的 FDIP28W 封装提供一个透明的小窗口, 以便使用紫外线照射完成数据的擦除 新的数据的烧入方法可以从本文档中找到 如果在只需要一次编, 可以选用以 PDIP32 PLCC32 和 TSOP28 为封装的产品 ( 地址线 ) ( 数据线 ) ( 器件使能 ) ( 输出使能 ) ( 编程电压 ) ( 工作电压 ) ( 接地 ) 术语表管脚分布图 器件名称 : M27C256B 容量 : 256Kbit, 以 32K 8 组织, 有两种产品 UV EPROM 和 OTP EPROM 封装图 : 有 4 种封装 : FDIP28W, PDIP28, PLCC32, TSOP28 逻辑符号 :

132 5.4 只读存储器 ROM EEPROM(E 2 PROM/electrically erasable ) 电可擦写 ROM 直接用电信号就能实现存储器中数据的擦除和写入 内部使用了与 UV ERPOM 相似的结构 栅极隔离且电荷状态代表数据状态, 这种隔离的结构可以通过电信号来控制电荷是否充斥

133 5.4 只读存储器 ROM EEPROM( 实例介绍 EEPROM 28C256 ) Vcc 管脚术语解释 A0~A14 地址输入 I/O0~I/O7 数据输入 / 输出 CE OE WE Vcc GND 片选输出使能写操作使能供电端接地端

134 5.4 只读存储器 ROM FLASH 存储器 FLASH 存储器混合了 EPROM 和 EEPROM 的技术, 对整块数据进行操作, 可以进行电擦写 FLASH 存储器的存储单元, 由一个隔离栅极 ( 或称为浮栅极 ) 的场效应管构成 常常使用多层存储单元的结构, 能在一个存储单元中存储多于 1 位的数据

135 5.4 只读存储器 ROM FLASH 存储器 (NOR FLASH) 存储单元与标准的 MOSFET 场效应管相似, 但它有两个栅极 控制栅极 (CG), 浮栅极 (FG) 浮栅极被绝缘的氧化物层隔离着, 一旦有电子经过, 浮栅极就捕获电子, 电子数量决定栅极电压阈值, 电压阈值决定是否产生电流, 数据的状态由电流的存在与否决定, 从而实现信息的存储 多层存储单元结构中, 每一个存储单元中存储多于 1 位的数据, 电流的强度决定数据状态 NOR FLASH 的传输效率很高, 但写入和擦除速度低

136 5.4 只读存储器 ROM FLASH 存储器 (NAND FLASH) NAND FLASH 写入和擦除的速度很快, 所有的 U 盘都使用 NAND FLASH 作为存储介质 选择 FLASH 的权衡因素 : NOR 的读速度比 NAND 稍快一些 NAND 的写入速度比 NOR 快很多 NAND 的 2~4ms 擦除速度远比 NOR 的 0.6~5s 快 NAND 的擦除单元更小, 相应的擦除电路更少

137 5.4 只读存储器 ROM FLASH 存储器 (NOR 和 NAND FLASH 比较 ) 接口 :NOR 带有 SRAM 接口 NAND 使用复杂的 I/O 口来串行地存取数据成本和容量 : NAND 单元尺寸几乎是 NOR 的一半 NAND 价格较低可靠性和耐用性 : NAND 最大擦写次数是一百万次 NOR 擦写次数是十万次使用方便性 : NOR 可以在上面直接运行代码, 不需软件支持

138 5.4 只读存储器 ROM FLASH 存储器 ( 实例简介 K8D1716UTC ) K8D1716UTC 是 SAMSUNG 公司的一款容量为 16MB 的 NOR FLASH 存储器, 它以 2MB 8 的结构来组织

139 5.5 实例点拨 数据是如何保存在存储器中的 文字数据与存储器 字母 D 的产生 显示 存储

140 5.5 实例点拨 数据是如何保存在存储器中的 文字数据与存储器 D o g (a) 内存中的 Dog (b)dram 存储单元 单词 Dog 的存储

141 5.5 实例点拨 数据是如何保存在存储器中的 图像数据与存储器 图像由不同灰度值的像素组成 存储 3 个像素的灰度值

142 第 6 章 探寻单片机内部 存储器组织 欢迎访问电路飞翔网 获取更多信息 6.1 单片机的程序存储器 6.2 单片机的数据存储器 6.3 单片机的特殊功能寄存器 SFR 6.4 实例点拨 用取表方式控制流水灯

143 Intel 公司首推的 8051 单片机有 128 Bytes 的片内 RAM 4K Bytes 的片内 ROM 两个 Timer 1 个串行口和 4 组 I/O 口 外部中断源 中断控制 片内 ROM ( 程序存储器 ) 片内 RAM Timer0 Timer1 计数器输入 CPU 振荡器 总线控制 4 组 I/O 口串行口 P0 P1 P2 P3 TXD RXD 8051 单片机的内部结构框图

144 6.1 单片机的程序存储器 单片机的程序下载到哪里程序经过成功地汇编后, 就会生成一个.HEX 的文件 ( 十六进制代码 ), 十六进制代码很容易就转换成二进制代码, 按一定的顺序 ( 地址 ) 下载到单片机的程序存储器 (program memory) 中 AT89S51 单片机中的程序存储器就是一个 FLASH 存储器 除了使用 FLASH 存储器作为程序存储器外, PROM EPROM 等存储器也用在一些单片机中 还有一些单片机甚至连程序存储器都没有, 这种单片机称为 ROMless 单片机, 必须通过读取外部的程序存储器中的程序才能正常使用

145 6.1 单片机的程序存储器 AT89S51 单片机的程序存储器 4K Bytes 可在线编程的 FLASH 存储器, 可用 0000H~0FFFH 来指向, 如果把这 1000H 个字节的存储空间比喻成一幢大楼, 大楼的楼层可表示为 : 0000H 层 ~0FFFH 层, 共 1000H 层 PC 0FFFH 0FFEH 0002H 0001H 0000H AT89S51 单片机的片内程序存储器

146 6.1 单片机的程序存储器 AT89S51 单片机的程序存储器 ( 容量 ) 在单片机中, 有一个程序计数器 (program counter,pc) 用于告诉单片机下一条将要执行的指令的地址 程序计数器 PC 是一个两个字节 (16 位 ) 的寄存器, 故 AT89S51 单片机最大的寻址范围是 0000H~FFFFH, 共 64K Bytes FFFFH 1000H 0FFFH 0000H 片外程序存储器 (60K Bytes) 片内程序存储器 (4K Bytes) AT89S51 单片机的片内片外程序存储器总容量

147 6.1 单片机的程序存储器 是片内还是片外程序存储器 EA/VPP 管脚, 接高电平, 单片机执行片内程序存储器中的程序 Vcc Vcc C1 20pF C2 20pF Y1 12MHz Vcc 10 礔 C U1 EA/VPP XTAL1 XTAL2 RST P3 0/RXD Vcc AD0/P0.0 AD1/P0.1 AD2/P0.2 AD3/P0.3 AD4/P0.4 AD5/P0.5 AD6/P P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0 7

148 6.1 单片机的程序存储器 是片内还是片外程序存储器 EA/VPP=0 时, 全部自动执行片外程序存储器 EA/VPP=1 时, 先执行片内程序存储器, 执行完 4K Bytes 后, 自动执行片外程序存储器

149 6.2 单片机的数据存储器 数据存储器用来作什么 AT89S51 单片机提供容量为 bit 的片内 RAM, 用于存储运行时产生的数据的地方, 也称这个片内 RAM 为单片机的数据存储器 例如指令 MOV 30H, R1 在执行时, 工作寄存器 R1 中的数据载入地址 30H 中, 这 30H 就是指单片机数据存储器的地址

150 6.2 单片机的数据存储器 片内和片外数据存储器 片内数据存储器就是单片机中原有的数据存储器, 即片内 RAM 片外数据存储器是外部扩展的部分, 它可以由 SRAM 来充当 访问数据存储器时可通过数据指针 DPTR 进行 数据指针 DPTR 是一个长度为两个字节 (16 位 ) 的寄存器 最大的数据存储器寻址范围也为 0000H~ FFFFH

151 6.2 单片机的数据存储器 片内和片外数据存储器 7FH 30H 2FH 20H 1FH 18H 17H 10H 0FH 08H 07H 00H 开放区 位寻址区 工作寄存器区 ( 第 3 组 ) 工作寄存器区 ( 第 2 组 ) 工作寄存器区 ( 第 ( 默认堆栈起始地址 工作寄存器区 ( 第 0 组 ) AT89S51 单片机数据存储器结构 (128 8-bit) 在单片机运行期间, bit 的片内数据存储器并不是完全开放给用户使用的, 只有其中的 20H~7FH 共 96 个字节 ( 开放区 + 位寻址区 ) 是给用户使用的, 而 00H~ 1FH 一般先不去直接使用

152 6.2 单片机的数据存储器 H~1FH 工作寄存器区 ( 组别映射 ) 地址 第 0 组第 1 组第 2 组第 3 组 工作寄存器 地址 工作寄存器 地址 工作寄存器 地址 工作寄存器 00H R0 08H R0 10H R0 18H R0 01H R1 09H R1 11H R1 19H R1 02H R2 0AH R2 12H R2 1AH R2 03H R3 0BH R3 13H R3 1BH R3 04H R4 0CH R4 14H R4 1CH R4 05H R5 0DH R5 15H R5 1DH R5 06H R6 0EH R6 16H R6 1EH R6 07H R7 0FH R7 17H R7 1FH R7 工作寄存器组别映射的片内数据存储器地址

153 6.2 单片机的数据存储器 H~1FH 工作寄存器区 ( 组别选择 ) 更改程序状态字 PSW 中的第 3 位 (RS0) 和第 4 位 RS1), 改变当前程序使用的工作寄存器组别 程序状态字 PSW CY AC F0 RS1 RS0 OV 保留 P 当前工作寄存器组别 0 0 第 0 组 (00H~07H) 0 1 第 1 组 (08H~0FH) 1 0 第 2 组 (10H~17H) 1 1 第 3 组 (18H~1FH) 程序状态字 PSW 与工作寄存器组别

154 6.2 单片机的数据存储器 H~2FH 位寻址区 7FH B7 B6 B5 B4 B3 B2 B1 B0 片内数据存储器的 20H~2FH ( 共 16 个字节 ) 为位寻址区, 这 16 个字节共有 16 8=128 位可进行位寻址, 也就是可以以位为单位进行操作 所用到的指令是 SETB 置 1; CLR 清 0;CPL 取反 ;ANL 与 操作等 20H~2FH 位寻址区也可以当成是一般的开放区使用 30H 2FH 2EH 2DH 2CH 2BH 2AH 29H 28H 27H 26H 25H 24H 23H 22H 21H 20H 1FH 00H 7F 7E 7D 7C 7B 7A F 6E 6D 6C 6B 6A F 5E 5D 5C 5B 5A F 4E 4D 4C 4B 4A F 3E 3D 3C 3B 3A F 2E 2D 2C 2B 2A F 1E 1D 1C 1B 1A F 0E 0D 0C 0B 0A 开放区 位寻址区 映射地址 工作寄存器区 ( 第 3 组 ) 工作寄存器区 ( 第 2 组 ) 工作寄存器区 ( 第 1 组 ) 工作寄存器区 ( 第 0 组 ) 每个地址的映射地址

155 6.2 单片机的数据存储器 H~7FH 开放区 30H~7FH 是片内数据存储器中开放给用户使用的地址空间 用户可以在这个空间里存储系统运行时产生的数据, 也可以读取存储的数据到工作寄存器 累加器等中 一般来说,AT89S51 单片机的开放区可以包括位寻址区 20H~2FH, 所以,AT89S51 单片机开放给用户使用的空间为 20H~7FH 共 96 个字节

156 6.3 单片机的特殊功能寄存器 SFR 特殊功能寄存器 SFR (special function registers) 是用来对单片机内各功能模块进行管理 控制的控制寄存器, 也是指示单片机运行状态的状态寄存器, 它是一个具有特殊功能的 RAM 区 累加器 ACC, 程序状态字 PSW,I/O 口 P0~ P3 都在特殊功能寄存器中 其地址映射空间紧接着片内数据存储器 (00H~7FH) 为 80H~0FFH

157 6.3 单片机的特殊功能寄存器 SFR 特殊功能寄存器 SFR 分布图 0F8H 0F0H 0E8H 0E0H 0D8H 0D0H 0C8H 0C0H 0B8H 0B0H 0A8H 0A0H 98H 90H 88H 80H 0FFH B 0F7H 0EFH ACC 0E7H 0DFH PSW 0D7H 0CFH 0C7H IP P3 IE P2 AUXR1 WDTRST 0BFH 0B7H 0AFH 0A7H SCON SBUF 9FH P1 TCON TMOD TL0 TL1 TH0 TH1 AUXR 97H 8FH P0 SP DP0L DP0H DP1L DP1H PCON 87H AT89S51 单片机特殊功能寄存器分布图 没有被占用的地址有可能在单片机中不存在

158 6.3 单片机的特殊功能寄存器 SFR 特殊功能寄存器 SFR 分布图 外围设备观察窗口 特殊功能寄存器观察窗口 地址栏中输入 : C:0x0000 观察的是程序存储器 I:0x00 观察的是片内数据存储器 X:0x0000 观察的是片外存储器 D:0x80 观察的是特殊功能寄存器 存储器观察窗口 µvision 中的特殊功能寄存器及外围设备观察窗口

159 6.3 单片机的特殊功能寄存器 SFR 特殊功能寄存器的操作方法 字节操作与位操作 AT89S51 单片机中支持位操作的特殊功能寄存器是 : P0(P0 口锁存器 ) TCON( 定时 / 计数器控制寄存器 ) TMOD( 定时 / 计数器模式控制寄存器 ) P1(P1 口锁存器 ) SCON( 串行口控制寄存器 ) P2(P2 口锁存器 ) IE( 中断使能寄存器 ) P3(P3 口锁存器 ) IP( 中断优先控制寄存器 ) PSW( 程序状态字寄存器 ) ACC( 累加器 ) B(B 寄存器 ) 字节操作 位操作 MOV P1,#00H CLR P0.0 CLR P0.1 CLR P0.2 CLR P0.3 CLR P0.4 CLR P0.5 CLR P0.6 CLR P0.7

160 6.3 单片机的特殊功能寄存器 SFR 特殊功能寄存器简介 AT89S51 单片机的特殊功能寄存器共有 26 个 P0(80H) P0 口锁存器 SP(81H) 堆栈指针 DPxL 和 DPxH(82H~85H) 数据指针 (x 代表 0 或 1) PCON(87H) 电源控制寄存器 TCON(88H) 定时 / 计数器控制寄存器 TOMD(89H) 定时 / 计数器模式控制寄存器 TL0 TL1 TH0 TH1(8A~8DH) Timer 寄存器

161 6.3 单片机的特殊功能寄存器 SFR 特殊功能寄存器简介 AT89S51 单片机的特殊功能寄存器共有 26 个 AUXR(8EH) 辅助寄存器 P1(90H) P1 口锁存器 SCON(98H) 串行口控制寄存器 SBUF(99H) 串口缓冲寄存器 P2(0A0H) P2 口锁存器 AUXR1(0A2H) 辅助寄存器 1 WDTRST(0A6H) 看门狗复位控制端

162 6.3 单片机的特殊功能寄存器 SFR 特殊功能寄存器简介 AT89S51 单片机的特殊功能寄存器共有 26 个 IE(0A8H) 中断使能寄存器 P3(0B0H) P3 口锁存器 IP(0B8H) 中断优先级控制寄存器 PSW(0D0H) 程序状态字 ACC(0E0H) 累加器 B(0F0H) B 寄存器

163 6.4 实例点拨 用取表方式控制流水灯 流水灯的显示数据转换 Vcc Vcc Vc C1 20pF C2 20pF Y1 12MHz Vcc C3 10 礔 U1 EA/VPP XTAL1 XTAL2 RST P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5/MOSI P1.6/MISO P1.7/SCK GND Vcc AD0/P0.0 AD1/P0.1 AD2/P0.2 AD3/P0.3 AD4/P0.4 AD5/P0.5 AD6/P0.6 AD7/P0.7 A8/P2.0 A9/P2.1 A10/P2.2 A11/P2.3 A12/P2.4 A13/P2.5 A14/P2.6 A15/P2.7 PSEN ALE/PROG P3.6/WR P3.7/RD D1-D8 R1-R8 470O? 8 AT89S51

164 6.4 实例点拨 用取表方式控制流水灯 取表法 数据存在依次取用的特点, 一般用取表的方法 在汇编程序末尾附加一个数据表, 这个数据表可以是字节型的数据, 也可是英文字母等数据 数据表与汇编程序一起被汇编, 数据表就成为程序的一部分包含在生成的.HEX 文件中

165 6.4 实例点拨 用取表方式控制流水灯 取表法 当程序下载到单片机后, 指令的执行代码和数据表中的数据一起保存在程序存储器中, 存在存储器的某一段地址空间中 而数据表的名称 TABLE 就像一个指针, 指向第一个数据 0FEH 所在的地址 程序存储器地址 0000H 0010H 0020H 程序存储器中的指令代码 F E4 93 B F6 F5 80 7B A3 80 EF 7C 14 7D F8 - DD FE DC FA DB F6 22 FE FD FB F7 EF DF BF 7F 7F - BF DF EF F7 FB FD FE 88 数据表中的数据依次排列在程序存储器 TABLE

166 6.4 实例点拨 用取表方式控制流水灯 取表法 ( 取表程序介绍 )

167 6.4 实例点拨 用取表方式控制流水灯 方法总结 取表法的实质是把存放在程序存储器中的数据, 指针来寻址, 并载入 ACC 中, 再经过指令 MOV P0,A 将数据从 I/O 口输出 开始 装表 (DPTR 指向表头 ) (MOV DPTR,#TABLE) 取表判断是否结束码 (CJNE A,#88H,DISPLAY) 否 处理 (DISPLAY) DPTR 增加 1 (INC DPTR) 是 取表法设计思路

168 第 7 章 单片机 起舞 指令的执行 欢迎访问电路飞翔网 获取更多信息 7.1 汇编语言详谈 7.2 时钟与指令的执行 7.3 寻址方式 7.4 实例点拨 程序存储器和数据存储器的寻址

169 7.1 汇编语言详谈 汇编语言很原始, 直接与计算机的机器码打交道 高级语言让程序员减少出错率和提高工作效率 ( 汇编器 ) 的汇编 ( 用汇编语言写成的 ) 汇编程序 ( 十六进制的 ) 执行代码 ( 编译器 ) 的编译 ( 用高级语言写成的 ) 高级语言程序 ( 可执行的 ) 文件 汇编与编译的过程

170 7.1 汇编语言详谈 汇编器几个定义 : 指令 (instruction): 控制单片机的命令行 汇编程序 (assembly program): 控制目标系统 ( 如单片机 ) 实现特定功能的指令集合 汇编语言 (assembly language): 它是一种低级的计算机语言 源文件 ( 或源代码,source code file): 以.asm 为后缀的文件, 其中包含一条一条的指令 目标文件 ( 或目标代码,object code): 编译器 / 汇编器从源代码文件中生成的文件 执行代码 (opcode or operation code): 指定了操作如何执行, 如.HEX 文件中的十六进制代码

171 7.1.1 汇编器 7.1 汇编语言详谈 汇编器的功能为 : 把 ( 源文件中的 ) 指令汇编成 ( 目标文件中的 ) 执行代码 汇编器还可以自动定义汇编程序中的标号, 即自动在存储器中为标号分配地址 伪指令不会被汇编器汇编 执行代码 ( 十六进制 ) 字节数助记符操作数 MOV A, #data (a) 汇编程序 (b) 程序存储器中的执行代码

172 7.1 汇编语言详谈 汇编程序书写格式 伪指令 START: ORG 00H 注释 标号 MOV A, #00H ; ACC = 00H INC A ; ACC 增加 1 指令 JMP START ; 循环 END 伪指令 汇编程序书写格式

173 7.1 汇编语言详谈 伪指令伪指令 (pseudo opcode) 不被汇编器汇编, 没有执行代码, 但却告知汇编器一些汇编信息 伪指令简介 : BIT 用于汇编程序的一开始创建一个常量 FLASH_COUNT BIT 3EH ; 创建一个名为 FLASH_COUNT 的常量, 并把立即数 3EH 赋给这个常量, 在程序中就可以直接把 FLASH_COUNT 等同于立即数 3EH 进行操作

174 7.1.3 伪指令 伪指令简介 : 7.1 汇编语言详谈 DATA 定义一个指向特殊功能寄存器区地址的变量 DPTRSW DATA 0A2H ;DPTRSW 指向特殊功能寄存器 0A2H 地址上 DB 用于汇编程序中定义若干个长度为 1 个字节的字, 这若干个字使用逗号分隔开, 如果逗号之间没有数据, 汇编器默认为 00H DB 10H, 11H,, 3FH, 20H ; 在目标文件中生成 10H,11H,00H,3FH,20H

175 7.1 汇编语言详谈 伪指令伪指令简介 : DS 用于保留一块存储器空间给程序变量使用或别的用途 STORAGE DS 10 ; 保留一块名叫 STORAGE 的 10 字节存储空间 DW 定义若干个长度为两个字节的字, 这若干个字使用逗号分隔开, 如果逗号之间没有数据, 汇编器默认 为 0000H DW 0FFFEH,, 0102H ; 在目标文件中生成代码 :FFH,FEH,00H,00H, 01H,02H

176 7.1 汇编语言详谈 伪指令伪指令简介 : END 该伪指令告诉汇编器程序的结束点 EQU 定义某一个符号的值, 一旦一个符号被定义后, 就不能被另一个 EQU 或 SET 指令重复定义 BEEP_COUNT EQU 1+1 ; 表达式把 2 定义给符号 BEEP_COUNT

177 7.1 汇编语言详谈 伪指令伪指令简介 : IF ELSE ENDIF 这 3 个伪指令是条件选择语句, 它们告诉汇编器根据表达式的值, 是否汇编某一块程序, 没有汇编的块在目标文件中是不存在对应的执行代码的 IF P1.0; 如果 P1.0=1, 就汇编下一行 DB 01H, 02H, 03H; 在存储器中定义字 01H 02H 03H ENDIF ; 条件选择结束, 如果 P1.0 1, 上一行不被汇编

178 7.1 汇编语言详谈 伪指令伪指令简介 : INCL 该伪指令用于在汇编时把其他文件与当前文件 结合在一起汇编 INCL "const.def ; 即把文件 const.def 与当前文件结合在一起汇编 ORG 该伪指令用于设置程序计数器 PC 的初始值 ORG 0000H ; 指令的执行代码在单片机的程序存储器中从 0000H 开始存储 ( 也可简单写成 00H)

179 7.1.3 伪指令 7.1 汇编语言详谈 伪指令简介 : SET 该伪指令类似 EQU, 但不同的是 SET 可以通过 另一个 SET 伪指令重复定义变量的值 COUNT SET 3 COUNT SET 1 ; 最终 COUNT=1 $ 美元符号表示当前地址, 意味着程序计数器 PC 的值不变, 在程序中表示 本行程序 DJNZ R5, $ 工作寄存器 R5 减 1, 如果不等于 0 就跳回本行 直到 R5 减至 0 为止, 执行下一条指令

180 7.2 时钟与指令的执行 时钟究竟是什么 事情与时间线 9 3 执行点 时间线 8 7 秒盘 时钟信号波形与事情 时钟信号 事情 事情

181 7.2 时钟与指令的执行 时钟究竟是什么 ( 单片机的时钟信号源 ) Vcc Vcc C1 20pF C2 20pF Y1 12MHz Vcc C U1 EA/VPP XTAL1 XTAL2 RST 外部时钟信号?????? Vcc C U1 EA/VPP XTAL1 XTAL2 RST 内部时钟 外部时钟

182 7.2 时钟与指令的执行 时钟究竟是什么 ( 有关时钟信号周期的概念 ) 振荡周期 振荡器产生的时钟信号的周期 机器周期 1 个机器周期 =12 个振荡周期 指令周期 执行一条指令所占用的全部时间, 一般为 1~4 个机器周期 例 : 使用的是内部时钟, 晶振频率为 12MHz, 则有 : 振荡周期 =1/ 晶振频率 =1/12µs 机器周期 =12 振荡周期 =1µs DJNZ R4,DELAY 的指令周期为两个机器周期, 执行时间为 2 机器周期 =2 1µs =2µs

183 7.2 时钟与指令的执行 程序计数器 PC 的角色 程序计数器 PC, 它是一个两个字节长度的寄存器, 这个寄存器中的数值告诉单片机要到哪一个地址去找下一条指令来执行 程序一开始定义 ORG 00H, 程序计数器 PC 从 0000H 开始, 当第一条指令执行后,PC 自增 1, 指示下一条指令从 0001H 中拿出执行 程序计数器 PC 是不能被直接修改的, 但可以使用跳转指令来改变 PC 的值, 如指令 LJMP 1234H 执行后, PC= 1234H 没有指令能够读 PC 的值

184 7.2 时钟与指令的执行 指令的执行 时钟信号提供时序, 程序计数器 PC 指示执行地址, 单片机便可以顺利地执行指令 单片机的指令执行大致分为以下 5 个步骤 1 抓取指令 单片机通过总线向程序存储器读取执行代码和等待处理的过程 2 单片机内部数据处理 将抓取到的数据和某个寄存器做运算 3 逻辑或标志处理 运算完成后, 对逻辑或标志进行处理 4 转移判断 依照判断的结果进行转移, 条件为真时如何动作, 条件为假时如何动作 5 返回 将结果保存到其他寄存器或存储器中 抓取数据 处理数据 存储数据

185 7.2 时钟与指令的执行 指令的执行 ( 详解指令执行 ) MOV A, 32H 其执行代码为 E5 32 理解 : 1 当单片机抓取 E5 时, 就知道要执行的操作是把下一个执行代码所指向的数据存储器地址中的数据载入 ACC 2 于是单片机往下抓取下一个执行代码 32 单片机根据这个值知道要去取数据存储器地址 32H 中的内容 3 抓取数据存储器 32H 中的内容 88H 后 4 再把 88H 载入到 ACC 中, 于是最终 (A)=88H 抓取数据 处理数据 存储数据

186 7.2 时钟与指令的执行 指令的执行 ( 详解指令执行 ) CPU 程序计数器 PC 器 指令解读 ACC 程序存储器 E5H 32H 10H 88H 数据存储器 33H 32H 1 读取执行代码 E5;2 获知目标地址是 32H; 3 取目标地址中的内容 ;4 数据载入累加器 ACC 中 寻址示意图

187 7.3 寻址方式 6 种寻址方式在指令中的地址或立即数如果以十六进制中的 A B C D E 或 F 开头需要在地址或立即数前加 0 直接寻址 间接寻址 寻址方式例子 寄存器寻址 寄存器特征寻址 立即寻址 变址寻址 MOV A, 30H MOV MOV A, R0 INC A MOV A, #8FH MOVC

188 7.3.1 直接寻址 7.3 寻址方式 直接寻址 (direct addressing) 是指一个直接地址的内容载入一个寄存器中或相反 单片机片内数据存储器的 00H~7FH( 但常用 30H~7FH) 以及特殊功能寄存器 SFR 能被直接寻址 直接寻址的内容不包含在执行代码中, 而是在单片机的数据存储器中, 所以执行直接寻址指令的速度还是很快的 MOV A, 30H ; 把 30H 地址的内容载入累加器 ACC MOV 50H, B ; 把 B 寄存器的值载入 50H 地址内 ADD A, 60H ;ACC 和 60H 地址的内容相加, 结果存回 ACC

189 7.3.2 间接寻址 7.3 寻址方式 间接寻址 (indirect addressing) 是用 R0 R1 SP DPTR 中的某一寄存器来代替直接寻址中的直接地址来寻址 例如, 直接寻址 MOV A, 32H 与间接寻址是相同的 MOV R1, #32H ; R1=32H MOV R1 所指向的地址的内容载入 ACC 中 间接寻址可以访问片内和片外数据存储器 MOV A,@R0 ; 取得 R0 所指的存储器地址的内容, 并载入 ACC MOVX A,@DPTR ; 取得 DPTR 所指的片外数据存储器的内容, 并载入 ACC

190 7.3.3 寄存器寻址 7.3 寻址方式 寄存器寻址 (register instructions) 是指与工作寄存器 R0~R7 有关的寻址指令 程序状态字 PSW 中的 RS1 和 RS0 决定使用 AT89S51 单片机 4 组 R0~R7 寄存器中的哪一组 MOV A, R0 ; 将 R0 的值载入累加器 ACC ADD A, R5 ; 将 ACC 与 R5 的值相加, 并把结 果存回 ACC MOV R7, A ; 将 ACC 的值载入 R7 中

191 7.3.4 寄存器特征寻址 7.3 寻址方式 寄存器特征寻址 (register-specific instructions) 是一类与特定寄存器有关的寻址方式 指令不涉及用于指向的地址字节, 不对其他地址和数据产生什么影响 例如 : INC A ; 累加器 ACC 自增 1 SWAP A ;ACC 的高 4 位与低 4 位互换 INC DPTR ; 数据指针寄存器 DPTR 自增 1

192 7.3.5 立即寻址 7.3 寻址方式 立即寻址 (immediate addressing) 是一类与立即数相关的寻址方式 当程序中需要向寄存器或地址中载入某个立即数, 就可采用立即寻址 立即数的特征就是在常数前加一个 # 号 这类寻址方式比较简单 例如 : MOV A, #100 ; 将立即数 100(64H) 载入累加器 AC MOV 33H, #10H ; 将立即数 10H 载入数据存储器 33H 中 MOV R0, #0FFH ;R0=FFH MOV DPTR, #2046H ;DPTR=2046H

193 7.3 寻址方式 变址寻址变址寻址 (indexed addressing) 针对的是程序存储器, 只能从程序存储器中读数据 通常我们对程序存储器访问得较多的是数据表中的数据 在变址寻址中, 使用程序计数器 PC 或数据指针寄存器 DPTR 作为间接地址, 有时还加上累加器 ACC 例如 : MOVC ; 查表操作 : 累加器 ACC 和数据指针寄存器 DPTR 的值相加得到一个程序存储器上的地 址, 将该地址的内容载入 ACC 中 A ; 访问片外存储器 : 将 ACC 的值载入 DPTR 所指的片外存储器的地址上

194 7.4 实例点拨 程序存储器和数据存储器的寻址 把程序存储器中的数据载入工作寄存器中 例 : 将程序存储器中的 200H~202H 上的 C A T 3 个字节数据载入工作寄存器 R0 R1 R2 中

195 7.4 实例点拨 程序存储器和数据存储器的寻址 把程序存储器中的数据载入工作寄存器中

196 7.4 实例点拨 程序存储器和数据存储器的寻址 把程序存储器中的数据载入工作寄存器中 ORG 0200H; 数据表 TABLE 的起始地址定义为 0200H TABLE: DB "CAT"; 数据表中的数据 CAT END MOV DPTR, #200H 用数据指针寄存器 DPTR 指向数据表 TABLE 的表头, 也可以写成 MOV DPTR, #TABLE

197 7.4 实例点拨 程序存储器和数据存储器的寻址 把程序存储器中的数据载入工作寄存器中 主程序段的执行代码 程序存储器观察窗口 数据表伪指令定义数据表的起始地址

198 7.4 实例点拨 程序存储器和数据存储器的寻址 把程序存储器中的数据载入数据存储器中 把程序存储器中数据表中的一个单词 CHINA 装载到数据存储器的 30H~34H 中 令 A 将 ACC 中的数据装到 R0 所指的数据存储器

199 7.4 实例点拨 程序存储器和数据存储器的寻址 把程序存储器中的数据载入数据存储器中

200 第 8 章给单片机下命令 指令畅谈 欢迎访问电路飞翔网 获取更多信息 8.1 指令概述 8.2 算术指令 8.3 逻辑指令 8.4 片内数据装载指令 8.5 片外数据装载指令 8.6 查表指令 8.7 布尔指令 8.8 调用子程序指令 8.9 跳转与循环指令 8.10 单片机对于带符号数的处理和溢出问题 8.11 实例点拨 指令应用 ( 程序 ) 实例

201 单片机的命令 51 单片机的指令总有 111 条, 配合与不同的操作数共有 255 个指令的写法, 即 255 个指令的执行代码 这个数量比起其他的处理器来说并不为多 但在实际应用中, 常用的指令一般不过 50 个 一条指令只要经过几次反复使用和理解就能掌握

202 8.1.1 指令的长度 8.1 指令概述 程序存储器 : START: ORG 0000H CLR A MOV A, #88H CJNE A, #00H, START END E B4 00 FA 0000H 0001H 0002H 0003H 0004H 0005H 指令的长度 多数指令的长度为单字节或双字节的 指令的长度与指令周期 ( 指令执行所花费的时间 ) 没有必然的联系 有的单字节指令周期比双字节或三字节指令要长, 如指令 MUL AB 长度为 1 个字节, 而指令周期却为 4 个机器周期

203 8.1 指令概述 影响程序状态字 PSW 的指令 程序状态字 PSW 用来存放 CPU 运算和执行状态的寄存器, 长度为 1 个字节, 其 8 个位分别如下 : 其中有 4 个位在执行某些指令时可能会被改变, 以指示 CPU 的运算和执行状态, 如下 : CY 进位标志 AC 辅助进位标志 OV 溢出标志 P 奇偶标志位

204 8.1 指令概述 影响程序状态字 PSW 的指令 表中 1 表明执行该指令时会将标志位置 1; 0 表明会清 0 标志位 ; 1/0 表明可能置 1, 也可能清 0; 没有标注的说明不会影响标志位

205 8.2 算术指令 加法指令 ADD A, <src-byte> A 代表累加器 ACC,<src-byte> 代表 源操作数 - 以字节形式 指令说明字节机器周期 ADD A,Rn 将 Rn 与 ACC 的值相加, 结果存回 ACC 1 1 ADD A,direct 将直接地址 direct 的内容与 ACC 相加, 结果存回 ACC 2 1 ADD A,@Ri 的内容与 ACC 相加, 结果存回 ACC 1 1 ADD A,#data 将立即数 #data 与 ACC 的值相加, 结果存回 ACC 2 1 Ri 表示 R0 或 R1;Rn 表示 R0~R7 的其中之一关于 ADD 指令有以下几点需要说明 1 相加的操作总是在累加器 ACC 中发生, 源操作数可以是一个工作寄存器的值 直接地址的内容 间接地址的内容或立即数 2 ADD 指令可能影响 PSW 中的标志位 CY OV AC 和 P 如果相加过程中, 位 3 有进位则辅助进位标志位 AC=1; 位 7 有进位则进位标志位 CY=1

206 8.2 算术指令 加法指令 ADD A, <src-byte> 例 : MOV A,#0F5H ;ACC=0F5H ADD A, #0BH ; ACC=0F5+0BH=100H 位 7 有进位位 3 向位 4 进位 F 5 H + 0 B H H 即, 进位位 7 位 6 位 5 位 4 位 3 位 2 位 1 运算结果 :ACC=00, 标志位情况如下 : CY=1 由于位 7 有进位,AC=1 由于位 3 向位 4 进位, P=1 由于 ACC= ,1 的个数是 0( 偶数 ) 位 0

207 8.2 算术指令 加法指令 ADD A, <src-byte> 例 : MOV A,#0F5H ;ACC=0F5H ADD A, #0BH ; ACC=0F5+0BH=100H 溢出标志位 OV 的变化是 : 如果位 6 有进位而位 7 没有进位, 或者位 7 有进位而位 6 没有, 则溢出标志 OV=1, 否则 OV=0 注意,OV 的状态只有在带符号数加法运算时才有意义 当两个带符号数相加时,OV=1 表示加法运算超出了累加器 ACC 所能表示的带符号数的有效范围 (-128~+127), 即产生了溢出, 因此运算结果是错误的 ; 否则 OV=0 说明无溢出产生, 运算结果是正确的

208 8.2 算术指令 带进位的加法指令 ADDC A, <src-byte> 带进位的加法指令 ADDC 相当于在 ADD 的运算基础上再加上进位 CY 指令说明字节 ADDC A,Rn ADDC A,direct ADDC ADDC A,#data 将 Rn 与 ACC 的值及进位 CY 相加, 结果存回 ACC 将直接地址 direct 的内容与 ACC 及进位 CY 相加, 结果存回 ACC 的内容与 ACC 及进位 CY 相加, 结果存回 ACC 将立即数 #data 与 ACC 的值及进位 CY 相加, 结果存回 ACC 机器周期

209 8.2 算术指令 带进位的加法指令 ADDC A, <src-byte> ADDC 和 ADD 指令一起使用时一般用于处理 2 个字节 (16 位 ) 的加法运算 由于累加器 ACC 的长度为 1 个字节, 所以在处理 2 个字节的加法时先用 ADD 指令进行低位字节的运算, 把结果保存在某一地址空间或寄存器中 如果低位字节相加有进位将会影响进位标志 CY, 于是再使用 ADDC 指令进行高位字节的加法运算, 把结果保存在另一个地址空间或寄存器中, 这两个加法运算的结果合在一起就是 2 个字节数据的和

210 8.2 算术指令 带进位的加法指令 ADDC A, <src-byte> 运算结果 :R1=78H,R0=74 如果在进行高位字节加法时也使用 ADD 指令将会漏掉低位字节相加的进位 CY, 而导致最终运算的错误

211 8.2 算术指令 带借位的减法指令 SUBB A,<src-byte> 减法指令 SUBB 是 subtract with borrow 的缩写, 当进行减法运算时,PSW 中的 CY 位就变成了借位标志位 指令说明 SUBB A,Rn SUBB A,direct SUBB SUBB A,#data ACC 减去 Rn 的值及借位 CY, 结果存回 ACC ACC 减去直接地址 direct 的内容及借位 CY, 结果存回 ACC ACC 的内容及借位 CY, 结果存回 ACC ACC 减去立即数 #data 及借位 CY, 结果存回 ACC 字节 机器周期

212 8.2 算术指令 带借位的减法指令 SUBB A,<src-byte> 关于 SUBB 指令对标志位的影响如下 : 1 当位 7 有借位时, 标志 CY=1; 否则 CY=0 也就是说, 如果无符号数做减法时, 减数比被减数大, CY=1 2 当位 3 有借位时, 标志 AC=1; 否则 AC=0 3 溢出标志位 OV=1 表示溢出 ;OV=0 表示未溢出 OV 的值可由差的位 7 的借位与位 6 的借位做 XOR( 异或 ) 的逻辑判断得到 4 由于 SUBB 指令连 CY 一起减, 若不想减 CY, 可先将 CY 清 0

213 8.2 算术指令 自增 / 自减指令 INC <byte> / DEC <byte> 进位标志 CY 不受影响, 可对 DPL 和 DPH 进行 INC/DEC 操 作 指令说明字节 INC A ACC 的值自增 INC Rn 工作寄存器 Rn 的值自增 INC direct 直接地址 direct 的内容自增 的内容自增 INC DPTR DPTR 值自增 DEC A ACC 的值自减 DEC Rn 工作寄存器 Rn 的值自减 DEC direct 直接地址 direct 的内容自减 的内容自减 机器周期

214 8.2 算术指令 乘法指令 MUL AB 指令说明字节 MUL AB ACC 与 B 寄存器的值相乘 (A B), 积的低位字节存回 ACC, 高位字节存回 B 寄存器 机器周期 1 4 说明 : 1 做无符号的 1 个字节运算时, 累加器 ACC 与 B 寄存器的值相乘所得的积 (2 个字节 ), 其低位字节存回 ACC 中, 高位字节存入 B 寄存器 运算结果 : 2 如果积大于 00FFH, 则 OV=1, 否则 OV=0 A=6AH, 3 执行时, 进位标志 CY 会被清除为 0 例 : MOV A, #66H ; ACC=66H MOV B, #77H ; B=77H MUL AB ; 积 =66 77=2F6AH B=2FH, CY=0, 由于 2F6AH>FFH, 所以 OV=1

215 8.2 算术指令 除法指令 DIV AB 指 令 说 明 字节 周期 DIV AB ACC 除以 B 寄存器的值 (A B), 商存回 ACC, 余数存回 B 寄存器 1 4 说明 : 1 DIV 指令做无符号的除法运算 如果 B 寄存器 =0, 执行 时 OV 被置 1, 表示运算是错误的, 因为除数不应该为 0 2 DIV 指令正确执行后, 商存回 ACC, 余数存回 B 寄存 器, 进位标志 CY 及溢出标志 OV 都等于 0 例: MOV A, #66H ; ACC=66H MOV B, #04H ; B=04H DIV AB ; 66 04=19H 02H, 即商 =19H, ; 余数 =02H 运算结果 :A=19H,B=02H,CY=0,OV=0

216 8.2 算术指令 十进制调整指令 DA A 指令 DA 只适用于加法指令 ADD 或 ADDC 后且只对累加器 ACC 产生作用, 而不能使用在如 INC 等指令之后 指令说明字节机器周期 DA A 累加器 ACC 作十进制调整 1 1 DA 指令进行十进制调整的方法为 : 1 在 ADD 或 ADDC 运算后, 若 ACC 低位 >9 或 AC=1, 则 ACC+06H 2 在 ADD 或 ADDC 运算后, 若 ACC 高位 >9 或 CY=1, 则 ACC+60H 例 : MOV A, #47H ; ACC=47H MOV B, #25H ; B=25H ADD A, B ; ACC=6CH,ACC 的低位 C>9,ACC+06H DA A ; 十进制调整后 ACC=6C+06=72H

217 8.3 逻辑指令 AND 操作 ANL <dest-byte>,<src-byte> 指令说明字节机器周期 ANL A,Rn ANL A,direct ANL ANL A,#data ANL direct,a ANL direct,#data 将 Rn 与 ACC 的值做 AND 运算, 结果存回 ACC 将直接地址 direct 的内容与 ACC 做 AND 运算, 结果存回 ACC 的内容与 ACC 做 AND 运算, 结果存回 ACC 立即数 #data 与 ACC 做 AND 运算, 结果存回 ACC ACC 与直接地址 direct 的内容做 AND 运算, 结果存回该直接地址中 立即数 #data 与直接地址 direct 的内容做 AND 运算, 结果存回该直接地址中

218 8.3 逻辑指令 AND 操作 ANL <dest-byte>,<src-byte> 例 : MOV A, #35H ANL A, #0FH 运算过程 : ; ACC=35H ; ACC=35H AND 0FH 35H FH 运算结果 : ACC=05H X1 X2 Y

219 8.3 逻辑指令 OR 操作 ORL <dest-byte>,<src-byte> 指令说明字节机器周期 ORL A,Rn ORL A,direct ORL ORL A,#data ORL direct,a ORL direct,#data 将 Rn 与 ACC 的值做 OR 运算, 结果存回 ACC 将直接地址 direct 的内容与 ACC 做 OR 运算, 结果存回 ACC 的内容与 ACC 做 OR 运算, 结果存回 ACC 立即数 #data 与 ACC 做 OR 运算, 结果存回 ACC ACC 与直接地址 direct 的内容做 OR 运算, 结果存回该直接地址中 立即数 #data 与直接地址 direct 的内容做 OR 运算, 结果存回该直接地址中

220 8.3 逻辑指令 OR 操作 ORL <dest-byte>,<src-byte> 例 : MOV A, #04H ORL A, #68H 运算过程 : ; ACC=04H ; ACC=04H OR 68H 04H H 运算结果 : ACC=6CH X1 X2 Y

221 8.3 逻辑指令 XOR 操作 XRL <dest-byte>,<src-byte> 指令说明字节机器周期 XRL A,Rn XRL A,direct XRL XRL A,#data XRL direct,a XRL direct,#data 将 Rn 与 ACC 的值做 XOR 运算, 结果存回 ACC 将直接地址 direct 的内容与 ACC 做 XOR 运算, 结果存回 ACC 的内容与 ACC 做 XOR 运算, 结果存回 ACC 立即数 #data 与 ACC 做 XOR 运算, 结果存回 ACC ACC 与直接地址 direct 的内容做 XOR 运算, 结果存回该直接地址中 立即数 #data 与直接地址 direct 的内容做 XOR 运算, 结果存回该直接地址中

222 8.3 逻辑指令 XOR 操作 XRL 例 : MOV A, #54H XRL A, #78H 运算过程 : 54H H <dest-byte>,<src-byte> ; ACC=54H ; ACC=54H XOR 78H X1 X2 Y 运算结果 : ACC=2CH

223 8.3 逻辑指令 清 0 操作 CLR A 指令说明字节机器周期 CLR A 累加器 ACC 清 说明 : 将累加器 ACC 清 0 执行指令 CLR A 后,ACC=00H

224 8.3 逻辑指令 取反操作 CPL A 指令说明字节机器周期 CPL A 累加器 ACC 每一位的值反相 1 1 例 : MOV A, #47H ; ACC=47H CPL A ; ACC=B8H 运算过程 : X Y H 取反每一位, 运算结果 : ACC = B8H

225 8.3 逻辑指令 位移动操作 RL RLC RR RRC 指令说明字节机器周期 RL A 累加器 ACC 左移一位 1 1 RLC A 累加器 ACC 含进位 CY 左移一位 1 1 RR A 累加器 ACC 右移一位 1 1 RRC A 累加器 ACC 含进位 CY 右移一位 1 1 这 4 条指令用于累加器 ACC 内部位的移动, 这 4 条指令只适用于 ACC

226 8.3 逻辑指令 位移动操作 RL RLC RR RRC 1 RL A ACC 左移一位 每次移出 ACC 的位 7 进入位 0 2 RLC A ACC 含进位 CY 左移一位 每次移出 ACC 的位 7 进入进位 CY 中, 而进位 CY 则进入位 0 中

227 8.3 逻辑指令 位移动操作 RL RLC RR RRC 3 RR A ACC 右移一位 每次移出 ACC 的位 0 进入位 7 4 RRC A ACC 含进位 CY 右移一位 每次移出 ACC 的位 0 进入进位 CY 中, 而进位 CY 则进入位 7 中

228 8.3 逻辑指令 累加器高低位交换操作 SWAP A 指令说明字节机器周期 SWAP A 累加器 ACC 的高 4 位与低 4 位互换 1 1 例 : MOV A, #28H ; ACC=28H SWAP A ; ACC=82H 运行结果 : 累加器 ACC 中的高 4 位与低 4 位互换, 得 ACC=82H

229 8.4 片内数据装载指令 片内数据装载指令是一类在片内存储器内 搬运 数据的指令, 在单片机程序中使用频率最高 这类指令中一多半都以 MOV 为助记符, 指令形式为 MOV <dest>, <src>, 其中 <dest> 为目的操作数,<src> 为源操作数 <dest> 和 <src> 代表片内数据存储器空间地址或特殊功能寄存器 SFR, 指令在进行不同地址空间或寄存器之间装载时不需要通过累加器 ACC 的参与

230 8.4 片内数据装载指令 数据装载指令 MOV <dest>, <src> 指令说明 字节 机器周期 MOV A,Rn 将 Rn 的内容载入 ACC 1 1 MOV A,direct 将直接地址 direct 的内容载入 ACC 2 1 MOV A,@Ri 的内容载入 ACC 1 1 MOV A,#data 将立即数 #data 载入 ACC 2 1 MOV Rn,A 将 ACC 的值载入 Rn 1 1 MOV Rn,direct 将直接地址的内容载入 Rn 2 2 MOV Rn,#data 将立即数 #data 载入 Rn 2 1 MOV direct,a 将 ACC 的值载入直接地址 direct 中 2 1 MOV direct,rn 将 Rn 的值载入直接地址 direct 中 2 2

231 8.4 片内数据装载指令 数据装载指令 MOV <dest>, <src> 指令说明 字节 机器周期 MOV direct1,direct2 将直接地址 direct2 中的内容载入直接地址 direct1 中 3 2 MOV direct,@ri 的内容载入直接地址 direct 中 2 2 MOV direct,#data 将立即数 #data 载入直接地址 direct 中 3 2 将 ACC 中 1 1 将直接地址 direct 的内容载入间接地 2 2 中 将立即数 #data 中 2 1

232 8.4 片内数据装载指令 数据装载指令 MOV <dest>, <src> 根据目的操作数的不同,MOV 指令分成以累加器 ACC 工作寄存器 Rn 直接地址 direct 为目的操作数的 4 种不同形式 MOV 指令都不会改变源操作数, 也不会影响标志位 注意 : 1 立即数前必需要有 # 号, 否则装载的将是地址空间上的数据 ( 直接地址的内容 ) 2 如果立即数小于 10H, 即 0~F, 则高位会被系统自动补上 0 3 累加器 ACC 或工作寄存器等一些寄存器加载大于 FFH 的立即数将会引发错误, 因为这些寄存器的长度只有 1 个字节

233 8.4 片内数据装载指令 数据指针寄存器装载指令 MOV DPTR, #data16 指令说明字节机器周期 MOV DPTR,#data16 将 16 位的立即数 #data 载入 DPTR 说明 : 该指令用于向数据指针寄存器 DPTR 装载 16 位的地址数据, 地址空间的范围为 0000H~FFFFH AT89S51 单片机为了方便同时访问片内 片外数据存储器, 提供了两个 16 位的 DPTR 寄存器 DPTR0 和 DPTR1 在特殊功能寄存器中, 每一个 DPTR 分成两个 8 位的寄存器 DPH 和 DPL 例 : 当 AUXR1 中的 DPS 位 =0 时, 指令影响 DPTR0, MOV DPTR, #33FFH, 向 DP0H 装载 33H, 向 DP0L 装载 FFH 3 2

234 8.4 片内数据装载指令 堆栈指令 PUSH 和 POP 堆栈 (stack) 是单片机在片内数据存储器中开辟用于存储临时数据的区域 程序运行过程中需要把某寄存器或地址空间中的数据暂时保存起来, 以释放寄存器或地址空间暂作它用, 等使用完毕后, 再将刚才暂时保存的数据恢复到寄存器或地址空间中 堆栈指针 SP 在特殊功能寄存器中的 81H 上, 是一个 8 位的寄存器

235 8.4 片内数据装载指令 堆栈指令 PUSH 和 POP 单片机上电复位时 SP=07H,SP 指向的是片内数据存储器中的 07H, 正好是第 0 组工作寄存器 R7 的地址 此时如果执行压栈指令 PUSH direct, 执行的步骤是 SP 先自增 1, 于是 SP=08H, 然后 direct 的数据就压入 08H 中, 此时 (08H)=direct, 数据就被保存到了 08H 上 指令说明字节 PUSH direct POP direct 将直接地址 direct 的内容压入堆栈中, 执行前 SP+1 从堆栈中弹出数据到直接地址 direct 中, 执行后 SP-1 机器周期

236 8.4 片内数据装载指令 堆栈指令 PUSH 和 POP( 例 ) ORG 00H MOV A, #89H ; 向累加器 ACC 中载入立即数 89H PUSH ACC ; 压 ACC 的数值入堆栈,(08H)=89H MOV A, #3FH ; ACC=3FH MOV R0, #55H ; R0=55H ADD A, R0 ; ACC=94H MOV 30H, A ;(30H)=94H,ACC 完成运算任务 POP ACC ; 弹栈指令将刚才压入堆栈的立即数 89H 弹回到 ACC 中, ACC=89H MOV SP, #40H ; 堆栈指针 SP=40H PUSH 30H ; 把 30H 中的数据 94H 压入堆栈中,(41H)=94H JMP $ ; 停机 END

237 8.4 片内数据装载指令 数据交换指令 XCH 和 XCHD 指令说明字节周期 XCH A,Rn 将累加器 ACC 与 Rn 的值交换 1 1 XCH A,direct 将累加器 ACC 与直接地址 direct 的内容交换 1 2 XCH A,@Ri 将累加器 ACC 的内容交换 1 1 XCHD A,@Ri 将累加器 ACC 的低 4 的低 4 位内容交换 1 1 XCH 指令交换累加器 ACC 和工作寄存器 直接或间接地址的内容 例如,ACC=65H,R2=99H, 执行 XCH A, R2 之后,ACC=99H, R2=65H 指令 XCHD 交换的只是累加器 ACC 与间接地址的低 4 位内容, 高 4 位内容不变 例如, 地址空间 (40H)=2FH,ACC=3DH,R1=40H, 执行 XCHD 之后,ACC=3FH,(40H)=2DH

238 8.5 片外数据装载指令 访问单片机的片外存储器, 寻址方式只有一种 间接寻址 用到的操作数除了累加器 ACC 外, 还有 1 或 R1) 或 2 要根据寻址的空间大小来确定 指令说明字节机器周期 MOVX A,@Ri MOVX A,@DPTR 所指的片外存储器的内容载入 ACC 中 (8 位 ) 将 DPTR 所指定的片外存储器的内容载入 ACC 中 (16 位 ) 将 ACC 所指的片外存储器中 (8 位 ) 将 ACC 的值载入 DPTR 所指的片外存储器中 (16 位 )

239 8.5 片外数据装载指令 例 : 片外程序存储器的 1000H 开始存储有 8 个数据, 循环将这 8 个数据送到 P1 口用于显示 MYXDATA EQU COUNT EQU 8 ; 计数器 COUNT=8 ORG 00H ; 起始地址 START: 1000H ; 开始地址 1000H 赋给变量 MYXDATA MOVDPTR, #MYXDATA ; DPTR 指向地址 1000H,DPTR = 1000H MOVR1, #COUNT ; 计数器值载入 R1,R1 = 8 LOOP: MOVX ; 间接寻址,@DPTR 所指片外数据载入 ACC MOV P1, A ; 送到 P1 口输出 INC DPTR ; DPTR 自增 1, 准备取下一个数据 DJNZ R1, LOOP ; 判断是否取完 8 个数据 JMP START ; 跳回一开始, 循环 END

240 8.6 查表指令 指令说明 MOVC TR MOVC ACC 加 DPTR 的值作为间接地址, 将该地址的内容载入 ACC 中 ACC 加 PC 的值作为间接地址, 将该地址的内容载入 ACC 中 字节 机器周期 使用 MOVC 前, 数据指针寄存器 DPTR 一般载入数据表的表头地址, 这样指令就能实现将数据表中的数据逐一读入累加器 ACC 中

241 8.6 查表指令 指令 MOVC 讲解 : 数据表 TABLE 要紧跟在 USETABLE 子程序段 RET 后 PC 指向 RET 的地址, 如果设置访问序号 ENTRY_ NUMBER=1, 那么指令 MOVC 就指向 RET 的下一个地址, 即数据表 TABLE 的表头 MOVA, ENTRY_NUMBER ; 将访问序号 ENTRY_NUMBER 载入 ACC CALL USETABLE ; 调子程序 USETABLE USETABLE: ; USETABLE 子程序段 MOVC ; 此时 PC 已能指向 RET 随后的表 TABLE RET TABLE: ; 数据表 TABLE DB 0FEH, 0FDH, 0FBH, 0F7H DB 0EFH, 0DFH, 0BFH, 07FH END

242 8.7 布尔指令 51 单片机提供了一套完整的布尔指令, 布尔指令是一类针对位操作的指令 除了片内数据存储器提供位寻址区外 (20H~ 2FH), 特殊功能寄存器 SFR 也提供了 128 个可寻址位,I/O 口也可以进行位操作 单片机提供位寻址的机制, 是为了增强系统的灵活性

243 8.7 布尔指令 清 0 置 1 与取反操作 CLR SETB CPL 指令说明字节机器周期 CLR C 进位 CY 清 CLR bit 将可位寻址的位清 SETB C 将进位 CY 置 SETB bit 将可位寻址的位置 CPL C 将进位 CY 反向 1 1 CPL bit 将可位寻址的位反向 2 1 bit 代表可位寻址的地址或寄存器, 包括 : 片内数据存储器的位寻址区 20H~2FH( 映射地址 ), 累加器 ACC,B 寄存器, 程序状态字 PSW, 中断优先级控制寄存器 IP, 中断使能寄存器 IE, 串行控制寄存器 SCON, 定时 / 计数器控制寄存器 TCON, I/O 口 :P0 P1 P2 P3 另外 : 对进位 CY 操作的指令会直接影响标志位

244 8.7 布尔指令 布尔逻辑指令 ANL ORL 指令说明 ANL C,bit ANL C,/bit ORL C,bit ORL C,/bit 将进位 CY 与可位寻址的位做 AND 运算, 结果存回进位 CY 将进位 CY 与可位寻址的位的反相做 AND 运算, 结果存回进位 CY 将进位 CY 与可位寻址的位做 OR 运算, 结果存回进位 CY 将进位 CY 与可位寻址的位的反相做 OR 运算, 结果存回进位 CY 字节 机器周期 说明 : 这类指令是对位的逻辑运算, 执行结果存回进位 CY, 影响标志位

245 8.7 布尔指令 位数据装载指令 MOV <dest-bit>,<src-bit> 机器周指令说明字节期 MOV C,bit 将可位寻址的位载入进位 CY 2 1 MOV bit,c 将进位 CY 载入可位寻址的位 2 2 说明 : 指令完成的是位之间的装载, 例 : SETB C ; CY=1 ORL C, P2.0 ; P2.0 与 CY 做 OR 运算, 由于 CY=1, ; 所以无论 P2.0 是 1 或 0,OR 运算结果都为 1, 于是 CY=1

246 8.7 布尔指令 布尔跳转指令 JC JNC JB JNB JBC 指令说明字节机器周期 JC rel 若进位 CY=1 则跳到 rel 2 2 JNC rel 若进位 CY=0 则跳到 rel 2 2 JB bit,rel 若可位寻址的位 =1 则跳到 rel 3 2 JNB bit,rel 若可位寻址的位 =0 则跳到 rel 3 2 JBC bit,rel 若可位寻址的位 =1 则跳到 rel, 并将该位清 说明 : 以上指令检测进位 CY 或可位寻址的位, 如果条件成立就跳转到 rel 所指的地址, 否则执行下一条指令

247 8.8 调用子程序指令 调用子程序指令用于调用子程序, 子程序一般是一些被频繁使用的实现特定功能的程序段, 如延时子程序等 使用子程序可以节省存储空间和使程序结构科学化 在单片机的指令系统中, 有两条指令用于调用子程序 LCALL( 长调用 ) 和 ACALL( 绝对调用 ), 它们的主要区别在于调用子程序的目标地址范围不同 对于 AT89S51 单片机来说, 可以笼统地使用 CALL 指令来自动配置子程序目标地址的范围

248 8.8 调用子程序指令 长调用指令 LCALL 指令说明字节 LCALL addr16 调用整个 64K Bytes 程序存储器范围内的子程序 机器周期 3 2 LCALL 拥有两个字节来指定子程序的目标地址, 调用地址范围达 64K Bytes, 即 0000H~FFFFH 为了确保子程序执行完毕之后单片机能正确回到原来主程序的地址继续执行,LCALL 执行时把 LCALL 指令的下一条指令的地址保存在堆栈中

249 8.8 调用子程序指令 绝对调用指令 ACALL 指令说明字节 ACALL addr11 调用 2K Bytes 程序存储器范围内的子程序 机器周期 2 2 ACALL 指令长度为 2 个字节,2 个字节中的 11 位用来指向子程序的地址, 所以说子程序的目标地址不能超过 2K Bytes 的范围

250 8.8 调用子程序指令 返回指令 RET 和 RETI 指令说明 字节 机器周期 RET 子程序执行完毕后返回主程序 1 2 RETI 中断子程序执行完毕后返回主程序 1 2 RET 指令用于子程序的末尾, 提示子程序结束, 以返回主程序,RETI 指令用于结束中断服务子程序

251 8.9 跳转与循环指令 跳转与循环指令在程序中使用相当频繁, 它们控制程序的走向和实现循环执行特定程序段 用好跳转与循环指令, 可以使系统程序得到优化和节省程序存储空间

252 8.9 跳转与循环指令 无条件跳转指令 LJMP AJMP SJMP JMP 指令说明字节机器周期 LJMP addr16 长跳转 3 2 AJMP addr11 绝对跳转 2 2 SJM P rel 短跳转 ( 相对地址 ) 所指的地址 LJMP 是长跳转指令, 跳转地址范围达 64K Bytes AJMP 是绝对跳转指令, 目标地址不能超过 2K Bytes SJMP 是一个相对跳转指令, 跳转范围为向前 128 个字节, 向后 127 个字节 JMP 一个笼统的跳转指令, 自动判断跳转的范围

253 8.9 跳转与循环指令 条件跳转指令 JZ 和 JNZ 指令说明字节机器周期 JZ rel ACC=0 则跳转到 rel 2 2 JNZ rel ACC 0 则跳转到 rel 2 2 这是两条以累加器 ACC 的值为条件的跳转指令 JZ 指令, 当 ACC=0 时程序跳转到所指定的地址开始执行 ; JNZ 指令, 当 ACC 0 时才跳转到指定地址开始执行

254 8.9 跳转与循环指令 条件跳转指令 JZ 和 JNZ 行号 PC 执行代 指令 ORG 00H MOV R0, #00H MOV A, #55H JZ NEXT INC R LOOP: INC A INC A NEXT: ADD A, #77H 分析 : 第 4 行的指令 JZ NEXT, 执行代码由 60 和 03 组 成, 分别存放在 0004 和 0005 地址空间中, 执行代码 03 就是 一个相对地址 JZ NEXT 的下一条指令 ( 第 5 行 ) 的 PC 值 为 0006, 所以跳转到 =0009 的目标地址, 即第 8 行 的 NEXT 标号处

255 8.9 跳转与循环指令 比较跳转指令 CJNE <dest-byte>, <src-byte>, rel 指令说明 CJNE A,direct,rel CJNE A,#data,rel CJNE Rn,#data,rel 将直接地址 direct 的内容与 ACC 作比较, 不相等则跳转到 rel 将 ACC 的值与立即数 #data 作比较, 不相等则跳转到 rel 将立即数 #data 与 Rn 作比较, 不相等则跳转到 rel 将立即数 #data 的内容作比较, 不相等则跳转到 rel 字节 机器周期

256 8.9 跳转与循环指令 比较跳转指令 CJNE <dest-byte>, <srcbyte>, rel CJNE 指令是 compare and jump if not equal 的缩写, 意思是将源操作数 <src-byte> 与目的操作数 <dest-byte> 的值相比, 如果不相等就跳转到 rel 所指的地址 它还改变进位标志 CY 的值以显示目的操作数较大还是较小 CJNE 指令不会改变源操作数或目的操作数的值 比较条件目的操作数 > 源操作数目的操作数 < 源操作数 影响进位 CY CY=0 CY=1

257 8.9 跳转与循环指令 循环指令 DJNZ <byte>,<rel-addr> 单片机中将一段程序重复执行一定次数的过程称为循环, 通过指令 DJNZ 来实现的循环是一种最广泛应用的方法 DJNZ 执行时, 工作寄存器或地址内容减 1, 如果不等于 0, 则程序跳转到 rel 指示地址 在执行 DJNZ 指令前, 需要向相关工作寄存器或地址中载入计数值, 该计数值就是循环的次数 指令说明字节机器周期 DJNZ Rn,rel DJNZ direct,rel 将 Rn 的值减 1, 若不等于 0 则跳转到 rel 将直接地址 direct 的内容减 1, 若不等于 0 则跳转到 rel

258 8.9 跳转与循环指令 无操作指令 NOP NOP 指令不进行任何操作, 只是空耗费时间, 并且更新程序计数器 PC 的计数值 每执行一次花去 1 个机器周期, 执行完 NOP 后, 就执行下一条指令 如果程序中需要等待一个很短的时间 ( 若干个机器周期时间 ), 可以结合使用 NOP 和循环指令 DJNZ 来实现 指令说明字节机器周期 NOP 不执行任何动作 1 1

259 8.10 单片机对于带符号数的处理 和溢出问题 无符号数与带符号数 8 位时存储无符号数的数值范围是 0~255, 7 位存储带符号数的数值范围变成了 -128~+127 MSB 常数 : 常数 : MSB 带符号数

260 8.10 单片机对于带符号数的处理 二进制的二补数 和溢出问题 在数字系统中, 使用二进制表示负数时, 最高有效位放置的是符号, 而数值的大小以二进制的二补数 (2 s complement) 形式存放在次高有效位到最低有效位 二进制的二补数是这样得到的 : 1 把负数的绝对值用二进制表示 2 将每一位取反 3 结果加 1

261 8.10 单片机对于带符号数的处理 和溢出问题 二进制的二补数例 :-127 这个数, 其绝对值 127 表示成二进制是 , 将每一位取反得 , 最后加 1 就得到了如图 8-6 所示的结果 : 最高有效位 1 表示是负数, 剩下的是二进制的二补数 符号二进制的二补数

262 8.10 单片机对于带符号数的处理 和溢出问题 带符号数操作中的溢出问题 ( 例 ) MOV (60H) A, #+96 ; ACC= MOV R1, #+70 ; R1= (46H) ADD (A6H) A, R1 ; ACC= 运算结果 : ACC=A6H,OV=1 分析 : +96 和 +70 是正数 ( 带符号数 ), 它们的和应该是 (+96)+(+70)=+166, 而运算的结果 ACC=A6H, 即 -90, 溢出标志位 OV=1 为什么会出现-90 这个错误的结果呢? 这是因为 +96 与 +70 的和 +166 超出了 8 位空间 存储带符号数的范围杨欣王玉凤刘湘黔编著 -128~+127 清华大学出版社 2008 年 1 于是溢出标志月 ISBN

263 8.10 单片机对于带符号数的处理 什么时候会溢出 和溢出问题 位 6 有进位而位 7 没有进位 (CY=0),OV=1 位 7 有进位 (CY=1) 而位 6 没有进位,OV=1 例 :MOV A, # -128 ; ACC= (80H) MOV R1, # -2 ; R1= (FEH) ADD A, R1 ; ACC= (7EH) 运算过程 : 运算结果 : 由于位 7 有进位, 而位 6 没有 溢出 ACC=7EH,OV=1

264 8.10 单片机对于带符号数的处理 和溢出问题 如何防止进位或溢出产生的错误 在带符号数运算中, 溢出标志 OV 暗示了运算结果是否正确 OV=1 时结果错误,OV=0 时结果正确 在无符号数操作中我们需要留意进位标志 CY, 而在带符号数操作中需要留意溢出标志 OV OV 是程序状态字 PSW 中的一位, 且 PSW 可以被位寻址, 所以我们可以用以下的办法来对溢出标志 OV 进行 监视, 从而控制程序的走向 JB PSW.2, rel ; OV=1( 溢出 ) 则跳到 rel JNB PSW.2, rel ; OV=0( 无溢出 ) 则跳到 rel

265 8.11 实例点拨 指令应用 ( 程序 ) 实例 数据求和 5 个数据以 BCD 码形式连续存储在片内数据存储器中, 起始地址为 40H 求这 5 个数据的和 (40H)= 78,(41H)= 12,(42H)= 44,(43H) = 81,(44H)= 99,

266 8.11 实例点拨 指令应用 ( 程序 ) 实例 数据求和 运行结果 :R7=03,ACC=14

267 8.11 实例点拨 指令应用 ( 程序 ) 实例 减法与二进制的二补数 带借位的减法指令 SUBB, 在单片机执行该指令时, 如果借位 CY=0, 说明被减数大于减数, 差是正数 ; 如果借位 CY=1, 说明减数大于被减数, 差是负数, 且以二进制的二补数的形式存储在累加器 ACC 中 在 SUBB 执行时, 单片机并不是直接将两个数相减, 而是按照下面的方法进行 : 相减操作 = 被减数 + 减数的二进制的二补数

268 8.11 实例点拨 指令应用 ( 程序 ) 实例 减法与二进制的二补数 例 :25H-1EH, 减数 1EH 转换成其二进制的二补数得 , 被减数 25H 与该二进制的二补数相加 差是 , 即 07H 位 7 有进位, 进位标志 CY 应该是 1, 但我们使用二进制的二补数形式分析减法时, 进位标志 CY 辅助进位标志 AC 奇偶标志 P 的值要取反, 也就是说 CY=0, 没有借位, 表明差是正数

269 8.11 实例点拨 指令应用 ( 程序 ) 实例 减法与二进制的二补数例 :4CH-6EH, 将减数 6E 转换成其二进制的二补数得 , 被减数 4CH 与该二进制的二补数相加 差是 , 即 DEH 这不是一个有效的结果, 4CH-6EH 应该得到一个负数的结果 :-(6E-4C)= - 22H 所以需要对差 DE 再进行一次二进制的二补数转换, 得 , 即 22H 从运算过程来看, 位 7 没有进位, 进位标志 CY 应该是 0, 但和 1 情况相同, 标志位需要取反, 于是得 CY=1, 有借位, 表明差是负数

270 8.11 实例点拨 指令应用 ( 程序 ) 实例 XRL 指令应用于比较寄存器数值 XRL 指令可用来比较两个寄存器的数值是否相等 例如 XRL A, R1 将比较累加器 ACC 和工作寄存器 R1 的数值 如果 ACC=R1,XRL 执行结果是 0, 并存回 ACC 中, 否则执行的结果为 1, 并存回 ACC 中 然后就可以使用指令 JZ 或 JNZ 来判断 ACC 的值从而控制程序的走向

271 8.11 实例点拨 指令应用 ( 程序 ) 实例 XRL 指令应用于比较寄存器数值 P1 口作为数据输入使用, 程序判断 P1 口的输入数据是否等于 45H, 如果是则执行处理程序 PROCESSING, 否则继续作判 断 例 : ORG 00H START: MOV A, #45H LOOP: MOV R1, P1 ; 将 45H 载入 ACC ; 将 P1 口的输入数据载入 R1 XRL A, R1 ; 比较 ACC 和 R1 的值 JZ PROCESSING; 如果相等, 跳转到 PROCESSING JMP LOOP ; 如果不相等, 跳转到 LOOP 继续判断 PROCESSING: XRL 指令还可以将位取反 如指令 XRL A, # B 能把累

272 8.11 实例点拨 指令应用 ( 程序 ) 实例 位数据的串行输出 有些场合, 需要把并行的数据转换成串行输出, 这时可 以利用 RRC 指令, 将累加器 ACC 中的位数据输出到进位 CY 中, 然后将 CY 中的数据从 I/O 口输出, RRC A ; 将 ACC 的位 0 数据右移到 CY 中 MOV P1.3, C ; 从 P1.3 口输出 CY 中的数据 RRC A ; 将第 2 个位数据移到 CY MOV P1.3, C ; 从 P1.3 口输出 RRC A ; 将第 3 个位数据移到 CY MOV P1.3, C ; 从 P1.3 口输出

273 8.11 实例点拨 指令应用 ( 程序 ) 实例 利用布尔指令产生矩形波信号矩形波信号简介 : 矩形波中的主要参数 : 脉冲幅度 : 脉冲信号所能达到的最大幅度值 上升时间 : 脉冲从 0.1 上升到 0.9 所经历的时间 下降时间 : 脉冲从 0.9 下降到 0.1 所经历的时间 脉冲宽度 : 脉冲前 0.5 到后 0.5 的时间间隔 脉冲周期 T: 对一个周期性的脉冲波, 周期信号指两相邻脉冲出现的时间间隔 占空比 D: 脉冲宽度与脉冲周期 T 之比称为占空比 D, t D = w 100% T V o 0.9V o 0.5V o 0.1V o V t R t W T t F t

274 8.11 实例点拨 指令应用 ( 程序 ) 实例 利用布尔指令产生矩形波信号单片机的执行速度很快, 指令 SETB 和 CLR 在晶振频率为 12MHz 时只需要 1µs, 也就是说如果使用某一 I/O 口作为波形的输出, 那上升时间 (SETB 置 1) 或下降时间 (CLR 清 0) 过程只需 1µs, 可以应付一般场合的需要 WAVEOUTPUT: SETB P1.0 ; P1.0 口置 1 LCALL DELAY ; 延时子程序保持 1 CLR P1.0 ; P1.0 口清 0 LCALL DELAY ; 延时子程序保持 0 SJMP WAVEOUTPUT ; 循环 单片机 P1.0

275 8.11 实例点拨 指令应用 ( 程序 ) 实例 布尔指令应用于控制 在一台电话机中, 有一个单片机用于系统的控制, 假设数据存储器 22H 上的 B2 位, 即映射地址 12H 上的数据指示是否有电话打进来 如果映射地址 12H 上的数据是 1, 表明有电话打进来 写一段程序, 控制液晶屏在映射地址 12H=1 时, 显示 New Incoming Call, 否则显示 Standby

276 8.11 实例点拨 指令应用 ( 程序 ) 实例 布尔指令应用于控制

277 8.11 实例点拨 指令应用 ( 程序 ) 实例 布尔指令应用于控制

278 第 9 章对第四维的测量 定时 / 计数器 欢迎访问电路飞翔网 获取更多信息 9.1 定时与计数 9.2 单片机的定时 / 计数器 9.3 定时 / 计数器的控制者 9.4 模式 模式 模式 模式 计数器 9.9 看门狗 9.10 实例点拨 超声测距仪

279 9.1 定时与计数 计算个数 定时计算的是时间单位的个数 ; 计数计算的是外部方波信号的个数 T T 个时间单位 炉子 定时与炉火控制 T 单片机 P1.0 P3.4

280 9.2 单片机的定时 / 计数器 定时 / 计数器的实质 单片机的定时 / 计数功能模块使用同一个电路来实现, 只是定时 / 计数功能模块 计算个数 的对象不一样 一个是时间单位的个数, 另一个是外部事件的个数 1 个定时 / 计数器模块一次只能工作在一种功能下 要么是定时器, 要么是计数器 当计数完成后, 模块向 CPU 输出一个计数完成信号来中断计数操作 时间单 位脉冲 单片机 定时 / 计数器模块 外部事件 计数电路 Timer 计数完成信号

281 9.2 单片机的定时 / 计数器 时间单位脉冲 单片机中的时间单位脉冲的周期是 :1 个机器周期, 即 12 个振荡周期 如果晶振的频率是 12MHz, 则 1 个机器周期 =1µs, 每 1 秒钟 Timer 所记录的时间单位脉冲的个数是 : 1s μs = 个 如果 Timer 从 0 数到 需要的时间可以这样计算 : 50000个单位时间脉冲 = 6 10 个 /s 0.05s

282 9.2 单片机的定时 / 计数器 Timer 应用一例 延时子程序 程序解析 : SETB TR0 ; 启动 Timer0, 开始计时 SETUP: MOV TL0, #0B0H ; 计数初始值 MOV TH0, #3CH LOOP1: JBC TF0, LOOP2; 如 TF0=1,10000 数完, 清 TF0 JMP LOOP1 ; 如果 没数完, 循环检查 TF0 LOOP2: CLR TR0 ; 关闭 Timer0 RET ; 返回主程序

283 9.3 定时 / 计数器的控制者 Timer 的启动 设置和关闭与特殊功能寄存器中的 TCON TL0 TH0 等寄存器有关 T89S51 单片机中有两个 Timer, 分别为 Timer 0 和 Timer 1 有些单片机具有 3 个 Timer, 如 AT89S52 等 两个 Timer 可以工作在定时器模式下, 也可以工作在计数器模式下

284 9.3 定时 / 计数器的控制者 Timer 寄存器 Timer 0 和 Timer 1 各有 1 个长度为 2 个字节的 Timer 寄存器, 每个 Timer 寄存器由低位字节 TL0 或 TL1 和高位字节 TH0 或 TH1 两个特殊功能寄存器组成 这 4 个寄存器可以像累加器 ACC 等寄存器一样进行数据的装载和读取 如指令 MOV TL0, #4FH 定时 / 计数器控制寄存器 Timer 0 寄存器低位 Timer 0 寄存器高位 90H 88H 80H P1 TCON TMOD TL0 TL1 TH0 TH1 AUXR P0 SP DP0L DP0H DP1L DP1H PCON 97H 8FH 87H 定时 / 计数器模式控制寄存器 Timer 1 寄存器低位 Timer 1 寄存器高位

285 9.3 定时 / 计数器的控制者 定时 / 计数器模式控制寄存器 TMOD TMOD 是 timer mode 的缩写, 意思是 定时 / 计数器模式, 它在特殊功能寄存器区的 89H 上 TMOD 寄存器由高 4 位和低 4 位组成, 分别控制 Timer 1 和 Timer 0 在高 4 位或低 4 位中,M1 和 M0 设置 Timer 1 或 Timer 0 的工作模式

286 9.3 定时 / 计数器的控制者 定时 / 计数器模式控制寄存器 TMOD GATE 门控位 C/T#Timer 定时 / 计数器选择位 M1 Timer 模式选择位 1 M0 Timer 模式选择位 0 设置方法 为 : M1 M0 模式 工作模式 0 0 模式 0 13 位定时 / 计数器 (THx 8 位,TLx 5 位 ) 0 1 模式 1 16 位定时 / 计数器 1 0 模式 2 8 位自动重载入定时 / 计数器 (TLx), 溢出时从 THx 重载 1 1 模式 3 Timer 0 有此模式,Timer 1 没有 * 注 :x 表示 0 杨欣或王玉凤 1, 即情况适用于刘湘黔编著清华大学出版社 Timer 年和 1 月 Timer ISBN , 后同

287 9.3 定时 / 计数器的控制者 定时 / 计数器控制寄存器 TCON TCON 是 timer control 的缩写, 即 定时 / 计数器控制 的意思 它在特殊功能寄存器区的 88H 上 TCON 的功能有 : 显示 Timer 溢出与否 启动 / 关闭 Timer 外部中断方式控制 外部中断标志位 TCON 的 8 位中与 Timer 有直接关系的只有高 4 位

288 9.3 定时 / 计数器的控制者 Timer 的时钟源 TMOD 寄存器中的 C/T# 位 =0, 即 Timer 用作定时器, 单片机的时钟信号就成了 Timer 的时钟源, 时钟信号由晶振决定 : 如晶振为 12MHz, 则单位时间 T 为 :

289 9.3 定时 / 计数器的控制者 如何使用 Windows 计算器 科学型 标准型 数制选择

290 9.4 模式 模式 1 下的 Timer 特点 Timer 工作在模式 1 时是一个 16 位定时 / 计数器, 计数初始值的低位和高位分别装载到 Timer 寄存器 TLx 和 THx 中 Timer 通过指令 SETB 将 TRx 置 1 启动 当 TFx=1, 表明计数完成, 使用指令 CLR TRx 和 CLR TFx 来关闭 Timer 想要重复 Timer 的计数过程,Timer 寄存器中必须重新装载原来的计数初始值, 并将 TFx 位清 0

291 9.4.2 模式 1 的设置步骤 9.4 模式 1 1 设置 Timer 的工作模式 程序中向定时 / 计数器模式控制寄存器 TMOD 中装载 01H GATE C/T# M1 M0 GATE C/T# M1 M0 2 往 TLx 和 THx 中载入计数初始值 3 启动 Timer 将 TRx 置 1 以启动 Timer 4 监测 Timer 溢出标志 TFx 5 关闭 Timer 6 清溢出标志 TFx 7 重新装载 Timer 1 Timer 0 Timer 寄存器 (THx TLx) EC78 EC79 EC7A FFFF 0000 TF0 = 0 TF0 = 0 TF0 = 0 TF0 = 0 TF0 = 1

292 9.4 模式 Timer 的计数时间与计数初始值 Timer 寄存器的低位字节 TLx 和高位字节 THx 中装载的是 Timer 的计数初始值, 当 Timer 启动后, 从这个初始值开始每过 1 个机器周期计数值增加 1, 直到计数到 16 位的 Timer 寄存器的最大值 FFFFH 后溢出为止 其中 MM 是 THx 中的数值,LL 是 TLx 中的数值

293 9.4 模式 Timer 的计数时间与计数初始值 例 : 使用的晶振是 12MHz,TH0 和 TL0 中装载的计数初始值是 EC78H, 代入公式中得 : 计算过程中,(FFFF-EC78+1) 计算结果为 1388( 十六进制 ), 使用科学计算器可以转换成十进制 5000, 然后再与单位时间相乘, 最后结果为 5000, 即 5ms

294 μs 9.4 模式 如何选取 Timer 的计数初始值 例 : 设计一个方波信号发生器, 要求从 P1.0 口输出频率 T = 1/ f = 1/ μs f=2khz 的方波, 周期 3 = 所以 P1.0 口输出高 低电平持续时间分别为 250μs μs 单片机 T=500μs P1.0 T/2=250μs T/2=250μs

295 μs 9.4 模式 如何选取 Timer 的计数初始值 例 :250 即 Timer 计数时间, 称之为设计时间 计数初始值步骤为 : 1 将设计时间 ( 以 μs 为单位, 且小于 65536) 除以 2 用 减去步骤 1 得到的数 3 用科学计算器把步骤 2 中的得数转换成十六进制形式 MMLL 如果转换结果 <100H, 则 MM=00 4 最后得计数初始值 :THx=MM,TLx=LL 根据这个步骤, 假设晶振频率为 12MHz, 设计时间 250:1 250µs /1µs = 250; = 65286; = FF06H;4 THx = FF,TLx = 06 所以 Timer 寄存器的计数初始值为 FF06H

296 9.4 模式 如何利用 Timer 进行长时间定时 Timer 的设计时间 t 取决于两个因素 : 晶振频率,THx 和 TLx 中装载的计数初始值 硬件一旦完成, 意味着晶振频率确定,Timer 的设计时间就取决于 THx 和 TLx 中装载的计数初始值 当 MMLL=0000H 时, 设计时间 t 具有最大值, 如果晶振频率为 12MHz, 设计时间的最大值 =65536, 即 ms 这个设计时间连 0.1 秒都不到, 无法满足需要长时间定时的场合 解决办法是多次重新装载计数初始值

297 9.4 模式 如何利用 Timer 进行长时间定时 例 : ORG 00H START: MOV TMOD, #10H ; 设置 Timer 1 工作在模式 1 下 MOV R1, #50 ; R1 为重复定时计数器, 定时 50 次 LOAD: MOV TL1, #0E0H ; 往 TL0 和 TH0 中载入计数的初始值 B1E0H MOV TH1, #0B1H SETB TR1 ; 启动 Timer 1 CHECK: JNB TF1, CHECK ; 检测 Timer 溢出标志, 当 TF1=1, 跳出 CLR TR1 ; 关闭 Timer 1 CLR TF1 ; 将 TF1 清 0 DJNZ R1, LOAD ; 如果 R1 0, 跳回 LOAD 重新装载计数初始值 ; 这里是所要处理的程序 JMP START ; 循环 总延时 1s END

298 9.5 模式 0 模式 0 与模式 1 基本相同, 不同的是模式 1 下 Timer 寄存器是 16 位的, 而模式 0 下 Timer 寄存器是 13 位的 在载入计数初始值时, 向 THx 载入高 8 位, 向 TLx 的低 5 位上载入 5 位 模式 0 的计数初值的计算方法如下 : 1 将设计时间 ( 以为单位, 且小于 8192) 除以 2 用 8192 减去步骤 1 得到的数 3 用科学计算器把步骤 2 中的得数转换成 13 位二进制数, 高位如果是空的用 0 补上, 依次填入 THx 的 8 位和 TLx 的低 5 位中,TLx 的高 3 位用 0 代替 4 最后得计数初始值

299 9.5 模式 0 Timer 工作在模式 0 下产生一个 500 的延时, 使用的晶振频率为 12MHz 则计数初始值可以这样计算 : 1 500µs /1µs = 500; = 7692; = B;4 THx = B,TLx = B 转换成十六进制数 :THx = 0F0H,TLx = 0CH 所以 Timer 寄存器计数初始值为 F00CH THx TLx M N3 N2 N1 N0 P3 P2 P P0 Q3 Q2 Q1 Q0

300 9.6 模式 模式 2 下的 Timer 特点 Timer 工作在模式 2 下是 1 个 8 位的定时 / 计数器, 当计数至 FFH 之后就溢出, TFx 位就会被硬件置 1 自动重新装载 : 当 Timer 溢出时,TLx 自动从 THx 中复制原来保存的计数初始值 这时只需要把 TFx 位清 0, 就可以自动重复计数的过程 TLx Timer 溢出 3F FF 00 3F 40 TF0 = 0 TF0 = 0 TF0 = 0 TF0 = 0 TF0 = 1 TF0 = 0 TF0 = 0 3F 3F THx 模式 2 下的自动重新装载计数初始值

301 9.6 模式 模式 2 的设置步骤 1 设置 Timer 的工作模式 向 TMOD 装载 20H, 以设置 Timer 1 工作在模式 2 2 往 THx 和 TLx 中载入相同的计数初始值 3 启动 Timer 将 TRX 置 1 以启动 Timer X 4 检测 Timer 溢出标志 TFx 5 关闭 Timer, 将 TRX 清 0 6 清溢出标志 TFx, 将溢出标志 TF1 清 0

302 9.6 模式 如何设置计数初始值 模式 2 下 Timer 设计时间与计数初始值的计算式为 : 如果给定一个设计时间, 计算 THx 和 TLx 中的计数初始值 : 1 将设计时间 ( 以为单位, 且小于 256) 除以 2 用 256 减去步骤 1 得到的数 3 用科学计算器把步骤 2 中的得数转换成十六进制形式 TT 4 最后得计数初始值 :THx=TLx=TT

303 9.7 模式 3 对于 AT89S51 单片机来说, 前面 3 种工作模式均适用于 Timre 0 和 Timer 1, 但本节将要谈论的模式 3 只适用于 Timer 0,Timer 1 不具有模式 3 在模式 3 下,Timer 0 的 TL0 和 TH0 变成两个独立的 8 位的 Timer 寄存器 但不具备自动重新装载计数初始值的特性 以 TL0 为 Timer 寄存器的 Timer 使用 TMOD 和 TCON 中原来 Timer 0 的控制位, 设置的方法与前面相同 而以 TH0 为 Timer 寄存器的 Timer 使用原来 Timer 1 的溢出标志位 TF1 和启动 / 关闭位 TR1, 并且不能用作计数器使用

304 9.7 模式 3 例 : AT89S51 单片机的 P1.0 口输出周期为 300 占空比为 1/3 的矩形波信号 ORG 00H START: MOV TMOD, #03H; 设置 Timer 0 工作在模式 3 下 LOAD: MOV TL0, #9CH ; 往 TL0 中载入计数初始值 MOV TH0, #38H ; 往 TH0 中载入另一个计数初始值 SETB P1.0 ; P1.0 置 1 CALL TL_DELAY ; 调以 TL0 为基础的延时子程序 CLR P1.0 ; P1.0 清 0 CALL TH_DELAY ; 调以 TH0 为基础的延时子程序 JMP LOAD ; 循环, 重新装载计数初始值

305 9.7 模式 3 TL_DELAY: ; 以 TL0 为 Timer 寄存器的 Timer 的延时子程序段 SETB TR0 ; 启动以 TL0 为寄存器的 Timer CHECK0: JNB TF0, CHECK0 ; 检测溢出标志 CLR TR0 ; 关闭 Timer CLR TF0 ; 将 TF0 清 0 RET ; 返回主程序 TH_DELAY: ; 以 TH0 为 Timer 寄存器的 Timer 的延时子程序段 SETB TR1 ; 启动以 TH0 为寄存器的 Timer CHECK1: JNB TF1, CHECK1 ; 检测溢出标志 CLR TR1 ; 关闭 Timer CLR TF1 ; 将 TF1 清 0 RET ; 返回主程序 END

306 9.7 模式 3 在 µvision 中仿真有关 Timer 的程序, 结合断点来观察 Timer 延时的时长 分析窗口 按钮 仿真启动 / 关闭 按钮 放置 / 清除断点 按钮 仿真开关 分析窗口 硬件复位 按钮 断点标记 运行总时间

307 9.8 计数器 Timer 作计数器使用时,Timer 寄存器 THx 和 TLx 的计数值记录的是外部事件的个数, 例如输入的脉冲个数等 Timer 作计数器使用时, 定时 / 计数器模式控制寄存器 TMOD 和定时 / 计数器控制寄存器 TCON 的设置方法与前面相似

308 9.8 计数器 Timer 作计数器 如果 TMOD 中的 C/T# 位 =0,Timer 用作定时器 ; 如果 C/T# 位 =1,Timer 用作计数器,AT89S51 单片机有 Timer 0 和 Timer 1 两个 Timer, 可以构成两个独立的计数器 TMOD: 1 1 GATE C/T# M1 M0 GATE C/T# M1 M0 Timer 1 Timer 0 Timer 用作计数器

309 9.8 计数器 Timer 作计数器 AT89S51 单片机的 P3.4 口和 P3.5 口既能作为一般的 I/O 口使用, 也可分别作为 Timer 0 和 Timer 1 的外部事件输入口 管脚序号 I/O 口功能名称描述 14 P3.4 T0 Timer 0 的外部事件输入端口 15 P3.5 T1 Timer 1 的外部事件输入端口

310 9.8 计数器 计数器的使用 单片机 P0.0 红外传感器 ~ P0.7 阀门 阀门控制线 P1.0 P1.1 履带控制线 药丸计数输入 P3.4(T0) 装药丸生产线

311 9.8 计数器 计数器的使用 ( 装药生产线程序设计思路 ) 开始 七段数码管显示清 0 CLR MOV A P0,A 设置 Timer 0 工作模式 MOV TMOD, #05H 设置计数值 20 MOV MOV TH0, #0FFH TL0, #0ECH 启动计数器 SETB TR0

312 9.8 计数器 计数器的使用 ( 装药生产线程序设计思路 ) 打开阀门 SETB P1.0 检查 TF0 位 TF0=0 JNB TF0, CHECK TF0=1 停止计数器 CLR TR0 CLR TF0 关闭阀门 CLR P1.0 七段数码管显示增加 1 驱动履带传送 ADD A, #01H DA A MOV P0, A SETB P1.1 CALL DELAY CLR P1.1

313 9.8 计数器 计数器的使用 (µvision 仿真 ) 使用 µvision 提供的一个功能来模拟从 T0 口 (P3.4 管脚 ) 输入的外部事件 Timer 属性对话框 模式 1:16 位的 Timer 计数器 打开 Timer 属性对话框 连续单击模 拟外部事件

314 9.8 计数器 计数器的计数初始值设定 Timer 在计数器下计算的是外部事件的发生次数 Timer 工作在模式 1 下, 是一个 16 位的计数器, 其计数初始值通过指令 MOV TH0, #0FFH 和 MOV TL0, #0ECH 载入 这两条指令载入的计数初始值为 FFECH 即 ( ) 的十六进制形式 计数初始值的载入也可以写成 : MOV TH0, # HIGH ( ) MOV TL0, # LOW ( )

315 9.8 计数器 计数器的 4 种工作模式 ( 例 ) Vcc Vcc Vcc R1 4.7kO C4 1 礔 Vcc U C1 20pF C2 20pF Q1 Photo NPN Y1 12MHz Vcc C3 10 礔 Vcc U1 EA/VPP XTAL1 XTAL2 RST P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5/MOSI P1.6/MISO P1.7/SCK GND AT89S51 Vcc AD0/P0.0 AD1/P0.1 AD2/P0.2 AD3/P0.3 AD4/P0.4 AD5/P0.5 AD6/P0.6 AD7/P0.7 A8/P2.0 A9/P2.1 A10/P2.2 A11/P2.3 A12/P2.4 A13/P2.5 A14/P2.6 A15/P2.7 PSEN ALE/PROG P3.6/WR P3.7/RD Vcc Vcc U2 RBI LT BI/RBO A B C D GND SN74LS47N U3 RBI LT BI/RBO A B C D GND SN74LS47N VCC a b c d e f g VCC a b c d e f g 16 R2~ R15 470O? Vcc ?? a b a c f d g b e e f c g d dp dp 7-segment display Vcc?? a b c f d e f e g dp a g d b c dp 7-segment display 制药厂装药丸生产线控制电路的一部分

316 9.8 计数器 计数器的 4 种工作模式 ( 例 ) 使用 4 种模式下计数器来实现计数的任务 1 Timer 0 作计数器工作在模式 0 下 (13 位计数器 ) SETUP: MOV TMOD, #04H ; 设置 Timer 0 工作在计数器模式 0 下 LOAD: MOV TH0, #( ) / 32 ; TH0 中载入计数初始值的高位字节 MOV TL0, #( ) MOD 32 ; TL0 中载入计数初始值的低位字节 SETB TR0 ; 启动 Timer 0

317 9.8 计数器 计数器的 4 种工作模式 ( 例 ) 2 Timer 0 作计数器工作在模式 1 下 (16 位计数器 ) SETUP: MOV TMOD, #05H; 设置 Timer 0 工作在计数器模式 1 下 LOAD: MOV TH0, #HIGH( ) ; TH0 中载入计数初始值的高位字节 MOV TL0, #LOW( ) ; TL0 中载入计数初始值的低位字节 SETB TR0 ; 启动 Timer 0

318 9.8 计数器 计数器的 4 种工作模式 ( 例 ) 3 Timer 0 作计数器工作在模式 2 下 (8 位自动重新装载计数器 ) SETUP: MOV TMOD, #06H; 设置 Timer 0 工作在计数器模式 2 下 LOAD: MOV TH0, #(256 20) ; TH0 中载入计数初始值的高位字节 MOV TL0, #(256-20) ; TL0 中载入计数初始值的低位字节 SETB TR0 ; 启动 Timer 0

319 9.8 计数器 计数器的 4 种工作模式 ( 例 ) 4 Timer 0 作计数器工作在模式 3 下 (8 位计数器 ) SETUP: MOV TMOD, #07H ; 设置 Timer 0 工作在计数器模式 3 下 LOAD: MOV TL0, #(259-20) ; TH0 中载入计数初始值的高位字节 SETB TR0 ; 启动 Timer 0

320 9.8 计数器 外部事件的信号要求 防止红外传感器可能输出的抖动信号使 T0 口误动作, 红外传感器通过一个单稳态多谐振荡器 芯片向单片机的 T0 口输入脉冲信号 由于 T0 口是 Timer 0 的外部事件输入端口, 一般采用硬件的方法来消除抖动 在计数器的应用中, 当 T0 或 T1 口的电平由高向低跳变时,Timer 计数值增加 1 由于单片机 感知 这个电平的跳变需要一定的时间, 所以外部事件发生的最高频率应小于晶振频率的 1/24 Timer 对外部事件信号的占空比没有什么限制, 但为了安全起见, 确保某一外部事件的电平信号在跳变之前至少被采样一次, 则该电平至少要保持一个机器周期

321 9.8 计数器 TMOD 中的门控位 GATE=1 时 在设置定时 / 计数器模式控制寄存器 TOMD 时, 门控位 GATE=0,Timer 的启动或关闭由软件来控制, 用 SETB TRx 启动 Timer, 用 CLR TRx 来关闭 Timer 门控位 GATE=1, 则 Timer 的启动或关闭由硬件来控制 此时, 尽管使用指令 SETB TRx 外, 同时还需要将对应 Vcc 的管脚置 1 才能启动相应的 Timer 18 当 Timer 0 的门控位 GATE=1 时, 只有当开关 S 断开时 =1, 指令 SETB TR0 才能启动 Timer 0 10kO R S XTAL2 RST P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P1.0 P1.1 P1.2

322 9.9 看门狗 什么是看门狗 单片机系统中的看门狗具有以下两个特征 : 1 看门狗定时器必须在一定时间内被刷新 如若不然, 看门狗定时器就会溢出而导致单片机复位 2 当看门狗定时器启动之后, 程序可以控制看门狗定时器使单片机复位, 或者等到看门狗定时器溢出时使单片机复位 后一种情况可以保证程序对导致看门狗定时器溢出的系统错误进行处理

323 9.9.2 外置看门狗 9.9 看门狗 看门狗定时器能使单片机复位, 看来看门狗定时器应该与单片机的复位管脚 RST( 第 9 脚 ) 有直接 Vcc Vcc 的联系 S1 U2 TC Vcc PB RST GND 4 2 TOL 3 TD Vcc RST ST 5 7 EA/VPP C1 20pF C2 20pF Y1 12MHz 10 礔 U1 XTAL1 XTAL2 RST P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5/MOSI P1.6/MISO P1.7/SCK GND AT89C51 单片机系统与看门狗电路 Vcc C3 Vcc AD0/P0.0 AD1/P0.1 AD2/P0.2 AD3/P0.3 AD4/P0.4 AD5/P0.5 AD6/P0.6 AD7/P0.7 A8/P2.0 A9/P2.1 A10/P2.2 A11/P2.3 A12/P2.4 A13/P2.5 A14/P2.6 A15/P2.7 PSEN ALE/PROG P3.6/WR P3.7/RD

324 9.9.2 外置看门狗 9.9 看门狗 如果单片机的 P1.0 没有在看门狗定时器溢出时间之内向管脚输出一个下降沿, 看门狗就会发挥作用, 向单片机的复位端 RST 管脚输出一个复位信号使单片机复位 条 件 看门狗定时器溢出时间最小值典型值最大值 TD = GND 62.5ms 150ms 250ms TD 悬空 250ms 600ms 1000ms TD = Vcc 500ms 1200ms 2000ms TD 管脚状态与看门狗定时器溢出时间

325 9.9.3 内置看门狗 9.9 看门狗 PSEN ALE/PROG EA/Vpp RST 时序 与控制 振荡器 指令寄存器看门狗 AT89S51 单片机 AT89S51 单片机中的看门狗由一个 14 位的定时器和看门狗定时器复位寄存器 WDTRST 组成 WDTRST 是特殊功能寄存器 SFR 中的一个, 地址是 A6H

326 9.9.3 内置看门狗 9.9 看门狗 当单片机上电复位时, 默认看门狗功能被禁止 要想启动看门狗功能, 需要把立即数 1EH 和 0E1H 按顺序写入 WDTRST 寄存器中 当看门狗启动后, 其 14 位定时器的计数值每过 1 个机器周期增加 1, 直到当看门狗溢出时, 它会使单片机的 RST 管脚电平被拉高从而促成单片机的复位 当看门狗被启动后, 程序是无法将其关闭的, 而只有当单片机通过 RST 管脚重新复位或看门狗自己溢出导致单片机复位时看门狗才会关闭

327 9.10 实例点拨 超声测距仪 什么是超声测距仪 超声测距仪是一种利用超声波来测量超声传感器到障碍物之间距离的仪器 Tx V Δt Rx D 障碍物 超声波用于距离测量 D =(V t)/2

328 9.10 实例点拨 超声测距仪 明确单片机系统功能 从单片机的 P1.0 口输出周期 =24µs 的方波信号, 该信号通过适当的驱动电路来推动超声波发射器 Tx 发射超声波 ( 为了保证回波的质量,P1.0 口连续输出 20 个方波作为 Tx 的发射脉冲信号 ) 发射出去的超声波遇到障碍物后被反射回来, 并被超声波接收器检测到, 而输出一个接收脉冲信号, 该信号经过电路的调理后由单片机的 I/O 口检测到, 随即停止 Timer

329 9.10 实例点拨 超声测距仪 明确单片机系统功能 Timer 中的当前计数就是超声波从发射到接收的时间差, 单位为 µs( 晶振频率 =12MHz), 利用程序计算出距离值并显示 显示完成后, 单片机开始新一次的超声波脉冲发射与接收过程 发射信号 Tx 接收信号 回波 Δt Rx

330 9.10 实例点拨 超声测距仪 硬件设计硬件电路包括几个部分 : 超声波发射器及其驱动电路 超声波接收器及信号调理电路 单片机最简系统 两位七段数码管等 +9V B Tx C1 0.1 礔 U1A 2 1 CD4069UBCN U1B 4 3 CD4069UBCN U1C 6 5 CD4069UBCN U1D 8 9 R2 1kO +9V Q2 2SC1815 R3 1kO Q1 2SC1815 R6 5.6kO R5 3 U2A 2 1 CD4011BCN Transmit A 发射信号 ( 自 P1.0 口 ) 超声波发射器及其驱动电路 CD4069UBCN 5.6kO

331 9.10 实例点拨 超声测距仪 硬件设计 ( 超声波接收器及信号调理电路 ) 接收信号 ( 送往 P1.2 口 ) Rx C2 1000pF R1 10kO C R4 10kO C3 0.1 礔 R7 1MO +9V 1 U3A LM833N 1 +9V C4 R9 10kO 1000pF R8 10kO 6 5 R10 10kO 8 4 R11 100kO +9V 2 U3B LM833N 7 C7 1000pF D D2 1SS106 D1 1SS 礔 C9 C8 1000pF 47kO R12 E R13 1MO V U5A LM358N 1 4.7kO R29 Receive F 滤波和两级放大器包络检波比较器

332 9.10 实例点拨 超声测距仪 硬件设计 ( 单片机部分 ) +5V +5V +5V 发射 接收 C5 20pF C6 20pF Transmit Receive Y1 12MHz Vcc C10 10μF +5V +5V U4 EA/VPP XTAL1 XTAL2 RST P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5/MOSI P1.6/MISO P1.7/SCK GND AT89S51 Vcc AD0/P0.0 AD1/P0.1 AD2/P0.2 AD3/P0.3 AD4/P0.4 AD5/P0.5 AD6/P0.6 AD7/P0.7 A8/P2.0 A9/P2.1 A10/P2.2 A11/P2.3 A12/P2.4 A13/P2.5 A14/P2.6 A15/P2.7 PSEN ALE/PROG P3.6/WR P3.7/RD V U6 RBI LT BI/RBO A B C D GND SN74LS47N U7 RBI LT BI/RBO A B C D GND SN74LS47N VCC a b c d e f g VCC a b c d e f g 16 R14~R27 470Ω V R28 470Ω a b c f d e e f g dp SD1 a b c f d e e f g dp SD2 共阳 a b g c d dp +5V 共阳 a b g c d dp +5V

333 9.10 实例点拨 超声测距仪 软件设计超声测距仪的程序有 3 个部分组成 : 产生发射脉冲信号 等待回波信号时的计时功能 计算并显示距离 1 产生发射脉冲信号 可以使用 Timer 0 工作在模式 2 下 ( 具有自动重新装载功能的 8 位定时器 ) 进行延时而产生周期为 24µs 的脉冲信号 2 等待回波信号时的计时功能 可以使用 Timer 1 工作在模式 1 下,Timer 的计数值范围最大为 在 12MHz 晶振频率下, 该超声测距仪的测量最大距离为 11.14m 如果在 ms 内没有接收到回波, 说明测量距离大于 11.14m 或别的原因导致回波丢失, 则 Timer 1 在 ms 后溢出, 程序跳回发射脉冲信号部分重新发射超声波 3 计算并显示距离

334 1. 超声换能器 器件介绍 超声波发射器和超声波接收器具有电压和声波的转换功能, 它们把一种形式的能量转换成另一种形式的能量, 所以发射器和接收器统称为超声换能器 (ultrasonic transducer) 超声换能器内部结构

335 2. 运算放大器 器件介绍 运算放大器 (operational amplifier) 简称运放, 是一种高增益的集成型放大电路 以运算放大器为中心的应用电路很多, 如放大器 有源滤波器 比较器等 output A Vcc output A Vcc -input A output B -input A output B +input A -input B +input A -input B V EE +input B GND +input B (a) 外观 (b)lm833 内部结构图 (c)lm358 内部结构图

336 3. 与非门 CD4011 是一个与非门 (NAND gate) 集成电路, 在系统中对单片机 I/O 口输出的方波信号进行反相 器件介绍 4. 非门 CD4069 是一个非门 (Inverter) 集成电路, 它在系统中驱动超声波发射器

337 5. 二极管 器件介绍 二极管 (diode) 是最基础的电子器件之一, 它的特点就是管中的 PN 结使其具有单向导电性 系统中使用的是肖特基二极管 1SS106 二极管一端有一个白色的环代表对应的引脚为负极 由于该二极管具有良好的高频特性, 所以应用在回波信号的包络检波器中

338 第 10 章与外界的沟通 串行口通信 欢迎访问电路飞翔网 获取更多信息 10.1 串行与并行通信 10.2 单片机串行口如何发送与接收数据 10.3 单片机串行口的控制者 10.4 串行口工作模式及波特率 10.5 单片机之间的通信 10.6 计算机的串行口与控制 10.7 单片机与计算机之间的通信 10.8 实例点拨 智能交通灯

339 10.1 串行与并行通信 串行与并行通信的比喻 1 位 依次通过 -- 串行通信 -- 尽量少的数据线 串行方式 : 一切 USB 设备 8 位 并行方式 : 硬盘 ; 并排通过 -- 并行通信 -- 更快的传输速度

340 10.1 串行与并行通信 串行与并行存储器 Vcc Vcc C1 20pF C2 20pF Y1 12MHz Vcc 10μF C U1 EA/VPP XTAL1 XTAL2 RST P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5/MOSI P1.6/MISO P1.7/SCK GND AT89S51 Vcc AD0/P0.0 AD1/P0.1 AD2/P0.2 AD3/P0.3 AD4/P0.4 AD5/P0.5 AD6/P0.6 AD7/P0.7 A8/P2.0 A9/P2.1 A10/P2.2 A11/P2.3 A12/P2.4 A13/P2.5 A14/P2.6 A15/P2.7 PSEN ALE/PROG P3.6/WR P3.7/RD 串行存储器 24C64 只占用单片机的两个 I/O 口作为通信线 R1 4.7kΩ Vcc R2 4.7kΩ Vcc U2 VCC WP SCL SDA 24C64 A0 A1 A2 GND Vcc R3 4.7kΩ 串行存储器的接口

341 10.1 串行与并行通信 串行与并行存储器 C1 20pF C2 20pF Y1 12MHz Vcc Vcc 10 礔 C U1 EA/VPP XTAL1 XTAL2 RST P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5/MOSI P1.6/MISO P1.7/SCK GND AT89S51 Vcc AD0/P0.0 AD1/P0.1 AD2/P0.2 AD3/P0.3 AD4/P0.4 AD5/P0.5 AD6/P0.6 AD7/P0.7 A8/P2.0 A9/P2.1 A10/P2.2 A11/P2.3 A12/P2.4 A13/P2.5 A14/P2.6 A15/P2.7 PSEN ALE/PROG P3.6/WR P3.7/RD Vcc P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 P2.0 P2.1 P2.2 P2.3 P U2 OE LE D1 D2 D3 D4 D5 D6 D7 D8 GND 74AC373PC VCC Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q Vcc U3 10 A0 9 A1 8 A2 7 6 A3 A4 5 A5 4 A6 3 A A8 A A10 A11 2 A12 并行存储器 28C64 除占用 13 个 I/O 口外, 还要使用 锁存器作为地址锁存器 P2.0 P2.1 P2.2 P2.3 P GND 28C64 VCC I/O0 I/O1 I/O2 I/O3 I/O4 I/O5 I/O6 I/O7 CE OE WE Vcc P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 并行存储器的接口

342 10.1 串行与并行通信 单工 半双工和全双工 在单工 (simplex) 下, 发送方与接收方之间只有一条通信链路, 数据只能从发送方向接收方传送, 如广播电台和电视台发射的节目信号, 只需要由接收方 ( 收音机 电视机 ) 接收 发送方 接收方

343 10.1 串行与并行通信 单工 半双工和全双工 在半双工 (half duplex) 下, 双方也只有一条通信链路, 通过两个开关控制由哪一方发送, 哪一方接收, A B 双方不能同时进行发送与接收 发送方 A 接收方 B 接收方 A 发送方 B

344 10.1 串行与并行通信 单工 半双工和全双工 在全双工 (duplex) 下, 双方可以同时进行发送和接收, 但它需要两条通信链路 发送方 A 接收方 B 接收方 A 发送方 B

345 10.2 单片机串行口如何发送与接收数据 AT89S51 单片机的 P3.0 和 P3.1 除作为一般 I/O 口外, 还分别在串行通信中充当接收口 (RXD) 和发送口 (TXD) Vcc C1 20pF C2 20pF 串行接收口 RXD 串行发送口 TXD Y1 12MHz Vcc C 礔 EA/VPP U? XTAL1 XTAL2 RST P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 AT89S51 单片机的串行口 AT89S51

346 10.2 单片机串行口如何发送与接 收数据 串行发送数据 P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P AT89S51 EA/VPP XTAL1 XTAL2 RST P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T 从并行数据到串行数据

347 10.2 单片机串行口如何发送与接 串行发送数据 Vcc 收数据 Vcc Vcc R2-R9 470O? 8 D1-D8 Vcc U2 VCC QA QB QC QD QE QF QG QH A B CLR CLK GND Y1 12MHz C1 20pF C2 20pF C3 Vcc 10 礔 Vcc R1 4.7kO C4 4.7 礔 U1 EA/VPP XTAL1 XTAL2 RST P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5/MOSI P1.6/MISO P1.7/SCK GND AT89S51 单片机串行口构成的流水灯系统 Vcc AD0/P0.0 AD1/P0.1 AD2/P0.2 AD3/P0.3 AD4/P0.4 AD5/P0.5 AD6/P0.6 AD7/P0.7 A8/P2.0 A9/P2.1 A10/P2.2 A11/P2.3 A12/P2.4 A13/P2.5 A14/P2.6 A15/P2.7 PSEN ALE/PROG P3.6/WR P3.7/RD

348 10.2 单片机串行口如何发送与接收 数据 串行接收数据 Vcc Vcc Vcc R1 4.7kO C4 4.7 礔 Vcc S1 SW DIP U2 S/L VCC CLR CLK INH CLK SI A B C D E F G H GND C1 20pF C2 20pF QH DM74LS166N Vcc Y1 12MHz Vcc C 礔 U? EA/VPP XTAL1 XTAL2 RST P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5/MOSI P1.6/MISO P1.7/SCK GND AT89S51 AD0/P0.0 AD1/P0.1 AD2/P0.2 AD3/P0.3 AD4/P0.4 AD5/P0.5 AD6/P0.6 AD7/P0.7 A8/P2.0 A9/P2.1 A10/P2.2 A11/P2.3 A12/P2.4 A13/P2.5 A14/P2.6 A15/P2.7 PSEN ALE/PROG P3.6/WR P3.7/RD 单片机串行口用于接收并行数的据系统 D1-D8 Vcc R1-R8 470O? 8

349 10.3 单片机串行口的控制者 UART 与波特率 在串行数据传输时, 分为异步 (asynchronous) 和同步 (synchronous) 两种方式 AT89S51 单片机的串行口采用的是异步传输方式, 每次串行口通信时只发送或接收 1 个字节的数据 AT89S51 单片机集成了一个叫做 通用异步发送 - 接收器 的功能结构, 英文缩写是 UART(universal asynchronous receiver-transmitter), 我们使用 SCON 寄存器控制对象就是单片机的 UART 描述数据传输率 : 字节 / 秒 (Bytes pre second), 位 / 秒 (bits per second), 波特 (baud)

350 10.3 单片机串行口的控制者 串行口缓冲区 SBUF 串行口缓冲区 SBUF, 是一个 1 个字节长度的寄存器, 位于特殊功能寄存器区的 99H 上 在发送数据时, 只要把数据载入 SBUF 中,UART 就会自动地将数据从串行口发送出去 在接收数据时, SBUF 寄存器保持着从单片机串行口接收的数据, 以供程序读取 往 SBUF 中载入数据就自动发送 ; 接收的数据保存在 SBUF 中供读取

351 10.3 单片机串行口的控制者 串行口控制寄存器 SCON 串行口控制寄存器 SCON 是一个 1 个字节长度的寄存器, 位于特殊功能寄存器区的 98H, 可对其进行位寻址 FE/SM0 误帧位 / 串行口模式 0 位 SM1 串行口模式 1 位 SM2 多单片机通信使能位 REN 接收使能位 TB8 不常用 RB8 不常用 TI 发送中断标志位 RI 接收中断标志位

352 10.3 单片机串行口的控制者 串行口控制寄存器 SCON FE/SM0 位与 SM1 位 设置串行口工作模式 ( 见后 ) SM2 多单片机通信使能位 该位可以控制使能多个单片机之间的通信, REN 接收使能位 当 REN 位置 1 时, 单片机可以从串行口接收数据, 如果 REN 清 0, 则接收功能被关闭 TI 发送中断标志位 TI 与 RI 一样都是串行通信中重要的标志位 当单片机完成 SBUF 中的数据发送后, 该位由硬件置 1 RI 接收中断标志位 粗略的描述是当单片机从串行口接收完数据后该位被硬件置 1

353 10.4 串行口工作模式及波特率 由 SCON 寄存器中的 SM0 和 SM1 位设置单片机串行口工作在 4 种不同模式下, 如表 : SM0 SM1 模式特点 0 0 模式 0 移位寄存器方式, 用于 I/O 口 扩展 0 1 模式 1 8 位 UART, 波特率可变 1 0 模式 2 9 位 UART, 波特率为时钟频率 /32 或 / 模式 3 9 位 UART, 波特率可变

354 10.4 串行口工作模式及波特率 模式 0 UART 实际上是一个同步移位寄存器, 该模式下只发送或接收 8 位数据 注意, 此时数据由单片机的 RXD 管脚发送或接收, 而 TXD 作为发送或接收的移位脉冲 发送或接收数据时, 低位数据在前, 高位数据在后 1 模式 0 下发送 将要发送的 8 位数据载入 SBUF,UART 自动将 SBUF 中的数据转换成 8 位串行数据, 并以晶振频率 /12 作为波特率从 RXD 发送出去 当数据发送完成后,TI 会被置 1 2 模式 0 下接收 在 UART 接收串行数据之前需要设 SCON 中的 RI=0 REN=1 UART 就会启动接收过程, 此时 RXD 为数据接收端,TXD 仍然为移位脉冲输出 当 1 个字节的数据接收完毕后,UART 将其载入 SBUF, 同时 RI 被置 1

355 10.4 串行口工作模式及波特率 模式 1 该模式下,UART 作为异步通信口, 每一帧发送或接收 10 位数据, 这 10 个位分别是 1 个起始位 0 8 个数据位和 1 个停止位 1 单片机的 TXD 为发送管脚,RXD 为接收管脚

356 10.4 串行口工作模式及波特率 模式 1( 模式 1 下收发时序 ) RXD( 数据发送 ) D0 D1 D2 D3 D4 D5 D6 D7 TXD( 移位脉冲 ) 发送中断标志位 TI 模式 1 下发送时序 接收中断标志位 RI RXD( 数据接收 ) D0 D1 D2 D3 D4 D5 D6 D7 TXD( 移位脉冲 ) 模式 1 下接收时序

357 10.4 串行口工作模式及波特率 模式 1( 模式 1 下的波特率 ) 该模式下通信的波特率是可变的, 一般由 Timer 1 工作在模式 2 下, 通过载入 TH1 和 TL1 的计数初始值来设置波特率 Timer 工作在模式 2 下, 是一个 8 位自动重新装载的定时器, 装载时需要向 TH1 TL1 同时装载相同的计数初始值 单片机会自动根据 Timer 1 的设置情况使 UART 工作在特定的波特率下

358 10.4 串行口工作模式及波特率 模式 1( 模式 1 下的波特率 ) 模式 1 下波特率和 TH1(TL1) 中载入计数初始值之间的关系如公式所示 : 波特率 SMOD1 2 晶振频率 = [256-(TH1)] SMOD1 为 PCON.7 =0 为单倍波特率 =1 为双倍波特率 TH1 是 Timer1 寄存器 SMOD1 SMOD0 保留 POF GF1 GF0 PD IDL SMOD1 在 PCON 中的位

359 10.4 串行口工作模式及波特率 模式 1( 模式 1 下的波特率实例 ) 例 : 使用单倍波特率,SMOD1=0, 晶振频率 = MHz, 向 TH1 中载入 F3H, 即 TH1=243, 则波 特率为 : 波特率 SMOD 晶振频率 = = = [256 (TH1)] ( ) 1 UART 以模式 1 发送时, 数据由 TXD 端送出 向 SBUF 载入数据后即自动发送 发送完一帧数据后, 发送中断标志位 TI=1, 可用 JBC TI, CHECK 来检测 TI 位并将其清除为 0 2 UART 接收串行数据之前需将 SCON 中的 REN 位置 1, UART 就会启动接收过程 RXD 为数据接收端 接收完 1 帧数据后,RI 位被置 1, 可用 JB RI, CHECK 来检测 RI 位以判断接收完成情况

360 10.4 串行口工作模式及波特率 模式 1( 模式 1 和模式 3 下波特率与 TH1 (=TL1) 的计数初始值 ) 波特率 晶振频率 (MHz ) SMOD1 位 Timer 1 工作在模式 2 下载入 TH1(=TL1) 的计数初始值 CCH F6H F3H F3H E8H F4H FAH FDH FDH

361 10.4 串行口工作模式及波特率 模式 2 该模式下 UART 为一个 9 位异步通信口, 每一帧共发送或接收 11 位数据 这 11 位数据由 1 个起始位 0 8 个数据 第 9 位数据 (TB8 位, 位于 SCON 内 ) 和 1 个停止位 1 组成 模式 2 下的波特率为晶振频率的 1/32 或 1/64, 这取决于 PCON 中的 SMOD1 的设置, 计算公式为 : 波特率 = 晶振频率

362 10.4 串行口工作模式及波特率 模式 2 1 UART 以模式 2 发送时, 数据由 TXD 端送出, 数据中的第 9 位数据从 SCON 中的 TB8 位取得 ( 可用指令 MOV TB8, bit 向 TB8 位载入数据 ) 向 SBUF 载入数据后即自动发送 发送完一帧数据后, 发送中断标志位 TI=1, 可用指令 JBC TI, CHECK 来检测 TI 并将其清除为 0 2 在 UART 接收串行数据之前需要设 SCON 中的 REN=1 UART 就会启动接收过程 RXD 为数据接收端, 数据中的第 9 位载入 SCON 中的 RB8 位上 接收完 1 帧数据后,RI 位被置 1, 可用指令 JB RI, CHECK 来检测 RI 位以判断接收完成情况

363 10.4 串行口工作模式及波特率 模式 3 该模式与模式 2 的发送 / 接收过程和 UART 功能几乎完全一样, 只是模式 3 的波特率可变, 与模式 1 具有相同的计算公式, 在实际应用中, 可以参考下表来选择晶振和设置计数初始值 波特率 晶振频率 (MHz) SMOD1 位 Timer 1 工作在模式 2 下载入 TH1(=TL1) 的计数初始值 CCH F6H F3H F3H E8H F4H FAH FDH FDH

364 单片机之间的通信单片机之间的通信 排队呼叫器 两个单片机之间的通信 Vcc Vcc Y1 12MHz 20pF C1 20pF C2 10 礔 C3 Vcc EA/VPP 31 XTAL1 19 AD0/P AD1/P AD2/P AD3/P AD4/P AD5/P AD6/P AD7/P A8/P A9/P A10/P A11/P A12/P A13/P A14/P A15/P PSEN 29 ALE/PROG 30 P3.6/WR 16 P3.7/RD 17 P1.0 1 P1.1 2 P1.2 3 P1.3 4 P1.4 5 P1.5/MOSI 6 P1.6/MISO 7 P1.7/SCK 8 P3.0/RXD 10 P3.1/TXD 11 P3.2/INT0 12 P3.3/INT1 13 P3.4/T0 14 P3.5/T1 15 XTAL2 18 RST 9 GND 20 Vcc 40 U1 AT89S51 B 1 C 2 LT 3 BI/RBO 4 RBI 5 D 6 A 7 e 9 d 10 c 11 b 12 a 13 g 14 f 15 GND 8 VCC 16 U2 SN74LS47N f 2 g 3 e 4 d 5 c 8 dp 7 b 9 a 10 SD1 Vcc Vcc Vcc?? a b c d e f g dp B 1 C 2 LT 3 BI/RBO 4 RBI 5 D 6 A 7 e 9 d 10 c 11 b 12 a 13 g 14 f 15 GND 8 VCC 16 U3 SN74LS47N f 2 g 3 e 4 d 5 c 8 dp 7 b 9 a 10 SD2 Vcc Vcc Vcc?? a b c d e f g dp R9~ R22 470O? 4 Vcc Vcc Y2 12MHz 20pF C5 20pF C4 10 礔 C6 Vcc EA/VPP 31 XTAL1 19 AD0/P AD1/P AD2/P AD3/P AD4/P AD5/P AD6/P AD7/P A8/P A9/P A10/P A11/P A12/P A13/P A14/P A15/P PSEN 29 ALE/PROG 30 P3.6/WR 16 P3.7/RD 17 P1.0 1 P1.1 2 P1.2 3 P1.3 4 P1.4 5 P1.5/MOSI 6 P1.6/MISO 7 P1.7/SCK 8 P3.0/RXD 10 P3.1/TXD 11 P3.2/INT0 12 P3.3/INT1 13 P3.4/T0 14 P3.5/T1 15 XTAL2 18 RST 9 GND 20 Vcc 40 U4 AT89S51 0 Vcc S1~ S8 R1~ R8 10kO? DS1 470O R23 Vcc DS2 470O R24 Vcc 传输电缆 (RXD 和 TXD 交叉相连 ) 业务员手上的小键盘排队呼叫器系统电路

365 10.5 单片机之间的通信 排队呼叫器 两个单片机之间的通信 两个单片机的 RXD 和 TXD 是交叉连接的 两个单片机的串行口直接相连时有一个问题, 就是它们之间的传输电缆不能太长 ( 应当在几米范围内 ), 否则在传输过程中会因干扰和信号的损耗而产生误码 确定通信协议 : 单片机 U1 和 U4 之间以 2400 的波特率进行串行口通信 U4 首先向 U1 发起通信请求, 发送呼叫号 99H U1 接收到呼叫号后, 向 U4 回送应答号 01H 通信建立, 开始数据传输

366 10.5 单片机之间的通信 两个单片机之间的通信程序 U4 向 U1 发送显示数据 (1/2) ORG 00H START: MOV SCON,#50H; 1 设置串行口工作在模式 1 下, 接收使能 MOV TMOD, #20H ; 2 使用 Timer 1 工作在模式 2 下 MOV TH1, #0F3H ; 3 波特率 2400 MOV TL1, #0F3H SETB TR1 ; 4 启动 Timer 1 DIAL: MOV SBUF, #99H ; 5 发送呼叫号 99H CHECK_99: JBC TI, WAIT_RESPONSE ; 6 判断是否发送完毕, 完毕跳转到接收应答 JMP CHECK_99

367 10.5 单片机之间的通信 两个单片机之间的通信程序 U4 向 U1 发送显示数据 (2/2) WAIT_RESPONSE: JBC RI, CHECK_01 ; 串行口接收到数据则跳转到判断应答号 JMP WAIT_RESPONSE CHECK_01: MOV A, SBUF ; 将接收到的数据从 SBUF 载入 ACC CJNE A, #01H, DIAL ; 判断接收到的数据是否为应答号 01H, ; 如果不是正确应答号, 就跳到 DIAL 重呼 SEND_NUM: MOV A, 30H ; 将 30H 中的键盘按键值载入 ACC MOV SBUF, A ; 发送键盘按键值 CHECK_SEND: JBC TI, FINISH ; 判断是否发送完毕 JMP CHECK_SEND FINISH: END

368 10.5 单片机之间的通信 两个单片机之间的通信程序 U1 接收 U4 的显示数据 (1/2) ORG 00H START: MOV SCON,#50H ; 1 设置串行口工作在模式 1 下, 接收使能 MOV TMOD, #20H ; 2 使用 Timer 1 工作在模式 2 下 MOV TH1, #0F3H ; 3 波特率 2400 MOV TL1, #0F3H SETB TR1 ; 4 启动 Timer 1 WAIT_DIAL: JBC RI, CHECK_99 ; 5 判断是否接收到呼叫 JMP WAIT_DIAL CHECK_99: MOV A, SBUF ; 6 接收到的数据载入 ACC CJNE A, #99H, WAIT_DIAL ; 判断是否为呼叫号 99H

369 10.5 单片机之间的通信 两个单片机之间的通信程序 U1 接收 U4 的显示数据 (2/2) SEND_RESPONSE: MOV SBUF, #01H ; 发送应答号 01H CHECK_01: JBC TI, RECEIVE_NUM ; 判断应答号是否发送完毕 JMP CHECK_01 RECEIVE_NUM: JBC RI, DISPLAY ; 等待接收显示数据 JMP RECEIVE_NUM DISPLAY: MOV A, SBUF ; 将接收到的显示数据载入 ACC 中 MOV P0, A ; 输出至 P0 口显示 CALL DELAY ; 延时 JMP START ; 循环 END

370 10.5 单片机之间的通信 远距离通信的解决方案 单片机串行口的电平比较低 (5V 左右 ), 两个单片机的 TXD 和 RXD 对绞相连不适合直接进行远距离通信 解决的办法是提高信号的驱动能力后再由电缆进行传送 +5V +5V ' TXD U1 A1 B1 A2 B2 GND VCC Y1 Y2 +5V 8 3 R1 5 50O R2 100O 1 2 U2 FOD617 R3 10kO 4 3 U3A 1 2 SN74AC14N RXD 单片机 A DS75452N +5V +5V ' 单片机 B RXD 2 U3A 1 SN74AC14N R3 10kO 4 3 U2 FOD617 传输电缆 1 2 R2 100O R1 50O +5V ' U1 VCC Y1 Y2 A1 B1 A2 B2 GND TXD DS75452N

371 10.6 计算机的串行口与控制 从 RS-232 标准到计算机串行口 RS-232 中 RS 是 RETMA Standard 的首字母缩写, RETMA(Radio-Electronics and Television Manufactures Association, 无线电 电子 电视设备制造商协会 ) 是 RS-232 标准的发布者 现在 RETMA 已经发展成为 EIA(Electronic Industries Alliance, 电子工业联合会 ) 所以 RS-232 标准与 EIA-232 标准是相同的 由于 RS-232 标准早在 1960 年就已经被制订, 而那时 TTL 逻辑电路还没有降生, 所以它规定的逻辑电平比较奇怪, 与今天的 TTL 电平不兼容

372 10.6 计算机的串行口与控制 从 RS-232 标准到计算机串行口 V H(max) +5V HIGH V L(max) +25V LOW V H(min) +2V 1 V L(min) +3V 0 V L(max) +0.8V V L(min) 0V 分隔区 LOW 0 V H(min) -3V V H(max) -25V 分隔区 HIGH 1 (a)ttl 逻辑电平 (b)rs-232 逻辑电平

373 10.6 计算机的串行口与控制 从 RS-232 标准到计算机串行口 RS-232 确定的是一种在数据终端设备 (DTE) 与数据运载设备 (DCE) 之间进行串行二进制数据交换的标准, 它一定涉及接口器件的尺寸 规格等问题 标准 25 芯 DB-25 接头 公头母头 6 9 DB-9 接头

374 10.6 计算机的串行口与控制 从 RS-232 标准到计算机串行口 串口示意图序号名称及功能说明 RXD TXD GND DCD: 载波检测位 2 RXD: 接收数据位 3 TXD: 发送数据位 4 DTR: 数据终端准备信号位 5 GND: 接地位 6 DSR: 数据发送准备信号位 7 RTS: 请求发送位 8 CTS: 等待发送位 9 RI: 响铃位 RS-232 接口数据线说明

375 10.6 计算机的串行口与控制 从 RS-232 标准到计算机串行口 ( 串口转换器 ) (a)usb 转串口型 (b)pcmcia 转串口型 插上串口转换器并安装完成对应的驱动后, 会在 Windows 的设备管理器中找到相应的硬件 通信端口 (COM1) 是计算机本身的串口, 而名为 Prolific USB-to- Serial Comm Port(COM4) 才是 USB 转换器生成的串口

376 10.6 计算机的串行口与控制 从 RS-232 标准到计算机串行口 ( 硬件连接 ) 计算机 A 计算机 B GND TXD RXD GND TXD RXD 计算机 A (GND) 与 B(GND) 相连, 计算机 A(RXD) 与 B(TXD) 相连, 计算机 A(TXD) 与 B(RXD) 相连 GND TXD RXD 计算机串口 TXD 与该口上 RXD 相连, 实现了本机发送的数据由本机接收的效果 (a) 两机通信 (b) 单机通信串口通信实验的硬件连接

377 10.6 计算机的串行口与控制 计算机串口通信实验 软件操作 串口选择 ABCD 接收数据 串口通信开关 接收区 手动发送按钮 ABCD 发送数据 发送区 注 : 如果接收不到数据或数据与发送的不一样, 很有可能是串口号设置不正确, 或串口的 TXD 和 RXD 没有连接上等问题造成的, 或者试着把波特率调 低

378 10.6 计算机的串行口与控制 用 Visual Basic 编写一个串口通信程序 1 新建工程 对话框 新建一个 标准 EXE 工程 Open( 打开 ) 按钮

379 10.6 计算机的串行口与控制 用 Visual Basic 编写一个串口通信程序 2 部件 命令 3 部件 对话框

380 10.6 计算机的串行口与控制 用 Visual Basic 编写一个串口通信程序 4 MSComm 控件及向窗体中添加 向窗体中添加 MSCom 控件 MSComm 控件

381 10.6 计算机的串行口与控制 用 Visual Basic 编写一个串口通信程序 5 MSComm1 属性编辑栏 ( 名称 ): 该属性设置窗体中 MSComm 控件的名称, 在窗体代码中将使用这个名称来指向 MSComm 控件 CommPort( 串口号设置 ):CommPort 属性用于设置或返回通信连接串口号 程序在初始化时必须指定所要使用的串口号, 以便在程序运行期间对特定串口进行读写操作 同时, 程序也可借助此属性返回所使用的连接串口号 注意, 最大的串口号不能超过 16, 确定使用的串口号与图 中设备管理器中的显示串口号有关 例如使用 COM1, 就在 CommPort 属性中填写 1

382 10.6 计算机的串行口与控制 用 Visual Basic 编写一个串口通信程序 5 MSComm1 属性编辑栏 InputLen( 接收字符数 ): InputLen 属性用于指定由串口读入的字符串长度或字节数, 在需要指定读入输入缓冲区的字符长度时设置该属性 例如 : InputLen=10, 则当串口从 RXD 接收数据时, 只会读取 10 个字符 如果在输入缓冲区中有 55 个字符, 而设置 InputLen=10, 由于每一次的 Input 命令只能读 10 个字符, 所以需要执行 6 次 Input 才能把缓冲区的数据读入完 MSComm1 控件 Settings( 串口控制设置 ):Settings 属性用于设置串口的初始化参数 默认值是 9600,n,8,1 这个由逗号分隔的参数分别代表了波特率 奇偶校验位检查方式 数据位数和停止位数 波特率可选值包括 及 等几种 在设置时需要注意与单片机 UART 设置的波特率一致 ( 表 10-2 所示 ), 否则无法正常接收和发送数据 Settings 默认值中的 n 是奇偶校验位, 可以根据表 10-4 进行设置 默认值的 8 代表数据位数, 可选择的值有 和 8 最后一位 1 是停止位数, 可选择的值有 和 2 一般来说, 这些值只需要修改波特率与单片机 UART 波特率相同即可正常工作

383 10.6 计算机的串行口与控制 用 Visual Basic 编写一个串口通信程序 6 串口通信实验窗体编辑与窗体代码编辑器 txt_send txt_receive cmd send cmd receive cmd_end 串口通信实验窗体编辑 窗体代码编辑器

384 10.6 计算机的串行口与控制 用 Visual Basic 编写一个串口通信程序 7 控制串口的 Visual Basic 程序解析 : Private Sub Form_Load() ; 加载窗体事件 MSComm1.PortOpen=True ; 打开串口 End Sub Private Sub cmd_send_click() ;cmd_send 按钮事件 MSComm1.Output=Trim(txt_send.Text) ; 从串口发送 txt_send 文本框中的数据 End Sub Private Sub cmd_end_click() MSComm1.PortOpen=False End End Sub ;cmd_end 按钮事件 ; 关闭串口 ; 关闭窗体

385 10.6 计算机的串行口与控制 用 Visual Basic 编写一个串口通信程序 7 控制串口的 Visual Basic 程序解析 : Private Sub cmd_receive_click() ;cmd_receive 按钮事件 Dim buf$ ; 定义缓冲区 buf=trim(mscomm1.input) ; 从串口接收数据 If Len(buf)=0 Then ; 如果数据长度为 0 txt_receive.text="nothing" ; 显示 Nothing, 表明没有接收到任何数据 Else txt_receive.text=buf; 否则将缓冲区中数据显示在 txt_receive 文本框中 End If End Sub

386 10.6 计算机的串行口与控制 用 Visual Basic 编写一个串口通信程序 8 单击按钮编译代码并运行

387 10.7 单片机与计算机之间的通信 单片机与计算机通信中的接口芯片 计算机串口执行的是 RS-232 标准, 高 低电平分别为 -3~-25V 和 +3~+25V, 与单片机的 TTL 逻辑中的 +2~+5V 和 0~+0.8V 不兼容 较为常用的接口芯片是 MAX232 它能很好地完成 TTL 与 RS-232 的逻辑电平转换, 工作电压与 AT89S51 单片机相同均为 +5V, 可以使用同一个电源

388 10.7 单片机与计算机之间的通信 单片机与计算机通信中的接口芯片 MAX232 芯片工作电源 +10V 到 -10V 电压反相器 +5V 到 +10V 倍压器 TTL/CMOS 电平输入 RS-232 电平输出 TTL/CMOS 电平输入 RS-232 电平输出 接地端 MAX232 集成了两组电平转换器

389 10.7 单片机与计算机之间的通信 单片机与计算机通信中的接口芯片 Vcc Vcc 计算机串口????? RXD TXD GND???? 1 6 TXD 2 7 RXD GND 5 C1 20pF C2 20pF???? Y1 12MHz 9 10 礔 Vcc C U1 EA/VPP XTAL1 XTAL2 RST P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5/MOSI P1.6/MISO P1.7/SCK GND AT89S51 计算机与单片机串行口的接口 Vcc AD0/P0.0 AD1/P0.1 AD2/P0.2 AD3/P0.3 AD4/P0.4 AD5/P0.5 AD6/P0.6 AD7/P0.7 A8/P2.0 A9/P2.1 A10/P2.2 A11/P2.3 A12/P2.4 A13/P2.5 A14/P2.6 A15/P2.7 PSEN ALE/PROG P3.6/WR P3.7/RD

390 10.7 单片机与计算机之间的通信 单片机与计算机的串行通信 例 : 单片机从 P0 口输出计算机从串口发送来的数据 ( 对应的 ASCII 码 ), 点亮对应的发光二极管

391 10.7 单片机与计算机之间的通信 单片机与计算机的串行通信 ( 软件 ) 单片机接收计算机串口发送的数据 : ORG 00H START: MOV SCON,#50H ; 1 设置串行口工作在模式 1 下, 接收使能 MOV TMOD,#20H ; 2 使用 Timer 1 工作在模式 2 下 MOV TH1, #0F3H ; 3 波特率 2400 MOV TL1, #0F3H SETB TR1 ; 4 启动 Timer 1 WAIT: JBC RI, DISPLAY ; 5 判断是否接收到数据 JMP WAIT DISPLAY: MOV A, SBUF ; 6 接收到的数据载入 ACC MOV P0, A ; 将接收到的数据输出显示 JMP WAIT ; 循环 END

392 10.7 单片机与计算机之间的通信 单片机与计算机的串行通信 ( 软件 ) 单片机通过串口向计算机发送数据 : ORG 00H START: MOV SCON, #50H ; 1 设置串行口工作在模式 1 下, 接收使 MOV TMOD, #20H; 2 使用 Timer 1 工作在模式 2 下 MOV TH1, #0F3H ; 3 波特率 2400 MOV TL1, #0F3H SETB TR1 ; 4 启动 Timer 1 SEND: MOV A, P2 ; 把 DIP 开关的状态载入 ACC 中 MOV P0, A ; 显示 DIP 开关的状态 MOV SBUF, A ; 5 发送数据 WAIT: JBC TI, SEND ; 6 判断是否发送完毕 JMP WAIT END

393 10.8 实例点拨 智能交通灯 AT89S2051 单片机简介 : 与 51 单片机指令 逻辑电平兼容 2K Bytes 的可在线编程 (ISP)Flash 存储器 (AT89S4051 为 4K 字节 ) 位片内 RAM * 可以在 +2.7~+5.5V 范围内工作 15 个可编程的 I/O 口 两个 16 位定时 / 计数器 6 个中断源 可编程串行口 UART * 具有一个可产生中断的模拟信号比较器 *8 位脉冲宽度调制 (PWM) 低功耗的待机模式和休眠 * 电源电压走低时复位 (brown out reset) * 增强了串行口的错误帧检测及自动地址识别

394 10.8 实例点拨 智能交通灯 基于 AT89S2051 单片机的交通灯 Vcc 470O? 8 R7-R12 Vcc U2 VCC A R B D GND MAX485MJA C1 5pF C2 5pF Y1 12MHz P3.3 P3.4 P3.5 D7-D12 Vcc C3 10 礔 P1.0 U1 RST/VPP P3.0/RXD P3.1/TXD XTAL2 XTAL1 P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 GND?1?1?1?2?2?2 P1.1 P1.2 P1.3 Vcc P1.7/SCK P1.6/MISO P1.5/MOSI P1.4 P1.3 P1.2 P1.1/AIN1 P1.0/AIN0 P3.7 P Vcc P1.5 P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 P3.7 P1.6 P1.7 P3.3 P3.4 P3.5 P3.7 D1-D6?3?3?3?4?4 R1-R6 470O? 8 Vcc AT89S2051/4051?4 交通灯控制网络

395 器件介绍 1.8 位串入 / 并出移位寄存器 74164

396 器件介绍 2. 8 位并行装载移位寄存器 74166

397 器件介绍 3. 信号驱动 DS75452 DS75452 芯片可作为以 TTL 为逻辑的系统中的信号驱动 常用于高速逻辑缓冲器 功率驱动 继电器驱动 MOS 驱动 总线驱动和存储器驱动等,

398 器件介绍 4. 光电耦合器 FOD617 光电耦合器是以光为媒介传输电信号的一种电 光 电转换器件 它由发光源和受光器两部分组成 把发光源和受光器组装在同一密闭的壳体内, 彼此间用透明绝缘体隔离 发光源的引脚为输入端, 受光器的引脚为输出端 当发光源根据输入信号进行变化时, 在受光器端能输出一个相应的信号 常见的发光源为发光二极管, 受光器为光敏二极管 光敏三极管等

399 器件介绍 4. 光电耦合器 FOD617 光电耦合器的种类较多, 常见的有光电二极管型 光电三极管型 光敏电阻型 光控晶闸管型 光电达林顿型和集成电路型等 由于输入的电信号经过了电 光 电的转换, 输出的电信号并不是直接的输入信号, 而是具有相关性的 新 信号, 所以光电耦合器常用于信号的隔离 光电耦合器 FOD617

400 第 11 章程序设计的魅力 中断控制 欢迎访问电路飞翔网 获取更多信息 11.1 中断实例及中断的控制者 11.2 邮递员和朋友 外部中断 11.3 小狗和烧水壶 Timer 0 和 Timer 1 中断 11.4 电话铃响 串行通信中断 11.5 中断的魅力和优先级控制 11.6 实例点拨 旋转的时钟

401 11.1 中断实例及中断的控制者 INT1 INT0 而 INT0 INT1 外部中断内部中断 RI/TI TF0 TF1 INT0 INT1 TF0 TF1 RI/TI 这 5 个中断源在单片机中称为 : 外部中断 0 外部中断 1 Timer 0 中断 Timer 1 中断 串行通信中断

402 11.1 中断实例及中断的控制者 什么是中断 Vcc Vcc Vcc C1 20pF C2 20pF R1 10kO S Vcc Y1 12MHz Vcc C 礔 U1 EA/VPP XTAL1 XTAL2 RST P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5/MOSI P1.6/MISO P1.7/SCK GND Vcc AD0/P0.0 AD1/P0.1 AD2/P0.2 AD3/P0.3 AD4/P0.4 AD5/P0.5 AD6/P0.6 AD7/P0.7 A8/P2.0 A9/P2.1 A10/P2.2 A11/P2.3 A12/P2.4 A13/P2.5 A14/P2.6 A15/P2.7 PSEN ALE/PROG P3.6/WR P3.7/RD R2 D1? 470O? D2 R3 470O 一个开关 S 和一个上拉电阻 R1 组成了一个外部中断信号发生器 : 当开关 S 闭合时, P3.3=0, 外部中断产生 AT89S51

403 11.1 中断实例及中断的控制者 什么是中断 例 : 开关中断产生后, 出现绿灯闪一下, 红灯闪一下 ORG 00H ; 起始地址 00H ; 下面是主程序段, 点亮绿色发光二极管 D1 MAIN: MOV IE, #84H ; 使能外部中断 1 GREEN: CLR P0.0 ; 点亮绿色发光二极管 D1 JMP GREEN ; 循环

404 11.1 中断实例及中断的控制者 什么是中断 ( 实例软件 ) ; 中断服务子程序段, 熄灭绿色发光二极管 D1, 点亮红色 D2 ORG 13H ; 中断服务子程序起始地址为 13H EXT1_RED: SETB P0.0 ; 熄灭绿色发光二极管 D1 CLR P0.1 ; 点亮红色 D2 D1: MOV R4, #200 ; 延时程序 100ms D2: MOV R5, #248 DJNZ R5, $ DJNZ R4, D2 SETB P0.1 ; 熄灭红色发光二极管 D2 RETI ; 中断服务子程序结束 END ; 程序结束

405 11.1 中断实例及中断的控制者 中断服务的指挥官 中断向量表 中断向量表 (interrupt vector table), 向量即 取向 的意思, 例如外部中断 0 发生时, 单片机会到程序存储器的 0003H 中寻找中断服务子程序来执行 中断源向量地址中断标志位 外部中断 (INT0 管脚 ) 0003H IE0 Timer 0 中断 000BH TF0 外部中断 (INT1 管脚 ) 0013H IE1 Timer 1 中断 001BH TF1 串行通信中断 0023H TI/RI

406 11.1 中断实例及中断的控制者 中断响应与处理过程 1 立即暂停正在执行的任何程序, 并把下一条将要执行的指令地址压入堆栈中 2 保存所有中断状态 ( 但不在堆栈中 ) 3 根据中断向量表找到中断对应的地址 4 单片机到该地址上开始执行中断服务子程序, 直到遇到指令 RETI 为止 5 遇到 RETI 指令后, 从堆栈中弹出在中断产生时保存的将要执行的下一条指令的地址到程序计数器 PC 中, 单片机开始从 PC 指示的地址继续执行程序

407 11.1 中断实例及中断的控制者 中断响应与处理过程 问题 : 每一个中断服务子程序的存放空间都非常有限, 例如, 外部中断 0 的中断向量为 0003H, 而 Timer 0 中断向量地址为 000BH, 可见外部中断 0 的中断服务子程序只有 0003H~000AH 这 8 个字节的空间来存放, 这 8 个字节的空间实在也放不了几条指令 如果单片机同时使能了多个中断, 并且每一个中断服务子程序都按中断向量表中的地址开始存放, 就很有可能出现一个中断服务子程序占据其他中断服务子程序空间的问题 解决办法 :JMP 指令

408 11.1 中断实例及中断的控制者 中断响应与处理过程 ORG 00H ; 起始地址 00H JMP MAIN ; 跳转到 MAIN ORG 03H ; 外部中断 0 的起始地址 03H JMP EXT0 ; 跳转到 EXT0 ORG 0BH ; Timer 0 中断的起始地址 0BH JMP TIM0 ; 跳转到 TIM0 0000H 0003H 000BH 000DH JMP MAIN JMP EXT0 JMP TIM0 MAIN: XT0: TIM0: END

409 11.1 中断实例及中断的控制者 中断的控制者 中断使能寄存器 IE 单片机上电复位之后, 默认所有中断都被关闭 为了使单片机能对中断进行响应, 需要对中断使能寄存器 IE 进行操作 IE 的初始化过程即是使用 MOV 指令向其载入控制字 EA 中断使能 保留不要访问该位 ES 串行口中断使能 ET1 Timer 1 中断使能 EX1 外部中断 1 使能 ET0 Timer 0 中断使能 EX0 外部中断 0 使能

410 11.2 邮递员和朋友 外部中断 外部中断 INT0 和 INT1 (AT89S51 单片机的两个外部中断触发端口 ) 外部中断 0 触发端口 外部中断 1 触发端口 P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 AD5/P0.5 AD6/P0.6 AD7/P0.7 A8/P2.0 A9/P2.1 A10/P2.2 A11/P 这两个外部中断对应的中断向量的地址分别为 0003H 和 0013H, 分别由 IE 中的 EX0 和 EX1 位来使能 / 屏蔽

411 11.2 邮递员和朋友 外部中断 外部中断的电平触发 ( level-triggered or level-activated interrupt ) 在使能外部中断后, 如果在 INT0 或 INT1 口上出现低电平就会触发外部中断 0 或外部中断 1, 单片机会立即停止正在执行的程序, 执行中断服务子程序, 是单片机复位之后外部中断的默认触发方式 在单片机进入执行中断服务子程序时, 在执行到中断服务子程序结束指令 RETI 之前, 这个低电平必须撤走, 否则将会使单片机执行完 RETI 指令后再次进入中断服务子程序

412 11.2 邮递员和朋友 外部中断 外部中断的电平触发 ( level-triggered or level-activated interrupt ) 一般为了保证外部中断的产生, 低电平的时长至少需要 4 个机器周期, 若晶振式 12MHz, 则 : 1 个机器周期 1µs 4 个机器周期 至 INT0 或 INT1 端口 4 1µs 低电平触发外部中断的保持时间

413 11.2 邮递员和朋友 外部中断 外部中断的边沿触发 (edge-triggered or edge-activated interrupt ) 至少 1 个机器周期的高电平, 且向低电平跳变之后至少保持 1 个机器周期的低电平, 如果晶振频率为 12MHz, 则 : 1 个机器周期 1µs 1 个机器周期 1µs

414 11.2 邮递员和朋友 外部中断 外部中断的边沿触发 (edge-triggered or edge-activated interrupt ) 边沿触发方式需要指令来设置寄存器 TCON IE1 外部中断 1 边沿标志位 IT1 外部中断 1 方式控制位 (IT1 清 0 电平触发 / 置 1 边沿 ) IE0 外部中断 0 边沿标志位 IT0 外部中断 0 方式控制位 (IT1 清 0 电平触发 / 置 1 边沿 )

415 11.2 邮递员和朋友 外部中断 外部中断的边沿触发 (edge-triggered or edge-activated interrupt ) 1 电平触发方式下, 若按下开关 S 不放, 端口将不断获得低电平, 中断不断产生, 中断服务子程序被重复执行 ; 边沿触发方式, 只对端口的电平跳变有反应, 若也不放开开关 S, 并不会连续地产生中断 2 电平触发方式下, 若单片机正在执行中断服务子程序时, 外部中断再次发生, 电平触发信号不会被锁存, 所以单片机不会响应第 2 次中断 而在边沿触发方式下有所不同, 单片机正在执行中断服务子程序, 如果中断发生, 电平跳变产生的中断触发信号保存在 TCON 寄存器中的 IE0 或 IE1 中, 单片机再次检测 IE0 或 IE1 位, 又进入中断服务程序中 注意 : 在单片机执行中断服务子程序时, 电平触发方式会 漏掉 新的中断, 而边沿触发方式会 保留 新的中断

416 11.3 小狗和烧水壶 Timer 0 和 Timer 1 中断 问题 : 前面通过检测 Timer 溢出标志位 TFx 来判断计时是否完成 在判断的过程中, 单片机除了循环判断之外一般不做任何操作 如果在计时的同时又需要执行别的程序该怎么办呢? 解决办法 : 当通过中断使能寄存器 IE 使能 Timer 中断, 设置好 Timer 的工作参数, 启动 Timer 之后单片机就可以去做别的操作 Timer 溢出时, 单片机将会自动停下正在执行的任何程序而进入 Timer 中断服务子程序中执行 两个中断的中断向量地址分别为 000BH 和 001BH

417 11.3 小狗和烧水壶 Timer 0 和 Timer 1 中断 例 : 利用 Timer 0 中断产生 50Hz 矩形波 ORG 00H ; 起始地址 00H JMP MAIN ; 跳转到 MAIN ORG 0BH ; Timer 0 中断服务子程序起始地址为 0BH JMP TIM_LOW ; 跳转到 TIM_LOW ; 下面是主程序段, 初始化 MAIN: MOV IE, #82H ; 使能 Timer 0 中断 MOV TMOD, #01H ; 设置 Timer 0 工作在模式 1 下 TIMER0_LOAD: MOV TH0, #0B1H ; 往 TH0 中载入计数初始值 MOV TL0, #0E0H ; 往 TL0 中载入计数初始值 SETB TR0 ; 启动 Timer 0 SET_HIGH: SETB P1.0 ; P1.0=1 JMP SET_HIGH ; 循环

418 11.3 小狗和烧水壶 Timer 0 和 Timer 1 中断 ; 下面是 Timer 中断服务子程序 TIM_LOW: CLR P1.0 ; P1.0=0 MOV TH0, #0B1H ; 往 TH0 中载入计数初始值 MOV TL0, #0E0H ; 往 TL0 中载入计数初始值 RETI END 单片机 50Hz 矩形波 P1.0

419 11.4 电话铃响 串行通信中断 第十章中串行口发送和接收过程存在一个问题, 就是单片机在判断 TI 和 RI 位时只能 一心一意 地进行而无法再进行其他操作 串行通信中断的出现较好地解决了系统中既需要单片机响应串行通信的操作, 也同时兼顾其他操作 串行通信中断的中断向量地址为 0023H

420 11.4 电话铃响 串行通信中断 单片机 大屏幕 单片机 RI=0 T6 南宁至北京西 RI=1 T6 南宁至北京西 TXD RXD 正点 13:38 到达 晚点 14:38 TXD RXD * 晚点 14:38 到达 单片机串行通信中断 ( 例 ) 单片机被设置工作在串行通信中断时, 可以照常执行主程序 当接收或发送数据完成时,RI 或 TI 会被硬件置 1 而产生串行通信中断, 单片机则响应中断 因为 RI 或 TI 的置 1 都会使单片机中断, 程序要知道是发送数据完成的 TI=1 产生的中断或是串行口接收到数据的 RI=1 产生的就需要在中断服务子程序中先对 TI 和 RI 进行判断

421 11.4 电话铃响 串行通信中断 例 : 将 P0 口上 DIP 开关产生的 8 位状态信号从串行口 TXD 发送出去, 并由 P2 口上发光二极管显示 Vcc Vcc Vcc RXD TXD C1 20pF C2 20pF Y1 12MHz Vcc C 礔 U1 EA/VPP XTAL1 XTAL2 RST P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5/MOSI P1.6/MISO P1.7/SCK GND AT89S51 Vcc AD0/P0.0 AD1/P0.1 AD2/P0.2 AD3/P0.3 AD4/P0.4 AD5/P0.5 AD6/P0.6 AD7/P0.7 A8/P2.0 A9/P2.1 A10/P2.2 A11/P2.3 A12/P2.4 A13/P2.5 A14/P2.6 A15/P2.7 PSEN ALE/PROG P3.6/WR P3.7/RD R1-R8 4.7kO S Vcc 串行通信中断的演示电路图 D1-D8 R9-R16 470O? 8

422 11.4 电话铃响 串行通信中断 例 : 串行通信中断的演示程序 ORG 00H ; 起始地址 00H JMP MAIN ; 跳转到 MAIN ORG 23H ; 串行中断服务子程序起始地址为 23H JMP SERIAL ; 跳转到 TIM_LOW ; 下面是主程序段, 初始化并发送数据

423 11.4 电话铃响 串行通信中断 例 : 串行通信中断的演示程序 MAIN: MOV IE, #90H ; 使能串行中断 MOV SCON,#50H ; 设置串行口工作在模式 1 下 MOV TMOD, #20H ; 使用 Timer 1 工作在模式 2 下 MOV TH1, #0F3H; 波特率 2400( 晶振频率 =12MHz) MOV TL1, #0F3H SETB TR1 ; 启动 Timer 1 SEND_DATA: MOV A, P0 ; 将 P0 口状态数据载入 ACC MOV SBUF, A ; 载入缓冲区以发送 MOV P2, A ; 在 P2 口上的发光二极管显示 JMP SEND_DATA ; 循环检测 P2 口状态并发送

424 11.4 电话铃响 串行通信中断 例 : 串行通信中断的演示程序 MOV A, SBUF ; 如果 TI=0, 说明是接收到数据产生的中断, SERIAL: ; 这里是串行中断服务子程序 JB TI, SENT ; 如果 TI=1, 说明是发送完成产生的中断, ; 跳到 SENT 段将 TI 标志清 0 后返回主程序 ; 于是将缓冲区中的数据载入 ACC 中 MOV P2, A ; 在 P2 口上的发光二极管显示 CLR RI ; 清标志位 RI RETI ; 返回主程序 SENT: CLR TI ; 发送完成, 清标志位 TI RETI ; 返回主程序 END ; 程序结束

425 11.5 中断的魅力和优先级控制 中断的魅力 轮询与中断的比较 看电视 到门外看有没有邮递员到来 看电话机来电指示灯是否点亮 到门外看有没有朋友来临 看烧水壶里的水是否烧开 看小狗的碗中还有没有狗粮 小林的循环关注单片机的程序资源都耗费在访问设备的状态上, 如果设备响应率比较低, 单片机的程序执行效率将很低

426 11.5 中断的魅力和优先级控制 中断的魅力 轮询与中断的比较 在中断下, 单片机同样能服务多个设备, 等待某个设备产生中断时再去处理 在设备没有产生中断时单片机还可以专心地执行其他程序 中断的好处 : 1 单片机可以选择特定的中断进行响应和处理 可通过中断使能寄存器 IE 相应的位来使能系统希望响应和处理的中断, 而屏蔽那些不需要响应和处理的中断 轮询模式下, 单片机必须响应和处理每一个设备 2 如果有多个中断同时发生, 单片机可以根据程序的设定来优先响应和处理某一中断 而轮询模式下, 单片机逐一对设备进行访问, 没有优先顺序之分

427 11.5 中断的魅力和优先级控制 中断的优先级控制 单片机能根据设置 ( 中断优先级控制寄存器 IP ) 来优先响应和处理某一中断, IP 寄存器位于特殊功能寄存器区的 B8H 上 置 1 则优先保留不要访问保留位, 也不要往保留位写数据 PS 串行口中断优先 PT1 Timer 1 中断优先 PX1 外部中断 1 优先 PT0 Timer 0 中断优先 PX0 外部中断 0 优先

428 11.5 中断的魅力和优先级控制 中断的优先级控制 ( 默认的中断优先级 ) 如果想调整表所示的默认中断优先级, 可以将中断优先级控制寄存器 IP 中相应的位置 1 即可 如果程序中把两个或两个以上的中断优先级位都置 1, 单片机又会根据表中描述的中断优先级来服务

429 11.6 实例点拨 旋转的时钟 指针 边线 刻度 电机指针发光二极管列 边线发光二极管 控制电路 圆心 (a) 旋转的时钟 (b) 时钟只有一列发光二极管

430 11.6 实例点拨 旋转的时钟 原理分析 人眼具有视觉暂留 (visual persistence) 的错觉, 即无法区分间隔小于 0.1 秒的图像 有 8 支发光二极管排成一列, 最内侧的发光二极管为圆心, 它们绕着圆心旋转, 最外侧的发光二极管显示时间刻度, 当时针在 12 点时我们假设角度为 0, 则每个小时时针之间的角度为 30(360/12) 于是当这一列发光二极管每旋转 30, 最外侧的发光二极管就点亮一个瞬间以呈现出时间刻度 这样, 如果在 0.1 秒之内这列发光二极管能旋转完一圈, 则人眼就会产生错觉, 而把先后产生的时间刻度连成 12 个完整的时间刻度

431 11.6 实例点拨 旋转的时钟 原理分析 分针较时针长, 假设分针用 7 支发光二极管来显示, 时针用 5 支发光二极管来显示 要显示 3 点整, 在时间刻度的显示基础上, 控制在 0 时点亮 7 支发光二极管以显示分针指在 12 点位置上 ; 然后当发光二极管转过 90 时再显示 5 支以显示时针指在 3 点位置上, 由于发光二极管在不断地旋转, 在 0.1 秒内重复点亮 12 点位置上的 7 支和 3 点位置上的 5 支发光二极管, 直到 1 分钟以后在 6 的位置上点亮 7 支发光二极管表示 3 点 01 分 (360 60( 分钟 )=6 / 分钟 ) 时间刻度 分针 时针 圆心

432 11.6 实例点拨 旋转的时钟 原理分析 ( 具体的设计过程 ) 计算旋转时钟的周长和半径 选用直径为 3mm 的发光二极管组成一列, 这样最外侧的发光二极管旋转一周经过的显示位置应该有 60 个 为了在显示时每分钟之间有一个间隔, 我们在每分钟之间引入一个 1mm 空隙, 于是得到旋转的周长 C=60 3mm+59 1mm=239mm, 可得半径 R=C/2π=38mm, 将 8 支发光二极管按 38mm 平均间距排 成一列 12 3mm 1mm 1 38mm 2

433 11.6 实例点拨 旋转的时钟 原理分析 ( 具体的设计过程 ) 进行时间的计算 根据视觉暂留的原理, 该列发光二极管在同一位置出现的时间间隔应该不大于 0.1 秒, 即旋转周期 T 100ms 为了计算方便, 可取旋转周期 T=60ms 这样每分钟刻度上发光二极管的点亮和熄灭的时间 t=60ms/60=1ms 在这 1ms 中, 可设计发光二极管点亮 0.7ms(700µs), 熄灭 0.3ms(300µs)

434 11.6 实例点拨 旋转的时钟 明确系统功能 电机带动一列发光二极管绕轴旋转, 单片机控制发光二极管在旋转过程中的相应位置上点亮以指示时间和刻度 与此同时, 单片机内部进行时钟的计时操作, 以控制旋转时钟显示正确的走时

435 11.6 实例点拨 旋转的时钟 硬件设计 电机轴插孔电池固定位置 8 支发光二极管 直流电机 单片机 旋转时钟的电路板 红外接收管 D9 旋转的电路板 电机 红外对管用于同步 红外发光二极管 D10 支架

436 11.6 实例点拨 旋转的时钟 硬件设计 电池 Vcc BT 5V C4 100 礔 C 礔 D1-D8 R1-R8 Vcc 470O? 8 旋转时钟系统电路图 D9 C1 20pF Y1 C2 12MHz 20pF R9 4.7kO Vcc R10 560O Vcc C3 10 礔 D U1 RST/VPP P3.0/RXD P3.1/TXD XTAL2 XTAL1 P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 GND AT89S2051/ C 礔 2 1 Vcc P1.7/SCK P1.6/MISO P1.5/MOSI P1.4 P1.3 P1.2 P1.1/AIN1 P1.0/AIN0 P3.7 RP 51kO M Motor 礔 Vcc C7 C8 16V 47 礔 ~12V T ~220V 红外接收管 红外发光二极管 电位器 电机整流桥变压器

437 11.6 实例点拨 旋转的时钟 软件设计 使能单片机的两个中断 Timer 0 中断和外部中断 1, 并设 Timer 0 的优先级较高 启动 Timer 0 后, 每 50ms 产生一次中断 在 Timer 0 中断服务子程序 TIM0 中,R0 计数器判断每 50ms 产生一次的中断是否到达 20 次, 如果是计时 1 秒 R1 是秒的计数器, 如果 R1 计到 60 表明到达 1 分钟, 则 30H 中的分钟值加 1 在计时的同时, 外部中断 1 使能 每当红外对管对齐时, 即每旋转一圈时中断服务子程序 EXT1 被执行 EXT1 中将旋转一圈分成 60 份 根据 60 个不同的位置来判断是否显示时间刻度 分针和时针 ( 程序见书本 )

438 器件介绍 1. 电位器 : A B 两端的阻值固定, 等于电位器的标称值 中间引脚 P 与两端引脚之间的电阻值随着电位器的旋钮 (knob) 调节而改变 电位器外壳一般都会标注最大阻值和功率 大功率场合一般都使用绕线电位器 旋钮 P A B A B P A 旋钮 P B (a) 电路符号 (b) 一般电位器外观 (c) 绕线式电位器

DPJJX1.DOC

DPJJX1.DOC 8051 111 2K 1 2 3 ' ' 1 CPU RAM ROM / A/D D/A PC CPU 40 68 10 20 8 51 PIII 8051 2 MCS51 8051 8031 89C51 8051 8031 89C51? MCS51 INTEL INTEL 8031 8051 8751 8032 8052 8752 8051 8051 8051 MCS51 8031 8031

More information

CH559指令周期.doc

CH559指令周期.doc CH55X 汇编指令周期表 CH55X 汇编指令概述 : 型号包含 : a. 指令单周期型号 :CH557 CH558 CH559; b. 指令 4 周期型号 :CH551 CH552 CH553 CH554; c. 非跳转指令的指令周期数与指令字节数相同 ; d. 跳转指令含 MOVC/RET/CALL 通常比字节数多若干个周期 ; e.movc 指令多 4 或 5 个周期 ( 下条指令地址为奇数时多

More information

目 录

目 录 1 Quick51...1 1.1 SmartSOPC Quick51...1 1.2 Quick51...1 1.3 Quick51...2 2 Keil C51 Quick51...4 2.1 Keil C51...4 2.2 Keil C51...4 2.3 1 Keil C51...4 2.4 Flash Magic...9 2.5 ISP...9 2.6...10 2.7 Keil C51...12

More information

1-1 SH79F6431 A. 2( ) 9~15V ( 12V) U2 U3 3.3V SH79F B. 1(VCC/GND) SH79F6431 C. VDDIO SH79F6431 P4 P5 P0.6 P0.7 VDDIO VDDIO=5V D. 2 V 1.0

1-1 SH79F6431 A. 2( ) 9~15V ( 12V) U2 U3 3.3V SH79F B. 1(VCC/GND) SH79F6431 C. VDDIO SH79F6431 P4 P5 P0.6 P0.7 VDDIO VDDIO=5V D. 2 V 1.0 SH79F6431 1. SH79F6431 1T 8051 FLASH SH79F JET51 Keil µ vision JTAG 1.1. SH79F6431 LQFP64 1.2. (Target Board) SH79F6431 1 V 1.0 1-1 SH79F6431 A. 2( ) 9~15V ( 12V) U2 U3 3.3V SH79F6431 1 2 1 B. 1(VCC/GND)

More information

HD61202 HD HD61203 HD61202, HY HY HD61202 HD61202 HD61203 HD =4096 RAMRAM LCD 2HD HD HD /32--

HD61202 HD HD61203 HD61202, HY HY HD61202 HD61202 HD61203 HD =4096 RAMRAM LCD 2HD HD HD /32-- HD61202 C-7 1 HD61202 HD61202 8 HD61203 HD61202, HY-12864 HY-19264 HD61202 HD61202 HD61203 HD61202 1 6464=4096 RAMRAM LCD 2HD61202 64 3HD61202 68 68 4HD61202 1/32--1/64 HD61202 HD61202 2 CS1,CS2,CS3 CS1

More information

» n ¹ú KS0108 x ÍÍÙ q n KS0108 KS KS0107 KS0108 KS *32 128*64 192*64 KS0108 KS0108 KS0107 KS =4096 RAM RAM LCD 2 KS

» n ¹ú KS0108 x ÍÍÙ q n KS0108 KS KS0107 KS0108 KS *32 128*64 192*64 KS0108 KS0108 KS0107 KS =4096 RAM RAM LCD 2 KS KS0108 KS0108 8 KS0107 KS0108 KS0108 128*32128*64 192*64 KS0108 KS0108 KS0107 KS0108 1 6464=4096 RAMRAM LCD 2KS0108 64 3KS0108 68 68 4KS0108 1/48--1/64 KS0108 CS1,CS2,CS3 CS1 CS2 CS3 E E KS0108 E R/W R/W=1

More information

W77E58中文手册

W77E58中文手册 W77E58 77E58 8051 8051 8051 77E58 8051 1.5 3 COMS 32K EEPROM 1K SRAM 1 8 2 40M 4 3 8051 4 8051 5 4 8 I/O 6 4 I/O 44 PLCC QFP 7 16 / 8 12 9 10 11 1K 12 13 16 DPTR 14 15 DIP40 W77E58 25/40 PLCC44 W77E58P

More information

<4D F736F F D20B3E6B4B9A4F930365F32A443AC71C5E3A5DCBEB9B1B1A8EE2E646F63>

<4D F736F F D20B3E6B4B9A4F930365F32A443AC71C5E3A5DCBEB9B1B1A8EE2E646F63> 七段顯示器控制電路四位數 _ 使用解碼器驅動 +5 V 10 uf 8.2 k 12 MHz 20 pf 1 2 3 4 5 6 7 8 9 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 RESET 10 P3.0 11 12 13 14 15 16 17 18 19 20 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 XTAL2 XTAL1

More information

Microsoft Word - 專題封面.doc

Microsoft Word - 專題封面.doc 逢 甲 大 學 資 訊 工 程 學 系 專 題 研 究 報 告 8051 小 遊 戲 -21 點 指 導 教 授 : 陳 德 生 學 生 : 許 博 益 中 華 民 國 九 十 六 年 六 月 I 目 錄 第 一 章 緒 論 1 1-1 研 究 背 景 1 1-2 研 究 動 機 2 1-3 研 究 目 的 3 1-3-1 21 點 源 起 3 1-3-2 21 點 規 則 3 第 二 章 微 電

More information

第5章:汇编语言程序设计

第5章:汇编语言程序设计 第 5 章 : 汇编语言程序设计 程 汇编语言指令格式 系统伪指令 存储器选择方式 常用子程序 1 汇编语言程序设计 PIC 指令系统 语言系统 指 CPU 编 器语言 器语言 器语言 设计 用 语言 设计 语言 汇编语言 2 汇编语言指令格式 汇编语言指令格式 ( 指令 ) label opcode operand comment 指令 用 存 指令 指令语 3 汇编语言指令格式 1 指令 用 指令

More information

微處理機期末專題

微處理機期末專題 微 處 理 機 期 末 專 題 自 動 鋼 琴 組 員 :b92611004 羅 鈞 瑋 b92611008 吳 妍 儂 b92611038 吳 韋 靜 b92611042 林 佳 穎 一 簡 介 本 組 的 主 題 是 自 動 鋼 琴 在 播 放 音 樂 的 同 時, 鋼 琴 會 自 動 按 下 琴 鍵, 被 按 下 的 琴 鍵 所 對 應 到 的 音 階, 就 是 正 在 撥 放 的 樂 曲 的

More information

untitled

untitled EDM16080-01 Model No.: Editor: 1. ----------------------------------------------------3 2. ----------------------------------------------------3 3. ----------------------------------------------------3

More information

untitled

untitled EDM12832-08 : 25-1 : 116600 : (0411)7612956 7632020 7631122 : (0411)7612958 Model No.: Editor: LCD 1. ----------------------------------------------------3 2. ----------------------------------------------------3

More information

<4D F736F F D20B5DAC8FDCBC4D5C2D7F7D2B5B4F0B0B82E646F63>

<4D F736F F D20B5DAC8FDCBC4D5C2D7F7D2B5B4F0B0B82E646F63> 第三章 Q3 1 1. 省略了 I/O 操作的复杂逻辑, 易实现, 耗费低 ; 2. 可以利用丰富的内存寻址模式实现灵活的 I/O 操作 Q3 2 假设存储单元 ds1 处寄存器地址为 0x2000, 代码如下 #define ds1 0x2000 while ( *ds1 == 0 ) ; Q3 3 假设设备 (dev1) 中有两个寄存器 ds1 和 dd1,dev1 的地址为 0x1000,ds1

More information

12232A LED LED LED EL EL CCFL EL CCF

12232A LED LED LED EL EL CCFL EL CCF 12232A 0 50-20 +70-30 +85 LED LED LED EL EL CCFL EL CCF 122 x 32 1/32Duty 1/5Bias 6:00 STN( ), EL LED EL/100VAC 400HZ LED/4.2VDC 1 / VDD-VSS 0 6.5 V Ta=25 LCD VDD-V0 0 12.0 V V1 0 VDD V VDD-VSS - 4.75

More information

專題最終版.doc

專題最終版.doc The Principle and Application of the Electric Combination Lock The Principle and Application of the Electric Combination Lock Abstract Recently, there are more and more burglaries in the society. It's

More information

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File 51 C 51 51 C C C C C C * 2003-3-30 pnzwzw@163.com C C C C KEIL uvision2 MCS51 PLM C VC++ 51 KEIL51 KEIL51 KEIL51 KEIL 2K DEMO C KEIL KEIL51 P 1 1 1 1-1 - 1 Project New Project 1 2 Windows 1 3 N C test

More information

51 C 51 isp 10 C PCB C C C C KEIL

51 C 51 isp 10   C   PCB C C C C KEIL http://wwwispdowncom 51 C " + + " 51 AT89S51 In-System-Programming ISP 10 io 244 CPLD ATMEL PIC CPLD/FPGA ARM9 ISP http://wwwispdowncom/showoneproductasp?productid=15 51 C C C C C ispdown http://wwwispdowncom

More information

2 Keil µ vision 2.1 1) Keil µ vision2 V2.34 µ vision3 2) Sino_Keil.exe Keil c:\keil\ 3) JET51 USB PC C:\Keil\ USB PC 4) S-L

2 Keil µ vision 2.1 1) Keil µ vision2 V2.34 µ vision3 2) Sino_Keil.exe   Keil c:\keil\ 3) JET51 USB PC C:\Keil\ USB PC 4) S-L 1 SH88F516 8051 64K FLASH 1024 EEPROM SH88F516 JET51 S-Lab Keil µ vision ISP51 Keil µ vision ISP51 ISP51 PC RS232 MCU SH88F516 SH88F516 1.1 SH88F516 1.1 SH88F516 SH88Fxx: QFP44, DIP40 RAM Flash E2 ADC

More information

Ps22Pdf

Ps22Pdf ( ) ( 150 ) 25 15 20 40 ( 25, 1, 25 ), 1. A. B. C. D. 2. A. B. C. D. 3., J = 1 H = 1 ( A B, J', J, H ) A. A = B = 1, J' =0 B. A = B = J' =1 C. A = J' =1, B =0 D. B = J' = 1, A = 0 4. AB + AB A. AB B. AB

More information

CA24064B LED LED LED EL EL CCFL EL CCF /

CA24064B LED LED LED EL EL CCFL EL CCF / CA24064B 0 50-20 +70-30 +85 LED LED LED EL EL CCFL EL CCF 39 2 6 0755-81995643/27890716 0 13713911853 0755-27890716 1 : VDD-VSS 0 6 V LCD VDD-V0 Ta=25 0 28.0 V VI 0 VDD V : VDD-VSS --- 4.75 5.0 5.25 V

More information

PowerPoint 簡報

PowerPoint 簡報 微算機原理與實驗 (UEE 2301/1071 ) Chap 5. MCS-51 Addressing Modes 宋開泰 Office:EE709 Phone:5731865( 校內分機 :31865) E-mail:ktsong@mail.nctu.edu.tw URL:http://isci.cn.nctu.edu.tw 1 Addressing Modes Addressing mode is

More information

<4D6963726F736F667420576F7264202D20B9F9B0EABBCDBBAFAB48DEB3B4C1A5BDB3F8A7692E646F63>

<4D6963726F736F667420576F7264202D20B9F9B0EABBCDBBAFAB48DEB3B4C1A5BDB3F8A7692E646F63> 臺 北 市 立 松 山 高 級 工 農 職 業 學 校 資 訊 科 專 題 製 作 報 告 題 目 : 反 彈 空 間 指 導 老 師 : 余 耀 銘 學 生 : 廖 國 銓 趙 信 瑋 中 華 民 國 102 年 5 月 摘 要 在 這 高 速 科 技 的 起 飛 下, 科 技 都 建 立 起 於 基 礎, 有 些 人 把 這 基 礎 轉 為 理 論, 教 給 大 眾 學 習 ; 有 些 人 利

More information

R/W

R/W (HD44780 KS0066 ) 3 3 5 6 10 14 HD44780/KS0066 16 2 LCM 8 1 40 4 LCD HD44780/KS0066 HD44100 IC PCB 0.1 CMOS 1. 2. 3. 4. 5. RH60% 6. 1. 2. 3. PCB 3 4. 5. 6. 1. 280 C 2. 3 4s 3. 4. 5. 3 5 1. 2. IC 3. DC-DC

More information

TSINGTEK DISPLAY CO.,LTD LCD CONTROLLER & DRIVER ST7920 OR EQUIVALENT (f) 639 2A f B1

TSINGTEK DISPLAY CO.,LTD LCD CONTROLLER & DRIVER ST7920 OR EQUIVALENT (f) 639 2A f B1 TSINGTEK DISPLAY CO.,LTD LCD CONTROLLER & DRIVER ST7920 OR EQUIVALENT 588 4 1 0571-85121224 85121742 85121304(f) 639 2A095 0571-88256346 89902095 f B1618 010-62051209 62000662 62568913 82036512 f http://www.tsingtek.com

More information

单片机学习教程

单片机学习教程 . 89S51 1. 2.p1 3.8 3 4.8 3. 1. 0-F 2. 0000 0255. 1. : BB 2. : ( --- ) : :. 1. 2..232.I 2 C 1. X24C02 MCS-51 2. : 22H 24C02 50H 3. : ; 8 4. :I2C. / 1. 1 2. 2. 1. 1. 2. 2.. 1. 1: 2. 2: 3. 3 1 LED 1 89S51

More information

*_* IAP In Applications Program, *_* ROM RAM A/D D/A KELL C51 2 0531-86213622 Micro Controller Unit( ) INTEL MCS-48 MCS-51 MCS-96 51 MCS-51 8 MCS-96 16 INTEL / 51 87 LPC W78L DS87 GSM97 ATMEL 89C51

More information

AN-8203 FCM8531 用户手册

AN-8203 FCM8531 用户手册 www.fairchildsemi.com AN-8203 FCM8531 用户手册 所有指令兼容二进制代码, 与业界标准的 8051 微控制器执行的功能相同 表 1. 指令集和寻址模式 符号 说明 Rn 当前选择的寄存器区中的寄存器 R0 ~ R7 直接 内部 DATA RAM 位置 (0~127) 或特殊功能寄存器 (SFR) @Ri 间接内部 (0~255) 或外部 RAM 位置由寄存器 R0

More information

物品重量分級器.doc

物品重量分級器.doc Ω Ω Ω Ω Ω Ω Ω 9 A R = Ω Ω + - - + R = A R = - ρ A A R = + A A R = A ρ Ω = + A A A - R + + = + = ρ ) A A ) ( A R ( + + = + + = A ) A R (+ R R = R R = F F Active Dummy V Active Dummy ± ± ± mv = mv ±

More information

Microsoft Word - em78 sub program.doc

Microsoft Word - em78 sub program.doc 一 二进制数转换为 ASCⅡ 码 将一个字节的二进制数转换为两位 16 进制数的 ASCⅡ 码 main: mov a,@0x9f ; 二进制数为 0x9f mov 0x30,a ; 二进制数存入 0x30 mov a,@0x02 mov 0x10,a ;0x10 中存放转换次数 mov a,@0x31 mov 0x04,a ;0x04 中为转换后数据存放地址 mov a,0x30 B1: ; 取

More information

Microsoft Word - P3.doc

Microsoft Word - P3.doc ;P3.3 警报器 ;* ( 程序转载请著明出处, 未声明可适应本站腾龙 /isp 开发套件 / 倚天版开发套件 * ;* E-mail:sxj1974@163.com (51c51 test web) 51 测试网, 自学单片机的网站 * ;* Create by : 石学军 www.51c51.com www.8951.com 更多例程请登陆网站 * org 00h ajmp dlv org 0030h

More information

µPSD3000 系列

µPSD3000 系列 8032 FLASH MCU µpsd3251f-40t6 µpsd3251 8032 FlashPSD Flash SRAM I/O I 2 C, ADC and PWM 8032, 16 / FlashPSD µpsd32 JTAG ISP 2K SRAM Flash - 64K Flash - 16K Flash - Flash 8032 12 I2C ADC 6 I/O 37 I/O 16

More information

() () () () () () () () DDRAM () II

() () () () () () () () DDRAM () II 液晶模块说明书 SPEC NO YM2232A REV NO. 液晶显示模块产品说明书 产品类型 : 产品型号 : 产品描述 : 标准产品 YM2232A 22x32 图形点阵模块, 控制器 :SED52,LED 背光 客户名称 : 客户确认 : 编写 : Dexun Zou 审核 : HCC 批准 : Jingxi Yang 发行日期 : 22.8 大连佳显电子有限公司 地址 : 大连市沙河口区工华街

More information

STC90C51RC-cn.pdf

STC90C51RC-cn.pdf STC90.STC90C5RC/RD+ STC90C5RC/RD+ 805 5.5V - 3.3V 3.6V - 2.0V V 040MHz080MHz48MHz 4K / 8K / 3K / 6K / 32K / 40K/ 48K/ 56K/ 6K 28052RAM I/O35/39P/P2/P3/P4805I/OP0 I/O ISP/ IAP RxD/P3.0, TxD/P3. EEPROM MAX80

More information

单片机原理及应用实验指导书.doc

单片机原理及应用实验指导书.doc 1 2 3 4...2...4...9...9 AEDK598 MCS51...9 MCS51...10...10...10...10...10...10...11 P1...12...12...12....12...12...13 P3...14...14...14...14...14...14 I/O...15...15...15...15...15...16...17...17...17...17...17...18...19...19

More information

untitled

untitled EDM12864-03 : 25-1 : 116600 : (0411)7612956 7632020 7612955 : (0411)7612958 Model No.: Editor: 1. ----------------------------------------------------3 2. ----------------------------------------------------3

More information

1.1 ML_ONOFF = 1 Q 3 Q 8 C 0.3V M 2 L 1 ML_ONOFF = 0 Q 3 Q 8 C 1. + R31 VCC R21 10K ML_ONOFF R15 0:off 1:on 1K Green Light VCC=5V L1 Q VDD=12V C

1.1 ML_ONOFF = 1 Q 3 Q 8 C 0.3V M 2 L 1 ML_ONOFF = 0 Q 3 Q 8 C 1. + R31 VCC R21 10K ML_ONOFF R15 0:off 1:on 1K Green Light VCC=5V L1 Q VDD=12V C AUTOMATIC TROLLEY H K Hwang K K Chen J-S Lin S-C Wang M-L Li C-C Lin W-B Lin Dept. Of Electrical Engineering Far East College ABSTRACT This paper proposes an automatic trolley which can move automatically

More information

1

1 W7E65 1. W7E65 ISP Flash EPROM ISP Flash EPROM 52 W7E65 64K Flash EPROM 4K Flash EPROM 4K Flash EPROM loader 64K ROM 1K RAM 4 I/O 4 I/O P4 3 16 / 2 W7E65 Flash EPROM W7E65 2 2 2. CMOS 12 64K ISP Flash

More information

Microsoft Word - IRFWX_A051_C_SyncMOS_with_STC_APN_SC_.doc

Microsoft Word - IRFWX_A051_C_SyncMOS_with_STC_APN_SC_.doc EEPROM 应用说明 1 适用产品 :SM59D03G2 SM59D04G2 series 2 应用范围 : 针对需使用 EEPORM 功能替换 STC 89C5X 的应用及汇编语言之范例程序 ( 使用内部扩充内存为暂存区 ) 3 功能说明 : 3.1 本公司上述产品 EEPORM 功能皆可替换 STC89C5X, 仅需对特殊功能缓存器定义 ( 详见表 1) 及 ISP 命令定义 ( 详见表 2)

More information

Microsoft PowerPoint - chap4.ppt

Microsoft PowerPoint - chap4.ppt 定址方式 定址方式 格式 有效位址 立即資料定址 #data8 暫存器定址 Rn (R0 ~ R7) 直接定址 addr8 addr8 絕對定址 addr11 addr11 長程 ( 絕對 ) 定址 addr16 addr16 ( 暫存器 ) 間接定址 @Ri (@R0 @R1) 或 @DPTR R0 R1 或 DPTR ( 暫存器 ) 相對定址 disp8 PC+ 符號擴展之 disp8 ( 基底

More information

逢 甲 大 學

逢    甲    大    學 論 車 Auto Vehicle 立老 磊 年 老 立老 了 見 老 了不 料 利 了 識 更了 力量! i 車. 車 利 89c51 來 流. 令. 車 8051 類 車利 車 ii Abstract The goal of this thesis is to design a small auto vehicle by using IC as its control center. Our auto

More information

<4D6963726F736F667420576F7264202D203130B5A5C6ACBBFACAB5D1E9D6B8B5BCCAE92E646F63>

<4D6963726F736F667420576F7264202D203130B5A5C6ACBBFACAB5D1E9D6B8B5BCCAE92E646F63> 单 片 机 及 接 口 技 术 实 验 指 导 书 张 勇 编 计 算 机 与 通 信 工 程 学 院 信 息 与 通 信 工 程 系 2004.12 1 - 前 言 单 片 机 及 接 口 技 术 是 通 信 工 程 专 业 的 专 业 技 能 课 程, 在 专 业 知 识 结 构 体 系 中 具 有 十 分 重 要 的 地 位, 课 程 的 实 践 性 很 强, 学 习 必 须 理 论 和 实

More information

7688使用手冊V10.doc

7688使用手冊V10.doc TP-7688 . 2 2. 3 3. 5 4. 5 5. 6 6. 7 7. 8 8. 9 9.. 4. 7 2 2., 7x9 / 6x9 7x9.3() x 3.()mm 6x9 2.84() x 3.()mm 3 ASCII 7x9 95 ASCII 6x9 95 6x9 7 BIG5 6x9 3973 6x9 28 7x9 24 24 55 6x9 2 2 27 4.23mm (/6 inch)

More information

1 TPIS TPIS 2 2

1 TPIS TPIS 2 2 1 1 TPIS TPIS 2 2 1. 2. 3. 4. 3 3 4 5 4 TPIS TPIS 6 5 350 Mark Coil F3/F6 350 M 150 M 25 M 7.12M 8 M F3 F6 F4 F7 F8 8M AA 7 350 28V 5V IC HCPL2731 0.5mA 6 8 (TPIS) TPIS 9 7 IC AT89C2051 AT89C2051 CMOS8

More information

微處理機

微處理機 3-1 指令格式 標記運算碼運算元註解 標記 1. 標記前不可有空白, 否則會被視為運算碼 2. 標記代表一個 16 位元的記憶體實際位址 3. 標記名稱最多 32 個字元 ( 視組譯器不同而有所不同 ) 4. 標記有大小寫之分 5. 標記可有可無 運算碼 1. 運算碼與標記名稱間, 至少必須空一格, 如果沒有標記名稱, 則運算碼前最少要空一格, 否則會被視為標記 2. 運算碼大小寫相同 3. 可以是

More information

学习MSP430单片机推荐参考书

学习MSP430单片机推荐参考书 MSP430 16 MSP430 C MSP430 C MSP430 FLASH 16 1 CPU 16 ALU 16 PC SP SR R4~R15 2 3 00-FFH 100-1FFH 4 5 1 2 51 24 27 6 1 2 3 4 5 6 4 12 SR SP SR CPU SR CPU C Z N GIE CPUOff CPU OscOff SCG0 SCG1 CPU EXIT SP

More information

untitled

untitled 8086/8088 CIP /. 2004.8 ISBN 7-03-014239-X.... TP313 CIP 2004 086019 16 100717 http://www.sciencep.com * 2004 8 2004 8 1 5 500 787 1092 1/16 16 1/2 391 000 1 2 ii 1 2 CAI CAI 3 To the teacher To the student

More information

Microsoft PowerPoint - chap5.ppt

Microsoft PowerPoint - chap5.ppt 邏輯運算指令的動作 0 1 0 1 0 0 1 1 OR 1 0 1 1 1 0 0 1 1 1 1 1 1 0 1 1 (a) OR 運算 0 1 0 1 0 0 1 1 XOR 1 0 1 1 1 0 0 1 1 1 1 0 1 0 1 0 (c) XOR 運算 希望設定為 1 的位元 罩網標的位元組 新標的位元組 不改變的位元 希望取補數的位元 罩網標的位元組 新標的位元組 不改變的位元 1

More information

Microsoft Word - Ö¸Á.doc

Microsoft Word - Ö¸Á.doc 指令集说明 注 由于资源大小问题 其中以下几款 MCU 只有 62 条指令 其余均为 63 条指令 HT48CA0/HT48RA0A 无 RETI 指令 HT48R05A-1 无 TABRDL 指令 指令寻址方式有下面 5 种 立即寻址 此一寻址法是将立即的常数值紧跟在运算码 (opcode) 后 例如 MOV A, 33H ADD A, 33H 直接寻址 直接寻址的情況只允许在存储器之间作数据传送

More information

untitled

untitled LCD EDM12864HBSL-ALC-G : 25-1 : 116600 : (0411)7612956 7632020 : (0411)7612958 Model No.: Editor: LCD 1. ----------------------------------------------------3 2. ----------------------------------------------------3

More information

Microsoft Word - 新1-3.doc

Microsoft Word - 新1-3.doc 模块三 80C51 的指令系统和程序设计 (1) 了解 80C51 指令系统的构成 (2) 掌握 80C51 单片机的寻址方式 (3) 掌握 80C51 单片机的各种指令及其应用 (4) 掌握汇编语言程序设计方法, 为以后实际控制系统的程序设计奠定基础 3.1 80C51 指令系统概述 对于任何一台计算机, 如果只有硬件 ( 称为裸机 ), 而没有软件 ( 即程序 ) 的支持是不能工作的 单片机也不例外,

More information

93C46串行EEPROM数据读写

93C46串行EEPROM数据读写 一 \ 实验目的 93C46 串行 EEPROM 数据读写 1 学会 93C46 的操作指令, 掌握 93C46 读 / 写程序的编写 2 掌握 93C46 与单片机的接口方式二 实验说明 93C46/56/66 是 1K/2K/4K 位的串行电可擦写的 EPROM 93C46 的 1K 位 EPROM, 可以按 128 字节排列, 也可以 64 字节排列 93C46 芯片有 8 脚, 当 ORG

More information

6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C C C51 C51 ANSI C MCS-51 C51 ANSI C C C51 bit Byte bit sbit

6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C C C51 C51 ANSI C MCS-51 C51 ANSI C C C51 bit Byte bit sbit 6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C51 6.1 C51 6.1.1 C51 C51 ANSI C MCS-51 C51 ANSI C C51 6.1 6.1 C51 bit Byte bit sbit 1 0 1 unsigned char 8 1 0 255 Signed char 8 11 128

More information

dfgdafhdafhdafhdafh

dfgdafhdafhdafhdafh 逢 甲 大 學 自 動 控 制 工 程 學 系 專 題 製 作 專 題 論 文 數 位 式 電 子 秤 之 研 製 Design Study of Digital Electronic Weighing Sensor 指 導 教 授 : 賴 啟 智 學 生 : 劉 人 豪 俞 仲 維 中 華 民 國 九 十 八 年 四 月 二 十 二 日 ii . 誌 謝 本 文 承 蒙 賴 啟 智 老 師 指 導,

More information

幻灯片 1

幻灯片 1 3 8086 Tel:2656809 tjx@csu.edu.cn 2005-9-14 1 2005-9-14 2 8086 8 8086 8086 7 2005-9-14 3 PC 2005-9-14 4 2005-9-14 5 81616 2005-9-14 6 [ ] MOV AX, 3064H AX=3064H 16AX OP 64H 30H 2005-9-14 7 16 AX BX CX

More information

1. 介绍 义隆 8 位单片机指令介绍 Application Notes 义隆 8 位单片机指令介绍 EM78/EM88 系列是基于 RISC 的精简指令微控制器, 每条指令是 13 位 15 位, 除 LCALL LJMP MOV R2,A ADD R2,A 改变 PC 指针的指令是 2 个指令

1. 介绍 义隆 8 位单片机指令介绍 Application Notes 义隆 8 位单片机指令介绍 EM78/EM88 系列是基于 RISC 的精简指令微控制器, 每条指令是 13 位 15 位, 除 LCALL LJMP MOV R2,A ADD R2,A 改变 PC 指针的指令是 2 个指令 1. 介绍 Application Notes EM78/EM88 系列是基于 RISC 的精简指令微控制器, 每条指令是 13 位 15 位, 除 LCALL LJMP MOV R2,A ADD R2,A 改变 PC 指针的指令是 2 个指令 * 周期, 其余为单指令周期 ( 部分第一代芯片 JMP CALL RET RETL RETI JBS JBC JZ JZA DJZ DJZA 指令为 2

More information

Ch03_嵌入式作業系統建置_01

Ch03_嵌入式作業系統建置_01 Chapter 3 CPU Motorola DragonBall ( Palm PDA) MIPS ( CPU) Hitachi SH (Sega DreamCast CPU) ARM StrongARM CPU CPU RISC (reduced instruction set computer ) CISC (complex instruction set computer ) DSP(digital

More information

另外,AT89S52 可降至 0Hz 静态逻辑操作, 支持 2 种软件可选择节电模式 空闲模式下,CPU 停止工作, 允许 RAM 定时器/ 计数器 串口 中断继续工作 掉电保护方式下,RAM 内容被保存, 振荡器被冻结, 单片机一切工作停止, 直到下一个中断或硬件复位为止 8 位微控制器 8K 字

另外,AT89S52 可降至 0Hz 静态逻辑操作, 支持 2 种软件可选择节电模式 空闲模式下,CPU 停止工作, 允许 RAM 定时器/ 计数器 串口 中断继续工作 掉电保护方式下,RAM 内容被保存, 振荡器被冻结, 单片机一切工作停止, 直到下一个中断或硬件复位为止 8 位微控制器 8K 字 AT89C52 中文资料 AT89C52 的中文资料 AT89C52 是美国 Atmel 公司生产的低电压 高性能 CMOS 8 位单片机, 片内含 8KB 的可反复檫写的程序存储器和 12B 的随机存取数据存储器 (RAM), 器件采用 Atmel 公司的高密度 非易失性存储技术生产, 兼容标准 MCS- 51 指令系统, 片内配置通用 8 位中央处理器 (CPU) 和 Flash 存储单元, 功能强大的

More information

<4D6963726F736F667420576F7264202D20C7B6C8EBCABDCFB5CDB3C9E8BCC6CAA6B0B8C0FDB5BCD1A75FD1F9D5C22E646F63>

<4D6963726F736F667420576F7264202D20C7B6C8EBCABDCFB5CDB3C9E8BCC6CAA6B0B8C0FDB5BCD1A75FD1F9D5C22E646F63> 因 为 路 过 你 的 路, 因 为 苦 过 你 的 苦, 所 以 快 乐 着 你 的 快 乐, 追 逐 着 你 的 追 逐 内 容 简 介 本 书 根 据 2005 年 下 半 年 实 施 的 全 国 计 算 机 技 术 与 软 件 专 业 技 术 资 格 ( 水 平 ) 考 试 嵌 入 式 系 统 设 计 师 级 考 试 大 纲 精 神, 在 深 入 研 究 历 年 计 算 机 技 术 与 软

More information

AT89C2051中文资料.doc

AT89C2051中文资料.doc 图形点阵液晶显示模块使用手册 TG12864C(L) 广州捷胜吉电子科技 地址 : 广州市天河区天河路 561# 新赛格电子城 B2226 电话 :(020)33550997 13829772038 网址 :WWW.GZJSJDZ.COM E-mail:CJKD@21CN.COM 目 录 ( 一 ) 概述 (1) ( 二 ) 外形尺寸图 (1) ( 三 ) 模块主要硬件构成说明 (2) ( 四 )

More information

untitled

untitled EDM12864-GR 1 24 1. ----------------------------------------------------3 2. ----------------------------------------------------3 3. ----------------------------------------------------3 4. -------------------------------------------------------6

More information

Ⅰ Ⅱ 2 Ⅲ 2 Ⅳ 耀

Ⅰ Ⅱ 2 Ⅲ 2 Ⅳ 耀 面 向 2 世 纪 高 等 学 校 计 算 机 类 专 业 十 一 五 规 划 教 材 单 片 机 原 理 及 接 口 技 术 ( 第 二 版 ) 余 锡 存 曹 国 华 编 著 西 安 电 子 科 技 大 学 出 版 社 2 0 0 7 Ⅰ Ⅱ 2 Ⅲ 2 Ⅳ 耀 .,, 0,.., : ()0 :0 2 9; (2), 555.54 5 500 50 5 0.5, 555.5=50 2

More information

,768 32,767 32K JMP Jnnn (386+) LOOP CALL [Label:] JMP short/near/far address L10: jmp jmp L20: L10 L20

,768 32,767 32K JMP Jnnn (386+) LOOP CALL [Label:] JMP short/near/far address L10: jmp jmp L20: L10 L20 (Jump) (Loop) (Conditional jump) CMP CALL AND SAR/SHR TEST JMP NOT SAL/SHL Jnnn* OR RCR/ROR LOOP XOR RCL/ROL RETn * nnn, JNE JL -128 127-32,768 32,767 32K JMP Jnnn (386+) LOOP CALL [Label:] JMP short/near/far

More information

MSP430ϵÁе¥Æ¬»úµÄÖ¸Áîϵͳ.pps [¼æÈÝģʽ]

MSP430ϵÁе¥Æ¬»úµÄÖ¸Áîϵͳ.pps [¼æÈÝģʽ] 作者 : 利尔达 MSP430 系列单片机的指令系统 1 CPU 内核组成 : 16 位的 (ALU) 算术运算单元 16 个寄存器 (PC SP SR R4~R15) 指令控制单元 2 存储器组织结构 3 外围模块寄存器地址 它们被分配在相应的字模块或字节模块当中 分配在 00-FFH 中为字节, 分配在 100-1FFH 中为字 4 寻址模式 : 5 指令格式 : 1) 书写格式标号指令助记符源操作数,

More information

例 如, 一 个 含 有 2000 个 记 录 的 文 件, 每 个 磁 盘 块 可 容 纳 250 个 记 录, 则 该 文 件 包 含 8 个 磁 盘 块 然 后 对 该 文 件 作 二 路 归 并 的 外 排 序, 每 次 往 内 存 读 入 两 个 磁 盘 块, 排 序 后 再 写 回 磁

例 如, 一 个 含 有 2000 个 记 录 的 文 件, 每 个 磁 盘 块 可 容 纳 250 个 记 录, 则 该 文 件 包 含 8 个 磁 盘 块 然 后 对 该 文 件 作 二 路 归 并 的 外 排 序, 每 次 往 内 存 读 入 两 个 磁 盘 块, 排 序 后 再 写 回 磁 说 明 改 动 的 内 容 很 少, 且 都 是 不 怎 么 重 要 的, 因 此 无 需 过 多 纠 结, 大 家 看 完 后 一 目 了 然 第 6 章 排 序 1 增 加 了 :( 十 ) 外 部 排 序 第 一 部 分 : 数 据 结 构 2 后 面 的 修 改 :( 十 一 ) 各 种 内 部 排 序 算 法 的 比 较 ;( 十 二 ) 内 部 排 序 算 法 的 应 用 外 部 排 序

More information

四、通 讯 规 约

四、通 讯 规 约 HY-ML2000 RS232 RS422 RS-485 9 RS232 1----GND 3---RXD 4---TXD RS422 6--T+,7--T-,8--R-, 9--R+ 00 0FFH 256 0# 1# 2# 3# 4# 5# 6# 7# 8# 14# 18# HY-ML2000 ( ) 0# ( BJ DISA ) 1 EB 90 EB 90 02...( )... (L) (H)

More information

高二立體幾何

高二立體幾何 008 / 009 學 年 教 學 設 計 獎 勵 計 劃 高 二 立 體 幾 何 參 選 編 號 :C00 學 科 名 稱 : 適 用 程 度 : 高 二 簡 介 一 本 教 學 設 計 的 目 的 高 中 立 體 幾 何 的 學 習 是 學 生 較 難 理 解 而 又 非 常 重 要 的 一 個 部 分, 也 是 高 中 教 學 中 較 難 講 授 的 一 個 部 分. 像 國 內 的 聯 校

More information

Microsoft Word - ~ doc

Microsoft Word - ~ doc EEPROM 功能使用方法 1 适用产品 : 1.1 SM39R16A2/ SM39R12A2/ SM39R08A2 1.2 SM39R4051/ SM39R2051 1.3 SM39R04G1/ SM39R02G1 2 EEPROM 功能概述 : 2.1 使用 code flash 仿真为 Internal EEPROM, 在程序执行时, 可将 code flash 作为 data flash 储存数据使用

More information

Microsoft PowerPoint - 第一章(07版).PPT

Microsoft PowerPoint - 第一章(07版).PPT 单片机原理及综合设计 嵌入式微控制器的开发入门 微机及单片机原理原理实验室综合楼 419 室 大连理工大学电信学院陈育斌 1 ( 理论课 ) 上课时间表 (10~17 周 ) 周次 星期 一 二 三 四 五 六 日 1 至 6 时间地点 大五节综 309 (18:00) 大连理工大学电信学院陈育斌 2 课程总体安排 总学时 : 理论课 + 实验课 =36 学时 其中 : 理论课 :24: 学时 ;

More information

Microsoft Word - 第1章 MCS-51单片机基础.docx

Microsoft Word - 第1章 MCS-51单片机基础.docx 51 单片机应用开发实战手册 作者 : 华清远见 第 1 章 MCS-51 单片机基础 本章目标 单片机作为嵌入式微控制器在工业测控系统 智能仪器和家用电器中得到广泛 应用 虽然单片机的品种很多, 但 MCS-51 系列单片机仍不失为单片机中的主流机 型 本章主要介绍 MCS-51 单片机的基础知识和学习要点, 以目前应用最为广泛的 AT89SXX 系列单片机为例, 介绍单片机的历史发展 应用领域

More information

MSP430X1XX 系列微控制器具有以下特征 结构框图 超低功耗结构体系 A 额定工作电流在 1MHz V 工作电压 C11X P11X 和 E11X 为 V 从备用模式唤醒为 6 S 丰富的中断能力减少了查询的需要灵活强大的处理能力源操作数有七种寻址模

MSP430X1XX 系列微控制器具有以下特征 结构框图 超低功耗结构体系 A 额定工作电流在 1MHz V 工作电压 C11X P11X 和 E11X 为 V 从备用模式唤醒为 6 S 丰富的中断能力减少了查询的需要灵活强大的处理能力源操作数有七种寻址模 新一代超低功耗 16 位单片机 TI MSP430 系列 美国 TI 公司的 MSP430 系列单片机可以分为以下几个系列 X1XX X3XX X4XX 等等 而且 在不断发展 从存储器角度 又可分为 ROM C 型 OTP P 型 EPROM E 型 Flash Memory F 型 系列的全部成员均为软件兼容 可以方便地在系列各型号间移植 MSP430 系列单片机 的 MCU 设计成适合各种应用的

More information

SST SPAC SST SoftICE SST89C5x/SST89x554RC /564RD /SST89x516/5xRD / SoftICE SoftICE MCU SoftICE SS

SST SPAC SST SoftICE SST89C5x/SST89x554RC /564RD /SST89x516/5xRD / SoftICE SoftICE MCU SoftICE SS SST SoftICE SST89C5x/SST89x554RC /564RD /SST89x516/5xRD2 1...2 1.1...2 1.2...2 1.3 /...2 2 SoftICE...2 3 SoftICE MCU...2 4 SoftICE...3 4.1 SST BootLoader SOFTICE...3 4.2 SoftICE SST MCU...6 5 SoftICE...7

More information

Microsoft Word - FM12232C.doc

Microsoft Word - FM12232C.doc SPEC NO YM2232C REV NO. : YM2232C : 22x32 SED52 LED : Dexun Zou HCC : Jingxi Yang : 22.8 目 录 ( 一 ) 基本特性 () ( 二 ) 限定参数 () ( 三 ) 直流特性 (2) ( 四 ) 交流特性 (2) ( 五 ) 机械尺寸图 (3) ( 六 ) 原理图 (3) ( 七 ) DDRAM 地址表 (4)

More information

Microsoft Word - 第1章 MCS-51单片机概述.docx

Microsoft Word - 第1章 MCS-51单片机概述.docx 单片机 C 语言入门 ( 修订版 ) 作者 : 华清远见 第 1 章 MCS-51 单片机概述 本章目标 单片微型计算机简称单片机, 又称为微控制器 (MCU), 是微型计算机的一个重要分支 单片机是 20 世纪 70 年代中期发展起来的一种大规模集成电路芯片, 将 CPU RAM ROM I/O 接口和中断系统等集 成于同一硅片内 20 世纪 80 年代以来单片机发展迅速, 各类新产品不断涌现,

More information

Microsoft Word - 部分习题参考答案.doc

Microsoft Word - 部分习题参考答案.doc 部分习题参考答案 第 1 章 1.1 (1) U ab 5 (2) U ab 5 () I 2 () I 2 1.2 (a)-10w(b)-8w,0w(c)-50w,25w 1. () P 560 W, P 50 W, P 600 W, P 20 W, P 180 W 1. I 2 m U 60 1.5 P 50 W 1.6 U 26, U 7 ac bd 1.7 U ab 11, I, I 2,

More information

Microsoft PowerPoint - chap2.ppt

Microsoft PowerPoint - chap2.ppt 基本程式設計觀念 人 自然語言 ( 中文 英文...) 高階語言 (C C++ Java) 組合語言 (8051 或是 80x86) 機器語言 (8051 或是 80x86) 機器 林銘波編著 --- 全華科技圖書公司 2.1 計算機的階層式結構 應用程式 ( 或語言 ) 高階語言組合語言硬體 林銘波編著 --- 全華科技圖書公司 2.2 儲存程式計算機 資料輸入 中央處理器讀取 / 寫入控制 CPU

More information

2005.book

2005.book ...4... 4... 7...10... 10... 10... 10... 10... 11... 11 PCC... 11 TB170... 12 /... 12...13... 13 BP150 / BP151 / BP152 / BP155... 14...15... 15... 15... 15... 15... 15... 15... 16 PS465 / PS477... 17 PS692

More information

1 2 / 3 1 A (2-1) (2-2) A4 6 A4 7 A4 8 A4 9 A ( () 4 A4, A4 7 ) 1 (2-1) (2-2) ()

1 2 / 3 1 A (2-1) (2-2) A4 6 A4 7 A4 8 A4 9 A ( () 4 A4, A4 7 ) 1 (2-1) (2-2) () (39mm E-Mail ( )( ), : : 1 1 ( ) 2 2 ( ) 29mm) WSK ( 1 2 / 3 1 A4 2 1 3 (2-1) 2-1 4 (2-2) 2-2 5 A4 6 A4 7 A4 8 A4 9 A4 10 11 ( () 4 A4, 5 6 7 8 A4 7 ) 1 (2-1) (2-2) () 1 2 (2-1) 3 (2-2) 4 5 6 7 (8 ) 9

More information

00 sirius 3R SIRIUS 3R 3RV1 0A 1 3RT1 3RH1 3 3RU11/3RB SIRIUS SIRIUS TC= / 3RV1 A 1 IEC6097- IP0 ( IP00) 1/3 IEC6097- (VDE0660) DIN VDE 06 0 AC690V, I cu 00V 1) P A n I n I cu A kw A A ka S00 0.16 0.0

More information

4 / ( / / 5 / / ( / 6 ( / / 7 1 2 / 3 ( 4 ( 2003 8 ( 2

4 / ( / / 5 / / ( / 6 ( / / 7 1 2 / 3 ( 4 ( 2003 8 ( 2 : / ( 6 (2003 8 : ( 1 ( ( / / (,, ( ( - ( - (39mm 29mm 2 ( 1 2 3-6 3 6-24 6-48 12-24 8-12 WSK / WSK WSK 1 4 / ( / / 5 / / ( / 6 ( / / 7 1 2 / 3 ( 4 ( 2003 8 ( 2 9 5 ( 10 3 11 / (600 4 5 AA 710 AB 720 730

More information

??????????????????

?????????????????? 2011 3 1 a)8088/8086 b) 1 2 3 -(2) - 48 (48 6) 1 2 http://www.zlgmcu.com/home.asp http://hx51.com/index.asp http://www.daqchina.net/daqchina/chips DAQCHINA HTTP://WWW.QFMCU.COM/ HTTP://MYGO.7I24.COM/ HTTP://WWW.HSEDA.COM/

More information

Microsoft Word - LMB402CBC-AppNote-V0.1.doc

Microsoft Word - LMB402CBC-AppNote-V0.1.doc LMB402CBC 液晶显示模块应用参考 深圳市拓普微科技开发有限公司 版本描述日期编者 0.1 新版本 2006-02-09 杨军 http://www.topwaysz.com 1 / 1 目录 1 概述 3 2 硬件接口 3 3 软件特性 3 3.1 控制器接口信号说明 3 3.2 模块指令系统 4 4 显示数据存储器的地址 4 5 字符发生器 CGRAM 的地址 5 6 应用举例 5 6.1

More information

FJW531.S72

FJW531.S72 第 2 部 分 综 合 实 践 训 练 2.1 拆 装 家 用 缝 纫 机 一 实 践 训 练 目 的 1. 了 解 家 用 缝 纫 机 ( 以 下 简 称 缝 纫 机 ) 的 结 构 ; 2. 学 习 拆 装 缝 纫 机 ; 3. 掌 握 部 分 常 用 工 具 的 使 用 方 法, 提 高 实 践 动 手 能 力 ; 4. 了 解 物 理 原 理 在 缝 纫 机 中 的 应 用. 二 缝 纫 机

More information

D/A DAC ( 1us) (10~20 ) DAC0832 1

D/A DAC ( 1us) (10~20 ) DAC0832 1 D/A DAC0832 8 ( 1us) (10~20 ) DAC0832 1 1. 20 DI7~DI0 ILE 8 8 DAC 8 D/A LE LE & RFB VREF IOUT2 IOUT1 RFB CS WR1 XFER WR2 & & AGND VCC DGND 2 DI7~DI0 ILE & 8 LE 8 DAC LE 8 D/A RFB V REF IOUT2 IOUT1 R FB

More information

(Load Project) (Save Project) (OffLine Mode) (Help) Intel Hex Motor

(Load Project) (Save Project) (OffLine Mode) (Help) Intel Hex Motor 1 4.1.1.1 (Load) 14 1.1 1 4.1.1.2 (Save) 14 1.1.1 1 4.1.2 (Buffer) 16 1.1.2 1 4.1.3 (Device) 16 1.1.3 1 4.1.3.1 (Select Device) 16 2 4.1.3.2 (Device Info) 16 2.1 2 4.1.3.3 (Adapter) 17 2.1.1 CD-ROM 2 4.1.4

More information

MICROMASTER 410/420/430/440 DA kW 250kW MICROMASTER Eco & MIDIMASTER Eco MICROMASTER, MICROMASTER Vector DA64 MIDIMASTER Vector 90kW (Low

MICROMASTER 410/420/430/440 DA kW 250kW MICROMASTER Eco & MIDIMASTER Eco MICROMASTER, MICROMASTER Vector DA64 MIDIMASTER Vector 90kW (Low DA51.2 2002 micromaster MICROMASTER 410/420/430/440 0.12kW 250kW s MICROMASTER 410/420/430/440 DA51.2 2002 0.12kW 250kW MICROMASTER Eco & MIDIMASTER Eco MICROMASTER, MICROMASTER Vector DA64 MIDIMASTER

More information

内容简介 本书以 Proteus 为仿真软件, 以汇编语言和 C 语言为编程语言, 结合趣味应用实例, 系统介绍 MCS-51 单片机的组织结构 工作原理 指令系统 程序设计 中断 定时 / 计数器 串行通信 系统扩展 接口技术 应用系统设计等内容 每章的例题 习题都用 Proteus 仿真实现,

内容简介 本书以 Proteus 为仿真软件, 以汇编语言和 C 语言为编程语言, 结合趣味应用实例, 系统介绍 MCS-51 单片机的组织结构 工作原理 指令系统 程序设计 中断 定时 / 计数器 串行通信 系统扩展 接口技术 应用系统设计等内容 每章的例题 习题都用 Proteus 仿真实现, 普通高等教育电气信息类应用型规划教材 单片机原理与应用 基于实例驱动和 Proteus 仿真 ( 第二版 ) 李林功编著 北 京 内容简介 本书以 Proteus 为仿真软件, 以汇编语言和 C 语言为编程语言, 结合趣味应用实例, 系统介绍 MCS-51 单片机的组织结构 工作原理 指令系统 程序设计 中断 定时 / 计数器 串行通信 系统扩展 接口技术 应用系统设计等内容 每章的例题 习题都用

More information

一:概述

一:概述 EDM12864A 图形点阵式液晶显示器模块原理与应用手册 大连东福彩色液晶显示器有限公司 一 概述 EDM12864A 液晶显示器模块是全屏幕图形点阵式液晶显示器组件, 由控制器 驱动器和全点阵液晶显示器组成 可完成图形显示, 也可以显示汉字 (4 8 个 16 16 点阵汉字 ); 与 CPU 接口是 8 位数据线和几条地址线, 而不用另外加控制器 ( 如 HD61830 等 ), 另外 3 条电源线供芯片和

More information

Microsoft Word - ha0013s.doc

Microsoft Word - ha0013s.doc 文件编码 :HA0013s 简介 : 本文介绍利用 8 位微控制器控制 DV16100NRB 液晶显示驱动器的方法 该 LCM 由内置的 Hitachi HD44780 进行驱动及控制 本文应用中, 着重考虑如何使微控制器产生正确的信号以符合 LCM 所需的时序 若要获得详细的时序及指令信息, 请查阅 LCM 厂商的资料 LCM 能以 4 位或 8 位模式工作 在 4 位模式下, 传送一个字符或一条指令需两个传输周期完成

More information

Microsoft Word - FG12232A.doc

Microsoft Word - FG12232A.doc 图形点阵液晶显示模块使用手册 FG2232A 广州市方舟电子有限公司 公司网站 :www.arkteck.com 地址 : 广州市天河区东圃桃园路 33 号 5 楼电话 :2-82574878 82574677 8854485 传真 :82574878 82574677 分机 88 目 录 ( 一 ) 基本特性 () ( 二 ) 原理图 (2) ( 三 ) 限定参数 (2) ( 四 ) 直流特性 (2)

More information

E170C2.PDF

E170C2.PDF IQ E170C2 2002.3. Rotork Rotork * ( ) * * RotorkIQ - IQ * * PC IQ Insight / Rotork * - Rotork IQ www.rotork.com 5 10 5.1 11 1 2 5.2 11 2 3 5.3 11 3 IQ 3 5.4 11 3.1 3 5.5 IQM12 3.2 3 5.6 IQML12 3.3 4 5.7

More information

<4D6963726F736F667420576F7264202D20C7B6C8EBCABDCFB5CDB3C9E8BCC6CAA6BFBCCAD4B4F3B8D92E646F63>

<4D6963726F736F667420576F7264202D20C7B6C8EBCABDCFB5CDB3C9E8BCC6CAA6BFBCCAD4B4F3B8D92E646F63> 嵌 入 式 系 统 设 计 师 考 试 大 纲 一 考 试 说 明 1 考 试 要 求 : (1) 掌 握 科 学 基 础 知 识 ; (2) 掌 握 嵌 入 式 系 统 的 硬 件 软 件 知 识 ; (3) 掌 握 嵌 入 式 系 统 分 析 的 方 法 ; (4) 掌 握 嵌 入 式 系 统 设 计 与 开 发 的 方 法 及 步 骤 ; (5) 掌 握 嵌 入 式 系 统 实 施 的 方 法

More information

Ps22Pdf

Ps22Pdf ) ,,, :,,,,,,, ( CIP) /. :, 2001. 9 ISBN 7-5624-2368-7.......... TU311 CIP ( 2001) 061075 ( ) : : : : * : : 174 ( A ) : 400030 : ( 023) 65102378 65105781 : ( 023) 65103686 65105565 : http: / / www. cqup.

More information

Microsoft PowerPoint - chap12.ppt

Microsoft PowerPoint - chap12.ppt 步並列資料轉移 CLK 位址與命令 資料 匯流排週期 (a) 單一時脈週期 匯流排週期 CLK 位址與命令 資料 匯流排週期 匯流排週期 (b) 多時脈週期 林銘波編著 --- 全華科技圖書公司 2. 閃脈控制方式 --- 來源裝置啟動 來源裝置 閃脈控制線 標的裝置 (a) 方塊圖 成立 閃脈控制線 (b) 時序圖 標的裝置將資料閘入資料暫存器中 林銘波編著 --- 全華科技圖書公司 2.2 閃脈控制方式

More information

展 望 与 述 评 2 广 电 设 备 与 技 术 2013.2

展 望 与 述 评 2 广 电 设 备 与 技 术 2013.2 展 望 与 述 评 2013.2 广 电 设 备 与 技 术 1 展 望 与 述 评 2 广 电 设 备 与 技 术 2013.2 展 望 与 述 评 2013.2 广 电 设 备 与 技 术 3 展 望 与 述 评 4 广 电 设 备 与 技 术 2013.2 展 望 与 述 评 2013.2 广 电 设 备 与 技 术 5 展 望 与 述 评 骆 萧 萧 卜 筱 皛 本 文 讨 论 了 在 非

More information

經 濟 統 計 分 析 與 統 計 圖 表 多 媒 體 設 計 之 創 新 作 法 ( 附 件 ) 經 濟 部 統 計 處 中 華 民 國 103 年 8 月 29 日 內 容 大 綱 壹 效 益 性... 2 一 點 閱 率... 2 二 媒 體 報 導... 4 三 部 務 會 議 裁 示... 7 四 榮 獲 本 部 103 年 網 站 評 比 第 1 名... 9 貳 具 體 作 法...

More information

Microsoft Word - SoftICE用户指南.doc

Microsoft Word - SoftICE用户指南.doc SST89E/V5xRD2 SST89E/V554RC SST89E/V564RD SST89E516RD2 单片机 SoftICE 用户指南 1 介绍 SoftICE 的英文是 Software In Circuit Emulator, 翻译成中文是 在电路上的软件模拟, 它是 SST 公司为方便 SST 用户使用 SST89E/V5xRD2 SST89E516RD2 SST89V516RD2 SST89E/V554RC

More information

四位微控制器ML64168_ _.doc

四位微控制器ML64168_ _.doc SSSC /4168P 2005 8 4 4, (ADC), LCD Driver, (Buzzer), 1 3 CPU17 CPU 26 33 42 45 48 73 79 85 89 A/D 92 111 125 128 131 SSU4168P 133 143 A: / 153 B: 156 C: 158 D: 160 E: 161 F: 163 G: PAD 167 2 ,, 11 4 CMOS

More information

! *!"#$%&'()*+,-./#01 6, 8 6, 8 6, 8 8!"# ( / )!"# ( / )!"# ( / )! ( ) 3SB3!" Ø22mm!"# ( / ) 6, 8 6, 8 6, 8 8!"# ( / )!"# ( / )!"# ( ) 7, 10 7, 9 7, 8

! *!#$%&'()*+,-./#01 6, 8 6, 8 6, 8 8!# ( / )!# ( / )!# ( / )! ( ) 3SB3! Ø22mm!# ( / ) 6, 8 6, 8 6, 8 8!# ( / )!# ( / )!# ( ) 7, 10 7, 9 7, 8 SIRIUS 3SB3 sirius s ! *!"#$%&'()*+,-./#01 6, 8 6, 8 6, 8 8!"# ( / )!"# ( / )!"# ( / )! ( ) 3SB3!" Ø22mm!"# ( / ) 6, 8 6, 8 6, 8 8!"# ( / )!"# ( / )!"# ( ) 7, 10 7, 9 7, 8! (2 /3 ) ( / ) RONIS! ( SB) CES

More information

System Design and Setup of a Robot to Pass over Steps Abstract In the research, one special type of robots that can pass over steps is designed and se

System Design and Setup of a Robot to Pass over Steps Abstract In the research, one special type of robots that can pass over steps is designed and se 8051 8051 System Design and Setup of a Robot to Pass over Steps Abstract In the research, one special type of robots that can pass over steps is designed and setup. This type of robot uses two kinds of

More information