打印
[PIC®/AVR®/dsPIC®产品]

AVR单片机IO输出方波问题请教

[复制链接]
2127|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也不规范,也没见大循环。

使用特权

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

使用特权

评论回复
评论
chongdongchen 2021-9-9 08:32 回复TA
@sjnh :还是你眼睛亮,没有break确实能输出PWM 
chongdongchen 2021-9-9 08:31 回复TA
@jiweiminiou :不错了,边学边做很快就学会了 
sjnh 2021-9-9 08:29 回复TA
没有break,所有后面的case 1也执行,就有pwm了 
jiweiminiou 2021-9-8 13:57 回复TA
大佬好!的确是在大循环一直调用pwmout(), 菜鸟只能想到这个思路了。不知道怎么写才算规范,还望大佬指点。十分感谢! 
6
chenjun89| | 2021-9-8 21:07 | 只看该作者
这个有点奇葩

使用特权

评论回复
7
jiweiminiou|  楼主 | 2021-9-9 09:40 | 只看该作者

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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

8

帖子

0

粉丝