找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2074|回复: 12
收起左侧

关于单片机中断(一小段代码看不懂,麻烦有空的大神进来帮忙看看

[复制链接]
ID:325939 发表于 2018-5-15 11:24 | 显示全部楼层 |阅读模式
  1. /*************定时器0中断服务程序***************/
  2. void time0_int() interrupt 1
  3. {
  4. static uchar value;
  5. TH0 = 0x3c;
  6. TL0 = 0xb0;     // 50ms
  7. value ++;
  8. if(value % 2 == 0)
  9. {
  10.   flag_100ms = 1 ;
  11. }
  12. }
复制代码
1、value没赋初值吧?if里怎么知道value是多少。。
2、if没有循环功能吧?执行完了不就出来了吗?
只学过汇编而且忘差不多了,时间有点紧迫所以想直接问比较快,求助QAQ


回复

使用道具 举报

ID:164602 发表于 2018-5-15 12:40 | 显示全部楼层
第一:你没看到有:value++;吗?
第二:下次中断,不就回来了?

评分

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

查看全部评分

回复

使用道具 举报

ID:319019 发表于 2018-5-15 13:27 | 显示全部楼层
默认初值为0;没循环,但每累加2次执行一次if里面的语句;

评分

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

查看全部评分

回复

使用道具 举报

ID:213173 发表于 2018-5-15 13:40 | 显示全部楼层
这段程序不严谨,应该给value赋初值=0,由于定义的是静态变量static uchar value;,编译器默认初值=0,value在每次定时器0中断时自加1,所以他的值是从0~255周而复始,if(value % 2 == 0)判断value是偶数,flag_100ms标志置1,否则直接结束程序。

评分

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

查看全部评分

回复

使用道具 举报

ID:311300 发表于 2018-5-15 14:25 | 显示全部楼层
1,value静态变量默认初值唯一,并且每次中断进来后value保持上一次的值。
回复

使用道具 举报

ID:311300 发表于 2018-5-15 14:28 | 显示全部楼层
1,value是static静态变量,初始化值为0,并且每次进入中断value是保持上一次的值,也就是每次进入中断后value值加1。第一次进入是0,第二次是1,第三次是2.。。。
2,这是定时器中断,也就是每50ms就会执行一次,并且value保持上一次的值,也就是每100ms if条件成立,执行if条件下面的程序。

评分

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

查看全部评分

回复

使用道具 举报

ID:325939 发表于 2018-5-15 15:36 | 显示全部楼层
哇啊啊啊啊啊你们好善良,就这么一会这么多人回复,太感动了谢谢!!
先仔细看看你们说的
回复

使用道具 举报

ID:241128 发表于 2018-5-15 16:13 | 显示全部楼层
开始的100ms可以成立一次,之后是每1秒大概成立4次,可能程序在测试阶段没完成,原本可能是每100ms就置位一次flag_100ms标志。但是应该在判断语句里清零静态寄存器:
if(value % 2 == 0)
{
  flag_100ms = 1 ;
  value=0;
}
这样就有点意思了,不然上面的程序都不好分析,因为255/2不能整除,后面的标志位出现的时机就不知道啥意思了.....

评分

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

查看全部评分

回复

使用道具 举报

ID:325939 发表于 2018-5-15 16:50 | 显示全部楼层
知道第一问了,第二问,为什么要有个if语句在这呢?
回复

使用道具 举报

ID:319019 发表于 2018-5-15 17:48 | 显示全部楼层
zhdp 发表于 2018-5-15 13:27
默认初值为0;没循环,但每累加2次执行一次if里面的语句;

50ms中断一次,value +1,再50ms中断一次,再value +1,value/2表示偶数时执行if语句,但你没value清0,所以value到255时就不再增加了 value=255,不循环。if是判断语句,你没学过吗?

评分

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

查看全部评分

回复

使用道具 举报

ID:330633 发表于 2018-5-15 17:51 | 显示全部楼层
value默认是0,每次自增1;if是判断value的值是否是偶数情况,是就将falg_100ms置1,

评分

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

查看全部评分

回复

使用道具 举报

ID:325939 发表于 2018-5-15 19:30 | 显示全部楼层
zhdp 发表于 2018-5-15 17:48
50ms中断一次,value +1,再50ms中断一次,再value +1,value/2表示偶数时执行if语句,但你没value清0, ...

学过,但不知道这里为什么50ms中断一次。。。
回复

使用道具 举报

ID:325939 发表于 2018-5-15 19:33 | 显示全部楼层
噢噢噢噢知道了 是定时器 所以50ms中断一次
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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