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