51单片机定时器的时间设置问题

现在还是人类 2009-02-03 10:20:17
我想问一下,在 Keil 的C语言开发中,为51单片机进行开发时,如何使用定时器中断的设置问题。
我的程序是这样的:

#include<reg52.h>
sbit LED=P1^2;

void Init_Timer1(void)
{
TMOD |= 0x10;
TH1=0x00;
TL1=0x00;
EA=1;
ET1=1;
TR1=1;
}

main()
{
Init_Timer1();
while(1);
}

void Timer1_isr(void) interrupt 3 using 1
{
TH1=0x00;
TL1=0x00;
LED=~LED;
}

我想问一下,用的是11.0592MHZ的晶震,该如何设置才是每隔1毫秒触发一次Timer1_isr过程?
如果我用24.000MHZ的晶震,又该如何设置每隔1毫秒触发一次Timer1_isr过程呢?
...全文
1389 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jass2009 2009-08-14
  • 打赏
  • 举报
回复
内部计数器用作定时器时,是对机器周期计数。每个机器周期的长度是12个振荡器周期。因为实验系统的晶振是11.0592MHz,所以定时常数的设置可按以下方法计算:
机器周期=12÷11.0592MHz=1.0857μS
(65536-定时常数)*1.0857μS=50mS
定时常数=4C00H
gooogleman 2009-02-03
  • 打赏
  • 举报
回复
社区生日: 2003-06-17 |生日:1978-02-27 所在城市: 中国 广西 柳州市 技术专长: 软件开发,图形设计,网站开发,研究我未知的技术 开发工具: EVB,EVC,KEIL 8.0,VB6.0,VC6.0,记事本


呜呜,我也是广西的,嘿嘿。
gooogleman 2009-02-03
  • 打赏
  • 举报
回复
不要使用11.059的晶振,要准确使用12M的比较合适。

这个单片机定时器是向向生长的。

一般情况下是

初始化模式
初始化初值

即可,这个例子很多啊,

你现在
TH1=0x00;
TL1=0x00;

定时器满就会产生一次中断,你现在把这个初值改大点就慢慢了解了。

楼主,这个书还是买几本的。马忠梅吧出过一本不错的书,貌似是北航出版社的。

去找来看看,一切问题解决。

现在不做单片机了,只能提醒这个了。

哈哈
peng5522 2009-02-03
  • 打赏
  • 举报
回复
有一个公式,具体是什么 不好意思 记不起来了,书本里有 去查下吧
现在还是人类 2009-02-03
  • 打赏
  • 举报
回复
非常感谢
dragon21cen 2009-02-03
  • 打赏
  • 举报
回复
=========================================================
1. 晶振为11.0592M,每计数一次用时12/11.0592M=1.085us
2. TMOD取0x10,即模式1——16位计数器(0~65535)
3. 计时2ms,则2ms/1.085us=1843,故TH0=(65536-1843)/256,TL0=(65536-1843)%256
=========================================================
综上所述:
#include<reg52.h>
sbit LED=P1^2;

void Init_Timer1(void)
{
TMOD |= 0x10;
TH1=(65536-1843)/256;
TL1=(65536-1843)%256;
EA=1;
ET1=1;
TR1=1;
}

main()
{
Init_Timer1();
while(1);
}

void Timer1_isr(void) interrupt 3 using 1
{
TH1=(65536-1843)/256;
TL1=(65536-1843)%256;
LED=~LED;
}
schlafenhamster 2009-02-03
  • 打赏
  • 举报
回复
0xB815=46357,65536-46357=19179,如果指令周期是12M/12=1us则定时器每19179*1us溢出一次(19.179ms).对高速51(一个指令周期=4时钟),则时间为4794.75us
现在还是人类 2009-02-03
  • 打赏
  • 举报
回复
12M的好像这样设置是2毫秒
TL0=0x15;
TH0=0xB8;

那11.0592M的呢?
现在还是人类 2009-02-03
  • 打赏
  • 举报
回复
谢谢提点,但是我想知道如何设置能达到比较准确的2000微秒,能不能告知一下。

27,511

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧