Nguyên văn bởi MC12
Thử cái này xem :
cái đồng hồ đếm phút thôi , bằng ASM , không sử dụng IC giải mã , mã hóa số hiển thị trong chương trình (cái này tùy cách nối VDK với Led 7 Seg của từng người va tùy led đó là Anot chung hay Catot chung nữa .)
--------------------------------------------------
ORG 0
ljmp main
org 000bH
ljmp time
org 30h
main:
mov r0,#0
mov r1,#0
mov r2,#0
mov r3,#0
mov TMOD,#01H
mov TH0,#high(-50000)
mov TL0,#low(-50000)
mov IE,#82H ; cho phep ngat time0
setb tr0
dis:
Mov P3,#11111111B
Mov A,R0
Mov DPTR,#TAB
Movc A,@A+DPTR
Mov P2,A
CLR P3.0
Lcall Delay
Mov P3,#11111111B
Mov A,R1
Mov DPTR,#TAB
Movc A,@A+DPTR
Mov P2,A
CLR P3.1
Lcall Delay
Mov P3,#11111111B
Mov A,R2
Mov DPTR,#TAB
Movc A,@A+DPTR
Mov P2,A
CLR P3.2
Lcall Delay
Mov P3,#11111111B
Mov A,R3
Mov DPTR,#TAB
Movc A,@A+DPTR
Mov P2,A
CLR P3.3
Lcall Delay
sjmp dis
Delay:
Mov R4,#10
back: Mov R5,#250
loop: Djnz R5,loop
djnz R4,back
Ret
time:
clr tr0
inc r7
acall dem0
acall dem1
acall dem2
acall dem3
acall dem4
clr tf0
mov TH0,#high(-50000)
mov TL0,#low(-50000)
setb tr0
reti
dem0:
cjne r7,#20,lap0
mov r7,#0
inc r0
lap0:
ret
dem1:
cjne r0,#10,lap1
mov r0,#0
inc r1
lap1:
ret
dem2: cjne r1,#6,lap2
mov r0,#0
mov r1,#0
inc r2
lap2:
ret
dem3: cjne r2,#10,lap3
mov r0,#0
mov r1,#0
mov r2,#0
inc r3
lap3:
ret
dem4: cjne r3,#10,lap4
mov r0,#0
mov r1,#0
mov r2,#0
mov r3,#0
lap4:
ret
ORG 300h
TAB:
DB 10h,7dh,22h,28h,4dh,88H,80h,3ch,00h,09h
End
-----------------
Trong chương trình chính chỉ là phần hiển thị (quét led) , ngắt timer sẽ tăng các biến đếm và cập nhật số liệu .
Sorry , mình viết thường ít chú thích nên chắc các bạn mới tiếp cận khó hiểu .
Chỉ muốn đóng góp thôi .
Khi dần quen rồi mình nghĩ là các huynh đệ nên tự xây dựng lại từ đầu chương trình nào đó mới mau lên tay , còn các chương trình mẫu tham khảo để biết thuật toán của người ta thôi .
cái đồng hồ đếm phút thôi , bằng ASM , không sử dụng IC giải mã , mã hóa số hiển thị trong chương trình (cái này tùy cách nối VDK với Led 7 Seg của từng người va tùy led đó là Anot chung hay Catot chung nữa .)
--------------------------------------------------
ORG 0
ljmp main
org 000bH
ljmp time
org 30h
main:
mov r0,#0
mov r1,#0
mov r2,#0
mov r3,#0
mov TMOD,#01H
mov TH0,#high(-50000)
mov TL0,#low(-50000)
mov IE,#82H ; cho phep ngat time0
setb tr0
dis:
Mov P3,#11111111B
Mov A,R0
Mov DPTR,#TAB
Movc A,@A+DPTR
Mov P2,A
CLR P3.0
Lcall Delay
Mov P3,#11111111B
Mov A,R1
Mov DPTR,#TAB
Movc A,@A+DPTR
Mov P2,A
CLR P3.1
Lcall Delay
Mov P3,#11111111B
Mov A,R2
Mov DPTR,#TAB
Movc A,@A+DPTR
Mov P2,A
CLR P3.2
Lcall Delay
Mov P3,#11111111B
Mov A,R3
Mov DPTR,#TAB
Movc A,@A+DPTR
Mov P2,A
CLR P3.3
Lcall Delay
sjmp dis
Delay:
Mov R4,#10
back: Mov R5,#250
loop: Djnz R5,loop
djnz R4,back
Ret
time:
clr tr0
inc r7
acall dem0
acall dem1
acall dem2
acall dem3
acall dem4
clr tf0
mov TH0,#high(-50000)
mov TL0,#low(-50000)
setb tr0
reti
dem0:
cjne r7,#20,lap0
mov r7,#0
inc r0
lap0:
ret
dem1:
cjne r0,#10,lap1
mov r0,#0
inc r1
lap1:
ret
dem2: cjne r1,#6,lap2
mov r0,#0
mov r1,#0
inc r2
lap2:
ret
dem3: cjne r2,#10,lap3
mov r0,#0
mov r1,#0
mov r2,#0
inc r3
lap3:
ret
dem4: cjne r3,#10,lap4
mov r0,#0
mov r1,#0
mov r2,#0
mov r3,#0
lap4:
ret
ORG 300h
TAB:
DB 10h,7dh,22h,28h,4dh,88H,80h,3ch,00h,09h
End
-----------------
Trong chương trình chính chỉ là phần hiển thị (quét led) , ngắt timer sẽ tăng các biến đếm và cập nhật số liệu .
Sorry , mình viết thường ít chú thích nên chắc các bạn mới tiếp cận khó hiểu .
Chỉ muốn đóng góp thôi .
Khi dần quen rồi mình nghĩ là các huynh đệ nên tự xây dựng lại từ đầu chương trình nào đó mới mau lên tay , còn các chương trình mẫu tham khảo để biết thuật toán của người ta thôi .
chương trình của bác viết dư các lệnh MOV DPTR,#TAB
chỉ cần viết 1 lệnh ở đầu chương trình main: thôi
Comment