Вот мое:oleg110592 писал(а):вроде не врет
первые 6 - тупо с клавиатуры с "рус" вкл. Последние 3 - коды 250,251,252 - классический набор по АЛЬТ+3 цифры (на цифровой справа). Символы - те, коды - левые!
На код 232 печатает "ш".
Вот мое:oleg110592 писал(а):вроде не врет
Не понял. Массив и массив. Все равно ведь - загнал в буфер и жди пока передаст. Пока не передаст. Буфера же FIFO нет.КАШАК писал(а):А то посимвольно все понятно, а пакеты не хотят идти.
Код: Выделить всё
ISR(USART_RXC_vect){
usartRxBuf = UDR;
}Код: Выделить всё
// USART Receiver interrupt service routine
ISR(USART_RXC_vect)
{
char status,data;
status=UCSRA;
data=UDR;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
{
rx_buffer[rx_wr_index]=data;
if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
if (++rx_counter == RX_BUFFER_SIZE)
{
rx_counter=0;
rx_buffer_overflow=1;
}
}
}
// Get a character from the USART Receiver buffer
char getusart(void)
{
char data;
while (rx_counter==0);
data=rx_buffer[rx_rd_index];
if (++rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
cli();
--rx_counter;
sei();
return data;
}
Код: Выделить всё
#define USART0_InBufSize 20
static unsigned char USART0_InBuf[USART0_InBufSize];
static volatile unsigned char USART0_InBufInPos = 0;
static volatile unsigned char USART0_InBufOutPos = 0;
ISR(USART_RXC_vect) // USART, Rx Complete
{
USART0_InBuf[USART0_InBufInPos++] = UDR;
if (USART0_InBufInPos >= USART0_InBufSize) USART0_InBufInPos = 0;
}