标题: 一个关于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