C51单片机定时器1以方式1定时1秒如何设置?

求大神指点 晶振频率为11.0592MHz 使用定时器1以方式1定时1s 程序代码如下 但是结果不理想 求指点 谢谢!
void DS()
{
int i=20;
while(i--)
{
TMOD&=0x10; //设置T1为定时工作方式1。
TMOD|=0x00;
TH1=0x4c; //设置初始值。
TL1=0x00;
IE=0x00; //禁止中断
TR1=1; //启动定时器1
while(1)
{
if(TF1)
{
TF1=0;
TH1=0x4c;
TL1=0x00;
break;
}
}
}

1、先打开我们熟悉的单片机c51编程软件——keil,先把主方法写好。

2、然后,我们要定义两个变量。

3、接着,设定好定时器的工作方式。

4、设置中断发生的机制。

5、最后,我们要加进这几行代码进行初值的重装。

6、最后,把if语句补充完毕就可以了。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-26
在中断里面写上累加100次的变量,就等于是1s了):
#include <reg51.h>

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

void main(void)
{
InitTimer1();
}

void Timer1Interrupt(void) interrupt 3
{
TH1 = 0x0DC;
TL1 = 0x00;
//add your code here!
}
51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8004单片机,后来随着Flash rom技术的发展,8004单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。需要注意的是51系列的单片机一般不具备自编程能力。
定时器人类最早使用的定时工具是沙漏或水漏,但在钟表诞生发展成熟之后,人们开始尝试使用这种全新的计时工具来改进定时器,达到准确控制时间的目的。定时器确实是一项了不起的发明,使相当多需要人控制时间的工作变得简单了许多。人们甚至将定时器用在了军事方面,制成了定时炸弹,定时雷管。现在的不少家用电器都安装了定时器来控制开关或工作时间。
第2个回答  2013-12-28
有个东东叫单片机小精灵,应该能解决你的问题,呵呵,最近变懒了。。。

下面这个是10ms定时程序,定时器1,方式1,中断自动重装(PS:你可以在中断里面写上累加100次的变量,就等于是1s了):
#include <reg51.h>

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

void main(void)
{
InitTimer1();
}

void Timer1Interrupt(void) interrupt 3
{
TH1 = 0x0DC;
TL1 = 0x00;
//add your code here!
}
第3个回答  2013-12-20
用定时计数器的方式2来计时(8位初值自动重装,可以很大程度上减少误差)
TH0=6;
TL0=6;
这样250微秒产生一次中断信号,4000次中断即为1秒
第4个回答  2013-12-21
这代码结构……
你还是老实定时一个小的时间,再累加到1S吧,这样容易理解和实现。追问

求指点 我的想法是定时50ms 循环20次 不知道问题出在哪里?