|
Tài trợ cho PIC Vietnam |
MPASM Lập trình bằng hợp ngữ là một việc làm vô cùng vất vả, tuy nhiên, để hiểu và làm việc với vi điều khiển, hợp ngữ trở thành một công cụ khá đắc lực ... |
|
Ðiều Chỉnh | Xếp Bài |
18-11-2009, 10:50 PM | #1 |
Nhập môn đệ tử
Tham gia ngày: Apr 2009
Bài gửi: 3
: |
chống rung nút nhấn
SCAN_BUTTON
movff key2,key3 movff key1,key2 movff PORTD,key1 movff key1,W ; W=key1 cpfseq key2 ;key2 = key1 -> bo qua lenh tiep theo goto EXIT_SCAN cpfseq key3 ;key3 =key1 -> bo qua lenh tiep theo goto EXIT_SCAN dcfsnz timeout ;bo qua lenh tiep theo neu khac 0 ( neu =0 thi lam) call clear_key movff key,W ; key la bien luu gia tri cua nut khi dc nhan cpfseq key1 ; bo qua lenh ke tiep neu = W goto SCAN_BUTTON1 goto EXIT_SCAN SCAN_BUTTON1 movff key1,key movlw .1 cpfseq flag ;neu flag = 1, nhan lan dau tien goto LANSAU movlw .100 movwf timeout INCF PORTB movlw .0 movwf flag EXIT_SCAN return LANSAU movlw .0 cpfseq key1 goto subkey movlw .1 movwf flag return subkey movlw .100 movwf timeout INCF PORTB return Đây là đoạn code chống rung phím nhấn và kiểm tra phím bị đè. Ý tưởng là sử dụng ngắt. Cứ 10ms thì sẽ kt giá trị nút nhấn. Nếu 3 lần như nhau thì nút được nhấn và tăng PORTB lên 1. Nếu nút bị đè thì sau tg là 1s mới tích cực lại nút nhấn. Chương trình này mình test trên protues thì chạy sai. Nếu mà nhấn 1 lần thì PortB nó tăng lên 6,7 :| Hi vọng các bạn giúp mình tìm ra lí do tại sao lại bị sai như vậy. Thanks các bạn nhiều. ( Vì mình hok bit cách post code nên nhờ mod sửa giùm, thanks mod nhìu ) |
|
|