Сб дек 17, 2016 23:40:34
#ifndef F_CPU
#define F_CPU 8000000UL // рабочая частота
#endif
#include <avr/io.h>
#include <avr/interrupt.h>
int init_UART(void)
{
// Установка скорости 4800
UBRRH=0;
UBRRL=103;
UCSRA=0b00000000;
UCSRB|=(1<<RXEN)|(1<<RXCIE)|(1<<TXEN);
UCSRC=0b10100110; // 8bit EPB 1Stop
}
volatile unsigned char i=0;
volatile unsigned long data;
ISR(USART_RXC_vect) //прерывание по приему
{
temp[i]=UDR;
if (temp[i]==0xFF)
{
data = 0;
S = 1;
for(i=i-1; i!=0; i--)
{
data = data+temp[i];
}
}
else
{
i++;
}
}
Вс дек 18, 2016 07:25:03
Вам нужно, для начала, открыть DS ATmega8. Сразу станет понятно, что прерываний от RxC при приеме на PD2 программа никогда не дождется. Приём на PD0/RxD гораздо проще. Передавать через лапы "PD6 или PB1" можно, но для этого придется использовать самописную программу. Опять же, лучше использовать лапу PD1/TxD.Frosty85 писал(а):...Используемый мк - Atmega8-16AU
Выводы PD2 - на прием, PD6 или PB1 - на передачу.
Цель организовать прием и передачу с заданными параметрами.
#ifndef F_CPU
#define F_CPU 8000000UL // рабочая частота
#endif
// Установка скорости 4800
UBRRH=0;
UBRRL=103;
UCSRA=0b00000000;
UCSRB|=(1<<RXEN)|(1<<RXCIE)|(1<<TXEN);
UCSRC=0b10100110; // 8bit EPB 1Stop
}
BAUD=4800
UBRRH=HIGH(F_CPU/BAUD/16-1)
UBRRL=LOW(F_CPU/BAUD/16-1)
UCSRC=0b10100110; // 8bit EPB 1Stop; Сначала устанавливается режим работы, затем оная разрешается
UCSRB|=(1<<RXEN)|(1<<RXCIE)|(1<<TXEN)
Вс дек 18, 2016 16:02:27
Вт дек 20, 2016 15:44:19
Frosty85 писал(а):тут не получится как на ARM перекинуть на свободные выводы
Вт дек 20, 2016 17:29:07
Ср дек 21, 2016 07:05:25
for(i=i-1; i!=0; i--)
{
data = data+temp[i];
}
Чт дек 22, 2016 13:28:55
Сб май 13, 2017 14:46:49
Пн май 15, 2017 07:46:55
Вт май 16, 2017 10:10:25