微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 定时器初始化之后,无法更改其值?

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

时间: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) interrupt 1

{

TH0 = (65535-62484)/256;

TL0 = (65535-62484)%6;

timer++; //因为定时器无法实现一秒定时,用一个变量实现

if (timer >= 16)

{

timer = 0;

time--;

if( time <= 0)

time = 30; //用于时间显示

}

}

解决问题的方法,就是把显示的数字重新赋值为30,不要管定时器现在的情况是怎么样,因为实现效果就是给人看的,只要观察到的表象符合要求就可以,编程的事情,往往就是这么山重水复疑无路,柳暗花明又一村。虽然不清楚是否影响定时的精度,但这种转换角度思考问题的思路确实是一针见血。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top