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();
}
}