400 likes | 537 Views
第一章 单片机原理与应用. 吴振宇. 概述. 8051 有两个 16 位定时 / 计数器。 可设置为定时和计数两种模式,在每种模式下又可设置为 4 种工作方式。 工作方式不同则最大定时 / 计数值不同。 加 1 计数器,计数超过所在工作方式的最大值时发生溢出,回零,同时产生中断。. 控制寄存器 TCON. 8 位寄存器,可按位寻址。 TR0/1 :定时器 0/1 启停控制。 TF0/1 :定时器 0/1 溢出标志,硬件复位。 中断请求受 EA , ET0/1 控制。. 方式寄存器 TMOD. 8 位寄存器,不可按位寻址。 GATE :门控信号。
E N D
第一章 单片机原理与应用 吴振宇
概述 • 8051有两个16位定时/计数器。 • 可设置为定时和计数两种模式,在每种模式下又可设置为4种工作方式。 • 工作方式不同则最大定时/计数值不同。 • 加1计数器,计数超过所在工作方式的最大值时发生溢出,回零,同时产生中断。
控制寄存器TCON • 8位寄存器,可按位寻址。 • TR0/1:定时器0/1启停控制。 • TF0/1:定时器0/1溢出标志,硬件复位。 • 中断请求受EA,ET0/1控制。
方式寄存器TMOD • 8位寄存器,不可按位寻址。 • GATE:门控信号。 • C/T:设置工作模式为定时器或计数器。 • M1 M0:工作方式设置 00 01 10 11。
控制逻辑 • 定时器:对振荡器的12分频计数。 • 计数器:对T0引脚输入脉冲计数。 • 检测T0引脚下降沿需要2个机器周期。通常,T0上输入的脉冲频率小于100KHz。
控制逻辑 • GATE决定INT0引脚信号是否参与对T0的控制。 • 若GATE=0,T0只受TR0控制。 • 若GATE=1,T0受INT1信号和TR0共同控制。此时INT0不再作为中断请求输入线。 • 门控信号可用于脉冲宽度的测量。
测频与测周 • 测频与测周均为测量脉冲信号频率的方法。 • 测频:在单位定时时间内对被测信号脉冲进行计数。 • 测周:在被测信号一个周期时间内,对某一基准时间脉冲进行计数。 • 主要误差是由于计数器只能进行整数计数而引入的±1误差。 • 高频测频,低频测周。
原理示意 • 定时/计数器是16位SFR,分为TH0和TL0两个8位。 • 工作方式决定最大计数值。 • 初值是人为设置的, 期待计数值 = 最大值 –初值。 • 如果计数脉冲的间隔相等,则计数值就代表了时间的流逝。
工作方式 - 0 • 13位加1计数器,兼容48系列单片机。 • 由TH的8位和TL的低5位组成,TL高3位弃之不用。 • 最大计数值:2^13 = 8192 • 计满8192,再加1则溢出归零,产生中断请求。 • 如要再次使用,需要手动再次装入初值。
工作方式 - 1 • 16位计数器,TH和TL全部参与。 • 最大计数值:2^16 = 65536 • 其余特性与方式-0相同。
工作方式 - 2 • 8位自装入计数器。 • 最大计数值:2^8 = 256 • 自装入即计数器溢出归零后,自动装入前一次的初值。 • TH保存初值,仅用TL进行计数。 • 初始化时对TH和TL送相同值。
工作方式 - 3 • 前三种方式,T0和T1完全相同。而方式-3一般只应用于T0。 • T0:两个独立的8位计数器。 • TL0可设定为定时或计数模式,仍由TR0控制,并用TF0作溢出标志。 • TH0只能作定时器,借用TR1和TF1。 • 一般只有将T1用作串口波特率发生器时,才将T0设置为方式-3,以增加一个计数器。
初始化步骤 • 根据需要,选择适当的模式和方式,写入TMOD。 • 根据期待的计数值和所选工作方式,计算初值,写入TH和TL。 • 开放中断,设置优先级,写入IE和IP。 • 控制定时/计数器的起停,操作TCON。
初值的计算 • 计数模式:TC = M – C • TC:初值 M:所选方式最大计数值 C:期待计数值 • 定时模式:TC = M – T/Ts • T:期待定时时长 Ts:时钟周期的12倍 • 最大定时时间(以12MHz晶振为例) • 方式0:Tmax = 2^13 × 1us = 8.192ms • 方式1:Tmax = 65.536ms • 方式2和3:Tmax = 0.256ms
初值计算举例 • 假设采用12MHz晶振,要定时2ms,如何设置初值? • 方式2、3最大只能定时0.256ms,不用。 • 若采用方式0: • TC = 2^13 – 2ms/1us = 6192 = 1830H • 即TH = 0xC1 TL = 0x10 • 若采用方式1: • TC = 2^16 – 2ms/1us = 63536 = F830H • 即TH = 0xF8 TL = 0x30
初值计算举例 • 假设采用12MHz晶振,要定时1s,如何设置初值? • 4种方式最大只能定时65.536ms,都不满足要求。 • 类似情况可采用软件定时。 • 比如,用定时器定时10ms,再额外维持一个变量,在每次溢出中断中对其加1。变量值等于100时,即得到1s,清零该变量。
软件定时示例 volatile unsigned char cnt = 0; …… void ISR_Timer0() interrupt 1 { cnt ++; if( cnt == 100 ) { // your task here cnt = 0; } // reload TH0 & TL0 } • 关键字 volatile 指示编译器不要优化该变量。 • 如果某个变量可能会被“并行”地修改,应将其声明成 volatile 。 • 例如,某变量的值可能在中断服务程序中被修改,而在主程序中检测其值,则应用 volatile 声明之。
应用举例 • 采用12MHz晶振,在P1.0上输出周期为2.5秒,占空比为20%的脉冲信号。 • 选取合适的定时时间,太小导致频繁中断,影响效率。此例中选10ms。 • 高电平50次中断,低电平200次中断。
应用举例 • 2个方波信号,频率 f1 = 50KHz,f2 = 50Hz,分别用测频、测周法测量其频率,并比较误差。 • 测频法:T0定时模式,开放50ms闸门;T1计数模式,对引脚脉冲计数。 • 测周法:待测信号高电平作时间闸门,T1定时模式。
测量结果 • 高频测频,低频测周。
串行通信 • 并行通信:数据的各位同时发送或接收。 • 串行通信:数据一位一位按顺序发送或接收。 • 相同时钟频率下,并行比串行速度快。(为什么SATA硬盘代替了IDE硬盘?) • 并行使用的传输线多,远距离传输时耗费资源。
串行通信分类 • 按照串行数据的同步方式,可以分为同步通信和异步通信两类。 • 1100 1010 0100 1110 • 同步通信是利用软件识别同步字符来实现数据的发送和接收。 • 异步通信是利用字符的再同步技术的通信方式。
异步通信 • 数据以字节为单位组成字符帧传送。 • 依靠字符帧的格式来协调数据的发送和接收,即确定数据的开始与结束。 • 1100 1010 0100 1110 • 发送端和接收端使用各自的时钟来控制数据收发,彼此独立,互不同步。
字符帧格式 • 起始位:逻辑0低电平,向接收设备指示开始发送一帧数据。 • 数据位:根据需要可以取5~8位,低位在前高位在后。 • 奇偶校验位:可以选择奇校验或偶校验。 • 停止位:逻辑1高电平,向接收端指示一帧数据发送完毕。 • 空闲位:位于两相邻帧之间,根据需要,可有可无。
波特率 • 每秒钟传送二进制码的位数,单位是bps(bit per second)。 • 用于表征数据传输的速度。 • 收发双方必须保持波特率一致。 • 码元传输时间:传输一位需要的时间,为波特率的倒数。 • 8051系列一般最高使用9600bps。
同步通信 • 异步通信中每帧的起始、停止位降低了有效数据的传输速率。 • 同步通信一次只传送一帧数据,但一帧中可以包含若干字符。 • 要求收发两端始终保持严格同步,故传输数据的同时还要传输时钟。 • 同步通信速率比异步通信高,但更复杂。
同步通信帧格式 • 同步字符用于确认数据字符的开始。 • 数据字符个数不受限制,由所需传输的数据块长度决定。 • 校验字符用于接收端对接收到的数据字符的正确性检验。
串行通信的制式 • 按数据传输方向,可分为单工、半双工、双工三种制式。单工基本已经淘汰。 • 半双工(Half Duplex):允许信息在两个方向上传输,但收发双方间只有一个通信回路,分时发送与接收。
串行通信的制式 • 全双工(Full Duplex):存在两个通信回路,在任何时刻,通信中的每一方可以同时发送和接收。
电平转换 • RS-232C采用负逻辑,逻辑“0”为+5 ~ +15V,逻辑“1”为-15 ~ -5V。 • 接收端+3V ~ +15V识别为“0”,-3V ~ -15V识别为“1”,噪声容限2V。 • 若采用TTL电平,经过长距离传输,可能使发送端的“1”到达接收端是衰减成“0”。 • 该接口与TTL电平连接时需要进行电平转换。常用芯片为MAX232/3232。
8051的串行口 • 51内部有一个全双工的串行口,可实现串行异步通信。 • 若在输入/输出引脚加上电平转换器,可构成标准的RS-232接口。 • 有4种工作模式。 • 串口主要由SCON和PCON中的SMOD位控制。
串口控制寄存器SCON • SM0/1:串口方式控制。 • SM2:多机通信控制位。 • REN:允许接收位。 • TB8/RB8:发送/接收数据位8,用于模式2和3。 • TI:发送中断标志,发送完一帧后硬件置位,发送前软件复位。 • RI:接收中断标志,收取完一帧后硬件置位,读取后软件复位 • TI和RI合用一个中断向量,可以在响应中断后读取TI和RI值,以确定产生的是哪一个中断。
工作方式-0 • 同步移位寄存器 • 相当于一个并入串出的移位寄存器。 • 并行数据由内部总线进入SBUF,由TxD线串行送出。 • SM2,TB8,RB8应设置为0。 • 波特率固定为 fosc/12 • 一般用于外接移位寄存器扩展并口。
工作方式-1 • 10位异步通信。1位起始位 + 8位数据位 + 1位停止位。 • SM2应设置为0。 • 波特率可变,受定时器控制。 • 发送过程: • 确保TI = 0; • 将待发送数据装入SBUF(SBUF = 0xAA)。 • 硬件自动在数据两端添加起始和停止位。 • 在时钟作用下,在TxD线上依次出现10位。 • 完毕后维持TxD为高,并将TI置位。
工作方式-1 • 接收过程: • 确保RI = 0和REN = 1。 • 检测到起始位后,在时钟作用下依次检测RxD上出现的8位数据。 • 检测到停止位后,将8位数据放入SBUF,并将停止位放入RB8。 • 用户从SBUF中读出数据(rxbuf = SBUF),并清除RI中断。
工作方式-2,3 • 11位异步收发,方式2为固定波特率,方式3波特率可变。 • 发送时将第9位数据装入TB8,既可为奇偶校验位,也可为控制位。 • 接收时: • 若SM2 = 0,无论第9位是什么,都把数据放入SBUF,并产生中断。适用于奇偶校验。 • 若SM2 = 1,只有第9位是“1”时,才把数据放入SBUF,并产生中断。
波特率计算 • 方式0: 固定为 fosc / 12。 • 方式2: • 方式1,3:
波特率计算 • T1作波特率发生器时,通常工作在方式2,避免繁琐的重复装入初值,以及由此带来的定时误差。 • 因为定时器初值只能为整数,造成生成的波特率有一定误差。 • 如果要稳定通信,波特率误差要控制在2%以下。 • 可以通过调整单片机晶振频率的方法来消除误差。
波特率计算 • 时钟分别为12MHz和11.0592MHz情况下,使用T1方式2产生9600bps波特率。 • 误差 8.5% • 误差 0