sto cercando di inviare un carattere su un terminale in rs-232, al terminale arriva un segnale sempre diverso che non corrisponde a quello inviato, facendo il debug il programma si ferma nel momento in cui attende la ricezione dei dati aspettando che si setti RCIF, vi posto il programma, scusate se non faccio uso di funzioni
- Codice: Seleziona tutto
#include <xc.h>
#define _XTAL_FREQ 8000000
#define on 1 // LED acceso
#define off 0 // LED spento
#define LEDerr LATAbits.LATA2
#define LEDnok LATAbits.LATA1
#define LEDok LATAbits.LATA0
#define PBRES LATAbits.LATA3 //pulsante
/***** MAIN PROGRAM *****/
void main(){
ANSELA = 0; //no analogiche
ANSELB = 0; //no analogiche
ANSELC = 0; //no analogiche
TRISA=0b11111000; //RA0 RA1 RA2 out led - RA3 pulsante
LATA=0x00;
// setup INTOSC 8MHz
OSCCONbits.IRCF = 0b1110;
OSCSTATbits.HFIOFS=1;
OSCTUNEbits.TUN=0b000000;
// WPU enable on RA3
WPUA=0b00001000;
INLVLB=0xFF;
// inizializzazione UART
RB7PPS=0b00110; //Uscita TX su RB7
RXPPS = 0b01101;//input RX predefinito su RB5
BAUD1CONbits.BRG16=1;// 16 bit
TX1STAbits.BRGH=0;//baud rate low speed
TX1STAbits.SYNC=0;//modo asincrono
SP1BRGH=0;
SP1BRGL=51;// baud rate 9600
TX1STAbits.TXEN=1;//tx enable bit
RC1STAbits.SPEN=1;//serial port enable
RC1STAbits.CREN=1;//abilita ricezione
while(1){
while(PBRES); // attendi pressione tasto
unsigned char tx_byte = 'L' ; // carattere da inviare
while (! PIR1bits.TXIF){} // se TXIF è libero
TX1REG = tx_byte; // invia byte
while (! PIR1bits.TXIF){} // attendi fine trasmissione
while (! PIR1bits.RCIF){} // attendi ricezione
if(RC1REG == tx_byte){ // se il carattere è lo stesso
PIR1bits.RCIF = 0; //cancello il flag
LEDok = on; // accendi LED2
LEDnok = off;
}else{ // altrimenti
LEDok = off;
LEDnok = on; // accendi LED1
}
while (! PBRES){} // rilascio pulsante con debounce
__delay_ms(30);
}
}