单片机知识点_第1页
单片机知识点_第2页
单片机知识点_第3页
单片机知识点_第4页
单片机知识点_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机知识点 周冰 1 1 微处理器微处理器 是小型计算机或微型计算机的控制和处理部分 又称中央处理单元 CPU Central Processing Unit 微型计算机微型计算机 Microcomputer 简称微机 是具有完整运算及控制功能的计算机 包括 微处理器 CPU 存储器 接口适配器 输入输出接口电路 输入 输出 I O 设备 单片机单片机 SCM Single Chip Microcomputer 是将微处理器 一定容量 RAM 和 ROM 以及 I O 口 定时器等电路集成在一块芯片上 构成单片微型计算机 也称为微控制器 MCU MicroController Unit 微处理器 RAM ROM I O 口 定时器 预备知识预备知识 数字电路中只有两种电平 高和低 本课程中 定义单片机为 TTL 电平 高 5V 低 0V RS232 电平 计算机的串口高 12V 低 12V 所以计算机与单片机之间通讯时需要加电平转换芯片 max232 实验板上左下角 MCS 51 单片机硬件结构及引脚单片机硬件结构及引脚 1 MCS 51 单片机的内部结构 MCS 51 单片机的组成 CPU 进行运算 控制 RAM 数据存储器 ROM 程序存储器 I O 口 串口 并口 内部总线和中断系统等 组成框图如右 总线 BUS 是计算机各部件之间传送信息的公共通道 微机中有内部总线和外部总线两类 内部总线是 CPU 内 部之间的连线 外部总线是指 CPU 与其它部件之间的连 线 外部总线有三种 数据总线 DB Data Bus 地 址总线 AB Address Bus 和控制总线 CBControl Bus CPU 由运算和控制逻辑组成 同时还包括中断系统和部分外部特殊功能寄存器 RAM 用以存放可以读写的数据 如运算的中间结果 最终结果以及欲显示的数据 ROM 用以存放程序 一些原始数据和表格 I O 口 四个 8 位并行 I O 口 既可用作输入 也可用作输出 T C 两个定时 记数器 既可以工作在定时模式 也可以工作在记数模式 单片机引脚的功能 单片机引脚的功能 8051 单片机有 40 个引脚 分为端口线 电源线和控制线三类 1 电源线 GND 接地引脚 VCC 正电源引脚 接 5V 电源 2 端口线 P0 P3 口 4 8 32 条 1 P0 口 P0 0 P0 7 8 位双向三态 I O 口 可作为外部扩展时的数据总线 低 8 位地址总线的分时复用口 又可作为通用 I O 口 每个引脚可 驱动 8 个 TTL 负载 对 EPROM 型芯片 如 8751 进行编程和 校验时 P0 口用于输入 输出数据 2 P1 口 P1 0 P1 7 8 位准双向 I O 口 内部具有上拉电阻 可作为通用 I O 口 每个引脚可驱动 4 个 TTL 负载 3 P2 口 P2 0 P2 7 8 位准双向 I O 口 内部具有上拉电阻 可作为外部扩展时 的高 8 位地址总线 又可作为通用 I O 口 每个引脚可驱动 4 个 TTL 负载 对 EPROM 型芯片 如 8751 进行编程和校验时 用 来接收高 8 位地址 4 P3 口 P3 0 P3 7 单片机知识点 周冰 2 2 8 位准双向 I O 口 内部具有上拉电阻 它是双功能复用口 作为通用 I O 口时 功能与 P1 口 相同 常用第二功能 每个引脚可驱动 4 个 TTL 负载 作为第二功能使用时 各位的作用如下页表所 示 P3 第二功能各引脚功能定义 P3 0 RXD 串行口输入 P3 1 TXD 串行口输出 P3 2 INT0 外部中断 0 输入 P3 3 INT1 外部中断 1 输入 P3 4 T0 定时器 0 外部输入 P3 5 T1 定时器 1 外部输入 P3 6 WR 外部写控制 P3 7 RD 外部读控制 2 时钟引脚 1 XTAL1 19 脚 如果采用外接晶体振荡器时 此 引脚应接地 2 XTAL2 18 脚 接外部晶体的另一端 3 控制线 提供控制信号 有的引脚还具有复用功能 1 RST VPD 9 脚 复位与备用电源 2 ALE PROG 30 脚 第一功能 ALE 为地址锁存允许 可驱动 8 个 LS 型 TTL 负载 PROG 为本引脚的第二功能 为编程脉冲输入端 3 PSEN 29 脚 读外部程序存储器的选通信号 可以驱动 8 个 LS 型 TTL 负载 4 EA VPP Enable Address Voltage Pulse of Programing 31 脚 EA 为内外程序存储器选择控制端 EA 1 访问片内程序存储器 但在 PC 程序计数器 值超过 0FFFH 对于 8051 8751 时 即超出片内程序存储器的 4K 字节地址范围时 将自动转向执行外部程序存储器内的程序 EA 0 单片机则只访问外部程序存储器 VPP 为本引脚的第二功能 对 89S52 加在 VPP 脚的编程电压为 12V 或 5V 单片机主要掌握以下几点单片机主要掌握以下几点 最小系统能够运行起来的必要条件 1 电源 2 晶振 3 复位电路 对单片机任意 IO 口的随意操作 1 输出控制电平高低 2 输入检测电平高低 定时器 重点掌握最常用的方式 2 中断 外部中断 定时器中断 串口中断 串口通信 单片机之间 单片机与计算机 基本数据类型 sfr 特殊功能寄存器声明 sfr16 sfr 的 16 位数据声明 sbit 特殊功能位声明 bit 位变量声明 例 sfr SCON 0X98 sfr16 T2 0 xCC sbit OV PSW 2 单片机知识点 周冰 3 3 常用有 reg51 h reg52 h 定义特殊功能寄存器和位寄存器 math h 定义常用数学运算 程序 一 点亮第一个发 光二极管 include void main P1 0 xfe while 1 程序 二 让第一个发光 二极管闪烁 include sbit led1 P1 0 void main unsigned int i while 1 i 50000 led1 0 while i i 50000 led1 1 while i 程序 三 第一个发光二极管以间 隔 2000ms 闪烁 include define uint unsigned int define uchar unsigned char sbit led1 P1 0 void delay uint z 延时 函数 uint x y for x z x 0 x for y 110 y 0 y void main while 1 led1 0 delay 2000 led1 1 delay 2000 程序 四 8 个发光管由上至下间隔 1s 流动 每个管亮 500ms 灭 500ms 亮时蜂鸣器响 灭时关掉蜂鸣器 一直重 复下去 include include define uint unsigned int define uchar unsigned char sbit beep P2 3 void delay uint z uint x y for x z x 0 x for y 110 y 0 y void main uchar a a 0 xfe while 1 P1 a beep 0 delay 500 P1 0 xff beep 1 delay 500 a crol a 1 程序 五 8 个发光管来回流动 每个管亮 100ms 流动时 让蜂鸣器发声 include include define uint unsigned int define uchar unsigned char sbit beep P2 3 void delay uint z uint x y for x z x 0 x for y 110 y 0 y void main uchar a i while 1 a 0 xfe for i 0 i 8 i P1 a beep 0 delay 50 beep 1 delay 50 a crol a 1 a 0 x7f for i 0 i 8 i P1 a beep 0 delay 50 beep 1 delay 50 a cror a 1 单片机知识点 周冰 4 4 运算器运算器 对操作数进行算术 逻辑运算和位操作 1 算术逻辑运算单元 ALU 2 累加器 A 3 寄存器 B 4 程序状态寄存器 PSW 控制器控制器 1 程序计数器 PC Program Counter 2 指令寄存器 IR 指令译码器及控制逻辑电路 存储器空间可划分为存储器空间可划分为 5 类类 1 程序存储器 2 内部数据存储器 3 特殊功能寄存器 SFR Special Function Register 4 位地址空间 5 数据寄存器 程序存储器程序存储器 ROM 存放应用程序和表格之类的固定常数 分为片内和片外两部分 AT89S528K 的可编程 Flash 存储器 地址 0000H 1FFFH 外部扩展到 64KB 由 EA 引脚上所接的电平确定 程序存储器中的 0000H 地址是系统程序的启动地址 单片机复位后 PC 的内容为 0000H 6 个单元具有特殊用途个单元具有特殊用途 表 2 1 6 种中断源的中断入口地址 中断标志位 外中断 0 INT0 0003H IE0 定时器 0 T0 中断 000BH TF0 外中断 1 INT1 0013H IE1 定时器 1 T1 中断 001BH TF1 串行口中断 0023H TI 发送 RI 接收 定时器 2 T2 中断 002BH TF2 T2 溢出 EXF2 T2EX 特殊功能寄存器 特殊功能寄存器 SFR CPU 对各种功能部件的控制采用特殊功能寄存器集中控制方式 共 32 个 1 程序计数器 PC Program Counter 存放下一条要执行的指令在程序存储器中的地址 基本工作方式有以下几种 1 程序计数器自动加 1 2 执行有条件或无条件转移指令时 程序计数器将被置入新的数值 从而使程序的流向发生变化 3 在执行调用子程序调用或中断调用 完成下列操作 PC 的现行值保护 将子程序的入口地址或中断向量的地址送入 PC 2 累加器 A 使用最频繁的寄存器 也可写为 Acc A 的作用 1 是 ALU 单元的输入之一 又是运算结果的存放单元 2 数据传送大多都通过累加器 A A 的进位标志 Cy 3 寄存器 B 为执行乘法和除法操作设置的 在不执行乘 除的情况下 可当作一个普通寄存器来使用 4 程序状态字寄存器 PSW 1 Cy PSW 7 进位标志位 2 Ac PSW 6 辅助进位标志位 3 F0 PSW 5 标志位 由用户使用的一个状态标志位 4 RS1 RS0 PSW 4 PSW 3 4 组工作寄存器区选择控制位 1 和位 0 RS1 RS0 所选的 4 组寄存器 0 0 0 区 内部 RAM 地址 00H 07H 0 1 1 区 内部 RAM 地址 08H 0FH 1 0 2 区 内部 RAM 地址 10H 17H 1 1 3 区 内部 RAM 地址 18H 1FH 5 OV PSW 2 溢出标志位 指示运算是否产生溢出 6 PSW 1 位 保留位 未用 单片机知识点 周冰 5 5 7 P PSW 0 奇偶标志位 P 1 A 中 1 的个数为奇数 P 0 A 中 1 的个数为偶数 5 I O 端口 P0 P3 P0 P3 分别为 I O 端口 P0 P3 的锁存器 可按字节寻址也可按位寻址 6 串行数据缓冲器 SBUF 存放欲发送或已接收的数据 一个字节地址 由两个独立的寄存器组成 一个是发送缓冲器 另 一个是接收缓冲器 7 定时器 计数器 3 个 16 位定时器 计数器 T0 T1 和 T2 各由两个独立的 8 位寄存器组成 TH0 TL0 TH1 TL1 TH2 TL2 只能字节寻址 并行并行 I O 端口端口 4 个双向的 8 位并行 I O 端口 Port 记作 P0 P3 属于特殊功能寄存器 还可位寻址 1 P0 端口 P0 口传送地址或数据时 CPU 发出控制信号为高电平 打开上面的与门 使多路转接开关 MUX 打向上边 使内部地址 数据线与下面的场效应管处于反相接通状态 这时的输出驱动电路由于上下两 个 FET 处于反相 形成推拉式电路结构 P0 口作通用的 I O 口使用时 CPU 发来的 控制 信号为低电平 上拉场效应管截止 多路转接 开关 MUX 打向下边 与 D 锁存器的 Q 端接通 P0 口作通用的 I O 口使用 1 作输出口使用 来自 CPU 的 写入 脉冲加在 D 锁存器的 CP 端 内部总线上的数据写入 D 锁存器 并向端口 引脚 P0 x 输出 注意 由于输出电路是漏极开路 因为这时上拉场效应管截止 必须外接上拉电阻才 能有高电平输出 2 作输入口使用 应区分 读引脚 和 读端口 或称 读锁存器 读引脚 信号把下方缓冲器打开 引脚上 的状态经缓冲器读入内部总线 读锁存器 信号打开上面的缓冲器把锁存器 Q 端的状态读入内部总 线 2 P1 端口 字节地址 90H 位地址 90H 97H P1 口只作为通用的 I O 口使用 在电路结构上与 P0 口有两点区别 1 因为 P1 口只传送数据 不再需要多路转接开关 MUX 2 由于 P1 口用来传送数据 因此输出电路中有上拉电阻 这样电路的输出不是三态的 所以 P1 口是准双向口 因此 1 P1 口作为输出口使用时 外电路无需再接上拉电 阻 2 P1 口作为输入口使用时 应先向其锁存器先写入 1 使输出驱动电路的 FET 截止 3 P2 端口 字节地址为 A0H 位地址 A0H A7H 4 P3 端口 P3 口的字节地址为 B0H 位地址为 B0H B7H 表 2 2 P3 口的第二功能定义口的第二功能定义 口引脚 第二功能 P3 0 RXD 串行输入口 P3 1 TXD 串行输出口 P3 2 INT0 外部中断 0 P3 3 INT1 外部中断 1 P3 4 T0 定时器 0 外部计数输入 P3 5 T1 定时器 1 外部计数输入 P3 6 WR 外部数据存储器写选通 P3 7 RD 外部数据存储器读选通 例例 3 2 1 编写程序使第一个数码管显示 8 part2 1 1c P59 include 52 系列单片机头文 件 sbit dula P2 6 申明 U1 锁存器的锁存 端 单片机知识点 周冰 6 6 sbit wela P2 7 申明 U2 锁存器的锁存 端 void main wela 1 打开 U2 锁存器 P0 0 xFE 送入位选信号 wela 0 关闭 U2 锁存器 dula 1 打开 U1 锁存器 P0 0 x7F 送入段选信号 dula 0 关闭 U2 锁存器 while 1 程序停止到这里 例 3 2 2 让实验板上 6 个数码管同时点亮 依 次显示 0 到 F 时间间隔为 0 5ms 循环下去 part2 1 2 c P61 include 52 系列单片机头文 件 define uchar unsigned char define uint unsigned int sbit dula P2 6 申明 U1 锁存器的锁存 端 sbit wela P2 7 申明 U2 锁存器的锁存 端 uchar num unchar code table 0 x3f 0 x06 0 x5b 0 x4f 0 x66 0 x6d 0 x7d 0 x07 0 x7f 0 x6f 0 x77 0 x7c 0 x39 0 x5e 0 x79 0 x71 void delayms uint void main wela 1 打开 U2 锁存端 P0 0 xco 送入位选信号 wela 0 关闭 U2 锁存端 while 1 for num 0 num0 i i xms 即延时约 xms 毫秒 for j 110 j 0 j 例 4 1 1 用数码管前两位显示一个十进制数 变化范围为 00 59 开始时显示 00 每按下 S2 键一次 数值加 1 每按下 S3 键一次 数值减 1 每按下 S4 键一次 数值归零 按下 S5 键一 次 利用定时器功能使数值开始自动每秒加 1 再次按下 S5 键 数值停止加 1 保持显示原数 part2 2 1 c P82 include 52 系列单片机头文件 define uchar unsigned char define uint unsigned int sbit key1 P3 4 sbit key2 P3 5 sbit key3 P3 6 sbit key4 P3 7 sbit dula P2 6 申明 U1 锁存器的锁存 端 sbit wela P2 7 申明 U2 锁存器的锁存 端 uchar code table 0 x3f 0 x06 0 x5b 0 x4f 0 x66 0 x6d 0 x7d 0 x07 0 x7f 0 x6f 0 x77 0 x7c 0 x39 0 x5e 0 x79 0 x71 void delayms uint uchar numt0 num void display uchar numdis 显示子函数 uchar shi ge 分离两个分别要显示的数 shi numdis 10 ge numdis 10 dula 1 P0 table shi 送十位段选数据 dula 0 P0 0 xff 送位选数据前关闭所有 显示 防止打开位选锁存时 wela 1 原来段选数据通过位选 锁存器造成混乱 P0 0 xfe 送位选数据 wela 0 delayms 5 延时 dula 1 P0 table ge 送个位段选数据 dula 0 P0 0 xff wela 1 单片机知识点 周冰 7 7 P0 0 xfd wela 0 delayms 5 void delayms uint xms uint i j for i xms i 0 i i xms 即延时约 xms 毫秒 for j 110 j 0 j void init 初始化函数 TMOD 0 x01 设置定时器 0 为工作方式 1 0000 0001 TH0 65536 45872 256 装初值 50ms 一 次中断 TL0 65536 45872 256 EA 1 开总中断 ET0 1 开定时器 0 中断 void keyscan if key1 0 delayms 10 if key1 0 num if num 60 当到 60 时重新归 0 num 0 while key1 等待按键释放 if key2 0 delayms 10 if key2 0 if num 0 当到 0 时重新归 60 num 60 num while key2 if key3 0 delayms 10 if key3 0 num 0 清 0 while key3 if key4 0 delayms 10 if key4 0 while key4 TR0 TR0 启动或停止定时器 0 void main init 初始化函数 while 1 keyscan display num void T0 time interrupt 1 TH0 65536 45872 256 重装初值 TL0 65536 45872 256 numt0 if numt0 20 如果到了 20 次 说 明 1 秒时间到 numt0 0 然后把 num 清 0 重 新再计 20 次 num if num 60 num 0 例 4 2 1 实验班上电时 数码管不显示 顺序 按下矩阵键盘后 数码管上依次显示 0 F 六个 数码管同时静态显示即可 part2 2 2 c P87 include 52 系列单片机头文件 define uchar unsigned char define uint unsigned int sbit dula P2 6 申明 U1 锁存器的锁存 端 sbit wela P2 7 申明 U2 锁存器的锁存 端 单片机知识点 周冰 8 8 uchar code table 0 x3f 0 x06 0 x5b 0 x4f 0 x66 0 x6d 0 x7d 0 x07 0 x7f 0 x6f 0 x77 0 x7c 0 x39 0 x5e 0 x79 0 x71 void delayms uint xms uint i j for i xms i 0 i i xms 即延时约 xms 毫秒 for j 110 j 0 j void display uchar num P0 table num 显示函数只送段选数据 dula 1 dula 0 void matrixkeyscan uchar temp key P3 0 xfe temp P3 temp temp if temp 0 xf0 delayms 10 temp P3 temp temp if temp 0 xf0 temp P3 switch temp case 0 xee key 0 break case 0 xde key 1 break case 0 xbe key 2 break case 0 x7e key 3 break while temp 0 xf0 temp P3 temp temp display key P3 0 xfd temp P3 temp temp if temp 0 xf0 delayms 10 temp P3 temp temp if temp 0 xf0 temp P3 switch temp case 0 xed key 4 break case 0 xdd key 5 break case 0 xbd key 6 break case 0 x7d key 7 break while temp 0 xf0 temp P3 temp temp display key P3 0 xfb temp P3 temp temp if temp 0 xf0 delayms 10 temp P3 temp temp if temp 0 xf0 单片机知识点 周冰 9 9 temp P3 switch temp case 0 xeb key 8 break case 0 xdb key 9 break case 0 xbb key 10 break case 0 x7b key 11 break while temp 0 xf0 temp P3 temp temp display key P3 0 xf7 temp P3 temp temp if temp 0 xf0 delayms 10 temp P3 temp temp if temp 0 xf0 temp P3 switch temp case 0 xe7 key 12 break case 0 xd7 key 13 break case 0 xb7 key 14 break case 0 x77 key 15 break while temp 0 xf0 temp P3 temp temp display key void main P0 0 关闭所有数码管段选 dula 1 dula 0 P0 0 xc0 位选中所有数码管 wela 1 wela 0 while 1 matrixkeyscan 不停调用键盘扫描程序 例 5 3 1 用单片机控制 ADC0804 进行数模转 换 当拧动实验板上 A D 旁边的电位时 在数码 管的前三位以十进制方式显示出 A D 转换后的数 字量 8 位 A D 转换后数值在 0 255 变化 part2 3 1 c P107 include 52 系列单片机头文件 include define uchar unsigned char define uint unsigned int sbit dula P2 6 申明 U1 锁存器的锁存 端 sbit wela P2 7 申明 U2 锁存器的锁存 端 sbit adwr P3 6 定义 AD 的 WR 端口 sbit adrd P3 7 定义 AD 的 RD 端口 uchar code table 0 x3f 0 x06 0 x5b 0 x4f 0 x66 0 x6d 0 x7d 0 x07 0 x7f 0 x6f 0 x77 0 x7c 0 x39 0 x5e 0 x79 0 x71 void delayms uint xms uint i j for i xms i 0 i i xms 即延时约 xms 毫秒 单片机知识点 周冰 10 10 for j 110 j 0 j void display uchar bai uchar shi uchar ge 显 示子函数 dula 1 P0 table bai 送段选数据 dula 0 P0 0 xff 送位选数据前关闭所有 显示 防止打开位选锁存时 wela 1 原来段选数据通过位选 锁存器造成混乱 P0 0 x7e 送位选数据 wela 0 delayms 5 延时 dula 1 P0 table shi dula 0 P0 0 xff wela 1 P0 0 x7d wela 0 delayms 5 dula 1 P0 table ge dula 0 P0 0 xff wela 1 P0 0 x7b wela 0 delayms 5 void main 主程序 uchar a A1 A2 A3 adval wela 1 P0 0 x7f 置 CSAD 为 0 选 通 ADCS 以后不必再管 ADCS wela 0 while 1 adwr 1 nop adwr 0 启动 AD 转换 nop adwr 1 for a 10 a 0 a TX 1C 实验板 AD 工作频率较低 所以启动转换后要多留点时间用 来转换 这里把显示部分放这里的原因也是 为了延长转换时间 display A1 A2 A3 P1 0 xff 读取 P1 口之前先给其写全 1 adrd 1 选通 ADCS nop adrd 0 AD 读使能 nop adval P1 AD 数据读取赋给 P1 口 adrd 1 A1 adval 100 分出百 十 和个 位 A2 adval 100 10 A3 adval 10 AT89S52 的定时器的定时器 计数器计数器 软件和硬件定 延时方式 硬件定 延时是通过 单片机内部硬件定时器 计数器 优点 不占用 CPU 时间 3 个可编程的定时器 计数器 T0 T1 T2 定时器定时器 计数器基本原理计数器基本原理 定时器 计数器核心 16 位的加 1 计数器 由 2 个 8 位计数器 TH TL 组成 两种工作模式 1 计数器工作模式 2 定时器工作模式 4 种工作方式 方式 0 方式 3 T0 和 T1 的控制与状态寄存器 TMOD 选择定时器 计数器 T0 T1 的工作 模式和工作方式 TCON 控制 T0 T1 的启动和停止计数 同 时包含了 T0 T1 的状态 单片机复位时 两个寄存器的所有位都被清 0 单片机知识点 周冰 11 11 13 osc tf X2 12 13 osc 2X 12 t f 1 工作模式寄存器 TMOD 8 位分为两组 高 4 位控制 T1 低 4 位控制 T0 1 GATE 门控位 0 以 TRX X 0 1 来启动定时器 计数器运行 1 用外中断引脚 INT0 或 INT1 上的高电平和 TRX 来启动定时器 计数器运行 2 M1 M0 工作方式选择位 M1 M0 工 作 方 式 0 0 方式 0 13 位定时器 计数器 0 1 方式 1 16 位定时器 计数器 1 0 方式 2 8 位常数自动重新装载 1 1 方式 3 仅适用于 T0 T0 分成两个 8 位计数器 T1 停止计数 3 C T 计数器模式和定时器模式选择位 0 定时器模式 1 计数器模式 2 定时器 计数器控制寄存器 TCON 低 4 位与外部中断有关 外部中断 0 外部中断 1 高 4 位的功能如下 1 TF1 TF0 计数溢出标志位 2 TR1 TR0 计数运行控制位 1 启动定时器 计数器工作 0 停止定时器 计数器工作 T0 和和 T1 的的 4 种工作方式种工作方式 1 方式 0 M1 M0 为 00 定时器 计数器的框图 为 13 位的计数器 C T 位决定工作模式 0 开关打在上面 为定时器工作模式 1 开关打在下面 为计数器工作模式 计数脉冲 为 P3 4 P3 5 引脚上的外部输入脉冲 当引脚上 发生负跳变时 计数器加 1 GATE 位 决定定时器 计数器的运行取决于 TRX 一个条件还是 TRX 和 INTX 引脚两个条件 1 0 A 点是否计数 仅取决于 TRX 的状态 2 1 B 点电位由 INTX 的输入电平和 TRX 的 状态这两个条件来确定 是否计数是由 TRX 和 INTX 二个条件来控制的 定时时间 计数初值 2 方式 1 M1 M0 01 16 位的计数器 定时时间 计数初值 3 方式 2 计数满后自动装入计数初值 M1 M0 10 等效框图如下 TLX 作为常数缓冲器 当 TLX 计数溢出时 在 置 1 溢出标志 TFX 的同时 还自动的将 THX 中 的初值送至 TLX 使 TLX 从初值开始重新计数 定时器 计数器的方式 2 工作过程下图所示 X 0 1 省去用户软件中重装初值的 程序 精确的定时 4 方式 3 增加一个附加的 8 位定时器 16 osc 2X 12 t f 16 osc tf X2 12 单片机知识点 周冰 12 12 计数器 从而具有 3 个定时 器 计数器 只适用于定时器 计数器 T0 T1 不能工作在 方式 3 T1 方式 3 时相当于 TR1 0 停止计数 1 工作方式 3 下的 T0 T0 分为两个独立的 8 位计数器 TL0 和 TH0 TL0 使用 T0 的状态控制位 C T GATE TR0 而 TH0 被固定为一个 8 位 定时器 不能作外部计数模式 并使用定时器 T1 的状态控制位 TR1 和 TF1 同时占用定时器 T1 的中断请求源 TF1 各引脚与 T0 的逻辑关系如图所示 2 T0 工作在方式 3 下 T1 的各种工作方式 T0 处于方式 3 时 T1 可定为方式 0 方式 1 和方式 2 用来作为串行口的波特率发生器 或 不需要中断的场合 1 T1 工作在方式 0 2 T1 工作在方式 1 3 T1 工作在方式 2 AT89S52 的中断系统的中断系统 实时测控 单片机能及时地响应和处理单片 机外部事件或内部事件所提出的中断请求 中断的概念中断的概念 CPU 正在执行程序时 单片机外部或内部发 生的某一事件 请求 CPU 迅速去处理 CPU 暂时中止当前的工作 转到中断服务处 理程序处理所发生的事件 处理完该事件后 再回到原来被中止的地方 继续原来的工作 这称为中断 CPU 处理事件 的过程 称为 CPU 的中断响应过程 对事件的整个处理过程 称为中断处理 或 中断服务 能够实现中断处理功能的部件称为中断系统 产生中断的请求源称为中断请求源 中断源向 CPU 提出的处理请求 称为中断请 求 或中断申请 中断方式优点 大大地提高了 CPU 的工作效 率 AT89S52 中断系统的结构中断系统的结构 有 8 个中断请求源 两个中断优先级 可两 级嵌套 中断系统结构示意图如下图所示 单片机知识点 周冰 13 13 中断请求源 八个中断请求源 P50 表 2 21 1 INT0 外部中断请求 0 由引脚 INT0 输 入 中断请求标志为 IE0 2 INT1 外部中断请求 1 由引脚 INT1 输 入 中断请求标志为 IE1 3 定时器 计数器 T0 溢出中断请求 中断请求 标志为 TF0 4 定时器 计数器 T1 溢出中断请求 中断请求 标志为 TF1 5 串行口中断请求 中断请求标志为 TI 或 RI 6 定时器 计数器 T2 溢出中断请求 中断请求 标志 TF2 定时器 计数器 T2 捕获中断请求 中 断请求标志 EXF2 TCON 为定时器 计数器的控制寄存器 字节地址 为 88H 包含 1 T0 和 T1 的溢出中断请求标志位 TF1 和 TF0 2 外部中断请求标志位 IE1 与 IE0 格式如下 所示 各标志位的功能 1 IT0 选择外部中断请求 0 为跳沿触发方式 还是电平触发方式 IT0 0 为电平触发方式 IT0 1 为跳沿触发方式 可由软件置 1 或清 0 2 IE0 外部中断请求 0 的中断请求标志位 IE0 0 无中断请求 IE0 1 外部中断 0 有中断请求 当 CPU 响应 该中断 转向中断服务程序时 由硬件清 0 IE0 3 IT1 外部中断请求 1 为跳沿触发方式还是 电平触发方式 意义与 IT0 类似 4 IE1 外部中断请求 1 的中断请求标志位 意义与 IE0 类似 5 TF0 T0 溢出中断请求标志位 T0 计数后 当最高位产生溢出时 由硬件置 1 TF0 向 CPU 申请中断 CPU 响应 TF0 中断时 清 0 TF0 TF0 也可由软件清 0 6 TF1 T1 的溢出中断请求标志位 功能和 TF0 类似 TR1 TR0 2 个位与中断无关 当MCS 51复位后 TCON被清0 则CPU 关中断 所有中断请求被禁止 外部中断的触发方式选择 两种触发方式 电平触发方式和跳沿触发方式 1 电平触发方式 CPU 在每个机器周期采样到的外部中断输入线的 电平 在中断服务程序返回之前 外部中断请求 输入必须无效 即变为高电平 否则 CPU 返回 主程序后会再次响应中断 适于外中断以低电平输入且中断服务程序能清除 外部中断请求 即外部中断输入电平又变为高电 平 的情况 2 跳沿触发方式 连续两次采样 一个机器周期采样到外部中断输 入为高 下一个机器周期采样为低 则置 1 中断 请求标志 直到 CPU 响应此中断时 该标志才清 0 这样不会丢失中断 但输入的负脉冲宽度至少 保持 1 个机器周期 SCON 为串行口控制寄存器 字节地址为 98H 串行口的发送中断和接收中断的中断请求标志 TI 和 RI 格式如下 各标志位的功能 1 TI 发送中断请求标志位 串口每发送完 一帧串行数据后 硬件自动置 1 TI 必须在中断 服务程序中用软件对 TI 标志清 0 2 RI 接收中断请求标志位 串口接收完一个 数据帧 硬件自动置 1 RI 标志 必须在中断服 务程序中用软件对 RI 标志清 0 中断控制中断控制 1 中断允许寄存器 IE CPU 对中断源的开放或屏蔽 由片内的中断允 许寄存器 IE 控制 字节地址为 A8H 可位寻址 格式如下 IE 对中断的开放和关闭为两级控制 总的开关中断控制位 EA IE 7 位 EA 0 所有中断请求被屏蔽 EA 1 CPU 开放中断 但五个中断源的中断 请求是否允许 还要由 IE 中对应的 5 个中断请求 单片机知识点 周冰 14 14 允许控制位的状态来决定 IE 中各位的功能如下 1 EA 中断允许总控制位 0 CPU 屏蔽所有的中断请求 CPU 关中断 1 CPU 开放所有中断 CPU 开中断 2 ES 串行口中断允许位 0 禁止串行口中断 1 允许串行口中断 3 ET1 定时器 计数器 T1 的溢出中断允许 位 0 禁止 T1 溢出中断 1 允许 T1 溢出中断 4 EX1 外部中断 1 中断允许位 0 禁止外部中断 1 中断 1 允许外部中断 1 中断 5 ET0 定时器 计数器 T0 的溢出中断允许位 0 禁止 T0 溢出中断 1 允许 T0 溢出中断 6 EX0 外部中断 0 中断允许位 0 禁止外部中断 0 中断 1 允许外部中断 0 中断 2 中断优先级寄存器 IP 两个中断优先级 可实现两级中断嵌套 如下图 示 一个正在执行的低优先级中断程序能被高优先级 的中断源所中断 但不能被另一个低优先级的中 断源所中断 若 CPU 正在执行高优先级的中断 则不能被任何中断源所中断 可归纳为下面两条基本规则 1 低优先级可被高优先级中断 反之则不能 2 同级中断不会被它的同级中断源所中断 某一中断源被设置为高优先级中断 则不能被任 何其它的中断源的中断请求所中断 中断优先级寄存器 IP 其字节地址为 B8H IP 各个位的含义 1 PS 串行口中断优先级控制位 1 高优先级中断 0 低优先级中断 2 PT1 定时器 T1 中断优先级控制位 1 高优先级中断 0 低优先级中断 3 PX1 外部中断 1 中断优先级控制位 1 高优先级中断 0 低优先级中断 4 PT0 定时器 T0 中断优先级控制位 1 高优先级中断 0 低优先级中断 5 PX0 外部中断 0 中断优先级控制位 1 高优先级中断 0 低优先级中断 在同时收到几个同一优先级的中断请求时 中断源 中断级别 外部中断 0最高 T0 溢出中断 外部中断 1 T1 溢出中断 串行口中断最低 响应中断请求的条件响应中断请求的条件 一个中断请求被响应 需满足以下必要条件 1 IE 寄存器中的中断总允许位 EA 1 2 该中断源发出中断请求 即该中断源对应的 中 断请求标志为 1 3 该中断源的中断允许位 1 即该中断没有 被屏蔽 4 无同级或更高级中断正在被服务 中断响应是有条件的 遇到下列三种情况之一时 中断响应被封锁 1 CPU 正在处理同级的或更高优先级的中断 2 所查询的机器周期不是所当前正在执行指 令的最后一个机器周期 只有在当前指令执行完 毕后 才能进行中断响应 3 正在执行的指令是 RETI 或是访问 IE 或 IP 的指令 需要再去执行完一条指令 才能响应新 的中断请求 如果存在上述三种情况之一 CPU 将丢弃中 断查询结果 不能对中断进行响应 外部中断的响应时间外部中断的响应时间 外部中断的最短的响应时间为 3 个机器周期 单片机知识点 周冰 15 15 1 中断请求标志位查询占 1 个机器周期 2 子程序调用指令 LCALL 转到相应的中断服 务程序入口 需 2 个机器周期 外部中断响应的最长时间为 8 个机器周期 发生在 CPU 进行中断标志查询时 刚好是开 始执行 RETI 或是访问 IE 或 IP 的指令 则需把 当前指令执行完再继续执行一条指令后 才能响 应中断 最长需 2 个机器周期 机器周期和指令周期 1 振荡周期 也称时钟周期 是指为单片机提 供时钟脉冲信号的振荡源的周期 TX 实验板上 为 11 0592MHZ 2 状态周期 每个状态周期为时钟周期的 2 倍 是振荡周期经二分频后得到的 3 机器周期 一个机器周期包含 6 个状态周 期 S1 S6 也就是 12 个时钟周期 在一个机器 周期内 CPU 可以完成一个独立的操作 4 指令周期 它是指 CPU 完成一条操作所需 的全部时间 每条指令执行时间都是有一个或几 个机器周期组成 MCS 51 系统中 有单周期指 令 双周期指令和四周期指令 接着再执行一条指令 按最长指令 乘法指令 MUL 和除法指令 DIV 来算 也只有 4 个机器周 期 加上硬件子程序调用指令 LCALL 的执行 需要 2 个机器周期 所以 外部中断响应最长时 间为 8 个机器周期 如果已在处理同级或更高级中断 响应时间无法 计算 在一个单一中断的系统里 单片机对外部中断请 求的响应的时间总是在 3 8 个机器周期之间 写程序写程序 首先来了解程序的格式 void 函数名 interrupt m using n 关键字 interrupt m using n 表示这是一个中 断函数 m 为中断源的编号 有五个中断源 取值为 0 1 2 3 4 中断编号会告诉编译器中断程序的入口 地址 执行该程序时 这个地址会传个程序计数 器 PC 于是 CPU 开始从这里一条一条的执行程 序指令 n 为单片机工作寄存器组 又称通用寄存器 组 编号 共四组 取值为 0 1 2 3 中断号 中断源 0 外部中断 0 1 定时器 0 2 外部中断 1 3 定时器 1 中断 4 串行口中断 这 5 个中断源的中断入口地址为 在上一 篇文章中讲到的 ROM 前 43 个存储单元就是他们 这 40 个地址用来存放中断处理程序的地址单元 每一个类中断的存储单元只有 8B 显然不是中断 处理的程序 而是存放着中断处理程序的真正地 址 INT0 0003H 0 T0 000BH 1 INT1 0013H 2 T1 001BH 3 串口 0023H 4 中断向量 中断入口地址 中断号 x8 3 前面 m 意思很清楚 不同的 m 值表示这个函 数是针对不同的中断源 比如 m 为 1 是表示它是 定时器 0 的中断函数 如 void time0 interrupt 1 那么后面的 using n 又是什么意思呢 在正 在执行一个特定任务时 有更紧急的事情需要 CPU 来处理 涉及到中断优先权 高优先权中断 低优先权正在处理的程序 所以最好给每个优先 程序分配不同的寄存器组 CPU 正在处理某个事件 突然另外一个事件 需要处理 于是进入中断后 而你不想将现在执 行的程序的各寄存器状态入栈 那么可以把这个 中断程序放入另一个寄存器组 如切换到 1 组 然后退出中断时 再切回到 0 组 原来的程序在 0 组 为了更好的了解这里意思 你可以看看工作寄存 器组的作用是什么 下面的注意事项转自网络上其他朋友的文章 整理下 重复的去掉了 写的非常好 1 中断函数不能进行参数传递 2 中断函数没有返回值 3 在任何情况下都不能直接调用中断函数 4 中断函数使用浮点运算要保存浮点寄存 器的状态 5 如果在中断函数中调用了其它函数 则 被调用函数所使用的寄存器必须与中断函数相同 被调函数最好设置为可重入的 6 C51 编译器对中断函数编译时会自动在 程序开始和结束处加上相应的内容 具体如下 在程序开始处对 ACC B DPH DPL 和 PSW 单片机知识点 周冰 16 16 入栈 结束时出栈 中断函数未加 using n 修饰符 的 开始时还要将 R0 R1 入栈 结束时出栈 如 中断函数加 using n 修饰符 则在开始将 PSW 入 栈后还要修改 PSW 中的工作寄存器组选择位 7 C51 编译器从绝对地址 8m 3 处产生一 个中断向量 其中 m 为中断号 也即 interrupt 后 面的数字 该向量包含一个到中断函数入口地址 的绝对跳转 8 中断函数最好写在文件的尾部 并且禁 止使用 extern 存储类型说明 防止其它程序调用 9 在设计中断时 要注意的是哪些功能应 该放在中断程序中 哪些功能应该放在主程序中 一般来说中断服务程序应该做最少量的工作 这 样做有很多好处 首先系统对中断的反应面更宽 了 有些系统如果丢失中断或对中断反应太慢将 产生十分严重的后果 这时有充足的时间等待中 断是十分重要的 其次它可使中断服务程序的结 构简单 不容易出错 中断程序中放入的东西越 多 他们之间越容易起冲突 简化中断服务程序 意味着软件中将有更多的代码段 但可把这些都 放入主程序中

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论