Báo cáo Thí nghiệm Vi xử lý - Nguyễn Trọng Tuấn

BÀI TẬP: Hiển thị dòng chữ ‘Hello’ lên màn hình LCD bắt đầu ở vị trí góc trái màn

hình.

ORG 2000H

EN BIT P3.4 ; đặt nhãn cho bit P3.4 (ứng với chân EN trên LCD)

RS BIT P3.5 ; đặt nhãn cho bit P3.5 (ứng với chân RS trên LCD)

MAIN:

CALL START ; gọi chương trình con START chứa các lệnh khởi tạo chương trình truy

xuất LCD

pdf8 trang | Chuyên mục: Vi Xử Lý – Vi Điều Khiển | Chia sẻ: yen2110 | Lượt xem: 456 | Lượt tải: 0download
Tóm tắt nội dung Báo cáo Thí nghiệm Vi xử lý - Nguyễn Trọng Tuấn, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
BÀI TẬP: Hiển thị dòng chữ ‘Hello’ lên màn hình LCD bắt đầu ở vị trí góc trái màn 
hình. 
ORG 2000H 
EN BIT P3.4 ; đặt nhãn cho bit P3.4 (ứng với chân EN trên LCD) 
RS BIT P3.5 ; đặt nhãn cho bit P3.5 (ứng với chân RS trên LCD) 
MAIN: 
CALL START ; gọi chương trình con START chứa các lệnh khởi tạo chương trình truy 
xuất LCD 
MOV R1,#5 ; số kí tự cần xuất lên LCD được gán giá trị cho R1 
MOV A,#0 ; thanh ghi A kết hợp với con trỏ DPTR để truy xuất lần lượt các kí tự cần hiển 
thị lên LCD 
PUSH ACC ; cất giá trị thanh ghi ACC vào vùng stack pointer trước khi gọi chương trình 
con 
LOOP: ; vòng lặp 
CALL TRABANG ; gọi chương trình con để truy xuất lần lượt các kí tự trong bảng TABLE 
định vị trí sẵn trong vùng ROM nội 
CALL WRITE_TEXT ; gọi chương trình con hiển thị kí tự lên LCD 
POP ACC ; lấy lại giá trị thanh ghi ACC cất vào vùng stack pointer để tiếp tục quá trình 
truy xuất kí tự tiếp theo 
INC A ; tăng giá trị thanh ghi ACC lên 1 
PUSH ACC ; cất lại giá trị thanh ghi ACC vào vùng stack pointer trước khi quay lại vòng 
lặp để gọi chương trình con truy xuất 
DJNZ R1, LOOP ; quay lại vòng lặp để gọi chương trình con truy xuất nếu chưa hiển thị 
hết kí tự cuối cùng trong chuỗi kí tự cần hiển thị 
SJMP $ ; nhảy tại chỗ khi hiển thị xong 
START : ; đoạn chương trình con chứa các lệnh khởi tạo chương trình 
MOV A,#01H ; lệnh xóa màn hình 
CALL INIT_LCD ; gọi chương trình để thực thi lệnh xóa màn hình 
MOV A,#38H ; lệnh qui định cách thức giao tiếp giữa LCD với 8051 bằng bus dữ liệu 8 
bits 
CALL INIT_LCD 
MOV A,#0CH ; lệnh bật LCD ON , không hiển thị Cursor lên màn hình LCD 
CALL INIT_LCD 
MOV A,#06H ; lệnh đặt cấu hình cho LCD sao cho mỗi khi gửi đến LCD một kí tự thì 
Cursor tự động chuyển sang phải 
CALL INIT_LCD 
MOV A,#80H; lệnh để đặt Cursor ở dòng đầu tiên góc trái trên LCD khi bắt đầu gửi kí tự 
CALL INIT_LCD 
RET 
INIT_LCD: ; đoạn chương trình xuất lệnh từ 8051 gửi xuống LCD thực hiện 
MOV DPTR,#8000H ; vị trí ngoại vi LCD trên sơ đồ giải mã địa chỉ của 8051 
LCALL WAIT_LCD ; gọi chương trình đợi cho LCD thực hiện xong các lệnh trước đó 
; sau khi LCD thực hiện xong các lệnh trước đó thì ta phải cấu hình cho các chân RS, EN 
trên LCD. Khi ta gửi một ra LCD thì tín hiệu trên chân RS phải ở mức thấp đồng thời khi 
có một xung kích cạnh xuống trên chân EN, dữ liệu trong thanh liệu ghi A sẽ đưa xuống 
LCD để thực hiện như một lệnh 
CLR RS 
MOVX @DPTR,A 
SETB EN 
CLR EN 
RET 
WRITE_TEXT: ; đoạn chương trình xuất kí tự từ vùng ROM nội của 8051 gửi xuống hiển 
thị ra LCD 
MOV DPTR,#8000H 
LCALL WAIT_LCD ; đợi cho LCD thực hiện xong những lệnh trước đó 
; sau khi thực hiện xong các lệnh thì bắt đầu truyền gửi kí tự xuống LCD. Trước tiên ta 
phải để tín hiệu trên chân RS của LCD lên mức 1 và sau khi có một xung kích cạnh xuống 
trên chân EN thì dữ liệu trên thanh ghi A sẽ được xuất ra LCD 
SETB RS 
MOVX @DPTR,A 
SETB EN 
CLR EN 
RET 
TRABANG: 
MOV DPTR,#TABLE 
MOVC A,@A+DPTR 
RET 
WAIT_LCD: ; đoạn chương trình tạo trễ dùng Timer 
MOV TMOD ,#01H 
MOV TH0,#HIGH(-50000) 
MOV TL0,#LOW(-50000) 
SETB TR0 
JNB TF0 ,$ 
CLR TF0 
CLR TR0 
RET 
TABLE: DB 'Hello' 
END 
BÀI TẬP LÀM THÊM : Xuất tên các thành viên trong nhóm lên màn hình LCD trong 
đó cho chạy qua lại chuỗi kí tự đó trên LCD. 
Ta thực hiên tương tự như bài hiện chữ ‘Hello’ lên LCD ở quá trình xuất kí tự lên màn 
hình. Còn về quá trình điều khiển cho các kí tự chạy qua lại trên màn hình LCD thì ta bổ 
sung thêm đoạn code sau: 
CLR C ; tạo một biến điều chỉnh quá trình dịch trái phải thông qua cờ C 
LOOP4: 
MOV R3,#6 ; cho dịch dòng kí tự qua lại 6 khoảng cách 
JC NHAY ; vì ban đầu dòng kí tự đang ở mép trái màn hình nên ta cần cho dịch qua phải, 
cờ C=0, chương trình nhảy đến đoạn chương trình dịch phải chuỗi kí tự 
MOV A,#1CH ; ghi vào thanh A giá trị để dịch phải kí tự 
SJMP TT; nhảy đến đoạn chương trình thực hiện 
NHAY: 
MOV A,#18H; ghi vào thanh A giá trị để dịch trái kí tự 
TT: 
CALL INIT_LCD ; gọi chương trình truy xuất lệnh 
DJNZ R3,$-2 ; quay lại gọi chương trình truy xuất lệnh nếu chưa dịch đủ số khoảng cách 
qui định trong thanh ghi R3 
CPL C ; đảo ngược cờ C, đồng nghĩa với việc thực hiển quá trình dịch chuyển ngược lại 
với quá trình trước đó 
SJMP LOOP4 ; quay lại chương trình dịch chuyển 
Ngoài ra chương trình còn có thêm các lệnh để dịch chuyển Cursor về vị trí tùy quy định 
ở hàng 2 ( như trong bài tập là MOV A,#0C2H) 
Chương trình chính : 
ORG 2000H 
RS BIT P3.5 
EN BIT P3.4 
MOV A,#01H 
CALL INIT_LCD 
MAIN: 
MOV DPTR,#8000H 
MOV A,#38H 
CALL INIT_LCD 
MOV A,#0CH 
CALL INIT_LCD 
MOV A,#06H 
CALL INIT_LCD 
MOV A,#01H 
CALL INIT_LCD 
MOV A,#80H 
CALL INIT_LCD 
MOV R1,#9 
MOV A,#0 
PUSH ACC 
LOOP: 
CALL TRABANG 
CALL WRITE_TEXT 
POP ACC 
INC A 
PUSH ACC 
DJNZ R1,LOOP 
MOV A,#0C2H 
CALL INIT_LCD 
MOV R1,#5 
LOOP2: 
CALL TRABANG 
CALL WRITE_TEXT 
POP ACC 
INC A 
PUSH ACC 
DJNZ R1,LOOP2 
CLR C 
LOOP4: 
MOV R3,#6 
JC NHAY 
MOV A,#1CH 
SJMP TT 
NHAY: 
MOV A,#18H 
TT: 
CALL INIT_LCD 
DJNZ R3,$-2 
CPL C 
SJMP LOOP4 
SJMP $ 
INIT_LCD: 
MOV DPTR,#8000H 
LCALL WAIT_LCD 
CLR RS 
MOVX @DPTR,A 
SETB EN 
CLR EN 
RET 
WRITE_TEXT: 
MOV DPTR,#8000H 
LCALL WAIT_LCD 
SETB RS 
MOVX @DPTR,A 
SETB EN 
CLR EN 
RET 
TRABANG: 
MOV DPTR,#TABLE 
MOVC A,@A+DPTR 
RET 
WAIT_LCD: 
MOV TMOD ,#01H 
MOV R2,#3 
LOOPA: 
MOV TH0,#HIGH(-50000) 
MOV TL0,#LOW(-50000) 
SETB TR0 
JNB TF0 ,$ 
CLR TF0 
CLR TR0 
DJNZ R2,LOOPA 
RET 
TABLE: DB 'TUAN TUAN TUNG' 
END 

File đính kèm:

  • pdfbao_cao_thi_nghiem_vi_xu_ly_nguyen_trong_tuan.pdf
  • pdfBia.pdf