#include "reg52.h"
sbit led = P3^6;
void delay10ms()
{
//1. 配置定时器0工作模式位16位计时
TMOD = 0x01;
//2. 给初值,定一个10ms出来
TL0=0x00;
TH0=0xDC;
//3. 开始计时
TR0 = 1;
TF0 = 0;
}
void main()
{
int cnt = 0;
led = 1;
while(1){
if(TF0 == 1)//当爆表的时候,硬件会修改bit5(TF0)位上面的数据,改成1
{
TF0 = 0;//不用中断,必须软件清零
cnt++; //统计爆表的次数
//重新给初值
TL0=0x00;
TH0=0xDC;
if(cnt == 100){//爆表100次,经过了1s
cnt = 0; //当100次表示1s,重新让cnt从0开始,计算下一次的1s
led = !led;//每经过1s,翻转led的状态
}
}
}
}
补充一下
void Timer0Init(void) //10毫秒@11.0592MHz
{
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0x00; //设置定时初值
TH0 = 0xDC; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
}
口诀:清0用&(与),置1用 | (或)
这里的与运算(&)可以看作乘法,或运算( | )可以看作加法
可以看到与运算(&)后,高四位没有改变,把低四位清零了,我们使用0加上与运算(&)就可以清零
然后或运算( | )后,高四位没有改变,而低四位因为给了一个1值,所以改变了
AUXR
也是有八位,默认值是xxxx xx00
它的高六位都是空的,赋值也没有意义,但是B1和B0是有值的
B0(ALEOFF)位置1,禁止ALE信号输出,提升系统的EMI功能,复位后为0,ALE信号正常输出
也就是提升时钟对外电磁辐射的性能
上面7F,前面的7随便写的,F也可以写成01