单片机时12M的晶振,下面的定时器中断怎么算?多长时间会中断???

TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;

普通单片机工作时钟多是12T模式,所谓12T,是指:单片机的一个机械周期 等于 12 个系统时钟周期(即晶振周期),那么,12MHz的晶振,其周期 t=1/Fosc=1/12MHz=1/12 us,则单片机机械周期 T=12t=1us。
单片机的运行指令都是按机械周期计算的,比如 自增(++)、自减(--)运算 占用 1个机械周期,赋值运算(=)占用 2个机械周期 等等。而单片机中的中断计时,使用的是 自增 后溢出报警的方式,每一次自增都是1us,LZ 的赋值语句后,单片机溢出要进行 50000次自增,时间共计1us×50000=50ms,也就是该中断每隔 50ms 就溢出一次,即中断时间是50ms。
题外话,除了12T时钟模式外,有些单片机使用的是 1T时钟模式,即单片机机械周期 等于 系统时钟周期。追问

如果是1T的单片机呢?

追答

1T时钟模式,即 单片机 机械周期 等于 系统时钟周期,也就是 1/12 us,同样道理,50000次自增的时间共计 1/12 us × 50000=50/12 ms,即中断时间 25/6 ms。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-05-22
TMOD=0x01; 设定T0工作方式1
TH0=(65536-50000)/256; 50000us,高八位送入TH0
TL0=(65536-50000)%256; 第八位送入TL0
EA=1; 开总中断
ET0=1; 开T0中断
TR0=1; 开启定时器
故:50000us后会中断!
第2个回答  2012-05-23
你想设定为几秒你就用一个数去乘上面的50000,比如说设定一秒,那就是20