mình đã làm xong cái bài tập lớn này, đã mô phỏng tốt (đang làm mạch thật, chưa test mạch thật) post lên cho mọi người, không có ngụ ý "khoe" , mà để anh em tham khảo.
Code:
; ------------- READS51 generated header -------------- ; ----------------------------------------------------- ;***************************************** ; CHO PHIM BAM. ; NEU BAM PHAM 1 -----> CHUYEN DEN CHUONG TRINH 1 ; NEU BAM PHIM 2 -------> CHUYEN DEN CHUONG TRINH 2 ; P3.1 DEN P3.4 : COT CUA MA TRAN PHIM ; P1.0 DEN P1.3: HANG CUA MA TRAN PHIM ;***************************************** #include <sfr51.inc> ;***************************************** ;***************************************** ORG 0000H MOV P1, #00H MOV P3,#FFH ;CẤU HÌNH CỔNG P3 LÀM ĐẦU VÀO MOV A, #P3 CJNE A,#00001111B, PHIMDINH ;KIỂM TRA PHÍM DÍNH SJMP K1; NẾU KHÔNG CÓ PHÍM DÍNH THÌ TIẾP TỤC NHẢY ĐẾN K1 PHIMDINH: MOV A, #80H ; CHƯƠNG TRÌNH NẾU CÓ PHÍM DÍNH THÌ GHI RA LED SỐ “9” MOV DPTR,#4003H ; CẤU HÌNH PA, PB , PC CỔNG RA, MOVX @DPTR, A ; MOV DPTR,#4002H ; TRỎ ĐẾN PC MOV A,#10010000B; ; GHI RA LED HIEN THI SO “9999” MOVX @DPTR, A HERE: SJMP HERE ;Ở LẠI VÒNG LẶP VÔ TẬN K1: MOV A,P3 ; ĐỌC CỔNG P3 ANL A, #00001111B ;CHE CAC BIT CAO CUA P3 CJNE A,#00001111B, K2 ;CO PHAM AN? NHAY TOI K2 DE CHONG RUNG SJMP K1 K2: ACALL DELAY2OMS ; CHONG RUNG MOV A,P3 ANL A, #00001111B CJNE A,#00001111B, K3 ;CO PHIM AN? NHAY TOI K3 DE KIEMTRA TUNG HANG SJMP K1 K3: MOV A,#11111110B ;DUA 0 RA HANG THU NHAT MOV P1,A MOV A,P3; ANL A, #00001111B CJNE A,#00001110B,COL2 SJMP PROG1 COL2: ANL A,#00001111B CJNE A,#00001101B, K1 ;Nếu không phải phím 2 thì quay lại kiểm tra từ đầu SJMP PROG2 ; ;********************************************************* ;CHUONG TRINH ROLE THU NHAT ;CAU HINH: PA0 DONG CAT ROLE 1 ; PA1 DONG CAT ROLE 2 ; PA2 DONG CAT ROLE 3 ; PA3 DONG CAT ROLE 4 ; PA4 DONG CAT ROLE 5 ; PA5 DONG CAT ROLE 6 ;CAU HINH 8255A: PA, PB, PC DEU LAM CONG RA ; TU DIEU KHIEN #80H; DIA CHI TU DIEU KHIEN LA 4003H ;DIA CHI CAC CONG CUA 8255A: PA = 4000H; PB=4001H; PC=4002H;CR=4003H ;PC ĐIỀU KHIỂN LED 7 THANH 4 ĐOẠN HIỂN THỊ SỐ 1 ; PC3 ĐẾN PC7 GỬI ĐẾN IC7447 MÃ BCD 0001 ; PC0 ĐẾN PC3 ĐỂ CHỌN 4 LED CỦA LED 7 THANH 4 ĐOẠN ;CHƯƠNG TRÌNH ĐÓNG CắTCÁC RƠLE THEO TRÌNH Tự Từ 1-2-3-4-5-6. RƠLE Tự DUY TRÌ ;KHI ĐƯợC CấP ĐIệN. KHI RƠLE 6 ĐÃ ĐƯợC CấP ĐIệN 5S THÌ CắT ĐIệN TấT Cả CÁC RƠLE; ;SAU 10S LạI BắT ĐầU CHU KÌ MớI. ;______________________________________________________________________ PROG1: MOV A, #80H ; (A)=80H, LÀ TỪ ĐIỀU KHIẺN 8255A MOV DPTR,#4003H ; DPTR TRỎ ĐẾN ĐỊA CHỈ CR CỦA 8255A MOVX @DPTR, A ; NẠP TỪ ĐIỀU KHIỂN VÀO THANH GHI CR, ;(CR)=80H,CẤU HÌNH CÁC CỔNG PA, PB PC CỔNG RA MOV DPTR,#4002H ;DPTR TRỎ ĐẾN CỔNG PC MOV A,#00010000B; MOVX @DPTR, A ; A NẠP VÀO PC ĐỂĐIỀU KHIỂN LED 1 HIỂN THÍ SỐ “1” MOV A,#00H ; MOV DPTR,#4000H ; DPTR TRỎ ĐẾN PA CỦA 8255A MOVX @DPTR, A ;XÓA PA LOOP11: MOV A, #01H ; KHỞI TẠO GIÁ TRỊ CỦA A MOV R0,#06H ; NẠP BIẾN ĐẾM SỐ LẦN QUAY BIT TRONG CHU KÌ LOOP21: MOV DPTR,#4000H ; DPTR TRỎ ĐẾN PA MOVX @DPTR, A ; NẠP GIÁ TRỊ CỦA A VÀO CHO PA ACALL DELAY5S ; GỌI TRỄ 5S RL A ; QUAY TRÁI BIT CỦA A DJNZ R0, LOOP21 ; SJMP LOOP11 ; Ở LẠI VÒNG LẶP VÔ TẬN , CHO ĐẾN KHI RESET ;***********************************************************8 ;CHUONG TRINH ROLE THU 2 ;CHƯƠNG TRÌNH ĐÓNG CắTCÁC RƠLE THEO TRÌNH Tự Từ 1-2-3-4-5-6. RƠLE Tự DUY TRÌ ;KHI ĐƯợC CấP ĐIệN. KHI RƠLE 6 ĐÃ ĐƯợC CấP ĐIệN 5S THÌ CắT ĐIệN TấT Cả CÁC RƠLE; ;SAU 10S LạI BắT ĐầU CHU KÌ MớI. ;______________________________________________________________________ PROG2: MOV A, #80H ; A)=80H, LÀ TỪ ĐIỀU KHIẺN 8255A MOV DPTR,#4003H ; DPTR TRỎ ĐẾN ĐỊA CHỈ CR CỦA 8255A MOVX @DPTR, A ; NẠP TỪ ĐIỀU KHIỂN VÀO THANH GHI CR, ;(CR)=80H,CẤU ;HÌNH CÁC CỔNG PA, PB PC LÀM CỔNG RA MOV DPTR,#4002H; DPTR TRỎ ĐẾN PC MOV A,#00100000B; HIỂN THỊ SỐ “2” TRÊN LED MOVX @DPTR, A ; ; A NẠP VÀO PC ĐỂĐIỀU KHIỂN LED 1 HIỂN THÍ SỐ “2” MOV A,#00H ; MOV DPTR,#4000H ; MOVX @DPTR, A ; LOOP22: MOV A, #000001B ; MOV DPTR,#4000H ;TRỎ ĐẾN PA MOVX @DPTR, A; BẬT RƠLE THỨ NHẤT CÓ ĐIỆN ACALL DELAY1S ;GỌI TRỄ 1S MOV A, #000011B ;CẤP ĐIỆN RƠLE 2, DUY TRÌ RƠLE 1 MOV DPTR,#4000H ; MOVX @DPTR, A; ACALL DELAY1S ; GỌI TRỄ 1S MOV A, #000111B ; CẤP ĐIỆN RƠLE3, DUY TRÌ RƠLE 1VÀ 2 MOV DPTR,#4000H ;NT (NHƯ TRÊN) MOVX @DPTR, A; NT ACALL DELAY1S ; GỌI TRỄ 1S MOV A, #001111B ; CẤP ĐIỆN RƠLE4, DUY TRÌ RƠLE 1,2, VÀ 3 MOV DPTR,#4000H ; MOVX @DPTR, A; ACALL DELAY1S ; GỌI TRỄ 1S MOV A, #011111B ; CẤP ĐIỆN RƠLE5, DUY TRÌ RƠLE 1,2, 3 ,VÀ 4 MOV DPTR,#4000H ; MOVX @DPTR, A; ACALL DELAY1S ; GỌI TRỄ 1S MOV A, #111111B ; CẤP ĐIỆN RƠLE6, DUY TRÌ RƠLE 1,2,3,4, VÀ 5 TRONG 5S MOV DPTR,#4000H ; MOVX @DPTR, A; ACALL DELAY5S ; GỌI TRỄ 5S MOV A, #000000B ;SAU KHI CẢ 6 RƠLE CÓ ĐIỆN TRONG 5S THÌ TẮT TẤT CẢ RƠLE MOV DPTR,#4000H ; MOVX @DPTR, A; ACALL DELAY5S ; ACALL DELAY5S ; GỌI TRỄ 5S HAI LẦN LIÊN TIẾP, TẠO THÀNH TRỄ 10S SJMP LOOP22 ; Ở LẠI VÒNG LẶP VÔ TẬN , CHO ĐẾN KHI RESET ;******************************** ;CAC CHUONG TRINH TAO TRE: ;CHUONG TRINH TAO TRE 5S: DELAY5S: MOV R3,#37 DL10: MOV R2,#100 DL9: MOV R1,#250 DL8: NOP NOP DJNZ R1,DL8 DJNZ R2,DL9 DJNZ R3,DL10 RET ;CHUONG TRINH TRE 1S DELAY1S: MOV R3,#10 DL1: MOV R2,#100 DL2: MOV R1,#250 DL3: NOP NOP DJNZ R1,DL3 DJNZ R2,DL2 DJNZ R3,DL1 RET ;CHUONG TRINH TRE 20MS DELAY20MS: MOV R2,#20 DL1111 : MOV R1,#250 DL2222 : NOP NOP DJNZ R1,DL2222 DJNZ R2,DL1111 RET END
Comment