Код: Выделить всё
#include <avr/io.h>
#include <avr/interrupt.h>
#define StartConvAdc() ADCSRA |= (1<<ADSC)
#define KEY_NULL 0
#define KEY_S1 1
#define KEY_S2 2
#define KEY_S3 3
#define KEY_S4 4
volatile unsigned char KeyBuf = 0;
int main(void)
{
DDRC = 0xff;
PORTC = 0xff;
unsigned char tmp;
ADMUX = (0<<REFS1)|(1<<REFS0)|(1<<ADLAR)|(0<<MUX3)|(0<<MUX2)|(0<<MUX1)|(0<<MUX0); //
ADCSRA = (1<<ADEN)|(1<<ADSC)|(0<<ADATE)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0); // вкл. ацп, режим одиночного преобр., разрешение прер., частота преобр. = FCPU/128
StartConvAdc(); // Запустить преобразование
while(1)
{
tmp = KeyBuf;
if (tmp)
{
tmp--;
PORTC = ~(1<<tmp);
}
else
PORTC = 0xff;
}
return 0;
}
#pragma vector=ADC_vect
_AVR_INTERRUPT_H_ void adc_my(void)
void adc_my(void)
{ //Ошибку в этом месте выдает
sei();
unsigned char AdcBuf = ADCH;
if (AdcBuf > 240) //опеределяем в какой диапазон попадает его значение
KeyBuf = KEY_S4;
else if (AdcBuf > 180)
KeyBuf = KEY_S3;
else if (AdcBuf > 120)
KeyBuf = KEY_S2;
else if (AdcBuf > 35)
KeyBuf = KEY_S1;
else
KeyBuf = KEY_NULL;
StartConvAdc(); //запускаем преобразование и выходим
{
}Взято с http://chipenable.ru/index.php/programm ... ast-2.html
Схема подключения
Не смотря на ошибку со открытой скобкой в конце (которой вроде как не должно быть, но без нее ошибка), выдается ошибка Error 2 expected '=', ',', ';', 'asm' or '__attribute__' before '{' token (обозначил это месте в коде).
В чем проблема?
Заменил только __interrupt на _AVR_INTERRUPT_H_, как в заголовочнике avr/interrupt.h (ибо код был писан вроде как на CodeVisionAVR ). Правильно же?
Даже если этот interrupt заменить на sei(); , и код без ошибок компилится, то схема не работает. При подключении питания мигнут быстро 2 светодиода из всех и дальше тишина.. (не смотря на изменения напряжений на входе АЦП).