[PIC®/AVR®/dsPIC®产品] AVR单片机IO输出方波问题请教

[复制链接]
2374|11
 楼主| jiweiminiou 发表于 2021-9-7 10:20 | 显示全部楼层 |阅读模式
各位大佬好。我采用AVR ATTINY24A单片机。做高、低电平delay的方式 用IO输出方波。但调delay值,不能改变占空比,是什么原因?同样的代码。在51中是可以的。谢谢!
代码如下:
void pwmout()
{
        unsigned char i=0;
        switch(i)
        {
                case 0:
                                                DDRB = 0x0F;
                                                PORTB = 0x01; //输出高
                                                delay(2000);
                                                i=1;
        
                case 1:
                                                DDRB = 0x0F;
                                                PORTB = 0x00; //输出高
                                                delay(1000);
                                                i=0;
                                                
                                       
        }
}

void delay(unsigned int z)
{
        unsigned int x,y;
        for(x=z;x>0;x--)
        for(y=110;y>0;y--);
}
请大佬们,指点一下原因。谢谢!
LcwSwust 发表于 2021-9-7 11:18 | 显示全部楼层
也许是编译器优化太狠了,建议加 volatile ,加在delay里的变量定义前。
 楼主| jiweiminiou 发表于 2021-9-7 12:02 | 显示全部楼层
LcwSwust 发表于 2021-9-7 11:18
也许是编译器优化太狠了,建议加 volatile ,加在delay里的变量定义前。

谢谢大佬,的确是这个原因。
菜鸟路漫漫。
gx_huang 发表于 2021-9-7 13:20 | 显示全部楼层
这个PWMOUT一下子没看懂,外部主程序一直调用这个函数?
不喜欢这样的风格,switch也不规范,也没见大循环。

评论

谢谢大佬指点。菜鸟我才刚开始学单片机。 如果大佬有时间给我写一段例程,在下感激不尽!  发表于 2021-9-7 13:40
chongdongchen 发表于 2021-9-8 09:16 | 显示全部楼层
确实不规范,估计是大循环一直调用pwmout()。
不过注意pwmout()内 : unsigned char i=0; 这始终为0,能输出PWM就奇怪了。
按照楼主的意思,应该写成static unsigned char i=0;

评论

@sjnh :还是你眼睛亮,没有break确实能输出PWM  发表于 2021-9-9 08:32
@jiweiminiou :不错了,边学边做很快就学会了  发表于 2021-9-9 08:31
没有break,所有后面的case 1也执行,就有pwm了  发表于 2021-9-9 08:29
大佬好!的确是在大循环一直调用pwmout(), 菜鸟只能想到这个思路了。不知道怎么写才算规范,还望大佬指点。十分感谢!  发表于 2021-9-8 13:57
chenjun89 发表于 2021-9-8 21:07 来自手机 | 显示全部楼层
这个有点奇葩
 楼主| jiweiminiou 发表于 2021-9-9 09:40 | 显示全部楼层

谢谢大佬指点。菜鸟第一次做一个量产用的程序,以前51玩过一点,AVR第一次接触。本来想用外部中断+定时器做PWM输出,无奈目前还不会。欢迎大佬教导。
谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

9

帖子

0

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