STC89C52高级定时器简介

Posted 无语子啊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STC89C52高级定时器简介相关的知识,希望对你有一定的参考价值。

STC89C52高级定时器简介

一、序言

这里我就不对定时器做基本介绍了,这次主要讲一讲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还有一个输入捕获模式,博主还在测试,先把这些发上,因为之后可能要去调车了😂。

以上是关于STC89C52高级定时器简介的主要内容,如果未能解决你的问题,请参考以下文章

STC89C52定时器的简介

8051单片机实战分析(以STC89C52RC为例) | 11 - 定时器中断的使用

51单片机定时器设置入门 (STC89C52RC)

STC89C52定时器/中断快速上手示例讲解

STC89C52 单片机I/O口能直接驱动MOS管吗?

STC89c52实现万年历