[AVR单片机] 主程序 循环体中的代码好像没有执行,哪里出问题了?

[复制链接]
1635|15
 楼主| wf.yang 发表于 2016-9-8 11:19 | 显示全部楼层 |阅读模式
本帖最后由 wf.yang 于 2016-9-8 11:28 编辑

老师好!

用 ATmega16A 做一个 PWM 波形发生器。定时计数器 T/C1 工作在模式 14(快速PWM)。在 PC 口接有拨码开关,在主程序中反复读取 PC 口(拨码开关的状态)读取数据存入 R16,同时 R17 赋值 $00。在输入捕获子中断程序中,把 R17、R16 的值送入OCR1B,以控制 OC1B 输出的脉冲宽度。

结果,OC1B 输出的脉冲宽度不随拨码开关变化。

如果把读取 PC 口的指令放到输入捕获中断服务程序,OC1B 输出的脉冲宽度就可以随着拨码开关变化。

好像,主程序中的循环体就没有被执行。为什么会出现这样的问题?


主程序中的循环体:

Loop:       NOP
               NOP
               NOP
               NOP

               LDI       R17,    $00;            R17 赋值  $00,作为OCR1B 高8位 数据                              
               IN        R16,    $13;             读取 PC 口,暂存于 R16,作为OCR1B 低8位 数据
               ANDI    R16,    $7F;             R16 最高位清零,使 R16 数据不大于 128

              NOP
              NOP
              NOP
              NOP

             JMP    Loop

 楼主| wf.yang 发表于 2016-9-8 18:25 | 显示全部楼层
没有人回答呀。

又发现规律了。在定时计数器1的 PWM 模式,只要打开与定时计数器 1 相关的任意一个中断,主程序循环体内的指令就执行不到。

即使,如果在循环体内先关闭这些中断,执行一系列指令之后,然后再打开这些中断,进行下一次循环。也只有第一次循环内的指令可以执行到,第二次循环就又执行不到了。也就是说,只要这些中断打开一次,即使再关掉,也不行。

非常困惑,循环体内的程序没有执行到,程序指针跑到哪里去了?
创隆电子 发表于 2016-9-8 18:47 | 显示全部楼层
不会没有退出中断吧
wzh8158 发表于 2016-9-8 20:43 | 显示全部楼层
汇编,看的头都大了!
raymond 发表于 2016-9-8 20:54 | 显示全部楼层
中断程序看看,堆栈是不是用了R16,R17?
raymond 发表于 2016-9-8 20:56 | 显示全部楼层
还有就是中断地址写对了没有?
零下10度的冰 发表于 2016-9-8 22:19 | 显示全部楼层
设置一个地址变量,并且判断啊,判断完之后reset.
玄德 发表于 2016-9-8 23:56 | 显示全部楼层

1、你确认进入LOOP了?可能根本没进来过。
2、如果没猜错,$表示立即数,
     那么,上述程序根本没有读取C口的语句。
3、程序中同样没有改变IO口的语句。


NE5532 发表于 2016-9-9 09:03 | 显示全部楼层
你在主循环里拉高拉低口线看看呢。
416356084 发表于 2016-9-9 11:28 | 显示全部楼层
汇编看不懂的路过
wsnsyy 发表于 2016-9-9 14:03 | 显示全部楼层
$代表什么
 楼主| wf.yang 发表于 2016-9-10 20:07 | 显示全部楼层
raymond 发表于 2016-9-8 20:54
中断程序看看,堆栈是不是用了R16,R17?

好,谢谢!   我再看看。
 楼主| wf.yang 发表于 2016-9-10 20:08 | 显示全部楼层

16进制数呀
 楼主| wf.yang 发表于 2016-9-10 20:09 | 显示全部楼层
玄德 发表于 2016-9-8 23:56
1、你确认进入LOOP了?可能根本没进来过。
2、如果没猜错,$表示立即数,
     那么,上述程序根本没有读 ...

是呀,我就说怀疑没有进入到 LOOP。但,它去哪里了?
 楼主| wf.yang 发表于 2016-9-10 20:09 | 显示全部楼层
NE5532 发表于 2016-9-9 09:03
你在主循环里拉高拉低口线看看呢。

这是个办法,我看看
 楼主| wf.yang 发表于 2016-9-10 20:11 | 显示全部楼层
raymond 发表于 2016-9-8 20:56
还有就是中断地址写对了没有?

这个没问题,看过了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

846

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部