Báo cáo Thí nghiệm Vi xử lý Trường ĐH BK ĐHQG TP.HCMBài thí nghiệm 1: Lập trình giao tiếp phím đơn và LEDBài thí nghiệm 2: Lập trình hiển thị LED 7 đoạn và giao tiếp LED ma trậnBài thí nghiệm 3: Thí nghiệm giao tiếp LCD và ADCBài thí nghiệm 4: Thí nghiệm giao tiếp Timer cà Serial PortBài thí nghiệm 5: Thí nghiệm lập trình ngắt
ĐẠI HỌC QUỐC GIA TP.HỒ CHÍ MINH TRƯỜ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Ý GVHD: Lớp: Nhóm: SVTH: MSSV: TP HỒ CHÍ MINH, THÁNG NĂM 202 BÀI THÍ NGHIỆM LẬP TRÌNH GIAO TIẾP PHÍM ĐƠN VÀ LED ĐƠN MỤC TIÊU Nắm cách sử dụng kit thí nghiệm, phần mềm lập trình Nắm cách lập trình giao tiếp IO port Nắm cách lập trình tạo thời gian trễ dùng lệnh CHUẨN BỊ Đọc chương chương tài liệu hướng dẫn Viết chương trình mơ Proteus thí nghiệm dựa thí nghiệm TN Vi xử lý BM Điện tử Page | BÀI THÍ NGHIỆM LẬP TRÌNH GIAO TIẾP PHÍM ĐƠN VÀ LED ĐƠN THÍ NGHIỆM Mục tiêu: Nắm cách thức điều khiển trực tiếp ngoại vi thông qua port I/O 8051 Yêu cầu: Viết chương trình thực việc đọc liên tục trạng thái nút nhấn nối đến P1.0 hiển thị led nối chân P3.0 (bit thứ led BL202) Kiểm tra: Biên dịch thực thi chương trình để kiểm tra kết thực Thử giải thích có đến led bị tác động nhấn thả nút? Tổng kết xem bit port dùng thí nghiệm giải thích sao? BÁO CÁO: Chương trình ORG 2000H MAIN: MOV C, P1.0 MOV P3.0, C SJMP MAIN END Kết thí nghiệm a Kết mơ phỏng: (Time/div = 0.5s, V/div = 1V cho Channel A & Channel B) TN Vi xử lý BM Điện tử Page | BÀI THÍ NGHIỆM LẬP TRÌNH GIAO TIẾP PHÍM ĐƠN VÀ LED ĐƠN Channel A: chân P1.0 Channel B: chân P3.0 b Trả lời câu hỏi 1) Thử giải thích có đến led bị tác động nhấn thả nút? Vì chân P1.0 nối đến led led BL204 nên led nối với chân P3.0 bị tác động nhấn/thả nút nhấn led nối chân P1.0 bị tác động 2) Tổng kết xem bit port dùng thí nghiệm giải thích sao? Về nút nhấn: tất nút nhấn kết nối với bit Port sử dụng Về led hiển thị: trừ led nối với chân P3.6 chân P3.7 sử dụng để làm led hiển thị (Khi sử dụng Port Port chương trình download xuống RAM ngồi, chạy chương trình vi xử lý làm việc chế độ giao tiếp nhớ Để giao tiếp nhớ ngồi tín RD (P3.7) WR (P3.6) sử dụng chương trình sử dụng chân P3.6 P3.7 chân I/O port) TN Vi xử lý BM Điện tử Page | BÀI THÍ NGHIỆM LẬP TRÌNH GIAO TIẾP PHÍM ĐƠN VÀ LED ĐƠN THÍ NGHIỆM Mục tiêu: Nắm cách tạo trễ dùng vòng lặp lệnh u cầu: Viết chương trình tạo xung vng Hz, chu kỳ nhiệm vụ 50% chân P1.0 Kiểm tra: Biên dịch, thực thi kiểm tra chương trình cách sử dụng oscilloscope để kiểm tra Để tạo xung 1Hz, vòng trễ tạo Tính tốn xác dựa chương trình viết Sai số nhỏ đạt so với yêu cầu bao nhiêu? HD: Tính sai số dựa vào tần số thạch anh 11.0592 Mhz BÁO CÁO: Chương trình ORG 2000H MAIN: CPL P1.0 ACALL DELAY SJMP MAIN DELAY: MOV R7, #4 DL2: MOV R6, #240 DL1: MOV R5, #240 DJNZ R5, $ DJNZ R6, DL1 DJNZ R7, DL2 RET TN Vi xử lý BM Điện tử Page | BÀI THÍ NGHIỆM LẬP TRÌNH GIAO TIẾP PHÍM ĐƠN VÀ LED ĐƠN END Kết thí nghiệm a Kết mơ phỏng: (Time/div = 0.25s, V/div = 1V cho Channel A) Channel A: chân P1.0 b Trả lời câu hỏi 1) Để tạo xung 1Hz, vòng trễ tạo Tính tốn xác dựa chương trình viết Tạo trễ: Với xung tần số 1Hz, thời gian mức cao mức thấp 0.5s tương ứng với 460,800MC Sử dụng cơng thức tính gần thời gian delay với chương trình tạo trễ vòng lặp ghi R7, R6, R5) TN Vi xử lý giá trị nạp vào (với Chọn BM Điện tử Page | BÀI THÍ NGHIỆM LẬP TRÌNH GIAO TIẾP PHÍM ĐƠN VÀ LED ĐƠN Tính tốn xác thời gian tạo trễ: Cơng thức tính xác thời gian delay với chương trình tạo trễ vịng lặp: 2) Sai số nhỏ đạt so với yêu cầu bao nhiêu? , để sai số nhỏ Sai số so với yêu cầu giá trị nhỏ (với R5 0), ta có TN Vi xử lý ) phải đạt (tương ứng với giá trị nạp vào Thông qua biến đổi, ta có đạt giá trị nhỏ BM Điện tử Page | BÀI THÍ NGHIỆM LẬP TRÌNH GIAO TIẾP PHÍM ĐƠN VÀ LED ĐƠN THÍ NGHIỆM Mục tiêu: Nắm cách viết chương trình để tạo trễ Yêu cầu: Viết chương trình Delay1sIns dùng chương trình để chớp/tắt LED đơn gắn vào P1.0 sau khoảng thời gian 1s Kiểm tra: Biên dịch, thực thi kiểm tra chương trình cách quan sát LED đơn Thời gian 1s tạo nào? Bây bạn sinh viên muốn viết chương trình tạo trễ 2s phải sửa lại chương trình viết nào? BÁO CÁO: Chương trình ORG 2000H LOOP: CPL P1.0 ACALL Delay1sIns SJMP LOOP Delay1sIns: MOV R7, #8 DL2: MOV R6, #240 DL1: MOV R5, #240 DJNZ R5, $ DJNZ R6, DL1 DJNZ R7, DL2 RET END TN Vi xử lý BM Điện tử Page | BÀI THÍ NGHIỆM LẬP TRÌNH GIAO TIẾP PHÍM ĐƠN VÀ LED ĐƠN Kết thí nghiệm a Kết mô phỏng: (Time/div = 0.5s, V/div = 1V cho Channel A) Channel A: chân P1.0 b Trả lời câu hỏi 1) Thời gian 1s tạo nào? Thời gian 1s tạo cách sử dụng chương trình tạo trễ vịng lặp (sử dụng thí nghiệm 2) với giá trị nạp vào R7, R6, R5 8, 240, 240 ( ) 2) Bây bạn sinh viên muốn viết chương trình tạo trễ 2s phải sửa lại chương trình viết nào? Muốn viết chương trình tạo trễ 2s sửa lại giá trị nạp vào R7 thành 16 ( ) TN Vi xử lý BM Điện tử Page | BÀI THÍ NGHIỆM LẬP TRÌNH GIAO TIẾP PHÍM ĐƠN VÀ LED ĐƠN THÍ NGHIỆM Mục tiêu: Nắm cách sử dụng chương trình để tạo xung u cầu: Viết chương trình tạo xung vng 2Hz chu kỳ nhiệm vụ 70% chân P1.0 Kiểm tra: Biên dịch, thực thi kiểm tra chương trình cách quan sát LED đơn Thời gian mức cao mức thấp xung chu kỳ máy? (Lấy tần số thạch anh xấp xỉ 12MHz) Giá trị nạp vào ghi bao nhiêu? Viết lại chương trình tạo xung vuông 2Hz với chu kỳ nhiệm vụ 80%? BÁO CÁO: Chương trình ORG 2000H MAIN: SETB P1.0 MOV R1, #7 ON: ACALL DL50ms DJNZ R1, ON CLR P1.0 MOV R0, #3 OFF: ACALL DL50ms DJNZ R0, OFF SJMP MAIN DL50ms: MOV R6, #100 DL: MOV R5, #250 DJNZ R5, $ TN Vi xử lý BM Điện tử Page | BÀI THÍ NGHIỆM THÍ NGHIỆM LẬP TRÌNH NGẮT THÍ NGHIỆM Mục tiêu: Nắm cách sử dụng ngắt timer Yêu cầu: Viết chương trình hiển thị lên LED đoạn số có chữ số, ký số chứa ô nhớ 20H, 21H, 22H 23H Ô nhớ 20H chứa số hàng nghìn Hướng dẫn: Ở LAB2 ta viết chương trình DisplayLED hiển thị giá trị chứa R0, với số thứ tự LED chứa R1 Đồng thời, ta nắm cách quét LED cách cho LED sáng sau khoảng thời gian trễ Ở thí nghiệm này, LED đoạn quét sử dụng ngắt timer Để đạt tần số quét 25 Hz, LED sáng thời gian 10 ms Các bước tiến hành: Cấu hình timer chế độ 1, thời gian tràn 10 ms Cho phép ngắt timer 0, cho timer chạy Sử dụng ghi R1 để xác định LED cần bật Ban đầu R1 0, R1 tăng lên sau lần bật LED để chuyển sang LED Khi R1 3, R3 quay lại Chương trình DisplayLED chứa giá trị hiển thị R0 Giá trị byte ô nhớ 20H, 21H, 22H 23H, tương ứng giá trị R1 (0-3) Đoạn chương trình sau cho phép lấy giá trị này: MOV A, R0 ADD A, R1 MOV R0, A MOV A, @R0 MOV R0, A TN Vi xử lý BM Điện tử Page | BÀI THÍ NGHIỆM THÍ NGHIỆM LẬP TRÌNH NGẮT START Dừng timer, xóa cờ ngắt, đặt lại giá trị timer, cho phép timer chạy Dừng timer, xóa cờ ngắt, đặt lại giá trị timer, cho phép timer chạy Lấy giá trị hiển thị LED vào R0 Hiển thị LED tương ứng Cập nhật giá trị R1 END Khi timer tràn, chương trình phục vụ ngắt ta cấu hình lại timer, hiển thị giá trị led đoạn tương ứng, cập nhật giá trị R1 để đến LED Kiểm tra: Biên dịch kiểm tra hoạt động chương trình Cờ ngắt timer xóa phần mềm hay phần cứng? Trong thí nghiệm 2, chương trình làm nhiệm vụ gì? BÁO CÁO Chương trình: ORG 0000H LJMP MAIN ORG 000BH LJMP ISR_TIMER0 TN Vi xử lý BM Điện tử Page | BÀI THÍ NGHIỆM THÍ NGHIỆM LẬP TRÌNH NGẮT ORG 0030H MAIN: MOV TMOD, #01H MOV 20H, #2 MOV 21H, #0 MOV 22H, #2 MOV 23H, #1 SETB EA ; Cho phép ngắt SETB TF0 ; Ép ngắt timer SETB ET0 ; Cho phép ngắt timer SJMP $ ISR_TIMER0: CLR TR0 MOV TH0, #HIGH(-9216) MOV TL0, #LOW(-9216) SETB TR0 ACALL GET_R1 ; Lấy giá trị nạp vào R1 ACALL GET_R0 ; Lấy giá trị nạp vào R0 LCALL DisplayLED ; Hiển thị LED RETI DisplayLED: MOV DPTR, #LED MOV A, R1 MOVC A, @A + DPTR ORL A, R0 MOV DPTR, #0 TN Vi xử lý BM Điện tử Page | BÀI THÍ NGHIỆM THÍ NGHIỆM LẬP TRÌNH NGẮT MOVX @DPTR, A RET GET_R1: INC R1 SKIP: CJNE R1, #4, SKIP ; Nếu R1 = MOV R1, #0 ; Reset R1 RET GET_R0: MOV A, #20H ADD A, R1 ; Lấy vị trí nhớ MOV R0, A MOV A, @R0 MOV R0, A RET LED: DB 70H, 0B0H, 0D0H, 0E0H END Kết thí nghiệm a Kết mô phỏng: TN Vi xử lý BM Điện tử Page | BÀI THÍ NGHIỆM THÍ NGHIỆM LẬP TRÌNH NGẮT b Trả lời câu hỏi 1) Cờ ngắt timer xóa phần mềm hay phần cứng? Cờ ngắt timer xóa phần cứng 2) Trong thí nghiệm 2, chương trình làm nhiệm vụ gì? Trong thí nghiệm 2, chương trình làm nhiệm vụ thiết lập cấu hình ban đầu cho chương trình ngắt timer TN Vi xử lý BM Điện tử Page | 10 BÀI THÍ NGHIỆM THÍ NGHIỆM LẬP TRÌNH NGẮT THÍ NGHIỆM Mục tiêu: Nắm cách sử dụng ngắt timer phối hợp với chương trình khác u cầu: Viết chương trình đếm số lần nhấn phím SW317, hiển thị lên LED đoạn Hướng dẫn: Đếm số lần nhấn phím làm LAB4 Việc đếm số lần nhấn phím thực chương trình Giá trị cập nhật vào ô nhớ 20H, 21H, 22H 23H Ô nhớ 20H chứa số hàng nghìn LED đoạn quét thí nghiệm dùng ngắt timer Kiểm tra: Biên dịch kiểm tra hoạt động chương trình Trong thí nghiệm 3, chương trình làm nhiệm vụ gì? Delay tạo cho trình chống rung nút (nếu có) nên tạo cách nào? BÁO CÁO Chương trình: ORG 0000H LJMP BEGIN ORG 000BH LJMP ISR_TIMER0 ORG 0030H BEGIN: MOV TMOD, #01H SETB EA TN Vi xử lý ; Cho phép ngắt BM Điện tử Page | 11 BÀI THÍ NGHIỆM THÍ NGHIỆM LẬP TRÌNH NGẮT SETB TF0 ; Ép ngắt timer SETB ET0 ; Cho phép ngắt timer MOV R2, #10 ; Debounce MAIN: WAIT: JB P1.7, MAIN ACALL DL10us DJNZ R2, WAIT INC 23H ACALL UPDATE JNB P1.7, $ SJMP MAIN UPDATE: ; Hàm điều chỉnh giá trị ghi MOV A, 23H ; Kiểm tra hàng đơn vị CJNE A, #10, SKIP MOV 23H, #0 INC 22H MOV A, 22H ; Kiểm tra hàng chục CJNE A, #10, SKIP MOV 22H, #0 INC 21H MOV A, 21H ; Kiểm tra hàng trăm CJNE A, #10, SKIP MOV 21H, #0 INC 20H TN Vi xử lý BM Điện tử Page | 12 BÀI THÍ NGHIỆM THÍ NGHIỆM LẬP TRÌNH NGẮT MOV A, 20H ; Kiểm tra hàng nghìn CJNE A, #10, SKIP MOV 20H, #0 RET ISR_TIMER0: CLR TR0 MOV TH0, #HIGH(-9216) MOV TL0, #LOW(-9216) SETB TR0 ACALL GET_R1 ; Lấy giá trị nạp vào R1 ACALL GET_R0 ; Lấy giá trị nạp vào R0 LCALL DisplayLED ; Hiển thị LED RETI DisplayLED: MOV DPTR, #LED MOV A, R1 MOVC A, @A + DPTR ORL A, R0 MOV DPTR, #0 MOVX @DPTR, A RET GET_R1: INC R1 TN Vi xử lý CJNE R1, #4, SKIP ; Nếu R1 = MOV R1, #0 ; Reset R1 BM Điện tử Page | 13 BÀI THÍ NGHIỆM THÍ NGHIỆM LẬP TRÌNH NGẮT SKIP: RET GET_R0: MOV A, #20H ADD A, R1 ; Lấy vị trí nhớ MOV R0, A MOV A, @R0 MOV R0, A RET DL10us: MOV R5, #4 DJNZ R5, $ RET LED: DB 70H, 0B0H, 0D0H, 0E0H END Kết thí nghiệm a Kết mô phỏng: b Trả lời câu hỏi 1) Trong thí nghiệm 3, chương trình làm nhiệm vụ gì? Trong thí nghiệm 3, chương trình làm nhiệm vụ đếm số lần nhấn nút điều chỉnh giá trị ghi chứa số lần đếm 2) Delay tạo cho trình chống rung nút (nếu có) nên tạo cách nào? Delay cho trình chống rung nút nhấn nên tạo phần mềm cách đọc nhiều lần giá trị nút nhấn sau khoảng thời gian chờ, kết giống xác nhận nút nhấn, ngược lại TN Vi xử lý BM Điện tử Page | 14 BÀI THÍ NGHIỆM THÍ NGHIỆM LẬP TRÌNH NGẮT THÍ NGHIỆM Mục tiêu: Nắm cách sử dụng ngắt timer phối hợp với chương trình khác Yêu cầu: Viết chương trình thực đồng hồ bấm giây, hiển thị lên LED đoạn Hai LED thể số giây, LED thể phần trăm giây Khi SW310 nhấn, đồng hồ reset SW 311 nhấn, đồng hồ bắt đầu chạy SW 312 nhấn, đồng hồ dừng lại Hướng dẫn LED đoạn quét thí nghiệm dùng ngắt timer Khi đồng hồ chạy, giá trị thời gian cập nhật dùng ngắt timer Giá trị cập nhật vào ô nhớ 20H, 21H, 22H 23H Các SW310, SW311, SW312 xử lý chương trình Kiểm tra: Biên dịch kiểm tra hoạt động chương trình Các nút nhấn SW310, SW311, SW312 xử lý nào? Trình bày cụ thể? BÁO CÁO Chương trình: ORG 0000H LJMP BEGIN ORG 000BH LJMP ISR_TIMER0 ; Hiển thị LED ORG 001BH TN Vi xử lý BM Điện tử Page | 15 BÀI THÍ NGHIỆM THÍ NGHIỆM LẬP TRÌNH NGẮT LJMP ISR_TIMER1 ; Đếm ORG 0030H BEGIN: MOV TMOD, #11H SETB EA ; Cho phép ngắt SETB TF0 ; Ép ngắt Timer SETB TF1 ; Ép ngắt Timer SETB ET0 ; Cho phép ngắt Timer SW311: ; Play MOV R2, #10 WAIT311: JB P1.1, SW310 ; Nếu không nhấn, kiểm tra SW310 ACALL DL10us DJNZ R2, WAIT311 SETB ET1 ; Được nhấn, khởi động đếm JNB P1.1, $ ; Chờ thả nút SW310: ; Reset MOV R2, #10 WAIT310: JB P1.0, SW312 ; Nếu không nhấn, kiểm tra SW312 ACALL DL10us DJNZ R2, WAIT310 MOV 20H, #0 ; Được nhấn, reset ghi MOV 21H, #0 ; chứa nội dung đếm MOV 22H, #0 TN Vi xử lý BM Điện tử Page | 16 BÀI THÍ NGHIỆM THÍ NGHIỆM LẬP TRÌNH NGẮT MOV 23H, #0 JNB P1.0, $ ; Chờ thả nút SW312: ; Pause MOV R2, #10 WAIT312: JB P1.2, SW311 ; Nếu không nhấn, kiểm tra SW311 ACALL DL10us DJNZ R2, WAIT312 CLR ET1 ; Được nhấn, dừng đếm JNB P1.2, $ ; Chờ thả nút SJMP SW310 ISR_TIMER1: ; Bộ đếm CLR TR1 MOV TH1, #HIGH(-9216) ; 10ms MOV TL1, #LOW(-9216) SETB TR1 INC 23H ACALL UPDATE ; Điều chỉnh giá trị ghi RETI UPDATE: ; Hàm điều chỉnh giá trị ghi MOV A, 23H CJNE A, #10, SKIP ; SKIP GET_R1 MOV 23H, #0 INC 22H MOV A, 22H TN Vi xử lý BM Điện tử Page | 17 BÀI THÍ NGHIỆM THÍ NGHIỆM LẬP TRÌNH NGẮT CJNE A, #10, SKIP MOV 22H, #0 INC 21H MOV A, 21H CJNE A, #10, SKIP MOV 21H, #0 INC 20H MOV A, 20H CJNE A, #10, SKIP ; Nếu giới hạn phút MOV 20H, #0 ; so sánh với RET ISR_TIMER0: CLR TR0 MOV TH0, #HIGH(-9216) MOV TL0, #LOW(-9216) SETB TR0 ACALL GET_R1 ; Lấy giá trị nạp vào R1 ACALL GET_R0 ; Lấy giá trị nạp vào R0 LCALL DisplayLED ; Hiển thị lên LED RETI DisplayLED: MOV DPTR, #LED MOV A, R1 MOVC A, @A + DPTR ORL A, R0 TN Vi xử lý BM Điện tử Page | 18 BÀI THÍ NGHIỆM THÍ NGHIỆM LẬP TRÌNH NGẮT MOV DPTR, #0 MOVX @DPTR, A RET GET_R1: INC R1 SKIP: CJNE R1, #4, SKIP ; Nếu R1 = MOV R1, #0 ; Reset R1 RET GET_R0: MOV A, #20H ADD A, R1 ; Lấy vị trí ô nhớ MOV R0, A MOV A, @R0 MOV R0, A RET DL10us: ; Hàm delay 10 s MOV R5, #4 DJNZ R5, $ RET LED: DB 70H, 0B0H, 0D0H, 0E0H END Kết thí nghiệm a Kết mô phỏng: b Trả lời câu hỏi TN Vi xử lý BM Điện tử Page | 19 BÀI THÍ NGHIỆM THÍ NGHIỆM LẬP TRÌNH NGẮT Các nút nhấn SW310, SW311, SW312 xử lý nào? Trình bày cụ thể? Các nút nhấn SW310, SW311, SW312 quét liên tục theo trình tự: Kiểm tra trạng thái nút nhấn SW311: Nếu nhấn tiến hành thời gian tràn 10ms cho timer set bit ET0 phép ngắt timer0 hoạt động Sau chuyển sang kiểm tra trạng thái nút nhấn SW310 Nếu chưa nhấn chuyển sang kiểm tra trạng thái nút nhấn SW310 Kiểm tra trạng thái nút nhấn SW310: Nếu nhấn tiến hành xóa ghi có địa 20H, 21H, 22H 23H, sau khởi động lại ngắt timer0 chuyển sang kiểm tra trạng thái nút nhấn SW312 Nếu chưa nhấn chuyển sang kiểm tra trạng thái nút nhấn SW312 Kiểm tra trạng thái nút nhấn SW312: Nếu nhấn reset bit ET0 để dừng ngắt timer0 (đồng hồ ngừng đếm) Sau chuyển sang kiểm tra trạng thái nút nhấn SW311 Nếu chưa nhấn chuyển sang kiểm tra trạng thái nút nhấn SW311 TN Vi xử lý BM Điện tử Page | 20 ... 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... DJNZ R7,DL2 RET TN Vi xử lý BM Điện tử Page | 14 BÀI THÍ NGHIỆM LẬP TRÌNH GIAO TIẾP PHÍM ĐƠN VÀ LED ĐƠN END Kết thí nghiệm a Kết mô TN Vi xử lý BM Điện tử Page | 15 BÀI THÍ NGHIỆM LẬP TRÌNH GIAO... liệu hướng dẫn. Vi? ??t chương trình mơ thí nghiệm Proteus dựa thí nghiệm 0. TN Vi xử lý BM Điện tử Page | BÀI THÍ NGHIỆM LẬP TRÌNH HIỂN THỊ LED ĐOẠN VÀ GIAO TIẾP LED MA TRẬN THÍ NGHIỆM Mục tiêu: