搜索
bottom↓
回复: 2

AVR M8 IO口模拟PWM 为何超过3路波形就不对了

[复制链接]

出0入0汤圆

发表于 2013-5-15 14:38:49 | 显示全部楼层 |阅读模式
AVR M8 IO口模拟PWM 为何超过3路波形就不对了

没有加其他程序时超过三路都没问题,加上NRF24L01什么的超过3路就时间不对了!

请问什么原因



#define PWM1_high PORTC |=(1<<0)     //PWM1输出端口PORTC0
#define PWM1_low PORTC &=~(1<<0)
#define PWM1_IO DDRC |=(1<<0)

#define PWM2_high PORTC |=(1<<1)     //PWM2输出端口PORTC1
#define PWM2_low PORTC &=~(1<<1)
#define PWM2_IO DDRC |=(1<<1)

#define PWM3_high PORTC |=(1<<2)     //PWM2输出端口PORTC2
#define PWM3_low PORTC &=~(1<<2)
#define PWM3_IO DDRC |=(1<<2)

#define PWM4_high PORTC |=(1<<3)     //PWM2输出端口PORTC3
#define PWM4_low PORTC &=~(1<<3)
#define PWM4_IO DDRC |=(1<<3)

unsigned int count,PWM_FRE;
unsigned int pwm1,pwm2,pwm3,pwm4;//,pwm5,pwm6;


void PWM_int(void)
{
PWM1_IO;
PWM1_low;
PWM2_IO;
PWM2_low;
PWM3_IO;
PWM3_low;
PWM4_IO;
PWM4_low;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 8000.000 kHz
TCCR0=0x02;  //内部时钟,8分频
TCNT0=0xF6;  //初始值
pwm1=0;      //PWM1初始占空比设定
pwm2=75;      //PWM2初始占空比设定
pwm3=250;      //PWM1初始占空比设定
pwm4=75;      //PWM2初始占空比设定

PWM_FRE=500;   //PWM频率设定
TIMSK=0x01;
}


//void PWM_Turn(void)             //调整占空比
//{
////        if(count==PWM_FRE)
////        count=0;     
//   
//        if(PINB.0==0&&pwm1>0)
//            {
//            if(PINB.0==1)
//                {
//                pwm1=pwm1-50;
//
//                }
//            }
//
//        if(PINB.1==0&&pwm1<300)
//        {
//            if(PINB.1==1)
//            {
//            pwm1=pwm1+50;
//
//            }
//        }
// }
//

void PWM_IO(void)
{
    if(count==PWM_FRE)
       {
       count=0;
       }
     count++;
     if (count<pwm1)                 //判断pwm1是不是改输出高电平
     {
     PWM1_high;
     }
     else
     {                          //不是则输出0
     PWM1_low;
     }
      if (count<pwm2)                 //判断pwm2是不是改输出高电平
     {
     PWM2_high;
     }
     else
     {                          //不是则输出0
     PWM2_low;
     }   
     
     if (count<pwm3)                 //判断pwm4是不是改输出高电平
     {
     PWM3_high;
     }
     else
     {                          //不是则输出0
     PWM3_low;
     }
     
//     if (count<pwm4)                 //判断pwm4是不是改输出高电平
//     {
//     PWM4_high;
//     }
//     else
//     {                          //不是则输出0
//     PWM4_low;
//     }  
     
   
}


void main(void)
{
     char i,RxBuf[32];
    DDRD|=0x2B;//((1<<0)|(1<<1)|(1<<3)|(1<<5));
    DDRD&=~0x14;//(1<<2)|(1<<4);
//******************************************************************************
    lcd_init(16);
    init_NRF24L01() ;
    PWM_int();

   
#asm("sei")
        
   
    while(1)
    {
       SetRX_Mode();

        
        if(nRF24L01_RxPacket(BUF))   //判断是否收到数据
               {
                      display_1();                       //---------显示X轴
               display_2();                       //---------显示Y轴
               display_z3();                       //---------显示Z轴
               delay_us(10);                        //延时   
                              
               }        
               else
               {
               pwm1=0;
               pwm2=0;
               
               }
        
     }   
}



// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Reinitialize Timer 0 value
TCNT0=0xF6;

PWM_IO();


}

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2013-5-16 18:13:55 | 显示全部楼层
代码不全,不知IO是否重复使用,是否有其它中断

出0入0汤圆

发表于 2013-5-16 22:23:47 | 显示全部楼层
全部看看,看看什么情况。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 22:17

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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