找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 743|回复: 3
打印 上一主题 下一主题
收起左侧

一个关于C语言变量赋值和保存的小白问题求教

[复制链接]
跳转到指定楼层
楼主
ID:997026 发表于 2021-12-26 11:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大佬好,

本人做一个可调时间的闹钟程序,要求设置一次时间,只要单片机不关机,每到这个时间,闹钟都会自动响铃。

部分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改变。


请各位大佬赐教!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:488334 发表于 2021-12-26 15:19 | 只看该作者
首先你mian函数里面total_time=Temp,虽然你说Temp是临时变量,但是你定义的确是全局变量,所以Temp的值如果不按按键,是不会变化的,所以total_time=Temp只要进入while(1)循环,就会一直赋值,total_time就会一直是30,再说中断,中断里面的total_time值,就算当前中断减1了,退出中断又会变成30,所以你可以多设置几个变量,而不是纠结在这两个变量。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:633559 发表于 2021-12-26 22:13 | 只看该作者
你有这样的疑问是因为你还不太清楚程序的执行顺序。程序是这样执行的,主函数中的代码一条条执行下来,当发生中断的时候,会进入中断去处理中断中的代码,而中断中的代码也是一条条执行下来的,执行到底跳出来后,回到主函数被中断打断的位置接着往下执行,如此往复。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:997026 发表于 2022-1-15 19:55 | 只看该作者
tatachaoren 发表于 2021-12-26 15:19
首先你mian函数里面total_time=Temp,虽然你说Temp是临时变量,但是你定义的确是全局变量,所以Temp的值如 ...

后来我自己验证了,确实如您所说,非常感谢回复和帮助!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表