原程序如下:
void main()
{
P2=0x00; // 关闭显示
TMOD = 0x01; // T0工作方式1
/* 16ms 定时设置 */
TH0 = (16000/256);
TL0 = (16000%256);
//定时器T0打开
TR0 = 1; //启动定时
ET0 = 1;
EA = 1; //开定时器中断
//待显示数据初始化
buf[3] = 3;
buf[2] = 2; //四个待显示数据单元初始为0,1,2,3
buf[1] = 1;
buf[0] = 0;
while(1); //等待定时数码管扫描显示
}
// 定时器0中断服务子程序,定时动态扫描显示
void time0_int(void) interrupt 1
{
/* 16ms 定时设置 */
TH0 = (16000/256); //定时数据重装
TL0 = (16000%256);
display(); //扫描显示更新
}
关于
TH0 = (16000/256);
TL0 = (16000%256);
问题一:为什么16ms对应的是16000??
问题二:为什么高八位要除256,低八位求余??
问题三:为什么要加小括号??是多余的吗?我在另一个程序(如下)中看到的初值还加上个负号是怎么回事??-5000是指50ms么??
程序二如下:
/* 定时器0中断服务子程序 */
void timer0() interrupt 1 using 1
{
while(cnter1--) ;
{
ET0=0; //关T0中断允许
TR0=0; //关闭定时器T0
TH0 = -5000/256; // 重设计数初值
TL0 = -5000%256;
TR0=1;
return;
}
cnter1=0x14;
sec++;
}