一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 1959|回复: 24
收起左侧

avr单片机又遇到神奇的问题,求助

[复制链接]
发表于 2017-3-4 21:34 | 显示全部楼层 |阅读模式
本帖最后由 benxiong22 于 2017-3-4 22:26 编辑

pwm调节LED亮度,代码如下,占空比系数LED_duty放在while(1)里led就不亮,放在while的上面就正常,百思不得其解,求解
main()
{
    while(1)
   {LED_duty=50; }
}
ISR(TIMER1_COMPB_vect)
{
     for(uint count=1;count<=100;count++)
       {
         if(count<LED_duty)
          { LED_ON();       }       //当计数值小于占空比时点亮
        else
            LED_OFF();                 //否则就关闭
}
 楼主| 发表于 2017-3-4 21:42 | 显示全部楼层
程序为什么不能进入到while里面呢?
发表于 2017-3-4 22:08 | 显示全部楼层
avr不怎么懂,但是看上去你大小写好像不对。
然后,ISR();是不是也要加到while里面的
 楼主| 发表于 2017-3-4 22:21 | 显示全部楼层
sdf15937 发表于 2017-3-4 22:08
avr不怎么懂,但是看上去你大小写好像不对。
然后,ISR();是不是也要加到while里面的

大小写没看见有什么问题。
ISR()是定时中断服务程序,不用放入while吧
 楼主| 发表于 2017-3-4 22:22 | 显示全部楼层
通过在while里放入测试标志符号,发现不是不能进入while里,而是LED_duty没有被修改成功!
 楼主| 发表于 2017-3-4 22:34 | 显示全部楼层
现在的问题变成是,我在程序一开始定义了unsigned int LED_duty,在中断程序里调用它。为什么while里的LED_duty=50却不能修改它?
发表于 2017-3-4 23:05 来自手机 | 显示全部楼层
放while(1)里,值会被重复的刷回50
发表于 2017-3-4 23:44 | 显示全部楼层
需要看完整程序,我考虑你的中断服务程序一直在进中断,初始化太早,因为你的中断服务程序的执行时间是比较长的,这个写法不好。
发表于 2017-3-4 23:45 | 显示全部楼层
AVR可以直接输出脉宽调制信号的,不需要这样费事。
 楼主| 发表于 2017-3-4 23:50 | 显示全部楼层
灰太狼8888 发表于 2017-3-4 23:05
放while(1)里,值会被重复的刷回50

刷回50的意思是被赋值50?
既然赋值50了,为什么led亮度一直不亮呢

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-4-25 04:56 , Processed in 0.066844 second(s), 45 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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