定时器T0如用于下列定时,晶振频率为12MHz,试为定时器T0编制初始化程序(1)50ms

2024-12-15 15:39:18
推荐回答(2个)
回答1:

已知单片机系统晶振频率为 6MHz,若要求定时值为10ms时,定时器T0工作在方式1时,TH0 = ? TL0 = ?

TH0 = 0x0EC;
TL0 = 0x78;

不要死记公式,记着定时器的溢出速率有关,晶振频率不同,定时器溢出速率也不同

假设t0工作于方式1(16位最大65535)那么定时时间=(65536-X)再乘以机器周期(12m晶振时为1us)
例如定时50000us(既50ms)(晶振12m,机器周期1us)
首先在主函数或初始化函数中写入(就是在运行定时中断函数之前运行)
TMOD=0X01;//T0工作于定时模式,方式1
TH0=(65536-50000)/256;//给定时器高8位赋值,其中50000就是定时机器周期
TL0=(65536-50000)%256;//给定时器高8位赋值
EA=ET0=TR0=1;//开总中断,开定时中断,启动定时器。
然后定时器开始工作。
定时中断函数
void timer0() interrupt 1
{
TH0=(65536-50000)/256;//重新赋值
TL0=(65536-50000)%256;

回答2:

12m晶振机器周期是1us,6m的话就是2us,定时器工作方式1为16位定时,50ms=50000us=25000个机器周期,那么初值th0=(65536-25000)/256;tl0=(65536-25000)%256