本帖最后由 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
|