Обработчик прерывания UART MCS-51 - ошибка приема
Добавлено: Пн май 17, 2010 07:16:05
void serial_int(void) interrupt 4 using 1
{ char idata index;
if(!UART_TX) {
//----------------------------------------------------------
if( _testbit_(TI) ){
....
} //end UART_TX
//--------------------------------------------------------
/* прием байта */
else {
if( _testbit_(RI) ){
/* из приемного буфера */
RxBuffer[reciv_ctr]=SBUF;
reciv_ctr++;
}
}//end UART_RX
}
Основная программы
/*тут прошла успешная передача байтов
проверяется по количеству реально переданных байт
*/
// принимаем ответ
reciv_ctr=0; //
/* #define UART_TX_DIS() {REN=1; TI=0;RI=0; 0= UART_TX=1; } */
UART_TX_DIS(); // передача запрещена (осуществляется только прием информации)
//1 milisec_counter = 25 mc
/************************************************************************************/
milisec_counter=P2MAX/25;
do{ } while( (milisec_counter>0)&&(!reciv_ctr) );
/* тут уже reciv_ctr=1 -- неизвестно где меняется реальной приема - передачи нет */
Как отследить и почему меняется ведь RI был сброшен в UART_TX_DIS()
{ char idata index;
if(!UART_TX) {
//----------------------------------------------------------
if( _testbit_(TI) ){
....
} //end UART_TX
//--------------------------------------------------------
/* прием байта */
else {
if( _testbit_(RI) ){
/* из приемного буфера */
RxBuffer[reciv_ctr]=SBUF;
reciv_ctr++;
}
}//end UART_RX
}
Основная программы
/*тут прошла успешная передача байтов
проверяется по количеству реально переданных байт
*/
// принимаем ответ
reciv_ctr=0; //
/* #define UART_TX_DIS() {REN=1; TI=0;RI=0; 0= UART_TX=1; } */
UART_TX_DIS(); // передача запрещена (осуществляется только прием информации)
//1 milisec_counter = 25 mc
/************************************************************************************/
milisec_counter=P2MAX/25;
do{ } while( (milisec_counter>0)&&(!reciv_ctr) );
/* тут уже reciv_ctr=1 -- неизвестно где меняется реальной приема - передачи нет */
Как отследить и почему меняется ведь RI был сброшен в UART_TX_DIS()