atmega128 динамический режим ШИМ с использованием codevision avr

Я хочу изменить режим pwm с помощью ручного цифрового переключателя. Ниже приведен код, который я пишу, но когда я моделирую в Proteus, он работает неправильно. когда я запускаю его с любым входом без 00, сигнал ШИМ не отображается. при запуске 00 и после тумблера не отображается сигнал ШИМ.

    #include <mega128.h>

void Init_Timer2(void)
{
    TCCR2 = 0x00;
  
    TCCR2 |= (1 << WGM21) | (1 << COM20);
   
    OCR2 = 50;
    TIMSK |= 1 << OCIE2;
    TCCR2 |= 1<<CS20;
}
void init()
{
    DDRB.7 = 1; 
   
    DDRC.0 = 0;
    DDRC.1 = 0;               
    EICRB |= 0b00000101;    
    EIFR |= 0b00110000;
    SREG |= 0x80;      
    DDRB = 0xff;  
    PORTB = 0x00;

}
void set_duty()
{
    
    TCCR2 &= 0b11111000;
    
    TCNT2 = 0x00;  
    
    if ((PINC.1 == 0) && (PINC.0 == 0)){ 
        OCR2 = 0;    //0%               
    }
    else if (PINC.1 == 0 && PINC.0 == 1){         
        OCR2 = 101;  //40% 
    }           
    else if (PINC.1== 1 && PINC.0 == 0){ 
        OCR2 = 177;  //70%
    }  
    else if (PINC.1 == 1 && PINC.0 == 1){ 
        OCR2 = 254;  //100%              
    }
    TCCR2 |= 1<<CS20; 
 
} 
interrupt [TIM2_COMP] void timer2_out_comp(void)
{
    #asm("nop");
}


void main(void)
{

    Init_Timer2();  
    init();
    
    while(1){      
    
   
        set_duty();
            
    }
           
}

0 ответов

Другие вопросы по тегам