Вот что-то написал с передачей данных в буфер.
Благодарю
sserg_ey за пример, но я в нем чето неочень разобрался, соответственно у меня ничего невийшло. Помогите разобраться и подправить программу.
Виложую саму программу и архив проекта.
#include ‹mega8.h›
#include ‹delay.h›
#include ‹stdio.h›
#define ADC_VREF_TYPE & 0xff;
#define MAX_IZMERENIY 300 // максимальное количество измерений
bit f_Buff_overfl; // флаг переполнения буфера
int index_counter; // счетчик позиции в буфере
int ADC_Data[MAX_IZMERENIY]; // буфер
interrupt [ADC_INT] void adc_isr(void){
{
if(!f_Buff_overfl) // проверка чтобы прерывание не переписывало данные если они не прочитаны
{
if(index_counter ‹ sizeof(ADC_Data)-1) // если счетчик не за пределами массива
{
ADC_Data[index_counter]=ADCW; // запоминаем результат в буфере
index_counter++; // наращиваем счетчик
return; // выходим из прерывания
};
f_Buff_overfl=1; //иначе, выставляем флаг, что в буфере данных под завязку.
index_counter=0; // сбрасываем счетчик
}
}
}
void init(void){
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 57600
UCSRA=0x02;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x19;
ADMUX=0x0b00000000; // вибираем 0-й канал АЦП
ADCSRA=0x0b10001011; // конфигурация АЦП
#asm ("sei"); // разрешить все переривания
}
void main(void)
{
init(); // визов функции int (инициализация всего)
while(1){
ADCSRA=0b11010011; // включаем АЦП преобразование
printf("%d ",ADC_Data); // печатаем в УАРТ значение регистра ADCW
putchar(0x0D); // на новую строку УАРТА
}
}