: LẬP TRÌNH GIAO TIẾP PHÍM ĐƠN VÀ QUÉT LED, Viết chương trình thực hiện việc đọc liên tục trạng thái của nút nhấn được nối đến P1.0 và hiển thị ra led được nối tại chân P3.0 (bit thứ 0 của led thanh BL202).
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA ĐIỆN – ĐIỆN TỬ
BỘ MÔN ĐIỆN TỬ
-o0o -BÁO CÁO THÍ NGHIỆM
VI XỬ LÍ
LẬP TRÌNH GIAO TIẾP PHÍM
ĐƠN VÀ LED ĐƠN Giảng viên hướng dẫn: Võ Thị Thu Hồng
Sinh viên thực hiện:
Trang 2TP HỒ CHÍ MINH, THÁNG 2 NĂM 2019
Trang 3BÀI 1: LẬP TRÌNH GIAO TIẾP PHÍM ĐƠN VÀ QUÉT LED
MỤC TIÊU:
Nắm được cách sử dụng kit thí nghiệm, phần mềm lập trình
Nắm được cách lập trình giao tiếp IO port
Nắm được cách lập trình tạo thời gian trễ dùng các lệnh
CHUẨN BỊ:
Đọc chương 1, chương 2 và chương 6 của tài liệu hướng dẫn
Viết chương trình và mô phỏng các bài thí nghiệm
THÍ NGHIỆM 1
Mục tiêu
Nắm được cách thức điều khiển trực tiếp ngoại vi thông qua các port I/O của 8051.
Yêu cầu
Viết chương trình thực hiện việc đọc liên tục trạng thái của nút nhấn được nối đến
P1.0 và hiển thị ra led được nối tại chân P3.0 (bit thứ 0 của led thanh BL202).
Trả lời:
Trang 4Kiểm tra
Biên dịch và thực thi chương trình để kiểm tra kết quả thực hiện.
Thử giải thích tại sao có đến 2 led cùng bị tác động khi nhấn hoặc thả nút.
Tổng kết xem các bit nào của 2 port có thể được dùng trong thí nghiệm trên và giải thích tại sao.
Trả lời:
Tất cả các bit của 2 port đều có thể được dùng do các chân đều là IO port.
THÍ NGHIỆM 2
Mục tiêu
Nắm được cách tạo trễ dùng vòng lặp lệnh
Yêu cầu
Viết chương trình tạo xung vuông 1 Hz, chu kỳ nhiệm vụ 50% trên P1.0
Trang 5Trả lời:
Kiểm tra
Biên dịch, thực thi và kiểm tra chương trình bằng cách sử dụng oscilloscope để kiểm tra.
Câu hỏi
Để tạo xung 1Hz, các vòng trễ tạo ra như thế nào Tính toán chính xác dựa trên chương trình đã viết.
Trang 6Sai số nhỏ nhất có thể đạt được so với yêu cầu là bao nhiêu?
Trả lời:
Sai số nhỏ nhất đạt được là 10-6 (s) khi m=4, n=250, p=249
THÍ NGHIỆM 3
Mục tiêu
Nắm được cách viết chương trình con để tạo trễ
Yêu cầu
Viết chương trình con Delay1sIns và dùng chương trình con này để chớp/tắt LED
đơn gắn vào P1.0 sau mỗi khoảng thời gian 1s.
Trang 7Kiểm tra
Biên dịch, thực thi và kiểm tra chương trình bằng cách quan sát LED đơn.
Câu hỏi
Thời gian 1s được tạo ra như thế nào?
Trả lời: 1s= 1+ 4 x [( 250 x 2 +1) (249 x2 +1)]
THÍ NGHIỆM 4
Mục tiêu
Nắm được cách hiển thị LED và tạo hiệu ứng
Trang 8Yêu cầu
Viết chương trình tạo hiệu ứng quay LED: các LED đơn trên BARLED1 sáng lần lượt từ trái sang phải sau thời gian 1s và lặp lại Sử dụng chương trình con 1s đã viết ở trên.
Trả lời:
Trang 9Kiểm tra
Biên dịch, thực thi và kiểm tra chương trình bằng cách quan sát hiệu ứng trên bar led.
Câu hỏi
Led ngoài cùng bên trái kết nối đến MSB (most significant bit) hay LSB (less significant bit) của port 1?
Trả lời: Led ngoài cùng bên trái kết nối với MBS của port 1.
Trang 10BÀI TN 3
GIAO TIẾP LCD VÀ ADC
THÍ NGHIỆM 1: Download chương trình mẫu LCD.A51 trên trang web bộ môn điện
tử Biên dịch và chạy thử chương trình Sửa chương trình để hiển thị tên sinh viên lên hàng đầu
ORG 2000H
RS BIT P3.5
EN BIT P3.3
MAIN:
LCALL INIT
MOV A,#0
LAP1: PUSH ACC
MOV DPTR,#TABLE
MOVC A,@A + DPTR
JZ TIEP
LCALL OUT
POP ACC
INC A
SJMP LAP1
TIEP: MOV A,#0C0H
LCALL NHAPLENH
MOV A,#0
LAP2: PUSH ACC
MOV DPTR,#TABLE1
MOV A,@A+DPTR
JZ EXIT
Trang 11MOVX @DPTR,A
CLR EN
LCALL DELAY5MS
RET
; -OUT:
MOV DPTR,#8000H
CLR EN
SETB EN
SETB RS
MOVX @DPTR,A
CLR EN
LCALL DELAY5MS
RET
; -DELAYL5MS:
MOV TMOD,#10H
MOV TL1,#LOW(-5000)
MOV TH1,#HIGH(-5000)
SETB TR1
JNB TF1,$
CLR TF1
CLR TR1
RET
; -INIT:
MOV A,#01H
LCALL NHAPLENH
MOV A,#0EH
LCALL NHAPLENH
MOV A,#02H
LCALL NHAPLENH
MOV A,#06H
LCALL NHAPLENH
MOV A,#38H
LCALL NHAPLENH
RET
TABLE: DB "NGUYEN VAN HUY",0 ; ky tu 0 de bao ket thuc chuoi ky tu TABLE1: DB "NGUYEN VAN ANH",0
END
Trang 12THÍ NGHIỆM 2: Viết thêm chương trình con CLRSCREEN để xóa màn hình LCD
CLEAR:
MOV A, #01H ;đặt giá trị cho A ứng với lệnh xóa màn hình trong LCD LCALL NHAPLENH
RET
Viết thêm chương trình con GOTOXY để di chuyển con trỏ của LCD đến hàng x, cột
y, với X chứa trong R0 và Y chứa trong R1
GOTOXY:
CLR A
MOV A,R0 ;chọn hàng hiển thị trên LCD
MOV DPTR,#TABLE
MOVC A,@A+DPTR
ORL A,R1 ;chọn cột hiển thị trên LCD
LCALL NHAPLENH
TABLE: DB 80H,0C0H
RET
Sửa chương trình ở thí nghiệm 1 để hiển thị thêm số nhóm ở hàng thứ 2
ORG 2000H
RS BIT P3.5
EN BIT P3.3
MAIN:
LCALL INIT
MOV A,#0
Trang 13LAP2: PUSH ACC
MOV DPTR,#TABLE1
MOV A,@A+DPTR
JZ EXIT
LCALL OUT
POP ACC
INC A
SJMP LAP2
EXIT: SJMP $
; -NHAPLENH:
MOV DPTR,#8000H
CLR EN
SETB EN
CLR RS
MOVX @DPTR,A
CLR EN
LCALL DELAY5MS
RET
; -OUT:
MOV DPTR,#8000H
CLR EN
SETB EN
SETB RS
MOVX @DPTR,A
CLR EN
LCALL DELAY5MS
RET
; -DELAYL5MS:
MOV TMOD,#10H
MOV TL1,#LOW(-5000)
MOV TH1,#HIGH(-5000)
SETB TR1
JNB TF1,$
CLR TF1
CLR TR1
RET
; -INIT:
Trang 14MOV A,#01H
LCALL NHAPLENH
MOV A,#0EH
LCALL NHAPLENH
MOV A,#02H
LCALL NHAPLENH
MOV A,#06H
LCALL NHAPLENH
MOV A,#38H
LCALL NHAPLENH
RET
; -GOTOXY:
PUSH ACC
MOV A,R0
MOV DPTR,#TB
MOVC A,@A+DPTR
ORL A,R1
LCALL NHAPLENH
POP ACC
TB: DB 80H,0C0H
RET
TABLE: DB "DO TUAN HAO",0 ; ky tu 0 de bao ket thuc chuoi ky tu
TABLE1: DB "NGUYEN MY HANG",0
END
THÍ NGHIỆM 3 +4
Viết chương trình con READADC thực hiện đọc giá trị của kênh 0 và trả về giá trị trong R0 Viết chương trình hiển thị giá trị của kênh 0 của ADC lên LCD dùng chương trình con
Trang 15ACALL DELAY120US
MOVX A,@DPTR
MOV R5,A
ACALL CALADC
SJMP LAP
; -DELAY120US:
MOV R1,#60
DJNZ R1,$
RET
; -NHAPLENH:
MOV DPTR,#6000H
CLR EN
SETB EN
CLR RS
MOVX @DPTR,A
CLR EN
LCALL DL5MS
RET
; -DL5MS:
MOV TMOD,#01H
MOV TL0,#LOW(-5000)
MOV TH0,#HIGH(-5000)
SETB TR0
JNB TF0,$
CLR TR0
CLR TF0
RET
; -KHOIDONGLCD:
MOV A,#01H
LCALL NHAPLENH
MOV A,#0EH
LCALL NHAPLENH
MOV A,#02H
LCALL NHAPLENH
MOV A,#06H
LCALL NHAPLENH
Trang 16MOV A,#38H
LCALL NHAPLENH
RET
; -XUAT1KYTU:
MOV DPTR,#6000H
CLR EN
SETB EN
SETB RS
MOVX @DPTR,A
CLR EN
LCALL DL5MS
RET
; -CALADC:
MOV A,#88H
LCALL NHAPLENH
MOV A,R5
MOV B,#51
DIV AB
ADD A,#48
ACALL XUAT1KYTU
MOV A,#10
MUL AB
MOV R4,B
MOV B,#51
CJNE R4,#1,TIEP1
DIV AB
ADD A,#5
MOV R4,A
Trang 17; -HIENTHI:
MOV A,#80H
ACALL NHAPLENH
MOV R3,#0
LOOP:
MOV A,R3
MOV DPTR,#TABLE
MOVC A,@A+DPTR
JZ EXIT
ACALL XUAT1KYTU
INC R3
SJMP LOOP
EXIT:
RET
TABLE: DB "VOLT: , V",0
END