Khảo sát bộ truyền nhận nối tiếp

Một phần của tài liệu tnvxlvdk_v2-1 (Trang 60 - 65)

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ý

Một phần của tài liệu tnvxlvdk_v2-1 (Trang 60 - 65)

Tải bản đầy đủ (PDF)

(69 trang)