#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次,经过了1scnt = 0; //当100次表示1s,重新让cnt从0开始,计算下一次的1sled = !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