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

2009-3-26 17:45 4716 7 7 分类: MCU/ 嵌入式

/********************************************************************************************
* 文 件 名:test.c
* 功    能:使用T2定时器实现1秒精确定时并闪灯
* 1.CPU型号:AT89S52
* 2.晶振:11.0592MHz
*********************************************************************************************/
//【例2】这是一个跑马灯程序,使用了定时器2。


#include <reg52.h>               //包括一个52标准内核的头文件


sbit P10 = P1^0;                //头文件中没有定义的IO就要自己来定义了


sbit P11 = P1^1;


sbit P12 = P1^2; 


sbit P13 = P1^3;


bit ldelay="0";                   //长定时溢出标记,预置是0


//定时器中断方式的跑马灯


void main(void)                 //主程序


{


    unsigned char code ledp[4]={0xfe,0xfd,0xfb,0xf7};//预定的写入P1的值


    unsigned char ledi;         //用来指示显示顺序


    RCAP2H =0x10;                //赋T2的预置值0x1000,溢出30次就是1秒钟


    RCAP2L =0x00;   


    TR2=1;                       //启动定时器


    ET2=1;                       //打开定时器2中断


    EA="0";                     //打开总中断


       


    while(1)                     //主程序循环


    {       


        if(ldelay)               //发现有时间溢出标记,进入处理


        {


            ldelay="0";                 //清除标记


            P1=ledp[ledi];        //读出一个值送到P1口


            ledi++;               //指向下一个


            if(ledi==4)ledi=0;    //到了最后一个灯就换到第一个


        }


    }


}


//定时器2中断


void timer2() interrupt 5 


{


    static unsigned char t;


    TF2=0;


    t++;


    if(t==15)            //T2的预置值0x1000,溢出30次就是1秒钟,晶振11.0592MHZ


    {


        t="0";                 


    ldelay="0";                 //每次长时间的溢出,就置一个标记,以便主程序处理


    }


}


 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
7
关闭 站长推荐上一条 /3 下一条