данные массивов usart

Yer
Offline
Зарегистрирован: 12.02.2016

Здравствуйте всем не получается  принимать сразу 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++;
	   }
   
 }

  

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Yer пишет:

не получается  принимать сразу 8 данных с терминала. 

Спасибо, будем знать, что у тебя не получается. Если появятся вопросы - спрашивай.

Только не забудь выложить полный скетч и нормально объяснить чего хотел и что получилось.

Yer
Offline
Зарегистрирован: 12.02.2016

Спасибо за отзыв вот полный скетч 

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; 
		    }
	   	}
}
Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

До конца дочитать пост терпежу не хватило?

Yer
Offline
Зарегистрирован: 12.02.2016

Вообще правильно написал код  для того чтобы принимать сразу данные одного байта?  

Yer
Offline
Зарегистрирован: 12.02.2016

если в терминале послать сразу один байт на чиная с 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 тогда какая то ерунду показывает

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Так ты хочешь байт принять или 8 байтов?

Yer
Offline
Зарегистрирован: 12.02.2016

Я думал если сразу подать данные с терминала 0 1 2 3 4 5 6 7 получится один байт 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Yer, слово "данные" в русском языке используется исключительно во множественном числе. Но при этом объем данных принято определять в некоторых единицах (битах, байтах, etc.).

Постарайтесь сформулировать свою проблему в общепринятых терминах, и вполне вероятно, что только это поможет Вам самостоятельно найти либо ошибку, либо решение.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Yer пишет:

Я думал если сразу подать данные с терминала 0 1 2 3 4 5 6 7 получится один байт 

Цитата года, щитаю :) Если сложить десять раз по рублю - должен получится рубль: деревянный, он, гад, такой - сколько ни складывай, всё равно дрова :) :) :)

Yer
Offline
Зарегистрирован: 12.02.2016

Спасибо  всем большое