[AVR单片机] 大侠求救!!! AVR 调不了占空比 急急急急!!

[复制链接]
 楼主| gxbltao 发表于 2014-12-9 16:08 | 显示全部楼层 |阅读模式
本帖最后由 gxbltao 于 2014-12-9 16:12 编辑

/*****************************************************************************
名字:avr pwm占空比  

环境:studio4.16+winAVR

MCU:Atmega16



******************************************************************************/

#define F_CPU  1000000UL
#include<avr/io.h>
#include<util/delay.h>
#include<avr/interrupt.h>

#define KEY_ON() (( PINB & _BV(PB0))==0x00)

//#include <macros.h>
int flag_bell=0;  
int unsigned x;

/*端口初始化*/
void port_init()   
{  
        DDRD|=(1<<PD5);  //配置PD5口为输出  
        PORTD|=(1<<PD5);  //PD5口的初始值为"1"
        DDRD|=(1<<PD4);
        DDRC|=(1<<PC0);         PORTC|=(1<<PC0); // LED 为输出高电平

        DDRD&=~_BV(PD2);//PD2为输入
        PORTD|=_BV(PD2);
}

/*PWM初始化*/
void pwm_init()
        {
         DDRB=0X00;PORTB=0XFF; // PB:按键输入
         
         TIMSK=(1<<OCIE1A); //使能比较匹配中断
         TCCR1A=0x63;      //配置定时器工作在快速PWM模式
         TCCR1B=0x19;     //无分频
         OCR1A=1000;    //设置捕捉比较输出初值  /** 调整输出频率 **/
         OCR1B=x+40;                             /** 调整占空比的 **/
    }

/**  中断初始化 **/
void INT_intt()
{
        GICR|=_BV(INT0);
        MCUCR=0x02;
     
}
/**  中断输入 **/

ISR(INT0_vect )
{
  //PORTC=0x00;
  //LED_ON=(1<<PC0);
  _delay_ms(3000);
}

/*PWM中断服务程序*/

int main()
{
        cli();
        port_init();
        void INT_intt();
        
        pwm_init();
        while(1)
   {
        if( KEY_ON())
        {
        //cli();
        PORTC=0x00;// LED 为输出高电平
        x++;
        
    }
        //_delay_ms(300);
   }
}


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| gxbltao 发表于 2014-12-9 16:09 | 显示全部楼层
额 怎么变成这样了
 楼主| gxbltao 发表于 2014-12-9 16:12 | 显示全部楼层
请以附件为准
wangch_sh 发表于 2014-12-9 17:40 | 显示全部楼层
PWM波出来了吗?先确认按键是否正常,感觉按键写得有问题。
 楼主| gxbltao 发表于 2014-12-9 17:44 | 显示全部楼层
wangch_sh 发表于 2014-12-9 17:40
PWM波出来了吗?先确认按键是否正常,感觉按键写得有问题。

波形是出来了 就是调不了占空比 求救呀
 楼主| gxbltao 发表于 2014-12-9 17:48 | 显示全部楼层
小弟初学AVR  大侠们更否帮我修改下占空比可调  小弟不甚感激
wangch_sh 发表于 2014-12-9 17:52 | 显示全部楼层
OCR1B=x+40;                             /** 调整占空比的 **/
按下按键你应该改这个寄存器的值吧。
 楼主| gxbltao 发表于 2014-12-9 18:02 | 显示全部楼层
附件有原理图和整个工程文件 请各位大神 详解 谢谢
 楼主| gxbltao 发表于 2014-12-10 13:32 | 显示全部楼层
wangch_sh 发表于 2014-12-9 17:52
OCR1B=x+40;                             /** 调整占空比的 **/
按下按键你应该改这个寄存器的值吧。 ...

是改这个值呀  但是模拟的时候  没能改变  烦请帮我看下 该怎写才对
yifabin023 发表于 2014-12-10 13:40 | 显示全部楼层
OCR1B=x+40;这一句要放到while(1)里面去,不然系统不会更新OCR1B的值的!
 楼主| gxbltao 发表于 2014-12-10 15:10 | 显示全部楼层
yifabin023 发表于 2014-12-10 13:40
OCR1B=x+40;这一句要放到while(1)里面去,不然系统不会更新OCR1B的值的!

哦 是这样子的吗 我先试试  我刚学单片机 很多不懂的
 楼主| gxbltao 发表于 2014-12-12 18:58 | 显示全部楼层

16553

本帖最后由 gxbltao 于 2014-12-13 10:46 编辑

12432434

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| gxbltao 发表于 2014-12-12 19:01 | 显示全部楼层
yifabin023 发表于 2014-12-10 13:40
OCR1B=x+40;这一句要放到while(1)里面去,不然系统不会更新OCR1B的值的!

OCR1B=x; 这一句已经放到while(1)里面去了  按下按键还是调不了呀  

大侠 烦请帮忙看看呗  小弟不甚感激!
12# 楼已附上压缩包  占空比.rar 请查看
谢谢了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

45

帖子

0

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