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

 我来答
漂颜圆4545
2011-06-07 · TA获得超过6.3万个赞
知道大有可为答主
回答量:3.7万
采纳率:0%
帮助的人:5453万
展开全部
问题有些不清楚,
要看是什么单片机
有些单片机的定时器1和定时器0的位数是不一样的

然后是各自设置的值,工作状态,特别是分频比
坦荡又清秀丶小草Q
2011-06-07 · TA获得超过243个赞
知道答主
回答量:507
采纳率:0%
帮助的人:0
展开全部

代码转自:《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;
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
47okey
2011-06-06 · TA获得超过1.2万个赞
知道大有可为答主
回答量:5900
采纳率:75%
帮助的人:2822万
展开全部
一样的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式