![]() |
![]() |
#8 |
Đệ tử 9 túi
|
USART - truyền dữ liệu nối tiếp với PC
Đây là chương trình khi PC gửi dữ liệu đến PIC thì PIC sẽ phản hồi lại kí tự mà nó đã nhận được. Là một phần trong bài tập lớn của tôi nên tôi sẽ post dần lên cho anh em tham khảo và cho ý kiến về độ tối ưu của chương trình.
Code:
/*======================================================== ; Ten chuong trinh : giao tiep USART voi PC, nhan duoc thi hien thi lai ; Nguoi thuc hien : ngohaibac ; Ngay thuc hien : ; Phien ban : 1.0 ; Mo ta phan cung : Dung PIC16F877A - thach anh 20MHz ; chan RC7/TX noi voi chan R1OUT cua MAX232 ; chan RC6/RX noi voi chan T1IN cua MAX232 ;---------------------------------------------------------------- ; Ngay hoan thanh : ; Ngay kiem tra : ; Nguoi kiem tra : ;---------------------------------------------------------------- ; Chu thich : Chuong trinh dung giao tiep USART ;========================================================*/ #include<pic.h> __CONFIG(HS & PWRTEN & BOREN & LVPDIS & WDTDIS ); // ham init - khoi tao void initUART(void){ // Khoi tao cho USART TRISC = TRISC | 0b11000000; // Bit 7,6 la RX va TX phai la Input SPEN = 1 ; // Enable Serial Port communication. SYNC = 0; // che do khong dong bo Asynchronous // cho che do truyen TXEN = 1; //enable truyen TX9 = 0 ; // chon che do 8 truyen bit du lieu BRGH = 1; // High - speed SPBRG = 129; //Baud = 9600; voi HS, Baud Rate = Fosc/(16(X+1)) TXIE = 0; // khong dung ngat Truyen // Che do nhan du lieu RCIE = 1; // dung ngat nhan PEIE = 1; // cho phep ngat ngoai vi GIE = 1; // cho phep ngat toan cuc RX9 = 0; // nhan 8 bit CREN = 1; // lien tuc nhan du lieu; = 0 k lien tuc nhan du lieu } // ham truyen du lieu 1 ký tự void putch(unsigned char byte) { /* output one byte */ while(!TXIF); /* set when register is empty */ // continue; TXREG = byte; } void init(void){ initUART(); } // ham ngat void interrupt MyInt(void){ unsigned char temp; if(RCIF){ // Neu co ngat nhan du lieu noi tiep temp = RCREG; RCIF = 0; // Xoa co ngat RCIF putch(temp); }; } // ham chinh void main(void){ //unsigned char a[] =" anh yeu em nhieu lam, em biet k?"; //unsigned char i = 0; init(); //for(i= 0; i<33; i++) putch(a[i]); //for(i= 0; i<10; i++) putch(i+48); while(1); } ![]() Chương trình đã được test và chạy ngon lành. Chúc các bạn thành công. thay đổi nội dung bởi: ngohaibac, 28-04-2006 lúc 08:23 AM. |
![]() |
![]() |
Ðiều Chỉnh | |
Xếp Bài | |
|
|
![]() |
||||
Ðề tài | Người gửi | Chuyên mục | Trả lời | Bài mới |
Cách giao tiếp DS1877 và PIC6F877A | nbqvdp | Cơ bản về vi điều khiển và PIC | 7 | 05-08-2010 06:46 PM |
Hỏi về chương trình HTPIC của ngohaibac | riquelme | Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) | 26 | 20-01-2007 09:42 PM |
Giúp đỡ về HTPIC | riquelme | Cơ bản về vi điều khiển và PIC | 0 | 11-01-2007 11:56 PM |
Giao tiếp Pic6f877A qua cổng máy in???? | spirit | Cơ bản về vi điều khiển và PIC | 8 | 11-09-2006 01:04 PM |