串口通信的定时器实现方法
之前使用了IO控制+软件延时的方法,模拟了串口的工作,更为重要的是了解了串口的工作原理.现在将使用定时器+中断来实现延时从而实现对延时更加精确的把控.
在这里首先提一下我们选择的定时器工作模式为 8位自动重装载 .因为避免了每次对定时器初始值的装载,所以时间也会相对准确些.
然后将提一下定时器初始值的计算方法.(这里以波特率BaudRate = 4800 为例进行计算);
当波特率为4800时,单片机的接受速率为 1/4800 s/bit, 所以定时器每隔 1/4800 s就要进入一次中断并且发送一位数据.定时器的初始值计算方法为 (256 - 初始值)* 12/11.0592M(晶振频率) = 1/4800 ;所以可以求出初始值N;
下面给出我自己试验是的代码.是在晶振12.0M下波特率为4800下实现的;
/*
串口通信的定时器实现方式
通过定时器1,波特率4800
*/
#include <reg52.h>
#include <intrins.h>
sbit UartTransfer = P3^1; //单片机接受
unsigned char myData,flag;
void Delay500ms();
void main()
{
ET1 = 1; //打开定时器中断
EA = 1; //打开总中断
TMOD &= 0x0f;
TMOD |= 0x20;
TH1 = TL1 = 0x30; //定时器的配置
flag = 0; //标志位置零
UartTransfer = 1;
_nop_();
_nop_();
while(1)