找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机为什么中断中定义变量,对应的语句却不执行?

[复制链接]
跳转到指定楼层
楼主
ID:959891 发表于 2022-2-12 16:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
51单片机,在定时器0的中断函数中,定义了名称为l的变量,在仿真的时候,语句l=l-1;不会被执行,总是会跳过。不知道是什么原因?

单片机源程序如下:
void T0_Interrupt() interrupt 1
{
         signed char l=10;
         k=k-1;
         l=l-1;
         TH0=0xF9;   
         TL0=0x66;
         

}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:514254 发表于 2022-2-12 18:11 | 只看该作者
每次进入中断都给一个初值signed char l=10?定义成全局或者静态变量试试。另外定义变量的时候最好命名有意义的名称,少用单字母啊
回复

使用道具 举报

板凳
ID:94031 发表于 2022-2-12 20:03 | 只看该作者
编译后优化掉了。
回复

使用道具 举报

地板
ID:959891 发表于 2022-2-13 08:28 | 只看该作者
dazhige 发表于 2022-2-12 18:11
每次进入中断都给一个初值signed char l=10?定义成全局或者静态变量试试。另外定义变量的时候最好命名有 ...

定义成全局变量,就没有问题。为什么设置成局部变量就不行呢?
回复

使用道具 举报

5#
ID:959891 发表于 2022-2-13 08:28 | 只看该作者
xuyaqi 发表于 2022-2-12 20:03
编译后优化掉了。

为什么中断函数里面定义局部变量l,会直接把l=l+1给优化掉了呢?
回复

使用道具 举报

6#
ID:94031 发表于 2022-2-13 09:08 | 只看该作者
yermsir 发表于 2022-2-13 08:28
为什么中断函数里面定义局部变量l,会直接把l=l+1给优化掉了呢?

编译器认为这句是多余的,为了不想优化掉可以把优化级别降低。
回复

使用道具 举报

7#
ID:638396 发表于 2022-2-13 14:46 | 只看该作者
声明前加static就好了。局部变量用完就释放了,下次进来是另外一个地址。
回复

使用道具 举报

8#
ID:514254 发表于 2022-2-13 19:04 | 只看该作者
yermsir 发表于 2022-2-13 08:28
定义成全局变量,就没有问题。为什么设置成局部变量就不行呢?

局部变量每次进来重新分配地址,这样自加和自减就没有意义,所以定义成全局或者静态变量
回复

使用道具 举报

9#
ID:879809 发表于 2022-2-13 21:25 | 只看该作者
signed char l=10;
改成
signed char l;
l=10;
回复

使用道具 举报

10#
ID:1005062 发表于 2022-2-13 22:21 | 只看该作者
没有中断时单片机只会顺序执行主程序中的语句,单片机一边顺序执行主程序的语句时,一边定时器在计时。当计到你设定的值后,他需要产生中断,然后暂停主程序语句,转到中断程序中执行你的命令。执行完命令后返回到主程序的顺序语句中。然后知道下一次中断来临,再次产生中断。
回复

使用道具 举报

11#
ID:981034 发表于 2022-2-22 10:59 | 只看该作者
static  signed char
这样试试
回复

使用道具 举报

12#
ID:53621 发表于 2022-2-22 11:17 | 只看该作者
被编译后优化掉了。你定义了又没用。
回复

使用道具 举报

13#
ID:1003226 发表于 2022-2-23 10:34 | 只看该作者
定义为静态变量
回复

使用道具 举报

14#
ID:221871 发表于 2022-2-23 16:06 | 只看该作者

万能的方法是定义为static变量,可保万无一失。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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