Добился я того что, могу отправить данные из МК, но в МК не хочет. Исходный код касаемый приема МК вот такой.
#define SIZERX 32 char arRx[SIZERX]; unsigned char posRx = 0;
// прерывание происходит по приходу байта SIGNAL(SIG_UART_RECV) { arRx[posRx] = inp(UDR); //вот это не компилилось на новом компиляторе WINAVR posRx++; if(posRx >= SIZERX) posRx--; }
#define SIZERX 32 char arRx[SIZERX]; unsigned char posRx = 0;
SIGNAL(SIG_UART_RECV) { arRx[posRx] = UDR; //поменял вот так, правильно ли? posRx++; if(posRx >= SIZERX) posRx--; }
char* UART_Recv(char* pnRecv) { *pnRecv = posRx; return arRx; }
инициализация UART void UART_Init(void) /* initialize uart */ { /* enable RxD/TxD and ints */ UCR =(1<<RXCIE)|(1<<RXEN)|(1<<TXEN); /* set baud rate */ UBRR = (unsigned char)UART_BAUD_SELECT; }
char Send_Receive(PGM_P pSend, int nBytes) { char timer = 0;
UART_ClearRxBuf();
UART_outstr_P(pSend); //вот здесь я получаю от МК данные, используя спец утилиту на PC через 50 мс отправляю ответ "OK"+0x0D
for(timer = 0; timer < 10; timer++) { char n = 0; wait_1ms(150);
char* pBuf = UART_Recv(&n); UART_outstr_P(pBuf);//здесь по идее мое "OK\r" должно эхом вернуться, а вместо него приходит 10002100200423043404300440043D044B04390020043404300442002E
if(strchr(pBuf, 0x0d)) // { if(strstr(pBuf, "OK"))-сюда уже не попадаю ессно!!! return 0; if(strstr(pBuf, "ERROR")) return 1; return 3; // } }
return 2; // timeout }
|