Thí nghiệm Vi xử lý 3: Thí nghiệm giao tiếp LCD và ADC

32 192 3
Thí nghiệm Vi xử lý 3: Thí nghiệm giao tiếp LCD và ADC

Đ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

Báo cáo thí nghiệm Vi xử lý Đại học Bách Khoa Đại học Quốc Gia thành phố Hồ Chí Minh.Bài thí nghiệm 3: Thí nghiệm giao tiếp LCD và ADC.Thí nghiệm 1: Mục tiêu: Nắm được cách thức xuất giá trị lên LCD.Yêu cầu: Download chương trình mẫu LCD.A51 trên trang web bộ môn điện tử hoặc trên elearning. 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.

BÀI THÍ NGHIỆM THÍ NGHIỆM GIAO TIẾP LCD VÀ ADC MỤC TIÊU  Nắm cách điều khiển LCD  Nắm cách giao tiếp với ADC  Nắm cách phối hợp lấy liệu từ ADC hiển thị lên LCD CHUẨN BỊ  Đọc chương 1, chương chương tài liệu hướng dẫn  Viết chương trình mơ thí nghiệm Proteus dựa thí nghiệm TN Vi xử lý BM Điện tử Page | BÀI THÍ NGHIỆM THÍ NGHIỆM GIAO TIẾP LCD VÀ ADC THÍ NGHIỆM Mục tiêu: Nắm cách thức xuất giá trị lên LCD Yêu cầu:  Download chương trình mẫu LCD.A51 trang web môn điện tử elearning  Biên dịch 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 Kiểm tra:  Kiểm tra kết thực chương trình  Giải thích ý nghĩa cách sử dụng chương trình project mẫu  Chương trình dùng để viết lệnh viết liệu lên LCD khác nào?  Các mã lệnh 38H, 0EH, 06H 01H mang ý nghĩa nào?  Muốn viết chuỗi lên LCD, ta có cách làm nào?  Tại đoạn code: MESSAGE: DB “HELLO WORLD!”,0 Số thêm vào để làm gì? BÁO CÁO: Chương trình: LCD_E BIT P3.4 ; Định nghĩa LCD_E chân P3.4 LCD_RS BIT P3.5 ; Định nghĩa LCD_RS chân P3.5 LCDADDR EQU 6000H ; Định nghĩa LCDADDR 6000H ORG 2000H MAIN: MOV @R0, 30H MOV DPTR, #LCDADDR TN Vi xử lý BM Điện tử Page | BÀI THÍ NGHIỆM THÍ NGHIỆM GIAO TIẾP LCD VÀ ADC ACALL CLEAR ACALL INIT_LCD ACALL DISPLAYSTRING SJMP $ INIT_LCD: ; Các dịng lệnh cấu hình LCD ban đầu MOV A, #38H ACALL WRITECOM MOV A, #0EH ACALL WRITECOM MOV A, #06H ACALL WRITECOM RET CLEAR: ; Hàm xóa hình LCD MOV A, #01H ACALL WRITECOM RET WRITECOM: ; Hàm ghi lệnh MOV DPTR, #LCDADDR SETB LCD_E CLR LCD_RS MOVX@DPTR, A CLR LCD_E ACALL WAIT_LCD RET WRITETEXT: TN Vi xử lý ; Hàm ghi kí tự BM Điện tử Page | BÀI THÍ NGHIỆM THÍ NGHIỆM GIAO TIẾP LCD VÀ ADC MOV DPTR, #LCDADDR SETB LCD_E SETB LCD_RS MOVX@DPTR, A CLR LCD_E ACALL WAIT_LCD RET DISPLAYSTRING: ; Hàm xuất chuỗi ký tự cách tra bảng MOV A,#0 LOOP: MOV DPTR, #MESSAGE MOV R0,A MOVC A,@A+DPTR JZ EXIT ACALL WRITETEXT MOV A,R0 INC A DJNZ B, LOOP EXIT: RET WAIT_LCD: ; Hàm delay cho LCD MOV R6,#10 DL1: MOV R7, #250 DJNZ R7, $ TN Vi xử lý BM Điện tử Page | BÀI THÍ NGHIỆM THÍ NGHIỆM GIAO TIẾP LCD VÀ ADC DJNZ R6,DL1 RET MESSAGE: DB "HELLO WORLD!",0 END Kết thí nghiệm a Kết mơ phỏng: b Trả lời câu hỏi 1) Giải thích ý nghĩa cách sử dụng chương trình project mẫu  CLEAR: Xóa hình LCD  INIT_LCD: Thiết lập chế độ hiển thị LCD  DISPLAYSTRING : Lấy kí tự từ nhớ chương trình hiển thị LCD  WRITECOM: Cho phép truy suất nhận lệnh LCD TN Vi xử lý BM Điện tử Page | BÀI THÍ NGHIỆM THÍ NGHIỆM GIAO TIẾP LCD VÀ ADC  WRITETEXT: Cho phép truy suất truy suất liệu LCD  WAIT_LCD: Chương trình delay đợi LCD thực xong lệnh yêu cầu 2) Chương trình dùng để viết lệnh viết liệu lên LCD khác nào? Chương trình dùng để viết lệnh viết liệu lên LCD khác ở chương trình viết lệnh cho chân RS xuống mức cịn chương trình viết liệu lên LCD ngược lại 3) Các mã lệnh 38H, 0EH, 06H 01H mang ý nghĩa nào?  38H: Đặt chức giao tiếp bit, dòng, 5X8 dots  0EH: Hiện tồn hình, khơng chớp kí tự trỏ  06H: Dịch trỏ sang phải( ghi/đọc data )  01H: Xóa hình 4) Muốn viết chuỗi lên LCD, ta có cách làm nào? Muốn viết chuỗi lên LCD, ta xuất ký tự chuỗi lên LCD 5) Tại đoạn code: MESSAGE: DB “HELLO WORLD!”,0 Số thêm vào để làm gì? Trong đoạn code MESSAGE: DB "HELLO WORLD!",0 kí tự dùng để nhận biết kết thúc chuỗi TN Vi xử lý BM Điện tử Page | BÀI THÍ NGHIỆM THÍ NGHIỆM GIAO TIẾP LCD VÀ ADC THÍ NGHIỆM Mục tiêu: Nắm cách thức điều khiển trỏ LCD Yêu cầu:  Viết thêm chương trình CLRSCREEN để xóa hình LCD  Viết thêm chương trình GOTOXY để di chuyển trỏ LCD đến hàng x, cột y, với X chứa R0 Y chứa R1  Sửa chương trình thí nghiệm để hiển thị chỉnh tên sinh viên hàng thứ thêm số nhóm hàng thứ (cũng giữa) Kiểm tra:  Kiểm tra kết thực chương trình  Địa để hiển thị hàng hàng LCD bắt đầu kết thúc bao nhiêu? LCD có hiển thị hết vùng địa khơng? Tại sao?  Muốn bật hay tắt trỏ LCD, ta phải nạp mã lệnh bao nhiêu?  Muốn hiển thị trỏ kiểu blinky, ta phải nạp mã lệnh bao nhiêu? BÁO CÁO: Chương trình: EN BIT P3.3 ; Định nghĩa EN chân P3.3 RS BIT P3.5 ; Định nghĩa RS chân P3.5 LCDADDR EQU 6000H ; Định nghĩa LCDADDR 6000H ORG 2000H MAIN: ACALL INIT_LCD ACALL CLRSCREEN DISPLAY_NAME: TN Vi xử lý BM Điện tử Page | BÀI THÍ NGHIỆM THÍ NGHIỆM GIAO TIẾP LCD VÀ ADC MOV R0, #1 ; Hàng MOV R1, #5 ; Cột ACALL GOTOXY ; Đặt cursor hàng cột ACALL DISPLAY_TEN ; Gọi hàm hiển thị tên DISPLAY_GROUP: MOV R0, #2 ; Hàng MOV R1, #5 ; Cột ACALL GOTOXY ; Đặt cursor hàng cột ACALL DISPLAY_NHOM; Gọi hàm hiển thị nhóm SJMP $ GOTOXY: CJNE R0, #1, G_R2 G_R1: MOV A, R1 SJMP G_S G_R2: ; Gotoxy_Row2 ; Gotoxy_Skip MOV A, R1 ADD A, #40H G_S: ADD A, #80H ACALL COMD RET DISPLAY_TEN: ; Hàm xuất chuỗi ký tự TEN MOV R2, #0 LOOP_TEN: MOV DPTR, #TEN MOV A, R2 MOVC A, @A+DPTR TN Vi xử lý BM Điện tử Page | BÀI THÍ NGHIỆM THÍ NGHIỆM GIAO TIẾP LCD VÀ ADC JZ EXIT ACALL DISP INC R2 SJMP LOOP_TEN EXIT: RET DISPLAY_NHOM: ; Hàm xuất chuỗi ký tự NHOM MOV R2, #0 LOOP_NHOM: MOV DPTR, #NHOM MOV A, R2 MOVC A, @A+DPTR JZ EXIT ; EXIT hàm DISPLAY_TEN ACALL DISP INC R2 SJMP LOOP_NHOM INIT_LCD: ; Các dịng lệnh cấu hình LCD ban đầu MOV A, #38H ACALL COMD MOV A, #0EH ACALL COMD MOV A, #06H ACALL COMD RET CLRSCREEN: ; Hàm xóa hình LCD MOV A, #01H TN Vi xử lý BM Điện tử Page | BÀI THÍ NGHIỆM THÍ NGHIỆM GIAO TIẾP LCD VÀ ADC ACALL COMD RET COMD: ; Hàm ghi lệnh MOV DPTR, #LCDADDR SETB EN CLR RS MOVX @DPTR, A CLR EN ACALL WAIT_LCD RET DISP: ; Hàm ghi kí tự MOV DPTR, #LCDADDR SETB EN SETB RS MOVX @DPTR, A CLR EN ACALL WAIT_LCD RET WAIT_LCD: ; Hàm delay cho LCD thực thi lệnh MOV R6, #16 DL: MOV R5, #144 DJNZ R5, $ DJNZ R6,DL RET TEN: TN Vi xử lý DB "DUONG!", ; Dấu ! thêm vào cho chẵn ký tự BM Điện tử Page | 10 BÀI THÍ NGHIỆM THÍ NGHIỆM GIAO TIẾP LCD VÀ ADC TN Vi xử lý BM Điện tử Page | 18 BÀI THÍ NGHIỆM THÍ NGHIỆM GIAO TIẾP LCD VÀ ADC THÍ NGHIỆM Mục tiêu: Nắm cách thức giao tiếp với ADC Yêu cầu:  Viết chương trình READADC thực đọc giá trị kênh trả giá trị R0  Viết chương trình hiển thị giá trị kênh ADC lên LCD dùng chương trình READADC viết Kiểm tra:  Biên dịch kiểm tra hoạt động chương trình  Để giao tiếp với ADC, ta phải ghi ngoại vi vùng nhớ (giá trị nạp vào ghi DPTR) bao nhiêu?  Khoảng thời gian chờ ADC chuyển đổi giá trị chọn bao nhiêu?  Giá trị có phải giá trị thực điện áp đặt vào kênh hay không?  Để hiển thị giá trị thực tế mức điện áp đặt vào kênh ta phải làm nào? BÁO CÁO: Chương trình: EN BIT P3.3 RS BIT P3.5 LCDADDR EQU 6000H ADCADDR EQU 4000H ORG 2000H MAIN: CALL READADC PUSH TN Vi xử lý BM Điện tử Page | 19 BÀI THÍ NGHIỆM THÍ NGHIỆM GIAO TIẾP LCD VÀ ADC MOV DPTR, #LCDADDR CALL CLRSCREEN CALL INIT_LCD CALL DISPLAYSTRING POP ACC CALL SPLIT_A ; Tách giá trị hiển thị thành hàng MOV A, 20H ; Hàng trăm CALL DISP MOV A, 21H ; Hàng chục CALL DISP MOV A, 22H ; Hàng đơn vị CALL DISP SJMP $ READADC: MOV DPTR,#ADCADDR ;Start ADC MOV A,#0 MOVX @DPTR,A CALL WAIT_LCD ;EOC MOVX A,@DPTR ;OE MOV R0,A MOV P1,A ;Hiển thị A lên LED port để quan sát RET DISPLAYSTRING: MOV R2, #0 LOOP: TN Vi xử lý BM Điện tử Page | 20 BÀI THÍ NGHIỆM THÍ NGHIỆM GIAO TIẾP LCD VÀ ADC MOV DPTR, #MESS MOV A, R2 MOVC A, @A+DPTR JZ EXIT ACALL DISP INC R2 SJMP LOOP EXIT: RET SPLIT_A: MOV B, #10 DIV AB ORL B, #30H ; Đổi sang mã ASCII MOV 22H, B ; Hàng đơn vị MOV B, #10 DIV AB ORL B, #30H ; Đổi sang mã ASCII MOV 21H, B ; Hàng chục ORL A, #30H ; Đổi sang mã ASCII MOV 20H, A ; Hàng trăm RET INIT_LCD: MOV A, #38H ACALL COMD MOV A, #0EH ACALL COMD TN Vi xử lý BM Điện tử Page | 21 BÀI THÍ NGHIỆM THÍ NGHIỆM GIAO TIẾP LCD VÀ ADC MOV A, #06H ACALL COMD RET CLRSCREEN: MOV A, #01H ACALL COMD RET COMD: MOV DPTR, #LCDADDR SETB EN CLR RS MOVX @DPTR, A CLR EN ACALL WAIT_LCD RET DISP: MOV DPTR, #LCDADDR SETB EN SETB RS MOVX @DPTR, A CLR EN ACALL WAIT_LCD RET WAIT_LCD: TN Vi xử lý BM Điện tử Page | 22 BÀI THÍ NGHIỆM THÍ NGHIỆM GIAO TIẾP LCD VÀ ADC MOV R6, #16 DL: MOV R5, #144 DJNZ R5, $ DJNZ R6,DL RET MESS: DB "GT kenh 0: ",0 END Kết thí nghiệm a Kết mơ phỏng: Tín hiệu vào IN0 TN Vi xử lý Port BM Điện tử Page | 23 BÀI THÍ NGHIỆM THÍ NGHIỆM GIAO TIẾP LCD VÀ ADC LCD b Trả lời câu hỏi 1) Để giao tiếp với ADC, ta phải ghi ngoại vi vùng nhớ (giá trị nạp vào ghi DPTR) bao nhiêu? Để giao tiếp với ADC, ta phải ghi ngoại vi vùng nhớ 4000H – 5FFFH, giá trị nạp vào thành ghi DPTR 4000H 2) Khoảng thời gian chờ ADC chuyển đổi giá trị chọn bao nhiêu? Khoảng thời gian chờ ADC chuyển đổi giá trị chọn 3) Giá trị có phải giá trị thực điện áp đặt vào kênh hay không? Giá trị kênh hiển thị lên LCD giá trị sau quy đổi 4) Để hiển thị giá trị thực tế mức điện áp đặt vào kênh ta phải làm nào? Để hiển thị giá trị thực tế mức điện áp đặt vào kênh 0, ta sử dụng cơng thức: Trong đó, A giá trị sau quy đổi TN Vi xử lý BM Điện tử Page | 24 BÀI THÍ NGHIỆM THÍ NGHIỆM GIAO TIẾP LCD VÀ ADC THÍ NGHIỆM Mục tiêu: Nắm cách thức giao tiếp với ADC Yêu cầu:  Viết chương trình CALADC tính tốn giá trị điện áp thực tế đặt vào kênh ADC từ giá trị đo ADC Chương trình nhận giá trị ngõ vào chứa R0 (là kết chương trình READADC) Giá trị trả chứa R0 R1, R0 chứa giá trị nguyên R1 chứa giá trị thập phân  Hiển thị giá trị đo lên LCD theo cấu trúc: "Voltage: x.xx V" với x.xx giá trị điện áp đo được, với hai số sau dấu chấm Kiểm tra:  Biên dịch kiểm tra hoạt động chương trình, so sánh giá trị hiển thị với giá trị đo dùng VOM  Khoảng thời gian dùng để cập nhật giá trị ADC bao nhiêu?  Giải thích q trình tính toán để chuyển đổi giá trị đọc từ ADC sang giá trị Volt? BÁO CÁO: Chương trình: EN BIT P3.3 RS BIT P3.5 LCDADDR EQU 6000H ADCADDR EQU 4000H ORG 2000H MAIN: CALL READADC PUSH TN Vi xử lý BM Điện tử Page | 25 BÀI THÍ NGHIỆM THÍ NGHIỆM GIAO TIẾP LCD VÀ ADC MOV DPTR, #LCDADDR CALL CLRSCREEN CALL INIT_LCD CALL DISPLAYSTRING POP ACC CALL CALADC ; Tính giá trị điện áp MOV 20H, R0 ORL 20H, #30H ; Lấy mã ASCII phần nguyên MOV A, R1 CALL SPLIT_A ; Tách giá trị hiển thị thành hàng CALL DISPLAY_GIATRI ; Hiển thị giá trị SJMP $ READADC: MOV DPTR,#ADCADDR ;Start ADC MOV A,#0 MOVX @DPTR,A CALL WAIT_LCD ;EOC MOVX A,@DPTR ;OE MOV R0,A MOV P1,A ;Hiển thị A lên LED port để quan sát RET CALADC: INC A ; Trả giá trị tính tốn JZ C_S ; A = 256D (0B), skip MOV B, #5 TN Vi xử lý BM Điện tử Page | 26 BÀI THÍ NGHIỆM THÍ NGHIỆM GIAO TIẾP LCD VÀ ADC MUL AB MOV R0, B ; Giá trị phần nguyên MOV B, #10 MUL AB MOV 31H, B ; Chữ số hàng chục phần thập phân MOV B, #10 MUL AB MOV 32H, B ; Chữ số hàng đơn vị phần thập phân MOV A, 31H MOV B, #10 MUL AB ADD A, 32H ; Giá trị phần thập phân MOV R1, A RET C_S: MOV R0, #5 ; Nếu A = 256 Vin = 5.00 V MOV R1, #0 RET DISPLAY_GIATRI: MOV A, 20H ; Hiển thị “x.xx V” ; Hiển thị phần nguyên CALL DISP MOV A, #'.' ; Hiển thị dấu “.” CALL DISP MOV A, 21H ; Hiển thị hàng chục phần thập phân CALL DISP MOV A, 22H TN Vi xử lý ; Hiển thị hàng đơn vị phần thập phân BM Điện tử Page | 27 BÀI THÍ NGHIỆM THÍ NGHIỆM GIAO TIẾP LCD VÀ ADC CALL DISP MOV A, #' ' ; Hiển thị khoảng trống CALL DISP MOV A, #'V' ; Hiển thị đơn vị CALL DISP RET DISPLAYSTRING: ; Hiển thị “Voltage: “ MOV R2, #0 LOOP: MOV DPTR, #MESS MOV A, R2 MOVC A, @A+DPTR JZ EXIT ACALL DISP INC R2 SJMP LOOP EXIT: RET SPLIT_A: ; Tách A thành hàng chục hàng đơn vị MOV B, #10 DIV AB ORL B, #30H ; Mã ASCII hàng đơn vị MOV 22H, B ORL A, #30H ; Mã ASCII hàng chục MOV 21H, A RET TN Vi xử lý BM Điện tử Page | 28 BÀI THÍ NGHIỆM THÍ NGHIỆM GIAO TIẾP LCD VÀ ADC INIT_LCD: MOV A, #38H ACALL COMD MOV A, #0EH ACALL COMD MOV A, #06H ACALL COMD RET CLRSCREEN: MOV A, #01H ACALL COMD RET COMD: MOV DPTR, #LCDADDR SETB EN CLR RS MOVX @DPTR, A CLR EN ACALL WAIT_LCD RET DISP: MOV DPTR, #LCDADDR SETB EN SETB RS TN Vi xử lý BM Điện tử Page | 29 BÀI THÍ NGHIỆM THÍ NGHIỆM GIAO TIẾP LCD VÀ ADC MOVX @DPTR, A CLR EN ACALL WAIT_LCD RET WAIT_LCD: MOV R6, #16 DL: MOV R5, #144 DJNZ R5, $ DJNZ R6,DL RET MESS: DB "Voltage: ",0 END Kết thí nghiệm a Kết mơ phỏng: Tín hiệu vào IN0 TN Vi xử lý BM Điện tử Page | 30 BÀI THÍ NGHIỆM THÍ NGHIỆM GIAO TIẾP LCD VÀ ADC LCD b Trả lời câu hỏi 1) Khoảng thời gian dùng để cập nhật giá trị ADC bao nhiêu? Khoảng thời gian dùng để cập nhật giá trị ADC 5ms 2) Giải thích q trình tính tốn để chuyển đổi giá trị đọc từ ADC sang giá trị Volt? Giá trị quy đổi có tầm – 256 mà giá trị trả từ ADC0809 vào ghi A có tầm giá trị từ – 255 nên trước tính tốn, ta tăng giá trị ghi A lên Giá trị cần hiển thị Vin có cơng thức: Lệnh nhân hai số bit A, B MUL AB có kết số 16 bit BA = A * B, bit trọng số cao lưu B, bit trọng số thấp lưu A Phép chia cho 256 tương ứng với phép dịch trái bit Về thuật tốn thực biểu thức Vin trên, ta làm sau: Thực phép nhân 5*A trước, kết trả B chứa trọng số cao, A chứa trọng số thấp Sau hình dung phép chia cho 256 phép dịch trái dấu chấm thập phân, dịch qua bit Khi B TN Vi xử lý BM Điện tử Page | 31 BÀI THÍ NGHIỆM THÍ NGHIỆM GIAO TIẾP LCD VÀ ADC phần nguyên biểu thức Vin, A phần thập phân biểu thức Vin Để xử lý phần thập phân biểu thức Vin chứa A, ta tiếp tục lấy A*10 có chữ số tràn qua B, số thứ sau dấu chấm thập phân Tiếp tục thực A*10, ta số thứ sau dấu chấm thập phân TN Vi xử lý BM Điện tử Page | 32

Ngày đăng: 20/09/2021, 11:37

Mục lục

  • THÍ NGHIỆM 1

    • Yêu cầu:

    • THÍ NGHIỆM 2

      • Yêu cầu:

      • 1) Địa chỉ để hiển thị trên hàng 1 và hàng 2 của LCD bắt đầu và kết thúc bằng bao nhiêu? LCD có hiển thị được hết vùng địa chỉ đó không? Tại sao?

      • 2) Muốn bật hay tắt con trỏ trên LCD, ta phải nạp mã lệnh bao nhiêu?

      • 3) Muốn hiển thị con trỏ kiểu blinky, ta phải nạp mã lệnh bao nhiêu?

      • THÍ NGHIỆM 3

        • Yêu cầu:

        •  Kết quả mô phỏng:

        • THÍ NGHIỆM 4

          • Yêu cầu:

          • THÍ NGHIỆM 5

            • Yêu cầu:

Tài liệu cùng người dùng

Tài liệu liên quan