51单片机定时器的计数器功能的使用
下面是网上的一段程序voidtime0_init()//定时器0初始化{TMOD=0x62;//设置定时器0,和计数器1的模式TH0=6;TL0=6;//定时器的初值,用...
下面是网上的一段程序
void time0_init() //定时器0初始化
{
TMOD=0x62; // 设置定时器0,和计数器1的模式
TH0=6;
TL0=6; //定时器的初值,用于中断一次计时250us
ET0=1; //开定时器0中断
TR0=1; //开定时器0
}
void time1_init() // 计数器1初始化
{
TH1=6;
TL1=6; //装载计数器的初值
ET1=1; //开计数器1 中断
TR1=1; //开计数器1
EA=1; //开总中断
}
void time1(void )interrupt 3 //计数器中断,用于计数
{
cou++;
}
这里的计数器1为什么要设置初值? 计数器不是来自外部的脉冲吗,内部设置初值的作用是? 这是一个定时1s测频率的程序, 但是计数器1用中断方式,设置初值,在外部有脉冲的情况下屏幕上没有显示。我把计数器1的中断关闭,初值关闭,让cou=(THI<<8)+TH1.屏幕上就有实时显示的数字,怎么回事。 展开
void time0_init() //定时器0初始化
{
TMOD=0x62; // 设置定时器0,和计数器1的模式
TH0=6;
TL0=6; //定时器的初值,用于中断一次计时250us
ET0=1; //开定时器0中断
TR0=1; //开定时器0
}
void time1_init() // 计数器1初始化
{
TH1=6;
TL1=6; //装载计数器的初值
ET1=1; //开计数器1 中断
TR1=1; //开计数器1
EA=1; //开总中断
}
void time1(void )interrupt 3 //计数器中断,用于计数
{
cou++;
}
这里的计数器1为什么要设置初值? 计数器不是来自外部的脉冲吗,内部设置初值的作用是? 这是一个定时1s测频率的程序, 但是计数器1用中断方式,设置初值,在外部有脉冲的情况下屏幕上没有显示。我把计数器1的中断关闭,初值关闭,让cou=(THI<<8)+TH1.屏幕上就有实时显示的数字,怎么回事。 展开
1个回答
展开全部
计数器1,也是计数,设置初值也是为了计数,是对外部脉冲计数,而这外部脉冲是要从P3.5输入的。初值也是计数的需要,TL1=256-实际计数值=6,可以算出实际计数值是250。也就是需要对外部脉冲计250个才中断一次。
你在外部加脉冲,是只加一个吧,所以,屏幕上没有显示,至少要加250个以上,每加250个,cou才加一个数。
你在外部加脉冲,是只加一个吧,所以,屏幕上没有显示,至少要加250个以上,每加250个,cou才加一个数。
追问
谢谢你,过程我完全明白了,就是结果需要调,定时方式2是八位自动重装,为什么还有TH1的存在,应该只需要TL1就够了啊
追答
定时方式2是八位自动重装,什么叫自动重装?就是计数到溢出后TL1=0,需要重新装初始值才能再计数,那这TH1就是记忆初始值的,这时,把TH1中的初始值送给TL1就可以计数,才实现自动重装过程。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询