mình test thử chức năng usart trên con PIC 16f1824 bằng trình dịch hitech pic thì thấy nó sai lung tung ko hiểu sai ở đâu . bạn nào đã làm về con này thì chia sẻ ít bí quyết với.
code: hiển thị chuỗi 123456 nhưng khi hiển thị lên HIPER TEMINA thì toàn chữ ả rập thui.
#include <htc.h>// pic 16f1824
__CONFIG(FOSC_HS & WDTE_OFF & PWRTE_ON & MCLRE_OFF & CP_OFF & CPD_OFF & BOREN_OFF & IESO_OFF & FCMEN_OFF );
__CONFIG(PLLEN_OFF & STVREN_OFF & BORV_25 & LVP_OFF);
#define _XTAL_FREQ 11059200 // toc do bau 57600
void InitSystem(void);
void Init_board(void);
void uart_putc(char c);
void uart_puts(const char* s);
void uart_init();
void main(void)
{
InitSystem();
Init_board();
uart_init();
while(1)
{
uart_puts("123456");// hiển thị trên máy tính hiper temina toàn chữ ả rập chứ ko phải chuỗi 123456
__delay_ms(20);
}
}
void InitSystem(void)
{
ANSELA=0x00;//port A is i/o digital
ANSELC=0x00;//port C is i/o digital
TRISA0=0;
TRISA1=0;
TRISA2=0;
TRISA3=1;
TRISC0=0;
TRISC1=0;
TRISC2=0;
TRISC3=0;
}
void Init_board(void)
{
TXCKSEL=0;//selection:TX/CK function is on RC4
RXDTSEL=0;//selection:RX/DT function is on RC5
}
void uart_init()
{
SPBRG = 2;///11.0592M toc do la 57600
SYNC = 0;
BRGH = 0;
BRG16 = 0;
SPEN = 1;
CREN=1; //enable reception
SREN=0; //no effect
TXIE=0; //disable tx interrupts
RCIE=0; //disable rx interrupts
TX9=0; //8-bit transmission
RX9=0; //8-bit reception
TXEN=0; //reset transmitter
TXEN=1; //enable the transmitter
TRISC4=0;//TX
}
//======================================
void uart_putc(char c)
{
while(!TXIF);
TXREG = c; //Writing data to Transmit Register, Starts transmission
//======================================
void uart_puts(const char* s)
{
while(*s != '\0'){
uart_putc(*s);
s++;
}
}
//======================================
p/s: với code trên mình thử trên con pic 16f886,16f887... đều chạy ngon lành cành đào
vậy mà với chú pic16f1824 thì lại hiển thị sai toàn chữ ả rập.
đến chịu với trình dịch bao cấp này quá
code: hiển thị chuỗi 123456 nhưng khi hiển thị lên HIPER TEMINA thì toàn chữ ả rập thui.
#include <htc.h>// pic 16f1824
__CONFIG(FOSC_HS & WDTE_OFF & PWRTE_ON & MCLRE_OFF & CP_OFF & CPD_OFF & BOREN_OFF & IESO_OFF & FCMEN_OFF );
__CONFIG(PLLEN_OFF & STVREN_OFF & BORV_25 & LVP_OFF);
#define _XTAL_FREQ 11059200 // toc do bau 57600
void InitSystem(void);
void Init_board(void);
void uart_putc(char c);
void uart_puts(const char* s);
void uart_init();
void main(void)
{
InitSystem();
Init_board();
uart_init();
while(1)
{
uart_puts("123456");// hiển thị trên máy tính hiper temina toàn chữ ả rập chứ ko phải chuỗi 123456
__delay_ms(20);
}
}
void InitSystem(void)
{
ANSELA=0x00;//port A is i/o digital
ANSELC=0x00;//port C is i/o digital
TRISA0=0;
TRISA1=0;
TRISA2=0;
TRISA3=1;
TRISC0=0;
TRISC1=0;
TRISC2=0;
TRISC3=0;
}
void Init_board(void)
{
TXCKSEL=0;//selection:TX/CK function is on RC4
RXDTSEL=0;//selection:RX/DT function is on RC5
}
void uart_init()
{
SPBRG = 2;///11.0592M toc do la 57600
SYNC = 0;
BRGH = 0;
BRG16 = 0;
SPEN = 1;
CREN=1; //enable reception
SREN=0; //no effect
TXIE=0; //disable tx interrupts
RCIE=0; //disable rx interrupts
TX9=0; //8-bit transmission
RX9=0; //8-bit reception
TXEN=0; //reset transmitter
TXEN=1; //enable the transmitter
TRISC4=0;//TX
}
//======================================
void uart_putc(char c)
{
while(!TXIF);
TXREG = c; //Writing data to Transmit Register, Starts transmission
//======================================
void uart_puts(const char* s)
{
while(*s != '\0'){
uart_putc(*s);
s++;
}
}
//======================================
p/s: với code trên mình thử trên con pic 16f886,16f887... đều chạy ngon lành cành đào
vậy mà với chú pic16f1824 thì lại hiển thị sai toàn chữ ả rập.
đến chịu với trình dịch bao cấp này quá
Comment