TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH BÁO CÁO THÍ NGHIỆM VI XỬ LÝ LỚP: DT03 – HK213 Thực hiện bởi: STT HỌ VÀ TÊN MSSV 1 Lại Nguyễn Duy 2010999 2 Nguyễn Xuân Hoàng Tuấn 2012351 3 Hoàng Tuấn Kiệt 2010363 TP.HỒ CHÍ MINH, NĂM 2022 BÀI THÍ NGHIỆM 1 LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED MỤC TIÊU ➢ Nắm được được cách sử dụng kit thí nghiệm, phần mềm lập trình. ➢ Nắm được đượ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 và làm bài thí nghiệm 0 tại nhà.
➢ Đọc bài chuẩn bị thí nghiệm 1 tại nhà. ➢ Chuẩn bị cho thí nghiệm 1: Viết chương trình và mô phỏn phỏngg trên Proteus tất cả các bài trong thí nghiệm 1 dựa trên bài chuẩn bị 1 (Prelab_1) và thí nghiệm 0. ➢ Nộp tất cả các kết quả (bài thí nghiệm 0 và bài chuẩn bị thí nghiệm 1) cho GVHD trước khi vào lớp. Sinh viên không thực hiện hoặc nộp thiếu nếu không có lí do chính đáng sẽ không được tham gia thí nghiệm và bị đánh vắng buổi đó.
Mọi hình thức gian lận, sao chép sẽ bị xử lý chính đáng. Department of Electronics Page | 1 Microprocessor Laboratory BÀI THÍ NGHIỆM 1 LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED 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. ORG 2000H LOOP: MOV C,P1.0,C SJMP LOOP END Kiểm tra: ➢ Biên dịch và thực thi chương trình để kiểm tra kết quả thực hiện.
Department of Electronics Page | 2 Microprocessor Laboratory BÀI THÍ NGHIỆM 1 LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED Department of Electronics Page | 3 Microprocessor Laboratory BÀI THÍ NGHIỆM 1 LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED Câu hỏi: ➢ 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? Khi nhấn nút, led nối với chân P1.0 và led nối với chân P3.0 đều sáng; khi thả nút thì đều tắt. Vì được tác động do lệnh: MOV C,P1.0,C ➢ 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? Ta có thể sử dụng các bit từ P1.7 và tương tự với Port 3. Nhưng không nên sử dụng Port 3 vì các chân Port 3 được sử dụng với các chức năng đặc biệt sau : Department of Electronics Page | 4 Microprocessor Laboratory BÀI THÍ NGHIỆM 1 LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED THÍ NGHIỆM 2 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 Delay1s. ➢ Dùng chương trình con đã viết để chớp/tắt LED đơn gắn vào P1.0 sau mỗi khoảng thời gian 1s.
➢ Thay đổi chương trình con để tần số chớp tắt bây giờ là 1KHz. • Chương trình con: Delay1s: MOV R5,#8 LP1: MOV R6,#250 LP2: MOV R7,#250 DJNZ R7,$ DJNZ R6,LP2 DJNZ R5,LP1 RET • Chương trình chớp/tắt LED đơn gắn vào P1.0 sau mỗi khoảng thời gian 1s: ORG 2000H LOOP: CPL P1.0 ACALL Delay1s SJMP LOOP Delay1s: MOV R5,#8 LP1: MOV R6,#250 LP2: MOV R7,#250 DJNZ R7,$ DJNZ R6,LP2 Department of Electronics Page | 5 Microprocessor Laboratory BÀI THÍ NGHIỆM 1 LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED DJNZ R5,LP1 RET END • Thay đổi chương trình con để tần số chớp tắt bây giờ là 1KHz. ORG 2000H LOOP: CPL P1.0 ACALL Delay1ms SJMP LOOP DELAY1ms: LP: MOV R5, #2 MOV R6, #250 DJNZ R6, $ DJNZ R5, LP RET END Kiể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. thời gian chớp tắt 1s.mp4 tần số chớp tắt 1KHz.mp4 Câu hỏi: ➢ Thời gian 1s được 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.
1s = 2*MC*(Giá trị nạp), 1 MC là 1() => Giá trị cần nạp là 500000 Giới hạn của 1 thanh ghi là 8 bit, chỉ lưu được giá trị tối đa là 255 nên ta phải chia nhỏ: 500000=250*250*8 => Chọn R5=8; R6=250; R7=250. ➢ Sai số nhỏ nhất có thể đạt được so với yêu cầu là bao nhiêu? Công thức tính chính xác Time delay với 3 vòng lặp như sau: Time delay = 2*k*m*n +(3*m+3)*k+3 (MC) với k, m, n lần lượt là 8, 250, 250 → Time delay = 1. Sai số xấp xỉ 0. Department of Electronics Page | 5 Microprocessor Laboratory ➢ Khi tần số chớp tắt là 1Khz, cho biết hiện tượng trên LED? LED sẽ chớp tắt gần như liên tục (chu kì là 1Khz hay mỗi 500()).
➢ Sinh viên thay đổi chương trình con như thế nào để được tần số chớp tắt là 1KHz? Với tần số chớp tắt là 1Khz => Chu kì sẽ là 1000 ()(500 () tín hiệu ở mức cao và 500 () ) tín hiệu ở mức thấp. Do đó, thời gian trễ Time delay = 500 () với công thức ở trên thì ta tính được giá trị cần nạp là 250. Department of Electronics Page | 6 Microprocessor Laboratory BÀI THÍ NGHIỆM 1 LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED 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 tạo 2 xung vuông 0.5Hz (chu kỳ nhiệm vụ 50%) và 1Hz (chu kỳ nhiệm vụ là 30%) lần lượt trên chân P1. ORG 2000H LOOP: CPL P1.1 ACALL DELAY300ms CPL P1.1 ACALL DELAY700ms SJMP LOOP DELAY300ms: MOV R5, #3 LP1: MOV R6, #200 LP2: MOV R7, #250 DJNZ R7, $ DJNZ R6, LP2 DJNZ R5, LP1 RET DELAY700ms: MOV R5, #7 LP3: MOV R6, #200 LP4: MOV R7, #250 DJNZ R7, $ DJNZ R6, LP4 DJNZ R5, LP3 RET END Department of Electronics Page | 6 Microprocessor Laboratory BÀI THÍ NGHIỆM 1 LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED 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.
chương trình tạo 2 xung vuông 0.5Hz và 1Hz.mp4 Câu hỏi: ➢ Vẽ giản đồ của 2 xung? Các chương trình con viết với thời gian trễ là bao nhiêu? Các chương trình con viết với thời gian trễ lần lượt là 0. ➢ Tại mỗi thời gian tạo trễ, các chân P1.1 xuất tín hiệu như thế nào? Tại 0.3s đầu, ta đảo bit chân P1.7s sau ta tiếp tục đảo bị chân P1.1 vậy ta đã tạo được xung 1Hz với chu kì nhiệm vụ là 30%. Sau đó đồng thời đảo bit chân P1.0, do đó ta có được xung 0.5Hz với chu kì nhiệm vụ là 50% tại chân P1. ➢ Để tạo các xung thỏa yêu cầu bài toán, các vòng trễ được viết như thế nào? Vòng trễ được viết như sau: Department of Electronics Page | 7 Microprocessor Laboratory BÀI THÍ NGHIỆM 1 LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED LOOP: ACALL DELAY300ms CPL P1.1 ACALL DELAY700ms CPL P1.0 SJMP LOOP Department of Electronics Page | 8 Microprocessor Laboratory BÀI THÍ NGHIỆM 1 LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED THÍ NGHIỆM 4 Mục tiêu: Nắm được cách hiển thị bar LED và tạo hiệu ứng Yê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 Delay1s đã viết ở trên. ORG 2000H LOOP: MOV A,#7FH MOV R1,#8 PHASE: MOV P1,A RL A ACALL Delay1s DJNZ R1,PHASE SJMP LOOP Delay1s: MOV R5,#8 LP1: MOV R6,#25 R6,#2500 LP2: MOV R7,#25 R7,#2500 DJNZ R7,$ DJNZ R6,LP2 DJNZ R5,LP1 RET END Kiể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.mp4 Department of Electronics Page | 9 Microprocessor Laboratory BÀI THÍ NGHIỆM 1 LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ 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? LED ngoài cùng bên trái kết nối đến MSB của port 1. Department of Electronics Page | 12 Microprocessor Laboratory BÀI THÍ NGHIỆM 1 LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED THÍ NGHIỆM 5 Mục tiêu: Nắm được cách thức giao tiếp với ngoại vi LED 7 đoạn Yêu cầu: ➢ Viết chương trình con DisplayLed hiển thị lên LED 7 đoạn số 0 giá trị chứa trong thanh ghi R0 DisplayLED: MOV DPTR, #0000H MOV A,R0 MOVX @DPTR,A RET ➢ Viết chương trình chính hiển thị số 9 lên LED 7 đoạn số 0 bằng cách cho R0 bằng 9 và gọi chương trình con DisplayLed. ORG 2000H MOV R0,#11101001B CALL DisplayLED LOOP: SJMP LOOP DisplayLED: MOV DPTR, #0000H MOV A,R0 MOVX @DPTR,A RET END Kiểm tra: ➢ Biên dịch, thực thi và kiểm tra chương trình Department of Electronics Page | 13 Microprocessor Laboratory BÀI THÍ NGHIỆM 1 LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED Department of Electronics Page | 14 Microprocessor Laboratory BÀI THÍ NGHIỆM 1 LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED THÍ NGHIỆM 6 Mục tiêu: Kết hợp hợp được các chương trình con: chương trình con tạo trễ và chương trình con hiển thị LED 7 đoạn.
Yêu cầu: Viết chương trình hiển thị lên LED 7 đoạn số 0 các con số từ 0 đến 9 sau các khoảng thời gian 1s sử dụng 2 chương trình con ở Thí nghiệm 2 và Thí nghiệm 5. ORG 2000H START: MOV R0,#0E0H LOOP: ACALL DisplayLED ACALL DELAY1S INC R0 CJNE R0,#0EAH,LOOP AJMP START DisplayLED: MOV DPTR, #0000H MOV A,R0 MOVX @DPTR,A RET DELAY1S: MOV R5, #8 LP1: MOV R6, #250 LP2: MOV R7, #250 DJNZ R7, $ DJNZ R6, LP2 DJNZ R5, LP1 RET END Department of Electronics Page | 15 Microprocessor Laboratory BÀI THÍ NGHIỆM 1 LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED Hướng Dẫn: Trong chương trình chính, đầu tiên cho thanh ghi R0 bằng 0. Sau đó vào vòng lặp gọi chương trình con DisplayLed đã viết ở phần trước, tạo trễ 1s, tăng R0 lên 1 và lặp lại quá trình. Nếu R0 lớn hơn 9 thì cho R0 bằng 0 trở lại.
Kiểm tra: ➢ Biên dịch, thực thi và kiểm tra chương trình.mp4 Câu hỏi: ➢ Vẽ lưu đồ giải thuật của chương trình. Department of Electronics Page | 16 Microprocessor Laboratory BÀI THÍ NGHIỆM 1 LẬP TRÌNH GIAO TIẾP NÚT NHẤN ĐƠN VÀ LED THÍ NGHIỆM 7 Mục tiêu: Nắm được cách thức dùng chương trình con và giao tiếp LED 7 đoạn. Yêu cầu: Viết chương trình con DisplayLED xuất giá trị chứa trong thanh ghi R0 lên LED 7 đoạn có số thứ tự chứa trong thanh ghi R1. Trong đó: R0 nằm trong tầm từ 0-9 và R1 trong tầm từ 0-3.
Sau đó dùng chương trình con này viết chương trình chính xuất giá trị 1 lên LED 7 đoạn số 3. Hướng dẫn: Để hiển thị lên 1 LED 7 đoạn ta phải ghi ra ngoại vi ở vùng nhớ 0000H-1FFFH một byte, với 4 bit thấp chứa giá trị của giá trị cần hiển thị và 4 bit cao được dùng để chọn LED.