时钟频率为12MHZ, 如何利用51单片机定时/计数器定时500ms

如题所述

我说一下原理
12MHZ的51单片机,定时器最大只能定时65.535ms,所以要定时500ms的时间,
需要产生10次50ms的定时。
步骤如下:
1、每隔50ms定时器中断溢出,计数+1。
2、当计数达到10次时,便产生了500ms的定时啦,然后,你自己根据你的设计,需要让单片机做什么就自己写些什么(比如让某个io口取反)
3、计数达到10次后,不要忘了初始化计数。
最后给点建议:1、要让定时器计数50ms,只能在定时器的工作方式1下进行;
2、定时器初值: TH0 = 0x3C; TL0 = 0x0B0;(我使用的是定时器0)
思路和原理都给你了,只要你看懂了,想让计时器计时多少s都如鱼得水。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-04-01
char tt;
int main()
{
TMOD=0x11;//设置定时器0为工作方式1
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
while(1)
{
if(tt==10)
{
内容
}
}
void time0() interrupt 1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
tt++;
}
这样就有500MS的延时了本回答被网友采纳
第2个回答  2011-11-22
使用内部定时器
unsigned char Time_Buf;
void main()
{
TMOD=0x01;//设置定时器0为工作方式1
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
Time_Buf=0;
EA=1;
while(1)
{
if(Time_Buf==10)
{
Time_Buf=0;
;
}
}
void Timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
Time_Buf++;
}
第3个回答  2011-11-23
定时器Timer0选用模式一,计数从50000开始,到65536,选用12MHZ晶振刚好500ms