1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Thực hành vi xử lý vi điều khiển

93 604 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 93
Dung lượng 4,41 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Thực hành vi xử lý vi điều khiển Thực hành vi xử lý vi điều khiển Thực hành vi xử lý vi điều khiển Thực hành vi xử lý vi điều khiển Thực hành vi xử lý vi điều khiển Thực hành vi xử lý vi điều khiển Thực hành vi xử lý vi điều khiển Thực hành vi xử lý vi điều khiển Thực hành vi xử lý vi điều khiển

Trang 1

ĐẠI HỌC QUỐC GIA TP.HCM

TRƯỜNG ĐẠI HỌC BÁCH KHOA

KHOA KHOA HỌC VÀ KỸ THUẬT MÁY TÍNH

THÍ NGHIỆM

VI XỬ LÝ - VI ĐIỀU KHIỂN

BM Kỹ thuật Máy tính

2012

Trang 2

Bộ môn Kỹ Thuật Máy Tính 1 Thực hành Vi xử lý – Vi điều khiển

Bài 1 : Giới thiệu MPLAB IDE và KIT PIC

Nội dung:

Dịch và nạp chương trình vào vi điều khiển PIC Chạy và gỡ rối chương trình

b.Đọc bộ nhớ chương trình.ghi đọc bô nhớ EEPROM và xuất ra LED

1.1 Phần cứng thí nghiệm ICD2 và PICDEM 2 PLUS

Bộ hỗ trợ lập trình dùng với máy tính ICD2 (In-Circuit Debugger)

Sơ đồ kết nối ICD2

Kit thí nghiệm PICDEM 2 Plus có các đặc điểm như hình sau :

1 Đế cắm DIP 18, 28 và 40 chân (có thể cắm 3 linh kiện nhưng chỉ dùng 1 mỗi lần)

2 Ổn áp +5V dùng cho nguồn 9V, 100 mA AC/DC hay pin 9V

3 Đầu cắm DB-9 theo chuẩn giao tiếp RS-232

4 Đầu cắm qua bộ lập trình In-Circuit Debugger (ICD)

5 Biến trở 5KΩ dùng cho tín hiệu nhập tương tự

6 Ba nút nhấn dùng tạo tín hiệu kích từ bên ngoài và reset

7 LED nguồn

8 Bốn LED chỉ thị cho PORTB

9 Jumper J6 để ngắt LED chỉ thị RB0 (khi nhập tín hiệu từ nút nhấn RB0)

Trang 3

Trường ĐH Bách Khoa TP.HCM Khoa KH & KTMT

Bộ môn Kỹ Thuật Máy Tính 2 Thực hành Vi xử lý – Vi điều khiển

10 Bộ dao động (OSC) 4 MHz

11 Nơi để lắp thêm thạch anh dao động nếu cần

12 Thạch anh dao động 32.768 kHz tạo xung clock cho Timer1

13 Jumper J7 để ngắt dao động RC có sẳn (khoảng 2 MHz)

14 EEPROM nối tiếp 32K x 8 bit

15 Màn hình LCD

16 Kèn Piezo

17 Vùng lắp thêm linh kiện

18 Cảm biến nhiệt TC74

1.2 Môi trường phát triển MPLAB

Bước 1 Chạy phần mềm MPLAB:

Start_|All Programs_|Microchip_|MPLAB IDE v8.00_|MPLAB IDE

Bước 2 Chọn Menu :

Project_|Project Wirazd…

Chọn Next ở cửa sổ Welcome

Bước 3 Chọn số hiệu PIC cần sử dụng (PIC18F4520) rồi bấm Next:

Bước 4 Chọn tool Microchip MPASM Toolsuite tại ô Active Toolsuite

Trang 4

Bộ môn Kỹ Thuật Máy Tính 3 Thực hành Vi xử lý – Vi điều khiển

Chọn MPASM Assembler (mpasmwin.exe) tại ô Tollsuite Contents

Click Next qua cửa sổ kế

Bước 5 Nhấn Browse… để chọn thư mục và đánh tên project

Chọn thư viện thông qua file INC và LKR thêm vào project

Trang 5

Trường ĐH Bách Khoa TP.HCM Khoa KH & KTMT

Bộ môn Kỹ Thuật Máy Tính 4 Thực hành Vi xử lý – Vi điều khiển

C:\Program Files\Microchip\MPASM Suite\LKR\18f4520.lkr

C:\Program Files\Microchip\MPASM Suite\P18F4520.INC

Click Next sẽ thấy như sau :

Click Finish Ta sẽ được một project như hình sau:

Trang 6

Bộ môn Kỹ Thuật Máy Tính 5 Thực hành Vi xử lý – Vi điều khiển

Bước 6 Thêm file vào dự án theo các bước sau :

Một project đơn giản nhất phải gồm có 2 thành phần Source files và Hearder Files Thư mục Source files chứa file text *.asm hoặc file *.c chứa code lập trình Thư mục Hearder Files chứa file *.h hoặc *.INC: file có sẵn của microchip

Nếu bạn quên không thêm các file cần có vào thì làm theo hướng dẫn sau :

ADD header file: ( Copy header file vào thư mục chứa project để tiện cho việc sử dụng sau này)

Cửa sổ hiện lên như sau: Từ Menu

bar chọn File_|Save để lưu

Thực hiện Save, đặt tên với đuôi asm vào thư mục chứa dự

Trang 7

Trường ĐH Bách Khoa TP.HCM Khoa KH & KTMT

Bộ môn Kỹ Thuật Máy Tính 6 Thực hành Vi xử lý – Vi điều khiển

Công việc tiếp theo là viết code (trong cửa sổ text editor của source file)

Ðối với project lớn dùng nhiều source file và header file, ta làm lại quá trình thêm file vào dự án nhiều lần

1.3 Nạp file hex vào vi điều khiển PIC

Sau khi tạo được một project, ta tiến hành build nó để tạo ra *.hex Có thể mô tả công việc như sau:

Ví dụ, ta có một chương trình cho PIC như sau:

list p=18f4520

#include p18f4520.inc code 0

start call init

;chuong trinh chinh

main

swoff

btfsc PORTA,RA4 ;cho nhan nut RA4

bsf LATB,RB0 ;Bat LED RB0

btfss PORTA,RA4 ;cho nhan nut RA4

bcf LATB,RB0 ;tat LED RB0

;chuong trinh khoi dong ban dau

init

bcf TRISB,RB0 ;khoi dong RB0 la cong xuat bsf TRISA,RA4 ;khoi dong RA4 la cong nhap

return end

Bây giờ chúng ta lưu chương trình vừa viết thành BaiTN1.asm vào một thư mục đã

tạo project phía trên Để compile chương trình ta vào menu Project_|Build All như hình

bên dưới

Trang 8

Bộ môn Kỹ Thuật Máy Tính 7 Thực hành Vi xử lý – Vi điều khiển Nếu việc build thất bại, nhưng việc này thì không mong muốn, ta có thấy kết quả như hình sau:

Trang 9

Trường ĐH Bách Khoa TP.HCM Khoa KH & KTMT

Bộ môn Kỹ Thuật Máy Tính 8 Thực hành Vi xử lý – Vi điều khiển

Nếu thành công, ta sẽ thấy hình sau:

Nếu việc build đã thành công, chương trình sẽ dịch BaiTN1.asm thành BaiTN1.hex trong cùng thư mục chương trình BaiTN1.asm Sau khi đã có được file hex, công việc tiếp theo là làm thế nào để nạp được file Hex xuống board Đầu tiên, chọn mạch nạp bằng

cách vào menu Programmer_|Select Programmer_|Mplab ICD2 như hình sau :

Sau khi chọn Mplab ICD2 xong thì ta sẽ thấy giao diện như sau:

Trang 10

Bộ môn Kỹ Thuật Máy Tính 9 Thực hành Vi xử lý – Vi điều khiển

Một thao tác cần làm giúp ta có thể dịch chương trình, nạp và chạy tự động là vào

menu Programmer_|Settings…_|Program chọn mục Automatically như hình sau :

Bây giờ ta có thể dịch, nạp và chạy dự án với thao tác menu Project_|Build All (hoặc

nhấn Ctrl-F10)

Nếu thành công thì chương trình sẽ được dịch, nạp ra card PICDEM và chạy ngay

Trang 11

Trường ĐH Bách Khoa TP.HCM Khoa KH & KTMT

Bộ môn Kỹ Thuật Máy Tính 10 Thực hành Vi xử lý – Vi điều khiển

Nếu thất bại, xem thông tin báo lỗi trong cửa sổ Output để khắc phục và làm lại từ bước Build All

Trường hợp thành công mà chương trình chạy không đúng, ta phải sử dụng công cụ Debugger để tìm lỗi theo một trong hai cách sau

1.4 Debug dùng MpLab SIM

Bước 1 Chọn Debugger bằng menu

Debugger_|Select Debugger_|Mplab SIM

Bước 2 Tham khảo menu Debugger Xuất hiện nhiều chức năng hỗ trợ debug

Từ đây ta đã có thể mô phỏng được chương trình của mình một cách dễ dàng

Các chức năng thường dùng :

• Run (F9): chạy chương trình, chương trình sẽ chạy liên tục đến khi nào có breakpoint thì dừng

• Breakpoints (F2): tạo ra breakpoint tại vị trí hiện tại của con trỏ (cũng có thể

"double click" vào hàng code mình mong muốn đặt Breakpoint)

• Step Into (F7): chạy từng bước, vào trong chương trình con (nếu gặp)

• Step Over (F8): chạy từng bước, gọi chương trình con cũng xem như 1 bước

• Reset: trở về đầu chương trình

Trang 12

Bộ môn Kỹ Thuật Máy Tính 11 Thực hành Vi xử lý – Vi điều khiển

Bước 3 Khi debug thì ta cũng cần phải biết giá trị của các thanh ghi cũng như bộ nhớ

của chip như thế nào, để xem được các giá trị này thì chúng ta qua menu View

Để xem được giá trị của các thanh ghi trong PIC ta chọn menu View_|File registers

sẽ xuất hiện cửa sổ như hình sau:

Để xem được giá trị của các thanh ghi SFR thì ta chọn View_|Special Function

Registers sẽ xuất hiện của sổ như hình sau:

Hay để xem một và thanh ghi mà ta quan tâm thì có thể dùng Watch để xem bằng

cách vào menu View_|Watch thì hình sau sẽ xuất hiện:

Muốn xem thanh ghi nào, ta chỉ việc chọn thanh ghi tương ứng trong combobox bên trên, sau đó nhấn Add SFR

Trang 13

Trường ĐH Bách Khoa TP.HCM Khoa KH & KTMT

Bộ môn Kỹ Thuật Máy Tính 12 Thực hành Vi xử lý – Vi điều khiển

1.5 Debug onchip dùng Mplab ICD2

Cũng giống như debug trên Mplab SIM, Mplab ICD2 cũng có những tính năng tương tự, nhưng khi sử dụng Mplab ICD2 thì cần phải có mạch debug, và các hiện tượng xảy ra giống như khi chạy thực tế

1.6 Bài tập

a) Đọc 1 byte bộ nhớ chương trình tại địa chỉ 0x00 viết vào bộ nhớ EEPROM tại địa chỉ 0x10 rồi đọc EEPROM xuất ra cổng RB3 đến RB0 Chú ý nửa byte cao xuất ra trước, nửa byte thấp xuất ra sau

Trang 14

Bộ môn Kỹ Thuật Máy Tính 13 Thực hành Vi xử lý – Vi điều khiển

Bài 2 : Khảo sát cổng xuất nhập song song

Nội dung:

Khảo sát hoạt động của nút nhấn, LED

Khảo sát các thanh điều khiển cổng xuất nhập song song

Tính toán thời gian thực thi lệnh, viết chương trình con làm nhiệm vụ delay Viết chương trình kiểm tra nút nhấn và hiển thị kết quả kiểm tra ra LED

Yêu cầu:

a.Viết chương trình xuất dữ liệu ra 4 led đơn đếm từ 0000 -> 1111 -> 0000 Thời gian giữa các lần đếm lên 1 đơn vị là 1s

b Viết chương trình xuất dữ liệu ra 4 led đếm theo hệ đếm O,D

2.1 Kiến thức liên quan

2.1.1 Các thanh ghi điều khiển cổng xuất nhập

Mỗi Port có ba thanh ghi điều khiển hoạt động chính:

Các bit trong thanh ghi TRIS: thiết lập chân tương ứng là ngõ vào (logic 1) hoặc ngõ ra (logic 0)

Các bit trong thanh ghi PORT: đọc mức logic từ chân tương ứng

Các bit trong thanh ghi LAT: ghi mức logic ra chân tương ứng

2.1.2 Kết nối mạch

Vị trí LED hiển thị và nút nhấn trên board như hình dưới đây:

Trang 15

Trường ĐH Bách Khoa TP.HCM Khoa KH & KTMT

Bộ môn Kỹ Thuật Máy Tính 14 Thực hành Vi xử lý – Vi điều khiển

LED hiển thị có kết nối như sau:

Muốn các LED sáng, các chân RBi tương ứng phải lên mức 1 Riêng LED D2 còn phải nối jumper J6 lại mới sáng được khi RB0=1

Lý do có jumper JP6 là do chân RB0 còn được dùng làm ngỏ nhập nút nhấn RB0 Như vậy, lúc nào muốn dùng chân RB0 là ngỏ xuất LED thì đóng jumper JP6 lại Ngược lại, để hở JP6 sẽ dùng RB0 làm ngỏ nhập nút nhấn

Các nút nhấn có kết nối như sau:

Nút nhấn RA4, RB0 khi được nhấn sẽ làm cho chân tương ứng ở mức logic 0 Cần thiết lập các chân RA4 và RB0 là ngõ vào

Bộ dao động chính là bộ dao động ngoài tần số 4 MHz có kết nối như sau:

Trên kit thí nghiệm, thạch anh Y2 được sử dụng cho tất cả các bài thí nghiệm

2.2 Các bước hiện thực yêu cầu 1

Bước 1 Tạo project mới giống như hướng dẫn ở chương 1 lấy tên project là Led_don,

tạo file led_don.asm và chọn chip 18f4520 Ta được hình sau:

Trang 16

Bộ môn Kỹ Thuật Máy Tính 15 Thực hành Vi xử lý – Vi điều khiển

delay1s movlw 4

movwf delay_1sa dl_2 movlw 250 ; bắt đầu vòng lặp ngoài

Bước 2 Include file p18f4520.inc vào file led_don.asm

Bước 3 Khởi tạo PORTB là cổng xuất ở các bit RB0-RB3

clrf delay ; xóa biến delay (vòng lặp 256 lần)

Trang 17

Trường ĐH Bách Khoa TP.HCM Khoa KH & KTMT

Bộ môn Kỹ Thuật Máy Tính 16 Thực hành Vi xử lý – Vi điều khiển

start call init

; chuong trinh chinh

call delay1s

bra begin ; lap lai sau moi giay

; Ham khoi dong ban dau

bcf TRISB,RB0 ; cau hinh RB0 xuat

bcf TRISB,RB1 ; cau hinh RB1 xuat

bcf TRISB,RB2 ; cau hinh RB2 xuat

bcf TRISB,RB3 ; cau hinh RB3 xuat

return

dl_3

movwf call decfsz bra decfsz bra return

delay_1sb delay1ms delay_1sb dl_3 delay_1sa dl_2

LATB

delay1s begin ; lặp lại sau mỗi giây

2.3 Chương trình mẫu yêu cầu 1

list p=18f4520

#include p18f4520.inc code 0

goto start

; Vung du lieu

udata

Trang 18

Bộ môn Kỹ Thuật Máy Tính 17 Thực hành Vi xử lý – Vi điều khiển

; Ham lam tre 1ms voi tan so dao dong 4MHz

clrf delay ; xoa bien delay (vong lap 256 lan)

movwf delay_1sb dl_3 call delay1ms ; bat dau vong lap trong (250 lan)

Sau khi có chương trình mẫu ta thực hiện việc compile chương trình và nạp xuống mạch để chạy chương trình như hướng dẫn ở chương 1

2.4 Các bước hiện thực yêu cầu 2

Bước 1 Tạo project mới giống như hướng dẫn ở chương 1 lấy tên project là Nut_nhan

và chọn chip 18f4520 Ta được hình sau:

Trang 19

Trường ĐH Bách Khoa TP.HCM Khoa KH & KTMT

Bộ môn Kỹ Thuật Máy Tính 18 Thực hành Vi xử lý – Vi điều khiển

PRG code

start call init

; chuong trinh chinh

main btfsc PORTA,RA4 ; Đọc RA4 den khi RA4=0

bcf PORTB,RB0 ; tat LED RB0

goto main ; lap lai qua trinh

; Ham khoi dong ban dau

bcf TRISB,RB0 ; RB0 xuat

Bước 2

Bước 3

Include file p18f4520.inc vào file nut_nhan.asm

Khởi tạo PORTB bit RB0 là cổng xuất (jumper JP6 đóng) và PORTA bit RA4

là cổng nhập

bcf TRISB,RB0 ; RB0 xuất bsf TRISA,RA4 ; RA4 nhập

return

Bước 4 Viết chương trình cho hàm main thực hiện yêu cầu của đề bài

main btfsc PORTA,RA4 ; chờ đến khi RA4 được nhấn

bra Main ; lặp lại quá trình

2.5 Chương trình mẫu yêu cầu 2

list p=18f4520

#include p18f4520.inc code 0

goto start

; Vung du lieu

udata

; Chuong trinh nay khong su dung bien

; Vung bat dau code

Trang 20

Bộ môn Kỹ Thuật Máy Tính Thực hành Vi xử lý – Vi điều khiển

19

bsf TRISA,RA4 ; RA4 nhap

return end

Sau khi có chương trình mẫu ta thực hiện việc compile chương trình và nạp xuống

mạch để chạy chương trình như hướng dẫn ở chương 1

2.6 Bài tập

a) Viết chương trình để khi nhấn RA4 thì các led sẽ sáng đếm lên, mỗi lần nhấn đếm

lên 1 đơn vị theo hệ đếm H và hệ đếm O

b) Viết chương trình để khi nhấn RA4 thì các led sẽ sáng đếm lên, mỗi lần nhấn đếm

lên 1 đơn vị theo hệ đếm D

c) Cho sơ đồ mạch loa

-

Viết chương trình phát xung 1KHz ra loa khi nhấn RA4 và ngừng phát xung khi

nhấn RA4 lần 2

+

22ØΩ

RC

2

+

-

BZI Value BUZZER- AST124ØMLTRQ

Trang 21

Trường ĐH Bách Khoa TP.HCM Khoa KH & KTMT

Bộ môn Kỹ Thuật Máy Tính Thực hành Vi xử lý – Vi điều khiển

20

Bài 3 : Khảo sát cơ chế đọc trạng thái Timer, xuất dữ liệu

ra LCD ký tự

Nội dung:

Khảo sát các chế độ hoạt động của các bộ định thời

Khảo sát các thanh ghi điều khiển bộ định thời

Biết đọc trạng thái của bộ định thời trong chương trình (phương pháp polling) Xuất thời gian thực của bộ định thời ra LCD

Yêu cầu:

1 Sử dụng bộ timer 1 cứ sau 1s đếm lên 1 đơn vị rồi xuất giá trị ra LED

2 Viết chương trình thực hiện đồng hồ thời gian thực

3 Viết chương trình hiển thị đồng hồ thời gian thực lên LCD

3.1 Các bước hiện thực yêu cầu 1

Bước 1 Tạo project mới giống như hướng dẫn ở chương 1 lấy tên project là

timer_polling và chọn chip 18f4520 Ta được hình sau:

Bước 2

Include file p18f4520.inc vào file timer _polling.asm

Trang 22

Bộ môn Kỹ Thuật Máy Tính Thực hành Vi xử lý – Vi điều khiển

21

bcf T0CON,TMR0ON movlw 0x3c ; nap lai so dem 50000 cho timer0

movwf movlw

TMR0H 0xaf movwf

bsf

TMR0L T0CON,TMR0ON ; cho phep timer0 dem lai

movwf

bsf

return

TMR0L T0CON,TMR0ON ; cho phep timer0 dem

Bước 5 Viết chương trình con chạy trong timer, sau 1s tăng giá trị hiện thị ra ngoài led

đơn

Vì cứ 100ms thì có ngắt một lần, do đó để sau 1s ta tăng lên một giá trị thì cần 10 lần

ngắt như vậy, nên ban đầu ta phải khởi tạo cho biến delay = 10 Và đây là hàm chính thực

hiện chức năng của bài tập 1

timer0_routine

bcf INTCON,TMR0IF decfsz tmr0_var1

bra timer0_isr_1

incf PORTB movlw 10

movwf tmr0_ var1 timer0_isr_1

Trang 23

Trường ĐH Bách Khoa TP.HCM Khoa KH & KTMT

Bộ môn Kỹ Thuật Máy Tính Thực hành Vi xử lý – Vi điều khiển

22

Trang 24

bra tmr0_loop

rcall timer0_routine ; Nap lai bo dem

bra tmr0_loop

; Ham khoi dong ban dau

init movlw 0x0e ; PortB Digital output

movwf ADCON1

clrf PORTB ; toàn bộ PORTB là cổng xuất

clrf TRISB return

init_timer0 movlw 10

movwf tmr0_var1

bcf INTCON,TMR0IF clrf T0CON

movlw 0x3c

movwf TMR0H movlw 0xaf

movwf TMR0L bsf INTCON,TMR0IF return

timer0_routine

bcf INTCON,TMR0IF decfsz tmr0_var1,1

bra timer0_isr_1

incf LATB movlw 10

movwf tmr0_var1 timer0_isr_1

bcf T0CON,TMR0ON movlw 0x3c

Trang 25

[Trường ĐH Bách Khoa TP.HCM Khoa KH & KTMT

Bộ môn Kỹ Thuật Máy Tính Thực hành Vi xử lý- Vi điều khiển

24

movwf TMR0H movlw 0xaf movwf TMR0L bsf T0CON,TMR0ON return

Dữ liệu/Lệnh đưa vào LCD

3.2.2 Tổ chức vùng nhớ của LCD

Trang 26

Bộ môn Kỹ Thuật Máy Tính Thực hành Vi xử lý- Vi điều khiển

25

Display Data Ram (DDRAM): lưu trữ mã ký tự hiển thị ra màn hình Mã này giống

với mã ASCII Có tất cả 80 ô nhớ DDRAM Vùng hiển thị tương ứng với cửa sổ gồm 16

ô nhớ hàng đầu tiên và 16 ô nhớ hàng thứ hai Chúng ta có thể tạo hiệu ứng dịch chữ bằng cách sử dụng lệnh dịch (mô tả sau), khi đó cửa sổ hiển thị sẽ dịch đem lại hiệu ứng dịch chữ

Character Generator Ram (CGRAM): lưu trữ tám mẫu ký tự do người dùng định

nghĩa Tám mẫu ký tự này tương ứng với các mã ký tự D7-D0 = 0000*D2D1D0 (* mang giá trị tùy định 0 hay 1)

Character Generator Rom (CGROM): lưu trữ cứng các mẫu ký tự tương ứng với mã

ASCII Dưới đây là bảng ánh xạ giữa mã ký tự và mẫu ký tự

Chúng ta muốn hiển thị chữ “CE” ở giữa hàng đầu tiên, giả sử cửa sổ hiển thị đang bắt đầu từ vị trí đầu tiên (hàng thứ nhất hiển thị dữ liệu của ô nhớ từ 0x00 đến 0x0f,

hàng thứ hai hiển thị dữ liệu của ô nhớ từ 0x40 đến 0x4f, đây là vị trí home) Giá trị

của ô nhớ

0x07 là 0x43 (ký tự C), của ô nhớ 0x08 là 0x45 (ký tự E)

Chúng ta muốn hiển thị chữ “®” ở giữ hàng thứ hai, giả sử cử sổ hiển thị đang ở vị

trí home Trong bảng mẫu ký tự chúng ta thấy không có mẫu “®” Lúc này chúng ta

phải định nghĩa mẫu “®” 5x8 điểm, gồm có 8 byte, sau đó lưu vào vị trí của mẫu ký tự

CGRAM thứ nhất Lúc này giá trị của ô nhớ 0x47 là 0x00 hoặc 0x08 (vị trí của mẫu

ký tự CGRAM thứ nhất “®”)

Trang 27

[Trường ĐH Bách Khoa TP.HCM Khoa KH & KTMT

Bộ môn Kỹ Thuật Máy Tính Thực hành Vi xử lý- Vi điều khiển

26

Trang 28

Bộ môn Kỹ Thuật Máy Tính 27 Thực hành Vi xử lý – Vi điều khiển

3.3.3 Các lệnh giao tiếp với LCD

Read BUSY flag

Các bit trên bảng tóm tắt các lệnh có ý nghĩa như sau:

SH 1 Entire shift on 0 Entire shift off

R/L 1 Shift to the Right 0 Shift to the Left

BF 1 Internally operating 0 Can accept instruction

Trên kit thí nghiệm LCD ký tự 2x16 được kết nối vào Port D ở chế độ 4 bit Ở chế độ

4 bit, để đọc hay ghi một byte phải tiến hành cài dữ liệu hai lần, lần đầu là 4 bit cao, lần thứ hai là 4 bit thấp

Trang 29

Trường ĐH Bách Khoa TP.HCM Khoa KH & KTMT

Bộ môn Kỹ Thuật Máy Tính 28 Thực hành Vi xử lý – Vi điều khiển

RD4 RD5 RD6

RD0 RD1 RD2 RD3

có giá trị 0x01 Lệnh “Function set” gửi hai lần giá trị 0x2

Trang 30

Bộ môn Kỹ Thuật Máy Tính 29 Thực hành Vi xử lý – Vi điều khiển

3.4 Các bước hiện thực yêu cầu 2

Bước 1 Tạo project mới giống như hướng dẫn ở chương 1 lấy tên project là LCD, tạo

file lcd.asm và chọn chip 18f4520 Ta được hình sau:

Trang 31

Trường ĐH Bách Khoa TP.HCM Khoa KH & KTMT

Bộ môn Kỹ Thuật Máy Tính 30 Thực hành Vi xử lý – Vi điều khiển

Bước 2 Include file p18f4520.inc vào file lcd.asm

Bước 3 Dựa vào sơ đồ nguyên lý kết nối vi điều khiển với LCD kí tự ta define lại để dễ

Bước 4 Viết hàm xuất dữ liệu 4 bit trong biến data_4bit ra cho LCD kí tự :

Trang 32

Bộ môn Kỹ Thuật Máy Tính 31 Thực hành Vi xử lý – Vi điều khiển

lcd_write_cmd ; - trong biến command

rcall lcd_wait_busy ; LCD san sang

bcf LCD_RS ; Cho phep lenh

bcf LCD_RS ; Cho phep lenh

bsf LCD_RW ; Cho phep doc

rcall delay1us ; Cho xong

bsf LCD_E ; Cho phep LCD hoat dong

rcall delay1us ; Giu cham phan cung

bcf LCD_E ; Xong, cam LCD

Trang 33

Trường ĐH Bách Khoa TP.HCM Khoa KH & KTMT

Bộ môn Kỹ Thuật Máy Tính 32 Thực hành Vi xử lý – Vi điều khiển

lcd_write_4bits ; - Lay 4bit thap trong biến data_4bit

bcf LCD_RW ; Cho phep viet

bsf LCD_E ; Cho phep LCD hoat dong

rcall write_4bit_to_portD ; Xuat 4bit data

rcall delay10us ; Giu cham 10 usec

bcf LCD_E ; CAM LCD hoat dong

rcall delay10us ; Giu cham 10 usec

return

Bước 6 Sau đó viết thêm hàm truyền dữ liệu hiển thị ra LCD kí tự

Chương trình con lcd_print_char truyền dữ liệu trong biến char để hiển thị lên màn hình

LCD Như trên ta đã đề cập, trong ứng dụng này ta sử dụng LCD chế độ 4 bít, nên data ở đây được truyền theo thứ tự là 4 bit cao truyền trước sau đó 4 bít thấp được truyền sau

lcd_print_char ; -trong biến char

movlw .0 cpfseq row

movlw .16 ; current_row = 0 cpfseq col

cpfseq col

bra print2

movlw .0 ; current_col = 16

movwf row movwf col ; Xoa LCD

Trang 34

Bộ môn Kỹ Thuật Máy Tính 33 Thực hành Vi xử lý – Vi điều khiển

lcd_write_data ; - trong char

bsf LCD_RS ; Cho phep xuat data

movff char,data_4bit ; Xuat 4 bit data cao ra

rcall lcd_write_cmd ; Xoa man hinh LCD

call delay5ms ; Giu cham 5msec

Bước 7.Viết chương trình khởi động LCD

Hàm quan trọng nhất của LCD kí tự chính là hàm khởi tạo LCD Trước khi sử dụng được lcd

ta phải khởi tạo cho nó theo như giản đồ khởi tạo lcd ở trên phần hướng dẫn lý thuyết Port B

vả timer được khởi tạo như trong yêu cầu 1 Ngoài ra do thiết kế mạch, để LCD có thể hiện thị bình thường trước tiên ta phải bật nguồn của LCD lên, chân nguồn của LCD được điều khiển bởi PortD.7 tích cực mức cao, nên trước khi muốn sử dụng LCD ta phải bật PortD.7 lên 1

Trang 35

Trường ĐH Bách Khoa TP.HCM Khoa KH & KTMT

Bộ môn Kỹ Thuật Máy Tính 34 Thực hành Vi xử lý – Vi điều khiển

init_lcd rcall init_portD

movlw 0

movwf col

movwf row

call delay15ms ; Giu cham 15msec

bcf LCD_RS ; Cho phep gui lenh

bcf LCD_RW_DIR bcf LCD_RS_DIR bcf LCD_ON_DIR bsf LCD_ON ; Cap nguon cho LCD

Trang 36

Bộ môn Kỹ Thuật Máy Tính 35 Thực hành Vi xử lý – Vi điều khiển

addwf addr

movff addr,command

rcall lcd_write_cmd ; Phat lenh

call delay5ms ; Giu cham 5msec xy3 return

xy1 movlw 0x40 ; Hang lon hon hay bang 2

mulwf row

movff PRODL,addr movf col,w

addwf addr

bra xy2 Bước 8 Đến đây ta có thể viết chương trình để hiển thị kí tự lên lcd kí tự

Ý tưởng thực hiện ở đây là lúc đầu ta khai báo một vùng nhớ gồm 32 ô nhớ tương ứng với 32 vị trí trên lcd kí tự Hàm lcd_display của chúng ta sẽ thực hiện một việc đơn giản

là lấy dữ liệu chứa trong vùng nhớ này ra hiển thị lên lcd kí tự Còn người dùng muốn hiển thị lên lcd thì chỉ cần update giá trị vào vùng nhớ này là xong

3.5 Chương trình mẫu

#include p18f4520.inc

radix dec

Trang 37

Trường ĐH Bách Khoa TP.HCM Khoa KH & KTMT

Bộ môn Kỹ Thuật Máy Tính 36 Thực hành Vi xử lý – Vi điều khiển

LATD, RD0 LATD, RD1 LATD, RD2 LATD, RD3 TRISD, RD0 TRISD, RD1 TRISD, RD2 TRISD, RD3

LATD, RD6 LATD, RD5 LATD, RD4

LCD_ON LCD_ON_DIR

TRISD, RD6 TRISD, RD5 TRISD, RD4 PORTD LATD,RD7 TRISD, RD7

goto start udata

rcall init_portB ; Khoi dong portB

rcall init_timer0 ; Khoi dong timer0

tmr0_loop btfss INTCON,TMR0IF ; Kiem tra trang thai co IF

rcall timer0_routine ; Nap lai bo dem

Trang 38

Bộ môn Kỹ Thuật Máy Tính 37 Thực hành Vi xử lý – Vi điều khiển

movlw 10

cpfseq tmr0_var1 ; Kiem tar bo dem 10

tmr0_1 rcall decode_ascii ; Giai ma binary sang ma ASCII

call lcd_print_char ; Xuat ra LCD

movlw 0x30 ; Nho hon hay bang 9

decode_2 addwf decode_var

movlw 0x3c

movwf TMR0H movlw 0xaf

movwf TMR0L bsf INTCON,TMR0IF return

timer0_routine

bcf INTCON,TMR0IF decfsz tmr0_var1,1

incf LATB movlw 10

movwf tmr0_var1

movlw 0x3c

movwf TMR0H movlw 0xaf movwf TMR0L bsf T0CON,TMR0ON return

init_portB movlw 0x0e ; PortB Digital output

movwf ADCON1

Trang 39

Trường ĐH Bách Khoa TP.HCM Khoa KH & KTMT

Bộ môn Kỹ Thuật Máy Tính 38 Thực hành Vi xử lý – Vi điều khiển

clrf PORTB ; toàn bộ PORTB là cổng xuất

clrf TRISB return

lcd_print_char; -trong biến char

lcd_write_data ; - trong char

bsf LCD_RS ; Cho phep xuat data

movff char,data_4bit ; Xuat 4 bit data cao ra

rcall lcd_write_cmd ; Xoa man hinh LCD

call delay5ms ; Giu cham 5msec

movlw 0

movwf row

movlw 0

movwf col

Trang 40

Bộ môn Kỹ Thuật Máy Tính 39 Thực hành Vi xử lý – Vi điều khiển

rcall lcd_goto_xy ; Cursor ve toa do 0,0

call delay15ms ; Giu cham 15msec

bcf LCD_RS ; Cho phep gui lenh

Ngày đăng: 07/09/2016, 16:57

HÌNH ẢNH LIÊN QUAN

Sơ đồ kết nối ICD2 - Thực hành vi xử lý vi điều khiển
Sơ đồ k ết nối ICD2 (Trang 2)
Sơ đồ kết nối LCD: - Thực hành vi xử lý vi điều khiển
Sơ đồ k ết nối LCD: (Trang 29)
Sơ đồ điều khiển ngắt: - Thực hành vi xử lý vi điều khiển
i ều khiển ngắt: (Trang 45)
Hình 5.2 : I2C Protocol - Thực hành vi xử lý vi điều khiển
Hình 5.2 I2C Protocol (Trang 51)
Hình 5.1 : I2C interface - Thực hành vi xử lý vi điều khiển
Hình 5.1 I2C interface (Trang 51)
Hình 5.5 : Khởi động I2C - Thực hành vi xử lý vi điều khiển
Hình 5.5 Khởi động I2C (Trang 55)
Hình 5.6 : Stop I2C - Thực hành vi xử lý vi điều khiển
Hình 5.6 Stop I2C (Trang 56)
Hình 5-7 Sơ đồ mạch                              +5v - Thực hành vi xử lý vi điều khiển
Hình 5 7 Sơ đồ mạch +5v (Trang 57)
Hình 6-1 Sơ đồ khối của SPI - Thực hành vi xử lý vi điều khiển
Hình 6 1 Sơ đồ khối của SPI (Trang 63)
Hình 6-2 Kết nối SPI master/slave - Thực hành vi xử lý vi điều khiển
Hình 6 2 Kết nối SPI master/slave (Trang 65)
Hình 6-4  Sơ đồ kết nối PIC 18F4520 và 74HC595 dùng SPI để mở rộng cổng xuất - Thực hành vi xử lý vi điều khiển
Hình 6 4 Sơ đồ kết nối PIC 18F4520 và 74HC595 dùng SPI để mở rộng cổng xuất (Trang 68)
Hình 7-1  Giao tiếp UART của PIC kết nối với máy tính - Thực hành vi xử lý vi điều khiển
Hình 7 1 Giao tiếp UART của PIC kết nối với máy tính (Trang 71)
Hình 9-1: Tập thanh ghi sử dụng trong chế độ capture mode và mạch giao động 555 - Thực hành vi xử lý vi điều khiển
Hình 9 1: Tập thanh ghi sử dụng trong chế độ capture mode và mạch giao động 555 (Trang 85)
Hình 10-1  Cổng xuất tín hiệu PWM - Thực hành vi xử lý vi điều khiển
Hình 10 1 Cổng xuất tín hiệu PWM (Trang 90)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w