|
Tài trợ cho PIC Vietnam |
dsPIC - Bộ điều khiển tín hiệu số 16-bit Theo dự kiến của Microchip, vào khoảng năm 2011 dsPIC sẽ có doanh số lớn hơn PIC |
|
Ðiều Chỉnh | Xếp Bài |
05-11-2008, 09:44 PM | #1 |
Đệ tử 1 túi
Tham gia ngày: May 2007
Bài gửi: 20
: |
Module UART trong dsPIC30F4013
Em làm mạch test như sau. Do nối nhầm chân T1In và R1OUT của max232 vào chân 15 ,16. Sau đó e cắt mạch và câu dây vào chân 25, 26(U1Tx, U1Rx). Code tương tự như trong Tut4 về UART
Code:
#include "p30f4013.h" _FOSC(CSW_FSCM_OFF & FRC_PLL4); //Clock = 32 MHz _FWDT(WDT_OFF); _FBORPOR(MCLR_EN & PBOR_OFF); _FGS(CODE_PROT_OFF); //Cac prototype cho cac chuong trinh con void Init_TMR1(void); void Init_UART1_Module(void); //Bang hang so trong ROM const unsigned char __attribute__ ((space(psv), address (0x0200))) Chuoi1[] = "Xin chao! \0"; //Cac bien toan cuc unsigned char flag, idx; //------------------------------------------------------------------------------ //Chuong trinh chinh int main(void) { Init_TMR1(); //Khoi tao Timer 1 Init_UART1_Module(); //Khoi tao module UART1 _PSV=1; PSVPAG = __builtin_psvpage(Chuoi1); flag = 0; //Xoa co bao het thoi gian cho while (1) { if (flag) { //Cho den khi het thoi gian cho idx = 0; while (Chuoi1[idx]) { //Neu chua het chuoi thi U1TXREG = Chuoi1[idx++]; //Xuat tiep 1 ky tu while (!U1STAbits.TRMT); //Cho den khi truyen xong ky tu, //cho den khi bo dem phat trong(bit TRMT=1) }; flag = 0; }; }; } //Chuong trinh con khoi tao module UART1 void Init_UART1_Module(void) { U1MODE = 0x8000; //Main I/O, 8-bit, no parity, 1 stop bit U1STA = 0x0400; //bit10=UTXEN U1BRG = (((8000000/38400)/16)-1); //baud=38400 bps @ ;clock=32,Fcy = 8 MHz } //Chuong trinh con khoi tao Timer 1, tran sau moi 1 giay o muc xung 8 Mips void Init_TMR1(void) { TMR1 = 0; //Xoa so dem trong TMR1 PR1 = 0x7A12; //Nguong tran la 1 giay tuong ung voi clock = 32 MHz _T1IF = 0; //Xoa co ngat cua Timer 1 T1CON = 0x8030; //Dung fcy lam clock, prescale = 1:256 _T1IE = 1; //Cho phep ngat khi Timer 1 tran } //Chuong trinh xu ly ngat Timer 1 void _ISR _T1Interrupt(void) { _T1IF = 0; //Xoa co ngat flag = 1; //Bat co cho phep xuat chuoi ky tu } Khi sờ tay vào chân Tx thì các nhận được các ký tự linh tinh khác. Không biêt có phải do mạch bị nhiều hay k? và cách giải quyết thế nào? |
|
|