Ich versuche, ein UART-Programm in Bild zu machen. Ich möchte Zeichen anzeigen, die vom Controller an den PC gesendet werden. Aber ich bin nicht in der Lage, dies zu tun. Folgendes ist mein Code
#include<pic.h>
__CONFIG(0x3f72);
#define FOSC 10000 //10Mhz==>10000Khz
#define BAUD_RATE 9.6 //9600 Baudrate
#define BAUD_VAL ((char)(FOSC/ (16 * BAUD_RATE )) – 1)
void main()
{
unsigned char ReceiveChar;
TRISC=0xc0; //RC7,RC6 set to usart mode(INPUT)
TXSTA=0x24; //Transmit Enable
SPBRG=BAUD_VAL; //9600 baud at 10Mhz
RCSTA=0x90; //Usart Enable, Continus receive enable
TXREG='0';
while(1)
{
if (RCIF==1) //char received? Send 'A' back to Terminal
{
ReceiveChar=RCREG;
if(TXIF==1)
TXREG=ReceiveChar;
}
}
}
Nun, Ihr Code sieht in Ordnung aus, aber wissen Sie, dass der Mikrochip eine PIC18-Peripheriebibliothek bereitstellt , sodass Sie Funktionen direkt verwenden können, anstatt Werte in Register zu schreiben.
Im Folgenden finden Sie den Beispielcode, den Sie verwenden können:
#include <plib.h>
#pragma config FNOSC = PRIPLL
#pragma config POSCMOD = HS
#pragma config FPLLMUL = MUL_18
#pragma config FPLLIDIV = DIV_2
#pragma config FPBDIV = DIV_1
#pragma config FPLLODIV = DIV_1
#pragma config FWDTEN = OFF
#define SYSTEM_FREQUENCY {define you system frequency here}
#define BAUDRATE 115200
int main()
{
int pbFreq;
pbFreq=SYSTEMConfigPerformance(SYSTEM_FREQUENCY);
OpenUART( UART_EN | UART_NO_PAR_8BIT | UART_1STOPBIT, UART_RX_ENABLE | UART_TX_ENABLE, (pbFreq/16/BAUDRATE)-1);
while(1)
{
putsUART("Hello World.!");
}
}
int
sind es 16 Bits, und daher 115200
ist das Literal vom Typ lang. Deshalb pbFreq/16/BAUDRATE
ergibt der Ausdruck keinen Sinn.int
in eingebetteten Systemen nicht verwenden, sondern uint16_t oder uint32_t. Es zwingt Sie, Überläufe zu berücksichtigen.
Lundin
#define BAUD_VAL
hat einen potenziellen Fehler: Sie sollten niemalschar
Typ für Arithmetik verwenden, da es eine implementierungsdefinierte Vorzeichenbedeutung hat.