新闻中心

EEPW首页>嵌入式系统>设计应用> 定时器初始化之后,无法更改其值?

定时器初始化之后,无法更改其值?

作者: 时间:2016-11-28 来源:网络 收藏
昨天有同学问我有一个关于单片机的功能如何实现:
1:
假设按下KEY1,启动30S倒数
途中按下KEY2,跳去执行其他函数,30S倒数取消
2:
按下KEY1,启动30S倒数
途中按下KEY2,跳去其他函数执行同时,不影响30S倒数
进过询问,属于要求1,并且使用 矩阵键盘
有趣的是,我以为要求2更容易实现,结果要求2一下就做到了,但是要求1想了很久,问题在于:按下KEY2执行其他程序后,按下KEY1不是重新进行倒数。我总想着是否能够把 定时器重新赋值,试过了修改各个相关寄存器,非常奇怪的是, 初始化之后,定时器值似乎就无法更改?上网查了查,查不到相关的疑问。
但是就在一瞬间,答案一闪而过,最终程序如下(省去了大部分程序和变量的定义等):
void main()
{
init();//定时中断的相关初始化
while(1)
{
keyscan();
if (1 == keynum)
{
disp();//数码管显示倒计时情况
LED= 1;
keyscan();
}
if (2 == keynum)
{
LED = 0;
keyscan();
time = 30;//就是这一句,实现了了重新倒计时
}
}
}
void tim1(void) interrupt1
{
TH0 = (65535-62484)/256;
TL0 = (65535-62484)%6;
timer++; //因为定时器无法实现一秒定时,用一个变量实现
if (timer >= 16)
{
timer = 0;
time--;
if( time <= 0)
time = 30; //用于时间显示
}
}
解决问题的方法,就是把显示的数字重新赋值为30,不要管定时器现在的情况是怎么样,因为实现效果就是给人看的,只要观察到的表象符合要求就可以,编程的事情,往往就是这么山重水复疑无路,柳暗花明又一村。虽然不清楚是否影响定时的精度,但这种转换角度思考问题的思路确实是一针见血。


关键词:定时器初始

评论


技术专区

关闭