配置定时器T0模式
TMOD不可位寻址 必须8位赋值,如果只将TMOD=0x01的话,定时器1如果同时使用,则会将前四位置0,会影响设备。所以 TMOD&=0XF0, TMOD|=0X01;
main.c
#include <REGX52.H>
#include "Timer0.h"
#include "Key.h"
#include <INTRINS.H>
#include "LCD1602.h"
unsigned char Ms,Min,Hou;
void Timer0_Routine() interrupt 1//中断函数标识,含优先级
{
static unsigned int Count=0;
TL0=0X18;//定时初值
TH0=0XFC;//定时初值
Count++;//对中断频率分频计次
if(Count>=1000)//1000ms 分频500次
{
Count=0;
Ms++;
if(Ms>=60)
{
Ms=0;
Min++;
if(Min>=60)
{
Min=0;
Hou++;
if(Hou>=24)
{
Hou=0;
}
}
}
}
}
void main()
{
LCD_Init();
Timer0Init();
LCD_ShowString(1,1,"Clock:");
LCD_ShowString(2,3,":");
LCD_ShowString(2,6,":");
while(1)
{
LCD_ShowNum(2,1,Hou,2);
LCD_ShowNum(2,4,Min,2);
LCD_ShowNum(2,7,Ms,2);
}
}
Timer.c
#include <REGX52.H>
void Timer0Init(void) //1000微秒@12.000MHz
{
TMOD &= 0xF0; //设置定时器模式 为了不影响前一定时器模式,先将前4位置1
TMOD|=0X01; //设置定时器模式 最后位置1
TL0 = 0x18; //设置定时初值
TH0 = 0xFC; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0=1; //打开中断允许寄存器
EA=1;
PT0=0;//设置低优先级中断
}