单片机的定时器0和定时器1为什么计数不同

如题所述

问题有些不清楚,
要看是什么单片机
有些单片机的定时器1和定时器0的位数是不一样的

然后是各自设置的值,工作状态,特别是分频比
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-06-07

代码转自:《51单片机C语言创新教程》温子祺等编著。

/*实验名称:频率计
*描 述:频率计实验的硬件设计基本上就是LCD1602实验的硬件设计,
有点不同的是P3.4引脚与P3.5引脚要用杜邦线连接在一起,
形成一个最小型的频率计测试系统,
即P3.4引脚输出电平让P3.5引脚进行捕捉。
*作 者:温子祺
*修改日期:2010/5/4
*/
#include "stc.h"
#include "global.h"
#include "74LS164.h"
#include "LCD1602.h"

#define TIMER0_INITIAL_VALUE 5000 //5ms定时

UINT8 TimeCount=0; //定时计数
UINT8 Timer0IRQEvent=0; //T0定时中断事件
UINT8 Timer1OverFlowCnt=0; //T1计数溢出计数
UINT8 Time1SecEvent=0; //定时1秒事件
UINT16 FreqCount=0;

UINT8 LCDString[16]; //LCD字符串缓冲区
UINT8 LCDStringTemp[16]; //临时保存LCD字符串
UINT8 LCDPrintfLength; //LCD显示数据长度

/*************************************************************
* 函数名称:TimerInit
* 输 入:无
* 输 出:无
* 说 明:定时器初始化
**************************************************************/
void TimerInit(void)
{
TH1 = 0;
TL1 = 0;
TH0 = (65536-TIMER0_INITIAL_VALUE)/256;
TL0 = (65536-TIMER0_INITIAL_VALUE)%256; //定时5MS
TMOD = 0x51;

}
/*************************************************************
* 函数名称:Timer0Start
* 输 入:无
* 输 出:无
* 说 明:定时器0启动
**************************************************************/
void Timer0Start(void)
{
TR0 = 1;
ET0 = 1;
}
/*************************************************************
* 函数名称:Timer0Stop
* 输 入:无
* 输 出:无
* 说 明:定时器0停止
**************************************************************/
void Timer0Stop(void)
{
TR0 = 0;
ET0 = 0;
}
/*************************************************************
* 函数名称:Timer1Start
* 输 入:无
* 输 出:无
* 说 明:定时器1启动
**************************************************************/
void Timer1Start(void)
{

TR1 = 1;
ET1 = 1;
TH1=TL1=0;
}
/*************************************************************
* 函数名称:Timer1Stop
* 输 入:无
* 输 出:无
* 说 明:定时器1停止
**************************************************************/
void Timer1Stop(void)
{
TR1 = 0;
ET1 = 0;
}
/*************************************************************
* 函数名称:PortInit
* 输 入:无
* 输 出:无
* 说 明:IO口初始化
**************************************************************/
void PortInit(void)
{
P0=P1=P2=P3=0xFF;
}
/*************************************************************
* 函数名称:main
* 输 入:无
* 输 出:无
* 说 明:函数主体
**************************************************************/
void main(void)
{
PortInit();
TimerInit();
Timer0Start();
Timer1Start();
LCD1602Init();

EA=1;

while(1)
{
if(Timer0IRQEvent)
{
Timer0IRQEvent=0;
TimeCount++;

if(TimeCount>=200) //定时1S到达
{
TimeCount=0;

Timer0Stop(); //停止T0
Timer1Stop(); //停止T1

FreqCount=((TH1<<8)|TL1)+Timer1OverFlowCnt*65536;//计算总计数值
Timer1OverFlowCnt=0;

itoa(FreqCount,LCDString,10); //计数值变为字符串
LCD1602ClearScreen(); //LCD1602清屏
LCD1602PrintfString(2,0,"Now Frequency");//LCD1602打印字符串
LCDPrintfLength=LCD1602PrintfString(3,1,LCDString);//LCD1602打印字符串
LCD1602PrintfString(LCDPrintfLength+3,1,"HZ");//LCD1602打印字符串

Timer0Start();//启动T0
Timer1Start();//启动T1
}

}

}

}
/*************************************************************
* 函数名称:Timer0IRQ
* 输 入:无
* 输 出:无
* 说 明:定时器0中断服务函数
**************************************************************/
void Timer0IRQ(void) interrupt 1
{
ET0 = 0;

TH0 = (65536-TIMER0_INITIAL_VALUE)/256;
TL0 = (65536-TIMER0_INITIAL_VALUE)%256; //定时1MS

Timer0IRQEvent=1;

ET0 = 1;

P3_4=~P3_4;

}
/*************************************************************
* 函数名称:Timer1IRQ
* 输 入:无
* 输 出:无
* 说 明:定时器1中断服务函数
**************************************************************/
void Timer1IRQ(void) interrupt 3
{
ET1=0;
Timer1OverFlowCnt++; //计数溢出自加1
ET1=1;
}本回答被网友采纳
第2个回答  2011-06-06
一样的

单片机中c\/t=0时是定时方式,c\/t=1是计数方式。定时和计数有什么区别吗...
定时器\/计数器本质上都是计数器,只不过数的东西不一样.定时器\/计数器做为定时器来用的时候,是数的单片机时钟的脉冲个数,也就是说,单片机的时钟做为定时器\/计数器的时钟源,因为单片机的时钟一般比较固定,因此,我们就知道一个脉冲占多长时间,因为根据脉冲的个数,就能推算出时间,就能做定时器用.比如:...

单片机内部定时器0和定时器1有何不同之处
单片机内部定时器0和定时器1虽然都是16位定时计数器,但在硬件结构和寄存器配置方面,还是有一些不同之处的,通过对寄存器的配置:1,定时器0可分成2个独立的8位定时器,而定时器1则不能;2,定时器1可作为串口的波特率发生器,而定时器0则不能。

定时器1和定时器0的区别
1、定时器模式不同:定时器0是一个8位定时器,可用作定时器或计数器,在定时器模式下,它可以生成中断,定时范围为0-55,而定时器1是一个16位定时器,也可以用作定时器或计数器,在定时器模式下,它可以生成中断,定时范围为0-65535。2、操作模式不同:定时器0有四种不同的操作模式,包括模式0(...

关于单片机中断程序的定时器0和定时器1
首先,你所说的两种赋值方法,实际上是一种,就是就是寄存器的高8为位个低8位赋值。你说的第二种(TH0=(65536-50000)\/256)所赋的值是经过计算(=(65536-50000)\/256)得到的,你知道定时计数器的工作原理就清楚了。其次,赋值大小要根据你的晶振以及单片机工作模式确定机器周期,然后才能确定需...

单片机为什么定时器0重新赋值时要关掉定时器1(定时器0作为脉冲源定时用...
因在你赋值时是要运行语句来完成的,也是要时间的,如不关它就还在运行。这就可能导致你的数不准。在要求精确地就可先把这几句语句的运行时间算出来在赋值的扣去,这才更精确。如果对精度无所谓你不关赋值也行。

单片机定时器T0和T1的区别?
单片机定时器T0和T1的区别:1、工作方式选择的不同。定时器T1没有方式3 ,方式3只适合定时器T0,使其增加一个8位定时器。若定时器T1选择方式3,T1将停止工作,相当于TR1=0的情况。2、工作方式控制位的不同。在工作方式寄存器TMOD中,高4位控制定时器T1,低4位控制定时器T0。3、运行状态的不同。

8051怎么区分定时器0、0的工作方式?
标准8051单片机内部有2个定时器\/计数器 分别是T0和T1。每个定时器有4种工作方式,方式0:13位定时计数方式,最大计数值为2^13=8192,定时8192个机器周期。此方式已经不再用了,是为了和以前的单片机兼容,学初者不用掌握。方式1:16位定时计数方式,最大计数值为2^16=65536,定时65536个机器周期。...

单片机的定时和计数有什么 区别?
1、触发来源不同:定时器的触发来源是外部脉冲,而计数器的触发来源是时钟信号。2、计数对象不同:定时器实际上也是计数器,只是计数的是固定周期的脉冲;计数器只是计数时间。单片机也被称为单片微控器,属于一种集成式电路芯片。在单片机中主要包含CPU、只读存储器ROM和随机存储器RAM等,多样化数据采集与...

51单片机程序,为什么我的程序开了定时器1就会影响到定时器0的定时...
打开了 T1 中断,没有中断T1的 中断函数 入口,当然 程序 产生 中断T1 后程序就跑飞了。加上 T1 中断函数 就能正常。

单片机TH0 TL0和TH1 TL1有什么区别?是定时器0和定时器1的区别吗?
也就是用TH0和TL0中的数来控制T0到底定时多久或计数多少再进入中断,TH1和TL1也一样。至于定时器T0和T1的区别,其实使用上没有区别,只是很多时候要同时用上两个,比如定时的数只用TH0和TL0装不下,然后就要用两个定时器级联;或者有时候要一边定时一边计数,那样T0和T1也要同时用到 ...

相似回答