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

 我来答
百度网友1491f00
2018-12-26
知道答主
回答量:38
采纳率:40%
帮助的人:5.7万
展开全部
我说一下原理
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都如鱼得水。
zhuangchuming
推荐于2018-04-01
知道答主
回答量:38
采纳率:0%
帮助的人:15.5万
展开全部
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的延时了
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sungreatfriend
2011-11-22 · TA获得超过340个赞
知道小有建树答主
回答量:332
采纳率:100%
帮助的人:265万
展开全部
使用内部定时器
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++;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
s11754104
2011-11-23
知道答主
回答量:23
采纳率:0%
帮助的人:21.4万
展开全部
定时器Timer0选用模式一,计数从50000开始,到65536,选用12MHZ晶振刚好500ms
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式