51单片机50ms定时

51单片机50ms定时,必须用查询方式,我中断用惯了,突然脑子短路,查询不知道怎么用了,希望50ms到,就把全局变量pp加1,谢谢大家

  12MHz 的晶振,那么一个周期就是 1 us,所以需要计数 50ms / 1us = 50000,可以选择定时器工作方式 1。

由上述计算:
TH1 = (65536 - 50000) / 256;
TL1 = (65536 - 50000) % 256;

方式一,所以:
TMOD = 0x10;

运行 TR1 = 1,所以:
TCON = 0x40;

允许中断 ET1 = 1,EA = 1,所以:
IE = 0x88;

综合可以编写如下程序(汇编我不会,不知道你要的是汇编还是C):

#include <reg52.h>

void timer1_int() interrupt 3
{
TH1 = (65536 - 50000) / 256;
TL1 = (65536 - 50000) % 256;
}

void timer1_init()
{
TH1 = (65536 - 50000) / 256;
TL1 = (65536 - 50000) % 256;

TMOD = 0x10;
IE = 0x88;
TCON = 0x40;
}

void main()
{
timer1_init();

while(1);
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-05-25
//==================
unsigned int pp1 //定义全局变量
unsigned int count=50000; //计数值,50MS
#define TH_M1 (65536-count)/256;//赋值
#define TL_M1 (65536-count)%256;
//===============
mian()
{ EA=1; //开中断
ET0=1; //开T0中断
TMOD=0x01; //工作方式1
TH0=TH_M1; //赋值
TL0=TL_M1;
TR0=1; //启动T0
while(TF0==1); //等待中断
TF0=0; //中断后,清除TF0,关闭T0
pp1++; //使全局变量加1
}本回答被提问者采纳
第2个回答  2008-05-23
要精确定时就不要用查询的方法。。

真要用查询的话,当检测到TF0为1时,重装并运行定时器,清除TF0 PP+1就收工
第3个回答  2008-05-24
ORG 0100H
MAIN:MOV TMOD,#01H
CLR TF0
SETB TR0
LOOP:MOV TL0,#XXH;初值就不算了啦,你应该也会,fosc都不知道,
MOV TH0,#XXH
JNB TF0,$;查询TF0,看是否溢出.
INC PP
SJMP LOOP
END
其实在中断一样的,只不过,不用中断程序,而用查询TF0是否为1.(中断也是用它来判定的)来执行程序的..
第4个回答  2008-05-24
给你汇编程序行么

51单片机怎样实现50ms的定时?
51单片机定时器T1的工作方式1是16位定时器模式,其计数初值为TH1和TL1两个寄存器组成。在该模式下,每个计数周期为12个时钟周期,因此需要设置计数初值为65536-12000\/OSC,其中OSC为晶振频率。如果要实现一次50ms的定时,可以按照以下步骤进行计算:1. 计算每个计数周期的时间:12\/OSC 秒2. 计算需要多少...

51单片机50ms定时
12MHz 的晶振,那么一个周期就是 1 us,所以需要计数 50ms \/ 1us = 50000,可以选择定时器工作方式 1。由上述计算:TH1 = (65536 - 50000) \/ 256;TL1 = (65536 - 50000) % 256;方式一,所以:TMOD = 0x10;运行 TR1 = 1,所以:TCON = 0x40;允许中断 ET1 = 1,EA = 1,所以:I...

51单片机如何让定时计数50ms?
1、每隔50ms定时器中断溢出,计数+1。2、当计数达到10次时,便产生了500ms的定时啦,然后,你自己根据你的设计,需要让单片机做什么就自己写些什么(比如让某个io口取反)3、计数达到10次后,不要忘了初始化计数。最后给点建议:1、要让定时器计数50ms,只能在定时器的工作方式1下进行;2、定时...

单片机的晶振频率为6MHz,定时50ms,则初值怎么设置,应工作在哪种方式...
51单片机,晶振频率为6MHz时,一个计时脉冲是2us,定时50ms,设置工作方式1即16位模式,最大计数值65536,50ms是25000个脉冲,初值是65536-25000=40536,其中高8位是(65536-25000)\/256,低8位是(65536-25000)%256。

51单片机定时的高八位和低八位是如何计算的?
这个要看晶振频率,有专门的计算软件可以计算 晶振频率是12MHZ时,定时50ms时,计数脉冲个数为50000个 因此初值为65536-50000=15536化成十六进制为ec78 晶振频率是11.0592MHZ时,定时50ms时,计数脉冲个数为46080个 因此初值为65536-46080=19456 化成十六进制为即为4c00 也可以直接写公式 TH0=(65536-...

51单片机最大硬件定时时间是多少
51单片机最大硬件定时时间,就是定时器能定时的 时间,最长时间=65536*Tc Tc=fosc\/12,fosc 是单片机的晶振频率。以频率=12M为例吧,Tc=1us 最大定时时间=65536us=65.536ms。其实,不用管最大定时时间是多少,要定时再长的时间也是可以的,采用中断的方式计数吗。如:定时50ms,中断方式,中断一次...

51单片机的定时器怎样计算?
首先,51单片机是加一计数,到65536溢出,所以定时时间(经过的脉冲个数,如果一个脉冲是1us,刚好延时50ms是50000个脉冲)是65536减初值 ,初值又分高8位和低8 位,高8位的1代表256,因此高8位的数值所代表的数是256的整数倍,低位最大不超过255,所以一定是除以256之后的余数,用公式是这样:初值...

51单片机定时器工作模式一,初值计算:当TC=3CB0H时,TH0 和TL0各等于多少...
3CB0H,分别在TH0存放3CH、TL0存放B0H;它是十进制的15536;工作在模式一,将在65536时溢出,这样,计数值就是50000。如果是定时工作方式,将计数50000个机器周期。如果51单片机选用12MHz晶振,将会定时50ms;如果51单片机选用11.0592MHz,将会定时54.25ms;如果51单片机选用 6MHz晶振,将会定时100ms。

51单片机断电后保存
1、可以使用定时器控制51单片机,同时每50ms就将数据保存一次,再次通电后会显示断电时的数据;2、将存储芯片附加到51单片机上,比如AT24C0x系列的EEPROM,掉电后可以存储数据,再次通电后会从断电时的数据开始计算;3、使用外部芯片,比如用24c02芯片可以实现断电后自动存储数据的功能。

关于51单片机定时器问题
定时器为 50ms 中断,程序 的内容 是 1s 数码管 更新一个数0-F,1s 流动 一个 LED灯,一个周期 是 8s 而不是 1s。想要 周期为 1s 的话,定时器的时间应该 是 125ms,一次性 都 定时不到,就只能是 定时 25ms,分5次,为一 颗灯 的时间,40次 为一个数码管 数值 的时间。

相似回答