данные массивов usart
- Войдите на сайт для отправки комментариев
Сб, 19/05/2018 - 14:56
Здравствуйте всем не получается принимать сразу 8 данных с терминала.
usartRxBuf[8]={};
char a,c,d;
ISR(USART_RX_vect) //завершение приема
{
if (rxCount < 8)
{ a=UDR0;
c=0;
if ((a>=48) && (a<=57)) {// преоброзование с символа на чисел
c = c * 10 + (a - 48);
}
d=c;
usartRxBuf[rxBuftail]=d;//забираем принятые данные
rxBuftail++;
if (rxBuftail == 8)
{rxBuftail=0;
}
rxCount++;
}
}
не получается принимать сразу 8 данных с терминала.
Спасибо, будем знать, что у тебя не получается. Если появятся вопросы - спрашивай.
Только не забудь выложить полный скетч и нормально объяснить чего хотел и что получилось.
Спасибо за отзыв вот полный скетч
volatile unsigned char Reciev_w=0,c,Reciev_d=0,d,e,Danie_Rx,Temp,Danie_stop,*P, rxCount=0,rxBuftail, rxBufHead,SIZE_BUF=8,a; unsigned char usartRxBuf[8] = {}; unsigned char usartTxBuf[8]={0,1,2,3,4,5,6,7}; ISR(USART_RX_vect) //завершение приема { if (rxCount < 8) { a=UDR0; c=0; if ((a>=48) && (a<=57)) {// преоброзование с символа на чисел c = c * 10 + (a - 48); } d=c; usartRxBuf[rxBuftail]=d;//забираем принятые данные rxBuftail++; if (rxBuftail == 8) {rxBuftail=0; } rxCount++; } } //*****usart_Tx******** ISR (USART_UDRE_vect)//регистр данных на передачю пуст { if (Temp < 8 ) {UDR0=usartTxBuf[Temp]; Temp++; rxCount=0; } else{ UCSR0B &=~(1 << UDRIE0); //прерывания по опусташение регистра данных на передачю зап } } int main(void) { / //******usart*************** UBRR0H = (unsigned char)(ubrr>>8); UBRR0L = (unsigned char)ubrr; UCSR0B =(1<< RXEN0) //разрешаем прием |(1<< TXEN0 );//разрешаем передачу UCSR0C = (1<<USBS0)//2 stop bit |(1<<UCSZ00)|(1<<UCSZ01);// 8-бит dannie UCSR0B |=(1<<RXCIE0);//прерывание по приему данных UCSR0B |=(1<<UDRIE0);//preriv.po opustusheni asm("sei"); while(1) { if(rxCount == 8 && usartRxBuf[0] == 0 && usartRxBuf[1] == 2 && Danie_stop == 0) { usartTxBuf[0]=1; Temp=0; UCSR0B |=(1<<UDRIE0); Danie_stop=1; } if(rxCount == 8 && usartRxBuf[2] == 6 && usartRxBuf[3] == 4 && Danie_stop == 1) { usartTxBuf[0]=2; Temp=0; UCSR0B |=(1<<UDRIE0); Danie_stop=0; } } }До конца дочитать пост терпежу не хватило?
Вообще правильно написал код для того чтобы принимать сразу данные одного байта?
если в терминале послать сразу один байт на чиная с 0 1 2 3 4 5 6 7 тогда в место 0 ставится
usartTxBuf[8]={1,1,2,3,4,5,6,7};а если послать 0 1 6 3 4 5 6 7 тогда какая то ерунду показываетТак ты хочешь байт принять или 8 байтов?
Я думал если сразу подать данные с терминала 0 1 2 3 4 5 6 7 получится один байт
Yer, слово "данные" в русском языке используется исключительно во множественном числе. Но при этом объем данных принято определять в некоторых единицах (битах, байтах, etc.).
Постарайтесь сформулировать свою проблему в общепринятых терминах, и вполне вероятно, что только это поможет Вам самостоятельно найти либо ошибку, либо решение.
Я думал если сразу подать данные с терминала 0 1 2 3 4 5 6 7 получится один байт
Цитата года, щитаю :) Если сложить десять раз по рублю - должен получится рубль: деревянный, он, гад, такой - сколько ни складывай, всё равно дрова :) :) :)
Спасибо всем большое