![]() |
|
|
#2 |
|
Đệ tử 9 túi
|
UART module and Auto Baud Rate Detect
Chào các bạn.
Đây là thư viện UART có chức năng tự detect Baud Rate. Khi muốn sử dụng chức năng này thì các bạn gọi hàm void UART_detectBaudRate(void);, khi đó trên PC phải truyền kí tự U để PIC đồng bộ tốc độ. Sau đó thì truyền nhận sẽ theo tốc độ đặt trên PC. Đây là hàm UART.h Code:
// UART.h //======================================================================================= #ifndef _UART_H #define _UART_H //======================================================================================== #include "pic18.h" // Define for UART #define TX RC6 #define RX RC7 #define TRIS_TX TRISC6 #define TRIS_RX TRISC7 //======================================================================================== // Declare sosme functions void UART_Init(unsigned int BaudRate); void UART_PrChar(unsigned char a); void UART_PrString(const char* str); unsigned char UART_Read(void); void UART_detectBaudRate(void); #endif Code:
// UART.h
# include "UART.h"
# include "pic18.h"
# include "sysdef.h"
//========================================================================================
// Initialize UART
void UART_Init(unsigned int BaudRate){
unsigned int n;
// Configure BaudRate
BRGH = 0; // Low speed.
BRG16 = 1; // 16-Bit Baud Rate Generator - SPBRGH and SPBRG
// Baudrate = Fosc/[16(n+1)] => n = ((Fosc/Baudrate)>>4) - 1; n = SPBRGH: SPBRG;
n = ((Fosc/BaudRate)>>4) - 1;
SPBRG = n;
SPBRGH = n>>8;
// Enable the asyncchronous serial port.
SYNC = 0 ; // Asynchronous mode
SPEN = 1; // Serial port enable.
TRIS_TX = 0;
TRIS_RX = 1;
//Configure for Transmitter mode.
TXEN = 1; // Transmit enable
//Configure for Receiver mode
CREN = 1; // Enable the reception
RCIF = 0;
RCIE = 1; // Reception Interrupt Enable
GIE = 1; // Global Interrupt Enable
PEIE = 1; // Perapheral Interrupt Enable
}
//=====================================================================================
void UART_PrChar(unsigned char a){
while(!TRMT);
TXREG = a;
}
//=====================================================================================
void UART_PrString(const char* str){
while(*str)
UART_PrChar(*str ++);
}
//=====================================================================================
unsigned char UART_Read(void){
return (RCREG);
}
//====================================================================================
void UART_detectBaudRate(void){
TXSTA = 0b00100100;
RCSTA = 0b10010000;
BAUDCON = 0b00001001;
while(ABDEN);
}
Code:
/*;========================================================
/*; Ten chuong trinh : Test IO
; Nguoi thuc hien : Ngo Hai Bac (NOHB)
; Ngay thuc hien : 27/06/07
; Phien ban : 1.0
; Mo ta phan cung : Dung PIC18F2525/2620/4525/4620 - thach anh 20MHz
; Trinh dich : HTPIC 18V9.50
;
;----------------------------------------------------------------
; Ngay hoan thanh :
; Ngay kiem tra :
; Nguoi kiem tra :
;----------------------------------------------------------------
; Chu thich :
;========================================================*/
// Include
# include "pic18.h"
# include "sysdef.h"
# include "UART.h"
// configuration
__CONFIG(1,HS & FCMDIS & IESODIS);
__CONFIG(2,BORV21 & PWRTDIS & WDTDIS);
__CONFIG(3,MCLREN & LPT1DIS & PBANDIS);
__CONFIG(4,DEBUGDIS & LVPDIS & STVRDIS & XINSTDIS);
__CONFIG(5,UNPROTECT);
__CONFIG(6,UNPROTECT);
__CONFIG(7,UNPROTECT);
// Receiver Interrupt Function
void RxIntFcn(void);
// Interrupt Function
void interrupt MyInt (void) {
if (RCIE && RCIF){
RCIF = 0;
RxIntFcn();
};
}
/*=====================================================================================
Main function
=====================================================================================*/
void main(){
unsigned char i;
ADCON1 = 0x07;
TRISA = 0x00;
PORTA = 0xFF;
TRISB = 0x00;
PORTB = 0xFF;
UART_Init(9600);
UART_detectBaudRate();
while(1);
}
// Implementation of some functions
void RxIntFcn(void){
unsigned char temp;
temp = UART_Read();
UART_PrChar(temp);
}
|
|
|
|
|
|