Báo cáo thí nghiệm môn Vi xử lý - Bài 4

BÀI 1: Viết chương trình đọc điện áp của biến trở trên kênh 0 và hiển thị ra LED 7

đoạn.

ORG 2000H

LOOP:

MOV R1, #255

MOV DPTR, #4000H ; ghi giá trị 4000H vào con trỏ vị trí (vị trí bắt

đầu trên IC 74LS138 đối với vùng điều khiển

ADC)

MOV A, #0

MOVX @DPTR,A ; chọn ngõ vào được nối vào chân IN0 của IC

ADC0809

ACALL DELAY_100US ; tạo trễ một khoảng thời gian để cho IC đọc

và xử lí một giá trị điện áp

MOVX A,@DPTR ; gửi giá trị đọc được về thanh ghi A

LOOP1: ; vòng lặp cho quá trình xuất giá trị đọc được từ IC

ADC0809

PUSH ACC ; cất giá trị đọc được từ IC ADC0809 vào vùng

stack pointer

MOV DPTR, #0000H ; ghi giá trị 0000H vào con trỏ vị trí (vị trí bắt

đầu trên IC 74LS138 đối với LED 7 đoạn)

; quá trình thực hiện tính toán nhằm tách các số hàng trăm, chục, đơn vị của giá trị

điện áp đọc được lên 3 LED 7 đoạn khác nhau

MOV B, #10

DIV AB

MOV R7, B

MOV B, #10

DIV AB

ORL A, #0B0H

MOVX @DPTR, A ; xuất giá trị hàng trăm ra LED 7 đoạn thứ nhất

ACALL DELAY_1MS

MOV A, B

ORL A,#0D0H

MOVX @DPTR, A; xuất giá trị hàng trăm ra LED 7 đoạn thứ hai

ACALL DELAY_1MS

MOV A, R7

ORL A,#0E0H

MOVX @DPTR, A; xuất giá trị hàng trăm ra LED 7 đoạn thứ baACALL DELAY_1MS

POP ACC

DJNZ R1, LOOP1; quá trình xuất trên LED 7 đoạn được lặp lại để

mắt chúng ta có thể nhận biết

SJMP LOOP ; quay về chương trình đọc giá trị điện áp từ ADC

DELAY_100US:

MOV R6, #200

DJNZ R6, $

RET

DELAY_1MS ; đoạn chương trình tạo trễ dùng Timer cung cấp một

khoảng thời gian để mắt chúng ta nhận thấy các LED

7 đoạn hiển thị

MOV TMOD, #01H

MOV TH0, #HIGH(-1000)

MOV TL0,#LOW(-1000)

SETB TR0

JNB TF0, $

CLR TR0

CLR TF0

RET

pdf8 trang | Chuyên mục: Vi Xử Lý – Vi Điều Khiển | Chia sẻ: yen2110 | Lượt xem: 521 | Lượt tải: 0download
Tóm tắt nội dung Báo cáo thí nghiệm môn Vi xử lý - Bài 4, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
BÀI 1: Viết chương trình đọc điện áp của biến trở trên kênh 0 và hiển thị ra LED 7 
đoạn. 
ORG 2000H 
LOOP: 
MOV R1, #255 
MOV DPTR, #4000H ; ghi giá trị 4000H vào con trỏ vị trí (vị trí bắt 
đầu trên IC 74LS138 đối với vùng điều khiển 
ADC) 
MOV A, #0 
MOVX @DPTR,A ; chọn ngõ vào được nối vào chân IN0 của IC 
ADC0809 
ACALL DELAY_100US ; tạo trễ một khoảng thời gian để cho IC đọc 
và xử lí một giá trị điện áp 
MOVX A,@DPTR ; gửi giá trị đọc được về thanh ghi A 
LOOP1: ; vòng lặp cho quá trình xuất giá trị đọc được từ IC 
ADC0809 
PUSH ACC ; cất giá trị đọc được từ IC ADC0809 vào vùng 
stack pointer 
MOV DPTR, #0000H ; ghi giá trị 0000H vào con trỏ vị trí (vị trí bắt 
đầu trên IC 74LS138 đối với LED 7 đoạn) 
; quá trình thực hiện tính toán nhằm tách các số hàng trăm, chục, đơn vị của giá trị 
điện áp đọc được lên 3 LED 7 đoạn khác nhau 
MOV B, #10 
DIV AB 
MOV R7, B 
MOV B, #10 
DIV AB 
ORL A, #0B0H 
MOVX @DPTR, A ; xuất giá trị hàng trăm ra LED 7 đoạn thứ nhất 
ACALL DELAY_1MS 
MOV A, B 
ORL A,#0D0H 
MOVX @DPTR, A; xuất giá trị hàng trăm ra LED 7 đoạn thứ hai 
ACALL DELAY_1MS 
MOV A, R7 
ORL A,#0E0H 
MOVX @DPTR, A; xuất giá trị hàng trăm ra LED 7 đoạn thứ ba 
ACALL DELAY_1MS 
POP ACC 
DJNZ R1, LOOP1; quá trình xuất trên LED 7 đoạn được lặp lại để 
mắt chúng ta có thể nhận biết 
SJMP LOOP ; quay về chương trình đọc giá trị điện áp từ ADC 
DELAY_100US: 
MOV R6, #200 
DJNZ R6, $ 
RET 
DELAY_1MS ; đoạn chương trình tạo trễ dùng Timer cung cấp một 
khoảng thời gian để mắt chúng ta nhận thấy các LED 
7 đoạn hiển thị 
MOV TMOD, #01H 
MOV TH0, #HIGH(-1000) 
MOV TL0,#LOW(-1000) 
SETB TR0 
JNB TF0, $ 
CLR TR0 
CLR TF0 
RET 
BÀI 2 : Viết chương trình đọc điện áp của biến trở trên kênh 0 và hiển thị ra LCD 
 Quá trình đọc giá trị điện áp từ IC ADC0809 cũng tương tự như bài 1, chỉ khác 
việc hiển thị giá trị điện áp đọc được là dùng LCD 
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 ) 
MOV DPTR,#8000H 
ACALL LCD_INIT ; gọi chương trình để cài đặt các thông số hiển thị 
trên LCD 
; quá trình đọc giá trị điện áp từ IC ADC0809 
LOOP: MOV DPTR,#4000H 
 MOV A,#0 
 MOVX @DPTR,A 
 ACALL DELAY_100US 
 MOVX A,@DPTR 
; quá trình xuất giá trị điện áp lên LCD 
MOV DPTR,#8000H 
 PUSH ACC 
MOV A, #80H ; đặt cấu hình cho LCD để LCD bắt đầu hiển thị 
kí tự ở góc trái màn hình 
 ACALL WRITE_CMD 
 POP ACC 
 MOV B, #10 
 DIV AB 
 MOV R0,B; giá trị hàng đơn vị của điện áp cất vào thanh ghi R0 
MOV B, #10 
DIV AB ; giá trị hàng trăm của điện áp cất vào thanh ghi A, 
hàng chục vào thanh ghi B 
 ORL A, #30H ; tạo ra mã ASCII của kí số tương ứng 
 ACALL WRITE_TEXT ; xuất lên LCD 
 MOV A, B 
 ORL A, #30H 
 ACALL WRITE_TEXT 
 MOV A, R0 
 ORL A,#30H 
 ACALL WRITE_TEXT 
 SJMP LOOP 
LCD_INIT: MOV A,#01H ; lệnh xóa màn hình 
ACALL WRITE_CMD; 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 bit 
ACALL WRITE_CMD 
MOV A,#0CH ; lệnh bật LCD ON , không hiển thị Cursor lên 
màn hình LCD 
ACALL WRITE_CMD 
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 
ACALL WRITE_CMD 
WAIT_LCD: ; đoạn chương trình tạo trễ 
MOV R6,#2 
MOV TMOD,#01H 
LOOP1: 
MOV TH0,#HIGH(-50000) 
MOV TL0,#LOW(-50000) 
SETB TR0 
JNB TF0,$ 
CLR TF0 
CLR TR0 
DJNZ R6, LOOP1 
 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 trên 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 
WRITE_CMD: 
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 dữ liệu 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 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 
DELAY_100US: 
MOV R6,#200 
 DJNZ R6,$ 
 RET 
 END 
BÀI 3: Viết chương trình đọc điện áp thực của biến trở trên kênh 0 và hiển thị ra 
LCD 
 Giải thuật cho vấn đề này cũng tương tự như BÀI 2, chỉ khác là quá trình này 
xuất điện áp thực, do vậy từ giá trị đọc được từ IC ADC0809 ta cần phải có quá 
trình tính toán để hiện thị điện áp thực. Với giá trị đọc được, ta qui đổi sang giá trị 
thực bằng cách 𝑉thực =
𝑉𝐴𝐷𝐶
51
Đoạn chương trình thực hiện việc chuyển đổi sang điện áp thực : 
PUSH ACC 
PUSH B 
 MOV B,#51 
 DIV AB ; chia giá trị đọc được cho 51, lấy giá trị phần nguyên 
 ORL A,#30H ; tạo mã ASCII của giá trị nguyên 
 ACALL WRITE_TEXT 
 MOV A,#0A5H ; xuất dấu chấm phẩy 
 ACALL WRITE_TEXT 
; giá trị sau dấu chấm phẩy ta nhân 10 rồi đem chia cho 51 nhưng ta chấp nhận sai 
số nên ta chỉ lấy giá trị sau dấu chấm phẩy chia 5 để lấy giá trị sau dấu chấm phẩy 
MOV A,B 
 MOV B,#5 
 DIV AB 
 ORL A,#30H 
 ACALL WRITE_TEXT 
 POP B 
 POP ACC 
ĐOẠN CHƯƠNG TRÌNH : 
ORG 2000H 
 RS BIT P3.5 
 EN BIT P3.4 
 MOV DPTR,#8000H 
 ACALL LCD_INIT 
LOOP: 
MOV DPTR,#4000H 
 MOV A,#0 
 MOVX @DPTR,A 
 ACALL DELAY_100US 
 MOVX A,@DPTR 
 MOV DPTR,#8000H 
 ACALL CHIA 
 MOV A, #80H 
 ACALL WRITE_CMD 
 SJMP LOOP 
 LCD_INIT: 
MOV A, #38H 
 ACALL WRITE_CMD 
 MOV A, #0CH 
 ACALL WRITE_CMD 
 MOV A, #04H 
 ACALL WRITE_CMD 
 MOV A, #01H 
 ACALL WRITE_CMD 
 RET 
WAIT_LCD: ; đoạn chương trình tạo trễ 
MOV R6,#2 
MOV TMOD ,#01H 
LOOP1: 
MOV TH0,#HIGH(-50000) 
MOV TL0,#LOW(-50000) 
SETB TR0 
JNB TF0,$ 
CLR TF0 
CLR TR0 
DJNZ R6, LOOP1 
 RET 
WRITE_TEXT : 
SETB RS 
 MOVX @DPTR,A 
 SETB EN 
 CLR EN 
 ACALL WAIT_LCD 
 RET 
 WRITE_CMD: 
CLR RS 
 MOVX @DPTR,A 
 SETB EN 
 CLR EN 
 ACALL WAIT_LCD 
 RET 
DELAY_100US: 
MOV R6, #200 
 DJNZ R6, $ 
 RET 
CHIA: 
PUSH ACC 
 PUSH B 
 MOV B, #51 
 DIV AB 
 ORL A, #30H 
 ACALL WRITE_TEXT 
 MOV A, #0A5H 
 ACALL WRITE_TEXT 
 MOV A, B 
 MOV B, #5 
 DIV AB 
 ORL A, #30H 
 ACALL WRITE_TEXT 
 POP B 
 POP ACC 
RET 
END 

File đính kèm:

  • pdfbao_cao_thi_nghiem_mon_vi_xu_ly_bai_4.pdf
Tài liệu liên quan