首页 > 装修问题 > 装饰材料 > 其他 > 单片机定时器程序如何实现?

单片机定时器程序如何实现?

浏览次数:33|时间:2024-05-25

最新回答

2024-05-25Lydia胖胖
定时器其实就是单片机的一个内部自身时钟的计数器,每一个周期计数器加1,所以使用定时器功能时候先要给定时器付初值,就是先写TH0TL0的值(如下),写完初值后就等着定时器功能的那个计数器记满了数后也就是到了65536后就溢出了,所以一次定时的过程就是65536-初值  之间的数  所代表的时钟周期,计数满了溢出要产生中断就要写一个中断服务子程序,子程序如下void  timer0()  interrrupt  X  中断服务子程序中还要给定时器计数器的TH  TL付初值  进行下一次的计数,明白了吧。。楼上的那个没写interrupt  选择定时器工作方式。哎呀,妈呀  累死我了
void  main()
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;//定时器0初值,定时50ms  定时多少MS就多少*1000
EA=1;//开启总中断
ET0=1;//定时器0中断允许
TR0=1;//开启定时器0
while(1)
{
}
}
void  timer0()  interrrupt  1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
}

44

2024-05-25Me馍馍27
你好,很荣幸回答你的问题,定时器其实就是单片机的一个内部自身时钟的计数器,每一个周期计数器加1,所以使用定时器功能时候先要给定时器付初值,就是先写TH0TL0的值(如下),写完初值后就等着定时器功能的那个计数器记满了数后也就是到了65536后就溢出了,所以一次定时的过程就是65536-初值  之间的数  所代表的时钟周期,计数满了溢出要产生中断就要写一个中断服务子程序,子程序如下void  timer0()  interrrupt  X  中断服务子程序中还要给定时器计数器的TH  TL付初值  进行下一次的计数

105

2024-05-25guoqingyi828
51单片机,根据晶振频率,计算指令周期,设置定时器的分频,然后设置定时器的工作方式TMOD,最后设置初值TH0  TL0  比如用的X  HZ的晶振,stc的单片机有3种模式(X/12)x/6,还有单周期指令,选择12分频的,T=1/(X/12)就是一个指令周期  ,如果定时没有分频,(65536-Z(初值))*T就是定时的时间比如是12M的晶振那么  设置TMOD=0x01;16位定时器模式TH0=(65536-20000)/256;TL0=(65536-20000)%256;就是设置了20ms的定时

143

2024-05-25winonafirst1
你好,定时器其实就是单片机的一个内部自身时钟的计数器,每一个周期计数器加1,所以使用定时器功能时候先要给定时器付初值,就是先写TH0TL0的值(如下),写完初值后就等着定时器功能的那个计数器记满了数后也就是到了65536后就溢出了,所以一次定时的过程就是65536-初值  之间的数  所代表的时钟周期,计数满了溢出要产生中断就要写一个中断服务子程序,子程序如下void  timer0()  interrrupt  X  中断服务子程序中还要给定时器计数器的TH  TL付初值  进行下一次的计数,明白了吧。。楼上的那个没写interrupt  选择定时器工作方式。

296