help chân TX và RX của PIC !!!

BKDEE

Trứng gà
mình viết chương trình giao tiếp UART với máy tĩnh mãi mà ko chạy, mặc dù mô phỏng thì chạy vèo vèo. mạch giao tiếp UART ko vấn đề ( nối TX-RX test thử rồi). khi nạp thử code để tắt bật portC thì chân RC5 RC6 RC7 có vấn đề ?? không biết có phải là do mình config sai hay là do PIC hỏng nữa .... :(:(

Code:
#include <htc.h>
#include "uart.c"
__CONFIG(XT & WDTDIS & PWRTEN & MCLREN & UNPROTECT & SWBOREN &
IESODIS & FCMDIS & LVPDIS & DEBUGDIS); //1st config. Word

__CONFIG(BORV21); //2st config. Word

#define _XTAL_FREQ     4000000

/****************************************************************
* EXTERN
****************************************************************/
/*none...*/

/*****************************************************************
GLOBAL VARIABLE
******************************************************************/
/*none...*/

/*****************************************************************
* ROUTINES
******************************************************************/
void delay_1s(void)
{	
	char i;
	for(i=1 ;i<10 ;i++)
	__delay_ms(100);
}

/****************************************************************
* MAIN
****************************************************************/
void main(void)
{
TRISC6 = 0;
TRISC7 = 1;
uart_init();
while(1)
{
	uart_puts("Hello World    ");
	uart_puts("    DHBK tp.HCM ");
	delay_1s();
}
}
 

2death

Cố Vấn CLB
Staff member
Chào em, các chân RX, TX của PIC16F887 trùng với các chân RC6, RC7 rồi nên khi dùng UART thì các chân này không được dùng cho các chức năng khác được (ví dụ như I/O thông thường để bật tắt LED)

Mặt khác, các chân này khi dùng cho chức năng UART thì nó đã được config trong uart.c, uart.h rồi, nên trong main.c, em chỉ cần gọi là uart_init(); chứ không phải cấu hình lại các chân này.

Đây là đoạn code trong uart.h

Code:
#ifndef _UART_H_
#define    _UART_H_

#ifndef _XTAL_FREQ
#define _XTAL_FREQ    4000000
#endif

#define    BAUD    19200
[COLOR="red"][B]#define    TX_TRIS    TRISC6
#define    RX_TRIS    TRISC7[/B][/COLOR]

void uart_init();
void uart_putc(char c);
void uart_puts(const char *s);
char uart_data_ready();
char uart_getc();
void uart_gets(char *s);
#endif
Còn đây là code của hàm uart_init() trong file uart.c

Code:
void uart_init()
{
    #ifndef _XTAL_FREQ
        #error "Please define _XTAL_FREQ in uart.h"
    #endif
  
  ...

    SPBRG=SPBRG_SET;
    BRGH=BRGH_SET;      //data rate for sending/receiving
    SYNC=0;                        //asynchronous
    SPEN=1;                        //enable serial port pins
    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
[COLOR="red"]  [B]  TX_TRIS = 0;
    RX_TRIS = 1;[/B][/COLOR]
}
 

BKDEE

Trứng gà
em làm dc rồi cám ơn chị Phương nhiều, do con PIC của em bị hỏng mấy chân đó, thử bằng con pic khác thì chạy :(( buồn ghê.
 
Top