原创 S52单片机T2定时器的应用

2011-4-13 19:09 5210 5 5 分类: MCU/ 嵌入式

     在S51单片机中,有两个16位的定时器,一般的程序用用也差不多,但是有些情况下两个定时器还真不够用,比如在直流电机调速的项目中,一个用于测电机旋转时切割光耦通路产生的脉冲;另一个用于定时精确1S,作为电机转速测量的门控信号。控制电机转速的PWM波也需要定时器产生,假设与以上其中的一个定时器共用,在中断程序中构成软件计数器,这样做可能会造成系统的精度下降,产生误差。

       S51单片机的硬件资源确实太少了,然后用了S52,利用T2定时器产生PWM才把问题解决了。

       这里上一个S52的T2定时器做普通定时器的用法。笔记~

// 文件名: T2.c
// 功能:  T2定时器作普通定时器用
// 说明:  (1)单片机AT89S52,晶振12MHZ;
//          (2)T2的中断标志位不能硬件自动清零,必须在中断服务程序软件清零, 
//         为了定时的准确,在进入中断服务程序后第一步就使TF2=0 ;
//         (3)T2工作在16位自动重装模式下,不需要在中断服务程序重新赋值,硬件会自动使TH2=RCAP2H,TL2=RCAP2L;
// 日期: 2011年4月6日


#include "reg52.h"
#define uint unsigned int
#define uchar unsigned char
sbit LED= P1 ^ 0;

void timer2_int(void) interrupt 5
{
  static uchar timer_counter;
  TF2=0;       //注意 T2的溢出标志位必须软件清零,硬件不能清零,这与T0和T1不同!!
  timer_counter++;
  if(timer_counter==20) //定时50ms×20=1000ms即1秒钟,
 {
  LED=!LED;  //秒闪烁灯
       timer_counter=0;
 }
}
//初始化主函数
void main(void)
{
 RCAP2H=0X3C; //定时50ms常数 
 RCAP2L=0xB0; 
 TH2=RCAP2H;  //定时器2赋初值
 TL2=RCAP2L;   
    ET2=1;   //开外定时器2中断
    EA=1;   //开总中断,
    TR2=1;   //启动定时器2
 while(1);
}

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
5
关闭 站长推荐上一条 /3 下一条