Nội dung:
Khảo sát cổng COM máy PC, các thông số truyền nối tiếp. Khảo sát bộ truyền nối tiếp của PIC.
Tìm hiểu cách sử dụng chương trình Hyper Terminal truyền nhận nối tiếp trên máy PC.
Yêu cầu:
Viết chương trình giao tiếp giữa máy tính và vi điều khiển PIC .
7.1 Các bước hiện thực.
Bước 1. Tạo project mới giống như hướng dẫn ở chương 1 lấy tên project là Uart và chọn chip 18f4520. Ta được hình sau:
Bước 2. Include filep18f4520.inc vào fileuart.asm
Bước 3. Khởi tạo PortB là output, PORTC.6 là output, PORTC.7 là input , bit RA4 là ngỏ nhập (nút nhấn RA4).
INIT_PORT
clrf LATB ;xố LATB
clrf TRISB ;cấu hình PORTB xuất bcf TRISC,RC6 ;chân RC6 xuất (TX)
Bộ mơn Kỹ Thuật Máy Tính 57 Thực hành Vi xử lý bsf TRISC,RC7 ;chân RC7 nhập (RC)
bsf TRISA,RA4 ;chân RA4 nhập (nút nhấn RA4) return
Bước 4. Khởi tạo các vector ngắt
code 0x00000 ; Reset Vector goto Start
org 0x00008 ; Interrupt vector goto IntVector
PRG code
Start goto $
IntVector
retfie
Bước 5. Khởi tạo cho ngắt UART, để có tốc độ 9600 bits/s, phát xung tần số gấp đôi, tần số xung dao động 4Mhz thì số đếm tính tốn theo cơng thức hoặc tra bảng là 25 (0x19).
INIT_UART
movlw 0x19 ;tốc độ 9600 bits/s với tần số 4MHz movwf SPBRG
bsf TXSTA,TXEN ;cho phép truyền bsf TXSTA,BRGH ;chọn tốc độ kép
bsf RCSTA,SPEN ;cho phép giao tiếp nối tiếp bsf RCSTA,CREN ;cho phép nhận liên tục bcf PIR1,RCIF ;xoá cờ ngắt nhận dữ liệu bsf PIE1,RCIE ;cho phép ngắt nhận dữ liệu bsf INTCON,PEIE ;cho phép ngắt ngoại vi bsf INTCON,GIE ;cho phép ngắt toàn cục return
Bước 6. Thêm đoạn code vào chương trình chính để gởi dữ liệu nối tiếp từ một biến tx_data (có giá trị tăng dần từ 0x00 đến 0xFF khi nhấn nút RA4). Sau đó, có thể dùng dao động ký quan sát xung ra ở chân RC6. Tính độ rộng xung 1 bit dữ liệu và đo xem có chính xác khơng.
Start rcall INIT_PORT rcall INIT_UART main1 movf dem,W
movwf TXREG
main2 btfss PIR1,TXIF ;nếu TXIF=1 nghĩa là đã truyền xong bra main2 ;nếu chưa thì đợi
btfsc PORTA,RA4 ;có nhấn nút RA4 hay khơng? bra main1 ; không nhấn,gởi lại số cũ main3 btfss PORTA,RA4 ;đợi nhả nút nhấn ra
bra main3
incf tx_data ;tăng dữ liệu truyền bra main1
Bước 7. Làm lại các bước trên nhưng với chương trình chính như sau: Start rcall INIT_PORT
rcall INIT_UART
main bra main
Bước 8. Thêm vào chương trình ngắt thực hiện nhận một byte từ máy tính truyền qua (sử dụng chương trình terminal.exe trên máy tính), sau đó gởi ngược lại kí tự về máy tính để xem.
IntVector
btfss PIR1,RCIF ;có ngắt nhận dữ liệu chưa? goto ISREnd ;chưa, kết thúc
movlw 06h ;kiểm tra lỗi
andwf RCSTA,W ;
btfss STATUS,Z ;có lỗi khi nhận khơng? goto RcvError ;có, đến chỗ xử lý lỗi movf RCREG,W ;khơng có lỗi, nhận dữ liệu movwf LATB ;xuất ra LED
movwf TXREG ;Gởi ngược trở về máy tính goto ISREnd ;kết thúc xử lý ngắt
; đoạn code xử lý lỗi nhận RcvError
bcf RCSTA,CREN ;xoá lỗi bsf RCSTA,CREN movlw 0FFh ;sáng hết các LED movwf LATB goto ISREnd ;kết thúc ngắt ISREnd retfie 7.2 Chương trình mẫu ;=====================================; ; Name: uart.asm
; Project: Viết chương trình giao tiếp giữa máy tính và vi điều khiển PIC. ; Author: BKIT HARDWARE CLUB
; Homepage: http://www.bkit4u.com/forum ; Creation Date: 8 - 8 - 2009
;======================================;
list p=18F4520 ;chon vi dieu khien 18F4520 include <P18f4520.INC>
Bộ môn Kỹ Thuật Máy Tính 59 Thực hành Vi xử lý ;************************************************************
; Reset and Interrupt Vectors
code 0x00000 ;bat dau chuong trinh goto Start
org 0x00008 ; Interrupt vector goto IntVector
;************************************************************ ;chương trình chính
PRG code
org 0x00020 Start rcall INIT_PORT
rcall INIT_UART
main bra main ;chuong trinh chinh khong lam gi ca INIT_PORT
clrf LATB ;xoa LATB
clrf TRISB ;cau hinh PORTB xuat bcf TRISC,6 ;ngo RC6 xuat (TX) bsf TRISC,7 ;ngo RC7 nhap (RC)
bsf TRISA,RA4 ;ngo RA4 nhap (nut nhan RA4) return
INIT_UART
movlw 19h ; toc do 9600 bits/s, o tan so 4MHz movwf SPBRG
bsf TXSTA,TXEN ;cho phep truyen
bsf TXSTA,BRGH ;tan so xung truyen gap doi bsf RCSTA,SPEN ;cho phep truyen noi tiep bsf RCSTA,CREN ;cho phep nhan lien tuc bcf PIR1,RCIF ;xoa co ngat nhan
bsf PIE1,RCIE ;cho phep ngat nhan du lieu bsf INTCON,PEIE ;nho phep ngat ngoai vi bsf INTCON,GIE ;cho phep ngat toan cuc return
;************************************************************ ; Chuong trinh phuc vu ngat
btfss PIR1,RCIF ;co ngat nhan du lieu khong? goto ISREnd ;khong, ket thuc
movlw 06h ;kiem tra loi nhan du lieu andwf RCSTA,W
btfss STATUS,Z ;xay ra loi?
goto RcvError ;co, den cho xu ly loi
movf RCREG,W ;khong co loi, lay du lieu noi tiep movwf LATB ;xuat ra LED
movwf TXREG ;goi nguoc ve may tinh goto ISREnd ;xong, ket thuc ngat RcvError
bcf RCSTA,CREN ;xoa loi bsf RCSTA,CREN
movlw 0FFh ;sang het cac LED movwf LATB
ISREnd
retfie end
7.3 Bài tập
a) Viết chương trình trên PC, gửi 1 chuỗi string xuống board, dòng chữ này sẽ chạy qua led ma trận hoặc LCD.
b) Khi nhấn 1 phím trên board nhấn, sẽ gửi 1 chuỗi string lên PC qua cổng COM, viết chương trình trên PC nhận chuỗi stri ng này và in ra giao diện.
Bộ môn Kỹ Thuật Máy Tính 61 Thực hành Vi xử lý