Здравствуйте всем начал работать с atmega64a. Получилось отправлять данные с usart на терминал но не получается принимать данные с терминала. вывод PC3 срабатывает что показывает при приема данных заходит в прерывание по приему вот код Код (C++): ISR (TIMER0_COMP_vect) { T++; } ISR(USART0__RX_vect) //завершение приема { rx_in_byte(UDR0);// priem po visual studio PORTC^=(1<<PC3); } //*****usart_Tx******** ISR (USART0__UDRE_vect)//регистр данных на передачу пуст { UDR0 = *sendd; sendd++; ToSend++; if (ToSend == 1) { UCSR0B &= ~(1 << UDRIE0); } } int main(void) { //timer_0 TCCR0 |= (1<<WGM01); // Режим CTC (сброс по совпадению) TIMSK |=(1<<OCIE0); // Разрешить прерывание по совпадению TCCR0 |=(1<<CS02)|(1<<CS01)|(1<<CS00); // CLK/1024,64mcs //TCCR0 |=(1<<CS02);//clk/64,4mcs OCR0=15; //по достижении уходить в вектор прерывании, 15 равняется к 960 нс/16MHz TCNT0=0; //******usart*************** UBRR0H = (unsigned char)(ubrr>>8); UBRR0L = (unsigned char)ubrr; UCSR0B =(1<< RXEN0) //разрешаем прием |(1<< TXEN0 );//разрешаем передачу //UCSR0C = (1<<USBS0)//2 stop bit UCSR0C = (0<<USBS0)//1 stop bit |(1<<UCSZ00)|(1<<UCSZ01);// 8-бит dannie UCSR0B |=(1<<RXCIE0);//прерывание по приему данных //********************** DDRC |=(1<<PC3); PORTC &=~(1<<PC3); asm("sei"); while(1) { if (T>=2000) { if(usartRxBuf[0]== 5) {UART_SendData(TxBuf);} T=0; } } } //********usart Rx**************************** void rx_in_byte(uint8_t bits) {static uint8_t status,rx_wr_index=0,zapis=0; /*if (zapis < 4) {usartRxBuf[zapis++]=bits; } if (zapis == 4) {startrec=1; zapis=0;} */ usartRxBuf[0]=bits; } //********usart Tx************************ void UART_SendData(uint8_t *pSendData)//otpravka dannih po prerivanii { ToSend=0; sendd = pSendData; UCSR0B |=(1<<UDRIE0);//preriv.po opustusheni }
Разобрался я отправлял данные с терминала в коде нужно было конвертировать данные с символьных на цифровой Код (C++): /********usart Rx**************************** void rx_in_byte(uint8_t bits) {static uint8_t status,rx_wr_index=0,zapis=0; uint8_t a=0,b=0,c=0; a =bits; // vvod dannih s terminala v1.9 "simbol" c=0; if ((a>=48) && (a<=57)) { c = c * 10 + (a - 48); } b=c; usartRxBuf[zapis]=b; }