chào mọi người
Mình đang làm một cái để báo tiết, dùng DS12887.
Mình có đoạn code này nói về việc so sánh thời gian đọc được với bảng thời gian alarm. Mình làm hoài mà nó không chạy, so sánh được rùi, nhưng khi xuất chuông thì nó bị treo. không thoát ra được chương trình. sau 1 phút nhấn Reset thì mọi chuyện ok lại. Minh đã sửa nhiều lần lắm rùi mà nó không như ý muốn, mong các bạn xem giúp có chỗ nào bị lỗi không?
ban đầu nếu không có phím nào nhấn thì chương trình vẫn đọc bình thường (ct con DOC_DATA), sau khi đọc thì đã lưu các ô nhớ giờ, phút, giây. Sau đó gọi ct con SO_SANH để so sánh thời gian đọc với thời gian trong bảng alarm. Nếu nó bằng nhau thì cho xuất chuông.
Chỉ vậy thôi mà nghĩ hoài không ra, mong hồi âm từ các bạn
Cảm ơn trước nhé
BATDAU:
LAP1: JB P3.0,LAP ;KHONG NHAN THI TIEP TUC DOC
JNB P3.0,$
ACALL DOC_DATA JB P3.0,CHON_MODE ;CO NHAN THI CHINH PHUT
LAP:
ACALL DOC_DATA
ACALL SO_SANH
MOV R7,SOLAN
CJNE R7,#0,LAP2
JMP LAP
LAP2: ACALL XUAT_CHUONG
DJNZ R7,LAP2
LJMP LAP1
XUAT_CHUONG:
MOV R3,#5
M1: SETB CHUONG
ACALL DELAY1
CLR CHUONG
DJNZ R3,M1
RET
;
SO_SANH: CLR CHUONG
CLR A ; XOA A
LL: MOV R1,A ;DUA A VAO R0
MOV DPTR,#TABLE_HOUR
PUSH ACC ; LUU GIA TRI A
MOVC A,@A+DPTR ;TRA BANG
CJNE A,GIO,NEXT ;SO SANH VOI O NHO BAO GIO
MOV A,R1 ;DUA GIA TRI BAN DAU CUA A VAO
MOV DPTR,#TABLE_MINUTE
MOVC A,@A+DPTR ; TRA BANG
CJNE A,PHUT,NEXT ;SO SANH VOI O NHO BAO PHUT
;
MOV A,R1
MOV DPTR,#TABLE_SECON
MOVC A,@A+DPTR
CJNE A,GIAY,NEXT
;
MOV A,R1
MOV DPTR,#TABLE_TIMES
MOVC A,@A+DPTR
MOV SOLAN,A
JMP EXIT
NEXT: POP ACC ; LAY DU LIEU A BAN DAU RA DE TANG LEN
INC A
CJNE A,#8,LL
MOV SOLAN,#0
EXIT:
RET
Mình đang làm một cái để báo tiết, dùng DS12887.
Mình có đoạn code này nói về việc so sánh thời gian đọc được với bảng thời gian alarm. Mình làm hoài mà nó không chạy, so sánh được rùi, nhưng khi xuất chuông thì nó bị treo. không thoát ra được chương trình. sau 1 phút nhấn Reset thì mọi chuyện ok lại. Minh đã sửa nhiều lần lắm rùi mà nó không như ý muốn, mong các bạn xem giúp có chỗ nào bị lỗi không?
ban đầu nếu không có phím nào nhấn thì chương trình vẫn đọc bình thường (ct con DOC_DATA), sau khi đọc thì đã lưu các ô nhớ giờ, phút, giây. Sau đó gọi ct con SO_SANH để so sánh thời gian đọc với thời gian trong bảng alarm. Nếu nó bằng nhau thì cho xuất chuông.
Chỉ vậy thôi mà nghĩ hoài không ra, mong hồi âm từ các bạn
Cảm ơn trước nhé
BATDAU:
LAP1: JB P3.0,LAP ;KHONG NHAN THI TIEP TUC DOC
JNB P3.0,$
ACALL DOC_DATA JB P3.0,CHON_MODE ;CO NHAN THI CHINH PHUT
LAP:
ACALL DOC_DATA
ACALL SO_SANH
MOV R7,SOLAN
CJNE R7,#0,LAP2
JMP LAP
LAP2: ACALL XUAT_CHUONG
DJNZ R7,LAP2
LJMP LAP1
XUAT_CHUONG:
MOV R3,#5
M1: SETB CHUONG
ACALL DELAY1
CLR CHUONG
DJNZ R3,M1
RET
;
SO_SANH: CLR CHUONG
CLR A ; XOA A
LL: MOV R1,A ;DUA A VAO R0
MOV DPTR,#TABLE_HOUR
PUSH ACC ; LUU GIA TRI A
MOVC A,@A+DPTR ;TRA BANG
CJNE A,GIO,NEXT ;SO SANH VOI O NHO BAO GIO
MOV A,R1 ;DUA GIA TRI BAN DAU CUA A VAO
MOV DPTR,#TABLE_MINUTE
MOVC A,@A+DPTR ; TRA BANG
CJNE A,PHUT,NEXT ;SO SANH VOI O NHO BAO PHUT
;
MOV A,R1
MOV DPTR,#TABLE_SECON
MOVC A,@A+DPTR
CJNE A,GIAY,NEXT
;
MOV A,R1
MOV DPTR,#TABLE_TIMES
MOVC A,@A+DPTR
MOV SOLAN,A
JMP EXIT
NEXT: POP ACC ; LAY DU LIEU A BAN DAU RA DE TANG LEN
INC A
CJNE A,#8,LL
MOV SOLAN,#0
EXIT:
RET
Comment