51高级定时器简介
Posted 无语子啊
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51高级定时器简介相关的知识,希望对你有一定的参考价值。
51高级定时器简介
一、序言
这里我就不对定时器做基本介绍了,这次主要讲一讲51的高级定时器——定时器2
二、定时器2的工作模式
1、16位自动重装载模式
看图说话:
由这张图可以写出代码
void Timer2_Initial(void)
C_T2 = 0;//设置为定时器模式
TR2 = 1;//开启定时器2
TH2 = RCAP2H = (65535 - 18432) / 256;//设置20ms定时
TL2 = RCAP2L = (65535 - 18432) % 256;
ET2 = 1;//开启定时器2中断
EA = 1;//开启总中断
一定要注意定时器2的中断溢出标志位需要软件清0,中断优先级为5
void T2_ISR(void) interrupt 5
static unsigned int cnt = 0;
cnt++;
TF2 = 0;//软件清0
if (cnt == 50)//1s中断到达
cnt = 0;
LED= ~LED;
2、独立波特率发生器模式
看图说话:
该图显示,在使用定时器的波特率发生模式时,还可以同时打开定时器2的外部中断。
根据波特率配置公式:
从左往右看图配置代码为:
C_T2 = 0;//设置为定时器模式
TR2 = 1;//打开定时器2
RCAP2H = TH2 = (65536 - (11059200 / 32 / 9600)) / 256;//设置波特率为9600
RCAP2L = TL2 = (65536 - (11059200 / 32 / 9600)) % 256;
RCLK = 1;//定时器2的溢出脉冲作为RX的时钟
TCLK = 1;//定时器2的溢出脉冲作为TX的时钟
上面是串口通信的波特率发生器方面的配置,除此之外还需要配置串口的模式寄存器(这里不做介绍串口的相关知识)
SCON = 0x50;//8bit variable UART
这样就完成了该种模式的配置。
<>测试代码<>
void Serial_Initial(void)
SCON = 0x50;
C_T2 = 0;//设置为定时器模式
TR2 = 1;//打开定时器2
RCAP2H = TH2 = (65536 - (11059200 / 32 / 9600)) / 256;//设置波特率为9600
RCAP2L = TL2 = (65536 - (11059200 / 32 / 9600)) % 256;
RCLK = 1;//定时器2的溢出脉冲作为RX的时钟
TCLK = 1;//定时器2的溢出脉冲作为TX的时钟
ES = 1;//打开串口中断
EA = 1;//开启总中断
char putchar(char ch)//51串口重定义,需要添加"stdio.h"头文件
SBUF = ch;
delay(1);//稍作延时,防止数据发错
return ch;
void delay(int ms)//ms延时
int x,y;
for (x = ms; x > 0; x--)
for (y = 114; y > 0; y--);
void Serial_ISR(void) interrupt 4
unsigned char temp;
if (RI)
RI = 0;
temp = SBUF;
SBUF = temp;
if (TI)
TI = 0;
其实定时器2还有一个输入捕获模式,博主还在测试,先把这些发上,因为之后可能要去调车了😂。
以上是关于51高级定时器简介的主要内容,如果未能解决你的问题,请参考以下文章