He he bài này về ý tưởng thì không sai, nhưng có 1 số lỗi về thuật toán và mắc một lỗi là có 1 lệnh không hợp lệ tuy biên dịch không lỗi nhưng khi thực thi sẽ không như ý muốn. Lẽ ra cũng không định "khảo cổ" đâu, nhưng vì thấy mọi người bảo không out port thì làm sao mà đưa được dữ liệu ra. Vậy thì giờ mọi người xem nhé.
Chuơng trình này thì đảm bảo là chạy 100% còn cái lệnh: mov @R0, A không hợp lệ là vì cái NÀY ở phần "Indirect Addressing" có nói. Lẽ ra nếu không vì cái ngoại lệ này thì cũng không đến nỗi không thấy chưong trình chạy
.
Code:
org 0x0
batdau:
mov A, #0x0
mov B, #0xFF
//mov R0,0x80 <-- bỏ cái này đi
mov R0, #07 // thanh ghi này dùng trong vòng lặp trên này rồi thì xuống bên dưới hàm (tre_1s) phải dùng thanh ghi khác
// Hoặc ít nhất là cất nó đi, sau tre_1s thì khôi phục lại giá trị thì mới không bị sai vòng lặp này
led0:
mov 0x80, A//mov @R0,A <-- Đây chính là lệnh không hợp lệ
acall tre_1s
mov 0x80, B
//inc R0 <-- Không hiểu ý tưởng chỗ này là gì
djnz R0, led0
//mov R0, #90H
mov R0, #07
led1:
mov 0x90, A
acall tre_1s
mov 0x90, B
//inc R0
djnz R0, led1
//mov R0, #0A0H
mov R0, #07
led2:
mov 0xA0, A
acall tre_1s
mov 0xA0, B
//inc R0
djnz R0, led2
//mov R0, #0B0H
mov R0, #07
led3:
mov 0xB0, A
acall tre_1s
mov 0xB0, B
//inc R0
djnz R0, led3
sjmp batdau
tre_1s:
mov r1, #10
loop3:
mov R2, #100
loop2:
mov r3, #100
loop1:
djnz r3,loop1
djnz R2,loop2
djnz r1,loop3
ret
end
.

Comment