1. Trang chủ
  2. » Luận Văn - Báo Cáo

Báo cáo thí nghiệm vi xử lý bài 3

15 9 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

BÀI TN GIAO TIẾP LCD VÀ ADC THÍ NGHIỆM Yêu cầu Download chương trình mẫu LCD.A51 trang web môn điện tử 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 CODE: LCD_E BIT P3.4 LCD_RS BIT P3.5 LCDADDR ORG EQU 6000H 0000H MAIN: MOV @R0, 30H MOV DPTR, #LCDADDR ACALL CLEAR ACALL INIT_LCD ACALL DISPLAYSTRING SJMP $ INIT_LCD: MOV A, #38H ACALL WRITECOM MOV A, #0EH ACALL WRITECOM MOV A, #06H ACALL WRITECOM RET CLEAR: BÀI TN GIAO TIẾP LCD VÀ ADC MOV A, #01H ACALL WRITECOM RET WRITECOM: MOV DPTR, #LCDADDR SETB LCD_E CLR MOVX LCD_RS @DPTR, A CLR ACALL LCD_E WAIT_LCD RET WRITETEXT: MOV DPTR, #LCDADDR SETB LCD_E SETB LCD_RS MOVX @DPTR, A CLR ACALL LCD_E WAIT_LCD RET DISPLAYSTRING: 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, EXIT: RET WAIT_LCD: LOOP BÀI TN GIAO TIẾP LCD VÀ ADC MOV R6,#10 DL1: MOV R7, #250 DJNZ R7, $ DJNZ R6,DL1 RET MESSAGE: DB "NHAN_LONG_NGHIA",0 END KẾT QUẢ: Kiểm tra Giải thích ý nghĩa cách sử dụng chương trình project mẫu - Giải thích: + Chương trình INITLCD: có nhiệm vụ khởi động module LCD + Chương trình WRITECOM : có nhiệm vụ ghi byte lệnh đến LCD + Chương trình WAIT_LCD: sử dụng chương trình tạo trễ để chờ module hồn thành lệnh thời + Chương trình DISPLAYSTRING: Chọn ký tự cần hiển thị + Chương trình WRITETEXT: Xuất LCD BÀI TN GIAO TIẾP LCD VÀ ADC THÍ NGHIỆM u cầu Viết thêm chương trình CLRSCREEN để xóa hình LCD CODE1: CLEAR: MOV A, #01H ; CLR ACALL WRITECOM RET 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 CODE2: GOTOXY: CJNE R0,#1,HANG2 MOV A,#80H BACK: ADD A,R1 ACALL WRITECOM RET HANG2: MOV A,#0C0H SJMP BACK BÀI TN GIAO TIẾP LCD VÀ ADC Sửa chương trình thí nghiệm để hiển thị thêm số nhóm hàng thứ CODE3: LCD_E BIT P3.4 LCD_RS BIT P3.5 LCDADDR EQU ORG 6000H 0000H MAIN: MOV @R0, 30H MOV DPTR, #LCDADDR ACALL CLEAR ACALL INIT_LCD ACALL DISPLAYSTRING MOV R0,#2 ACALL GOTOXY MOV A,#16 ACALL LOOP SJMP $ INIT_LCD: MOV A, #38H ACALL WRITECOM MOV A, #0EH ACALL WRITECOM MOV A, #06H ACALL WRITECOM RET CLEAR: MOV A, #01H ACALL WRITECOM RET WRITECOM: MOV DPTR, #LCDADDR SETB LCD_E CLR MOVX LCD_RS @DPTR, A BÀI TN GIAO TIẾP LCD VÀ ADC CLR ACALL LCD_E WAIT_LCD RET WRITETEXT: MOV DPTR, #LCDADDR SETB LCD_E SETB LCD_RS MOVX @DPTR, A CLR ACALL LCD_E WAIT_LCD RET DISPLAYSTRING: 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: MOV R6,#10 DL1: MOV R7, #250 DJNZ R7, $ DJNZ R6,DL1 RET GOTOXY: CJNE R0,#1,HANG2 MOV A,#80H BACK: BÀI TN GIAO TIẾP LCD VÀ ADC ADD A,R1 ACALL WRITECOM RET HANG2: MOV A,#0C0H SJMP BACK MESSAGE: DB "NHAN_LONG_NGHIA",0,"NHOM4",0 END Kiểm tra Kiểm tra kết chương trình BÀI TN GIAO TIẾP LCD VÀ ADC THÍ NGHIỆM Yêu cầu Viết chương trình READADC thực đọc giá trị kênh trả giá trị R0 CODE 1: READADC: MOV DPTR, #4000H MOVX @DPTR, A ACALL DELAY_ADC MOVX A, @DPTR MOV R0,A RET 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 CODE 2: LCD_E BIT P3.4 LCD_RS BIT P3.5 LCDADDR EQU 6000H ORG 0000H MAIN: MOV @R0, 30H MOV DPTR, #LCDADDR MAIN1: ACALL CLEAR ACALL INIT_LCD ACALL READADC ACALL DISPLAYADC MOV A,R2 ADD A,#30H ACALL WRITETEXT MOV A,R1 ADD A,#30H ACALL WRITETEXT MOV A,R0 BÀI TN GIAO TIẾP LCD VÀ ADC ADD A,#30H ACALL WRITETEXT SJMP MAIN1 INIT_LCD: MOV A, #38H; 8bit 2dong 5x7 ACALL WRITECOM MOV A, #0CH; onLCD Cursor_mod ACALL WRITECOM MOV A, #06H ; cho hien thi them cac ky tu sau; ACALL WRITECOM MOV A,#0C0H ACALL WRITECOM RET CLEAR: MOV A, #01H; CLR ACALL WRITECOM RET WRITECOM: MOV DPTR, #LCDADDR SETB LCD_E CLR LCD_RS MOVX @DPTR, A CLR LCD_E ACALL WAIT_LCD RET WRITETEXT: MOV DPTR, #LCDADDR SETB LCD_E SETB LCD_RS MOVX @DPTR, A CLR LCD_E ACALL WAIT_LCD RET WAIT_LCD: MOV R6,#10 DL1: MOV R7, #250 DJNZ R7, $ DJNZ R6,DL1 RET READADC: MOV DPTR, #4000H MOVX @DPTR, A ACALL DELAY_ADC MOVX A, @DPTR MOV R0,A RET DELAY_ADC: MOV R4, #100 DJNZ R4, $ BÀI TN GIAO TIẾP LCD VÀ ADC RET DISPLAYADC: MOV A,R0 MOV B,#10 DIV AB MOV R0, B MOV B,#10 DIV AB MOV R1, B MOV B,#10 DIV AB MOV R2, B RET END Kiểm tra Giá trị có phải giá trị thực điện áp đặt vào kênh hay không? - Giá trị trị thực điện áp đặt vào kênh Vì ADC0809 sử dụng bit, từ  255 để hiển thị giá trị áp từ  5V Để 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? - Ta phải thực phép toán: (Giá trị hiển thị*5)/255 = Giá trị hiển thị / 51 BÀI TN GIAO TIẾP LCD VÀ ADC THÍ NGHIỆM 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 có giá trị 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 CODE: CALADC: MOV A,R0 MOV B,#51 DIV AB MOV R0,A MOV A,#5 MUL AB MOV B,#51 DIV AB MOV R1,A MOV A,#5 MUL AB MOV B,#51 DIV AB MOV R2,A MOV A,#5 MUL AB MOV B,#51 DIV AB CJNE A,#5,khac khac: JC NEXT INC R2 NEXT: MOV A,R1 MOV B,#10 MUL AB ADD A,R2 MOV B,#2 MUL AB MOV R1,A RET BÀI TN GIAO TIẾP LCD VÀ ADC 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 LCD_E BIT P3.4 LCD_RS BIT P3.5 LCDADDR EQU 6000H ORG 0000H MAIN: MOV @R0, 30H MOV DPTR, #LCDADDR ACALL CLEAR ACALL INIT_LCD MOV R0,#1 MOV R1,#0 ACALL GOTOXY MOV R2,#0 RETURN: MOV A,R2 ACALL DISPLAYSTRING2 INC R2 CJNE R2,#8,RETURN MOV R0,#1 MOV R1,#12 ACALL GOTOXY MOV A,#19 ACALL DISPLAYSTRING2 MAIN1: MOV R0,#1 MOV R1,#8 ACALL GOTOXY ACALL READADC ACALL CALADC MOV A,R0 ADD A,#9 ACALL DISPLAYSTRING2 MOV A,#8 ACALL DISPLAYSTRING2 MOV A,R1 MOV B,#10 DIV AB ADD A,#9 ACALL DISPLAYSTRING2 MOV A,B ADD A,#9 ACALL DISPLAYSTRING2 SJMP MAIN1 INIT_LCD: MOV A, #38H; 8bit 2dong 5x7 ACALL WRITECOM BÀI TN GIAO TIẾP LCD VÀ ADC MOV A, #0CH; onLCD Cursor_mod ACALL WRITECOM MOV A, #06H ; cho hien thi them cac ky tu sau; ACALL WRITECOM MOV A,#0C0H ACALL WRITECOM RET CLEAR: MOV A, #01H; CLR ACALL WRITECOM RET WRITECOM: MOV DPTR, #LCDADDR SETB LCD_E CLR LCD_RS MOVX @DPTR, A CLR LCD_E ACALL WAIT_LCD RET WRITETEXT: MOV DPTR, #LCDADDR SETB LCD_E SETB LCD_RS MOVX @DPTR, A CLR LCD_E ACALL WAIT_LCD RET DISPLAYSTRING2: MOV DPTR,#MESSAGE MOVC A,@A+DPTR ACALL WRITETEXT RET WAIT_LCD: MOV R6,#10 DL1: MOV R7, #250 DJNZ R7, $ DJNZ R6,DL1 RET MESSAGE: DB "Voltage 0123456789V" READADC: MOV DPTR, #4000H MOV A,#00H MOVX @DPTR, A ACALL DELAY_ADC MOVX A, @DPTR MOV R0,A RET BÀI TN GIAO TIẾP LCD VÀ ADC DELAY_ADC: MOV R4, #100 DJNZ R4, $ RET GOTOXY: CJNE R0,#1,HANG2 MOV A,#80H BACK: ADD A,R1 ACALL WRITECOM RET HANG2: MOV A,#0C0H SJMP BACK CALADC: MOV A,R0 MOV B,#51 DIV AB MOV R0,A MOV A,#5 MUL AB MOV B,#51 DIV AB MOV R1,A MOV A,#5 MUL AB MOV B,#51 DIV AB MOV R2,A MOV A,#5 MUL AB MOV B,#51 DIV AB CJNE A,#5,khac khac: JC NEXT INC R2 NEXT: MOV A,R1 MOV B,#10 MUL AB ADD A,R2 MOV B,#2 MUL AB MOV R1,A RET END Kiểm tra BÀI TN GIAO TIẾP LCD VÀ ADC 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 ... SJMP BACK BÀI TN GIAO TIẾP LCD VÀ ADC Sửa chương trình thí nghiệm để hiển thị thêm số nhóm hàng thứ CODE3: LCD_E BIT P3.4 LCD_RS BIT P3.5 LCDADDR EQU ORG 6000H 0000H MAIN: MOV @R0, 30 H MOV DPTR,... trình WRITETEXT: Xuất LCD BÀI TN GIAO TIẾP LCD VÀ ADC THÍ NGHIỆM u cầu Vi? ??t thêm chương trình CLRSCREEN để xóa hình LCD CODE1: CLEAR: MOV A, #01H ; CLR ACALL WRITECOM RET Vi? ??t thêm chương trình... DISPLAYADC MOV A,R2 ADD A, #30 H ACALL WRITETEXT MOV A,R1 ADD A, #30 H ACALL WRITETEXT MOV A,R0 BÀI TN GIAO TIẾP LCD VÀ ADC ADD A, #30 H ACALL WRITETEXT SJMP MAIN1 INIT_LCD: MOV A, #38 H; 8bit 2dong 5x7 ACALL

Ngày đăng: 18/08/2022, 16:13

Xem thêm:

w