//*f=6MHZ,定时器0以工作方式2(自动重装8位定时器模式)、查询方式产生100us定时,
//并在P0.0输出周期为2s的连续方波r控制LED灯,即亮1s灭1s*//
#include<reg52.h>
sbit d1=P0^0;
void timer();
unsigned int num,tt;
void main()
{
TMOD=0X02; //调置工作方式//
TH0= 0Xce; //设初值
TL0=0Xce;
IE=0X00; //关中断
TR0=1; //定时器启动
while(1) //大循环
{
if(num==10000) //必须加此大循环,否则程序从头开始,所有变量均复位,
//d1的值保持不变,因为始终num到此都为0 //
d1=!d1; // 也可将此三句放到定时程序后,这样,定时程序过后,num值为10000,
//即达到要求定时时,(并没有复位,因为程序没执行完)//
num=0; // 之后再输出d1就会按要求变化//
while(num<10000)//100us定时程序
{
if(TF0)//查询100us定时是否到?//
timer();
}
}
}
void timer()
{
TF0=0; //查询方式必须软件清零,否则TF一直溢出为1,计时只在第一次准确//
num++;
}