Код
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#define ADC_VREF_TYPE 0x00
// Вектор прерывания компаратора таймера:
ISR(TIM0_COMPA_vect)
{
TCNT0 = 0x0;
// Мигание лампочки:
PORTB ^= 0b00001000;
}
int main(void)
{
// Начальная инициализация, сгенерирована CodeVisionAVR
// Input/Output Ports initialization
// Port B initialization
// Func5=In Func4=In Func3=Out Func2=In Func1=In Func0=In
// State5=T State4=T State3=0 State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x08;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 150,000 kHz
// Mode: Normal top=FFh
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x00;
TCCR0B=0x03;
TCNT0=0x00;
OCR0A=0x99;
OCR0B=0x00;
// External Interrupt(s) initialization
// INT0: Off
// Interrupt on any change on pins PCINT0-5: Off
GIMSK=0x00;
MCUCR=0x00;
// Timer/Counter 0 Interrupt(s) initialization
TIMSK0=0x04;
// Analog Comparator initialization
// Analog Comparator: Off
ACSR=0x80;
ADCSRB=0x00;
// ADC initialization
// ADC Clock frequency: 75,000 kHz
// ADC Bandgap Voltage Reference: Off
// ADC Auto Trigger Source: None
// Digital input buffers on ADC0: On, ADC1: On, ADC2: On, ADC3: On
DIDR0&=0x03;
DIDR0|=0x00;
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x8F;
sei();
while (1)
{
//строки, переводящие контроллер в idle режим
//set_sleep_mode(SLEEP_MODE_IDLE);
//sleep_mode();
}
return 0;
}
#include <avr/interrupt.h>
#include <avr/sleep.h>
#define ADC_VREF_TYPE 0x00
// Вектор прерывания компаратора таймера:
ISR(TIM0_COMPA_vect)
{
TCNT0 = 0x0;
// Мигание лампочки:
PORTB ^= 0b00001000;
}
int main(void)
{
// Начальная инициализация, сгенерирована CodeVisionAVR
// Input/Output Ports initialization
// Port B initialization
// Func5=In Func4=In Func3=Out Func2=In Func1=In Func0=In
// State5=T State4=T State3=0 State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x08;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 150,000 kHz
// Mode: Normal top=FFh
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x00;
TCCR0B=0x03;
TCNT0=0x00;
OCR0A=0x99;
OCR0B=0x00;
// External Interrupt(s) initialization
// INT0: Off
// Interrupt on any change on pins PCINT0-5: Off
GIMSK=0x00;
MCUCR=0x00;
// Timer/Counter 0 Interrupt(s) initialization
TIMSK0=0x04;
// Analog Comparator initialization
// Analog Comparator: Off
ACSR=0x80;
ADCSRB=0x00;
// ADC initialization
// ADC Clock frequency: 75,000 kHz
// ADC Bandgap Voltage Reference: Off
// ADC Auto Trigger Source: None
// Digital input buffers on ADC0: On, ADC1: On, ADC2: On, ADC3: On
DIDR0&=0x03;
DIDR0|=0x00;
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x8F;
sei();
while (1)
{
//строки, переводящие контроллер в idle режим
//set_sleep_mode(SLEEP_MODE_IDLE);
//sleep_mode();
}
return 0;
}
Так все нормально, лампочка на PB3 начинает подавать признаки жизни, но если раскомментировать строки, переводящие контроллер в idle, то лампочка не загорается... Скажите, пожалуйста, что я делаю не так?
На всякий случай:
Код
Fuses:
OSCCAL = 5D, 5C
EESAVE = 1
WDTON = 1
CKDIV = 1
SUT = 2
CKSEL = 2
SELFPRGEN = 1
DWEN = 1
BODLEVEL = 3
RSTDISBL = 1
OSCCAL = 5D, 5C
EESAVE = 1
WDTON = 1
CKDIV = 1
SUT = 2
CKSEL = 2
SELFPRGEN = 1
DWEN = 1
BODLEVEL = 3
RSTDISBL = 1