03-04-2006, 12:15 PM
|
#61
|
Nhập môn đệ tử
Tham gia ngày: Oct 2005
Bài gửi: 5
:
|
các bác cho em hỏi tý:
Code:
; Bài toán yêu cầu :nhấn 2 lần nút button(nối tại RA0) led nối với RB0
; sẽ sáng(mạch dùng luôn của bác Chính vậy chỉ khác có cái button
; nối với VCC qua RA0 xuống đất)
; chương trình sẵn:
; Project: Two pushes to turn on a LED
Processor 16F84a
include <p16F84a.inc>
__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _RC_OSC
ORG 0 ;This is the start of memory for the program.
SetUp
BSF 03,5 ;Go to Bank 1
CLRF 06 ;Make all port B output
MOVLW 01 ;Load W with 0000 0001
MOVWF 05 ;Make RA0 input
BCF 03,5 ;Go to Bank 0 - the program memory area.
CLRF 1F ;Clear the button file
CLRF 06 ;Blank the output
GOTO Main
Delay
NOP ;Create approx 250mS delay
DECFSZ 1A,1
GOTO Delay
DECFSZ 1B,1
GOTO Delay
RETURN
Delay2
NOP ;Create 1mS debounce delay
DECFSZ 1A,1
GOTO Delay2
RETURN
Sw
BTFSS 05,0 ;Test the push button
GOTO Sw3 ;Button not pressed
BTFSC 1F,2 ;Test end-of-flash flag
RETURN
BTFSC 1F,0 ;First pass?
RETLW 00 ;No
BTFSS 1F,1 ;Test first-press flag
GOTO Sw2 ;First press
BSF 06,0 ;Button has been pressed twice. Illuminate LED
CALL Delay ;Keep LED on
CALL Delay ;Keep LED on
BCF 1F,1 ;Clear second-push flag bit
BSF 1F,2 ;Set end-of-flash flag
BCF 06,0 ;Turn LED off
RETURN
Sw2
BSF 1F,1 ;Set the first-press flag
BSF 1F,0 ;Set button pass flag bit
RETURN
Sw3
BCF 1F,0 ;Clear button pass flag bit
BCF 1F,2 ;Clear end-of-flash flag
RETURN
Main
CALL Sw
CALL Delay2 ;Debounce switch
GOTO Main
END ;Tells assembler end of program
Một số chỗ em chưa hiểu:
1.Các file 1A,1B mặc định bao nhiêu mà tạo được các thời gian trễ như trên
2.File 1F với các bit hoạt động ra sao
3.Chương trình này hoạt động thế nào :em chư hiểu giải thuật ,tại sao nhấn nút button lần 1 led chưa sáng,lần 2 led mới sáng
Chỗ này:
Code:
Sw
BTFSS 05,0 ;Test the push button
GOTO Sw3 ;Button not pressed
BTFSC 1F,2 ;Test end-of-flash flag
RETURN
BTFSC 1F,0 ;First pass?
RETLW 00 ;No
BTFSS 1F,1 ;Test first-press flag
GOTO Sw2 ;First press
BSF 06,0 ;Button has been pressed twice. Illuminate LED
CALL Delay ;Keep LED on
CALL Delay ;Keep LED on
BCF 1F,1 ;Clear second-push flag bit
BSF 1F,2 ;Set end-of-flash flag
BCF 06,0 ;Turn LED off
RETURN
Nhấn lần 1:->BTFSC 1F,2->BTFSC 1F,0->BTFSS 1F,1->GOTO Sw2
Sw2 BSF 1F,1 ;Set the first-press flag
BSF 1F,0 ;Set button pass flag bit
RETURN
Vậy thì sau khi nó trở về từ Sw2 sẽ BSF 06,0 ;Button has been pressed twice. Illuminate LED.
Em hiếu sai ở đâu ,mong anh Chính và mọi người trả lời hộ(Giait thích kĩ hộ em sử dụng các file 1A,1B,nhất là 1F)
Em cảm ơn nhiều
thay đổi nội dung bởi: ntc, 03-04-2006 lúc 12:55 PM.
Lý do: SỬA LẠI CÁCH VIẾT CODE
|
|
|