Ich programmiere ein paar Bibliotheken für ein Board mit einem integrierten PIC18F25K80. Im Moment versuche ich, die UART-Bibliothek zu programmieren, und ich habe alles versucht, aber ich kann es nicht funktionieren lassen, wenn es darum geht, eine Reihe von Zeichen zu senden.PIC18F25K80 Senden von String durch USART funktioniert nicht
Ich verwende den XC8 Compiler und ich habe den folgenden Code in der Bibliothek. (Ich habe nicht die Unterbrechungen noch programmiert, das ist, warum Sie nicht alles im Zusammenhang mit, dass im Code sehen
void UARTsend(char data){
UARTbusy();
TXREG1 = data;
}
void UARTsendTEXT(unsigned char *text){
while(*text != '\0'){
UARTsend(*(text++));
}
}
char UARTbusy(){
return TXSTA1bits.TRMT;
}
und dieser Code in der Hauptdatei:
int main() {
UARTconfig(_BR_19200, _RxINT_OFF, _TxINT_OFF, _8BIT);
unsigned char data[20] = "ABCDEFGHIJ";
while(1){
if(UARTrxREAD() == 'a'){
UARTsendTEXT(data);
}
}
return 0;
}
Also, wenn ich getroffen ‚a‘, soll die Zeichenfolge, sondern sieht die Zeichenfolge gesendet werden, erhalte ich den ersten und letzten Brief, und manchmal einfach der erste Buchstabe
Ehrlich gesagt glaube ich, dass es ein wirklich grundlegendes Problem mit dem Code ist, aber ich habe alles versucht, woran ich denken konnte, und nichts hat funktioniert, vielleicht kann mir jemand hier helfen.
EDIT: für den Fall, müssen Sie es überprüfen:
void UARTconfig(unsigned int BaudRate, unsigned int RxINT, unsigned int TxINT, unsigned int BIT){
int br_data;
//Clock configuration at 16MHz
OSCCONbits.IRCF = 0b111;
//9-bit transmit enable bit.
if(BIT == 1) {
RCSTA1bits.RX9 = 1; //Reception 9-bit.
TXSTA1bits.TX9 = 1; //Transmission 9-bit.
}
else {
RCSTA1bits.RX9 = 0; //Reception 8-bit.
TXSTA1bits.TX9 = 0; //Transmission 8-bit.
}
//Enable serial port.
RCSTA1bits.SPEN = 1;
//Enable continuous reception.
RCSTA1bits.CREN = 1;
//Setting asynchronous mode.
TXSTA1bits.SYNC = 0;
//Enable transmission
TXSTA1bits.TXEN = 1;
//Setting Rx/Tx pins as output.
TRISC7 = 0;
TRISC6 = 0;
//Baud rate configuration
BAUDCON1bits.BRG16 = 1; //16bit Baud Rate generator
TXSTA1bits.BRGH = 0; //Low speed BR.
switch(BaudRate){
case 0:
br_data=415;
break;
case 1:
br_data=103;
break;
case 2:
br_data=51;
break;
case 3:
br_data=16;
break;
case 4:
br_data=8;
}
SPBRGH1:SPBRG1 = br_data;
}
Ich habe eine Bearbeitung eingereicht, die die Einrückung behebt und das C-Tag hinzufügt, was meiner Meinung nach sehr wichtig ist, um die Sichtbarkeit Ihrer Frage zu erhöhen. Leider sind nur 5 Tags erlaubt, also musste ich eins opfern. Ich wählte "Usart". Fühlen Sie sich frei, meine Änderung rückgängig zu machen, wenn Sie eine andere bevorzugen. –
Müssen Sie sehen 'UARTbusy();' –
Sorry, vergessen, UARTbusy(); char UARTbusy() { Rücksendung TXSTA1bits.TRMT; } –