标题:
一个关于C语言变量赋值和保存的小白问题求教
[打印本页]
作者:
hxdby
时间:
2021-12-26 11:28
标题:
一个关于C语言变量赋值和保存的小白问题求教
各位大佬好,
本人做一个可调时间的闹钟程序,要求设置一次时间,只要单片机不关机,每到这个时间,闹钟都会自动响铃。
部分C语言程序如下:
int total_time;
int Temp;
void main(void)
{
while(1)
{
total_time=Temp;
}
}
ISR(TIMER_vect) //定时器中断,1s进一次中断
{
if (total_time !=0)
{ beep=1;
total_time--;
}
else
{beep=0;}
在这个程序中,Temp是一个临时变量,是通过按键设置的,比如按键设置Temp=30,此时30赋值给total_time, 进入中断后,由于total_time不等于0(为30),此时闹钟响,同时totai_time每1s自减1,直到为0为止,自减到0后,闹钟停,这就实现了闹钟响30s的一个功能。
我的疑问是:
1,total_time自减到0后,total_time的值是不是永远就变成0了?如果这样的话,闹钟就只能实现一次,下一次又需要重新设置,这样不方便,有没有可以设置一次,闹钟每到这个时间点就自动闹铃?
2,我main里有一个total_time=Temp;的赋值,如果total_time在中断里自减到0后,total_time就永远是0了吗?因为total_time=Temp;这个赋值是放在while(1)循环里的,会不会自减到0后,total_time重新被赋值为30?只要我的Temp不变,total_time就是30?还是0?这个地方搞不清楚,我的需求是需要total_time一直保持30,除非Temp改变。
请各位大佬赐教!
作者:
tatachaoren
时间:
2021-12-26 15:19
首先你mian函数里面total_time=Temp,虽然你说Temp是临时变量,但是你定义的确是全局变量,所以Temp的值如果不按按键,是不会变化的,所以total_time=Temp只要进入while(1)循环,就会一直赋值,total_time就会一直是30,再说中断,中断里面的total_time值,就算当前中断减1了,退出中断又会变成30,所以你可以多设置几个变量,而不是纠结在这两个变量。
作者:
想进步要学习
时间:
2021-12-26 22:13
你有这样的疑问是因为你还不太清楚程序的执行顺序。程序是这样执行的,主函数中的代码一条条执行下来,当发生中断的时候,会进入中断去处理中断中的代码,而中断中的代码也是一条条执行下来的,执行到底跳出来后,回到主函数被中断打断的位置接着往下执行,如此往复。
作者:
hxdby
时间:
2022-1-15 19:55
tatachaoren 发表于 2021-12-26 15:19
首先你mian函数里面total_time=Temp,虽然你说Temp是临时变量,但是你定义的确是全局变量,所以Temp的值如 ...
后来我自己验证了,确实如您所说,非常感谢回复和帮助!
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1