PDA

View Full Version : Ngắt RB0


Heroboss
30-05-2011, 04:47 PM
Anh chị nào giúp em viết dùm đoạn code bằng hợp ngữ ASM dùng ngắt nha. Đề bài là ban đầu led 7 đoạn hiển thị số 0. Sau 1s tăng 1 đơn vị, nếu đến 9 sau 1s trở về 0. Nút N là nút tạm dừng(Pause). Anh chị nào viết dùm em khi viết chú thích các dòng cho em hiểu với nha. Em có gửi mô phỏng bằng protus cho các anh chị. Thanks các anh chị

phatcddt08a
30-05-2011, 07:22 PM
Trong file này củng dùng ngắt rb0 đây nhưng có đều chương trình chạy như thế này.cái này bạn xem file mình gửi cho bạn nhé. Lúc trước mình hay sài asm bây giờ bỏ lâu quá củng không mấy nhớ lệnh cho lắm.nhưng mình có thễ gợi ý bạn làm như thế này . Ban đầu vào chương trình main cho biến nào đó bằng 0 hiện thi xong rồi tăng lên một quay về chương trình chính goto main cho hiển thị tiếp nhé mổi lần hiển thị xem nó bằng 10 chưa nếu bẳng 10 thì không cho hiển thị và xóa biến đó về 0 cho hiển thị lại nhé . Khi nhấn nút xảy ra ngat nhảy vào ngắt bạn chỉ cần đảo bít sao mổi lần ngắt là xong sao do kiểm tra biến đó bắng 0 hay bằng 1 lưu ý trong asm kiểm tra bit của biến đó dùng btfss hoac btfsc tùy bạn thôi có thể làm như sau:
Equ dem 20h

movlw b'00000001'
xorwf dem,0
lệnh này đặt trong chương trình ngắt nhé .lệnh này giúp mỗi lần ngắt thì bít 0 của biến dem được đảo.

Trong chương trình main
btfss dem,0
goto hienthiled // nếu bít 0 của dem bằng 0 thì hiển thị led
goto loop


hienthiled
.............. Hiển thị tại đây

tăng biển hien thị
goto main

loop // dây chuong trình không làm gì cả vì vòng lập vô hạn
hiện thị led tại đây nhưng không cho bien hiển thị tăng nhé
goto loop

end

còn về ngắt bạn xem trong ví dụ của mình sẻ hiểu . Bạn không nên thay đổi những cái trong đó mình quy định nhé mình chỉ giúp bạn nhiêu đây thôi nếu là ccs thì viết rất dể và ngắn nửa . Bạn cứ học asm rành đi rồi chuyển sang ccs nhé để viết các chương trình lớn dể dàng hơn so với asm .chúc thành công.