89C52RC芯片
12Mhz:FC18
11.0592Mhz :FC67
定时器T0初值计算
12Mhz
11.0592Mhz
main.c
#include<regx52.h>
#include<intrins.h> //_crol_循环左移函数
#include "Timer0.h"
#include "Key.h"
/*定时器,按键控制流水方向
按下K1改变流水方向*/
unsigned char KeyNumber,LEDMode=0;
void main()
{
P2=0xfe;
Timer0Init();//T0初始化
while(1)
{
KeyNumber=Key();//获取按键值
if(KeyNumber)
{
if(KeyNumber==1)
{
LEDMode++;
if(LEDMode>=2) LEDMode=0;
}
}
}
}
void Timer0_Router() interrupt 1
{
static unsigned int T0Count;
TL0 = 0x66; //设置定时初值
TH0 = 0xFC; //设置定时初值
if(T0Count++>=50) //ms
{
T0Count=0;
if(LEDMode==0)
P2=_crol_(P2,1); //左流水
if(LEDMode==1)
P2=_cror_(P2,1); //右流水
}
}
Timer0.c
#include<regx52.h>
/*
定时器0初始化1ms
*/
void Timer0Init(void) //1毫秒@11.0592MHz
{
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0x66; //设置定时初值
TH0 = 0xFC; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0=1; //定时器0允许中断
EA=1; //中断总允许位
}