ĐIỀUKHIỂN CÁC PORT I/O.

Một phần của tài liệu Nghiên cứu ứng dụng điều khiển pic (Trang 83 - 87)

2. MOVWF PORTB

3.1 ĐIỀUKHIỂN CÁC PORT I/O.

Đây là một trong những ứng dụng đơn giản nhấtgiúp ta làm quen với vi điều khiển. Trong ứng dụng này ta sẽ xuất một giá trị nào đĩ ra một PORT của vi điều khiển, chẳng hạn như PORTB. Giá trị này sẽ được kiểm tra bằng cách gắn vào các pin của PORTB các LED. Khi đĩ pin mang giá trị mức logic 1 sẽ làm cho LED sáng và pin mang giá trị mức logic 0 sẽ làm cho LED tắt.

Để LED sáng bình thường thì điện áp đặt lên LED vào khoảng 1.8 đến 2.2 Volt tùy theo màu sắc của LED, trong khi điện áp tại ngõ ra của1 pin trong PORTB nếu ở mức logic 1 thường là 5 volt. Do đĩ ta cần cĩ thêm điện trở mắc nối tiếp với LED để hạn dịng (cĩ thể dùng điện trở 0.33 K).

Để xuất được giá trị ra PORTB, trướchết ta cần khởi tạo các pin của PORTB là output. Điều này được thực hiện bằng cách clear các bit trong thanh ghi TRISB. Tuy nhiên hai thanh ghi PORTB và TRISB nằm ở hai bank khác nhau trong bộ nhớ dữ liệu. Do đĩ trước khi muốn truy xuất giá trị trong một thanh ghi nào đĩ cần chọn bank dữ liệu chứa thanh ghi đĩ bằng cách đưa các giá trị thích hợp vào 2 bit RP1:RP0 củathanh ghi STATUS .

Do trong tập lệnh của vi điều khiển PIC khơng cĩ lệnh nào cho phép đưa một byte vào một thanh ghi cho trước, do đĩ cần sử dung một thanh ghi trung gian (thanh ghi W) và dùng hai lệnh MOVLW (đưa byte vào thanh ghiW) và lệnh MOVWF (đưa giá trị trong thanh ghi W vào thanh ghi f nào đĩ mà ta muốn).

Ngồi ra cần dùng lệnh ORG để chỉ ra địa chỉ bắt đầu chương trình khi vi điều khiển được reset. Thơng thường địa chỉ bắt đầu chương trình sẽ là địa chỉ 0000h. Trong trường hợp cần dùng đến chế độ reset của pin MCLR, ta cĩ thể thiết kế thêm một mạch reset ngoại vi (vi điều khiển sẽ được reset khi pin MCLRchuyển từ mức logic 1 xuống mức logic 0).

Sau đây là sơ đồ mạch của ứng dụng trên:

Hình 3.1 Mạch nguyên lí của ứng dụng điều khiển các PORT của vi điều khiển.

Một điểm cần chú ý là vi điều khiển PIC16F877A cĩ đến 2 pin VDDvà 2 pin GND. Trong trường hợp này ta phải cấp nguồn vào tất cảcác pin trên, khi đĩ viđiều khiển mới cĩ đủ điện áp để hoạt động.

Chương trình viết cho ứng dụng trên như sau: ;chương trình 1

;PORTBTEST.ASM

processor 16f877a ; khai báo vi điều khiển include <p16f877a.inc> ; header file đính kèm

__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF

; khai báo các “Configuration bits”

ORG 0x000 ; địa chỉ bắt đầu chương trình GOTO start

Start ; chương trình bắt đầu tại đây BCF STATUS,RP1

BCF STATUS,RP0 ; chọn BANK0 CLRF PORTB ; xĩa PORTB BSF STATUS,RP0 ; chọn BANK1 MOVLW 0x00

MOVWF TRISB ; PORTB <- outputs BCF STATUS,RP0 ; chọn BANK0

MOVLW 0x8F ; giá trị cần đưa ra PORTB MOVWF PORTB ; PORTB <- 8Fh

loop GOTO loop ; vịng lặp vơ hạn END ; kết thúc chương trình

Các bước tiếp theo để hồn tất ứng dụng trên là biên dịch chương trình trên bằng một trình biên dịch Assembly dành cho vi điều khiển PIC (trình biên dịch MPLAB chẳng hạn), sau đĩ dùng mạch nạp để nạp chương trình vàovi điều khiển PIC và kiểm tra kết quả. Nếu khơng cĩ lỗi nào xảy ra, LED gắn vào các pin RB7, RB3,

RB2, RB1, RB0 sẽ sáng, LED gắn vào các pin cịn lại sẽ tắt (do giá trị ta đưa ra PORTB là 8Fh).

Hồn tồn tương tự ta cĩ thể viết chương trình đưa một giá trị bất kì vào các PORT của vi điều khiển PIC16F877A. Tuy nhiên cĩ một điều cần chú ý là đối với PORTA, do pin RA4 cĩ cực thu để hở nên muốn PORTA hiển thị kết quả một cách chính xác ta cần dùng một điện trở kéo lên gắn thêm vào bên ngồi pin RA4.

Một phần của tài liệu Nghiên cứu ứng dụng điều khiển pic (Trang 83 - 87)

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

(125 trang)
w