hixc
27.12.2007, 20:02
Hallo zusammen,
Ich habe ein Programm geschrieben, welches im Prinzip aus einem Taster einen Umschalter machen soll.
Das heißt, wenn der Taster gedrückt wird, sollen zwei LEDs angeschaltet werden und das Programm in einer Abfrageschleife bleiben.
Bei erneutem drücken sollen die LEDs wieder aus gehen und das Programm in einer anderen Schleife den Taster abfragen.
Leider scheint es irgendwie Probleme bei der Abfrage zu geben und mal wird der Befehl übersprungen und mal nicht (obwohl der Taster nicht betätigt wird)
Ich habe schon an einigen Stellen des Programms andere LEDs bzw. ausgänge auf 1 gesetzt und dadurch gesehen, dass das Programm wild durchsprungen wird, ohne den Taster korrekt abzufragen.
Jetzt vermute ich, das irgendetwas mit der Initialisierung des Tasters nicht stimmt. Oder liegt es vielleicht doch an der Hardware?
Vielen Dank fürs durchschauen.
;$$$$$$$$$$$$$$ -- CONFIG -- $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
list p=16f84a
include "p16f84a.inc"
__config _XT_OSC & _PWRTE_OFF & _WDT_OFF & _CP_OFF ;CONFIG
cblock 0x22 ; Variablen kenzeichnen
ZAEHLER1
ZAEHLER2
endc
;$$$$$$$$$$$$$$$$ -- INIT -- $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
org 0x00
bsf STATUS, RP0 ;Wechsel in Bank 1
movlw 0x00 ;PORTB OUTPUT
movwf TRISB ;
movlw 0x01 ;PORTA INPUT
movwf TRISA ;
bcf STATUS, RP0 ;Wechsel in Bank 0
clrf PORTB
movlw 0x00 ;PORTB, setze alle Bits 0
movwf PORTB
goto main
;$$$$$$$$$$$$$$ -- MAIN -- $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
main
movlw 0x00 ;PORTB, setze alle Bits 0
movwf PORTB
call wait
loop ;Abfrage von Taster
BTFSS PORTA,0
CALL switch
goto main
;$$$$$$$$$-SUBRUTINES-$$$$$$$$
switch
movlw 0x03 ;PORTB, setze Bits 1 und 2
movwf PORTB
call wait
loop3
BTFSS PORTA,0
call main
call wait
goto loop3
return
wait ;Warteschleife
loop1 decfsz ZAEHLER1,1
goto loop1
decfsz ZAEHLER2,1
goto loop1
loop2 decfsz ZAEHLER1,1
goto loop2
decfsz ZAEHLER2,1
goto loop2
return
end
http://mitglied.lycos.de/schtiewen/switchbox.bmp
Ich habe ein Programm geschrieben, welches im Prinzip aus einem Taster einen Umschalter machen soll.
Das heißt, wenn der Taster gedrückt wird, sollen zwei LEDs angeschaltet werden und das Programm in einer Abfrageschleife bleiben.
Bei erneutem drücken sollen die LEDs wieder aus gehen und das Programm in einer anderen Schleife den Taster abfragen.
Leider scheint es irgendwie Probleme bei der Abfrage zu geben und mal wird der Befehl übersprungen und mal nicht (obwohl der Taster nicht betätigt wird)
Ich habe schon an einigen Stellen des Programms andere LEDs bzw. ausgänge auf 1 gesetzt und dadurch gesehen, dass das Programm wild durchsprungen wird, ohne den Taster korrekt abzufragen.
Jetzt vermute ich, das irgendetwas mit der Initialisierung des Tasters nicht stimmt. Oder liegt es vielleicht doch an der Hardware?
Vielen Dank fürs durchschauen.
;$$$$$$$$$$$$$$ -- CONFIG -- $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
list p=16f84a
include "p16f84a.inc"
__config _XT_OSC & _PWRTE_OFF & _WDT_OFF & _CP_OFF ;CONFIG
cblock 0x22 ; Variablen kenzeichnen
ZAEHLER1
ZAEHLER2
endc
;$$$$$$$$$$$$$$$$ -- INIT -- $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
org 0x00
bsf STATUS, RP0 ;Wechsel in Bank 1
movlw 0x00 ;PORTB OUTPUT
movwf TRISB ;
movlw 0x01 ;PORTA INPUT
movwf TRISA ;
bcf STATUS, RP0 ;Wechsel in Bank 0
clrf PORTB
movlw 0x00 ;PORTB, setze alle Bits 0
movwf PORTB
goto main
;$$$$$$$$$$$$$$ -- MAIN -- $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
main
movlw 0x00 ;PORTB, setze alle Bits 0
movwf PORTB
call wait
loop ;Abfrage von Taster
BTFSS PORTA,0
CALL switch
goto main
;$$$$$$$$$-SUBRUTINES-$$$$$$$$
switch
movlw 0x03 ;PORTB, setze Bits 1 und 2
movwf PORTB
call wait
loop3
BTFSS PORTA,0
call main
call wait
goto loop3
return
wait ;Warteschleife
loop1 decfsz ZAEHLER1,1
goto loop1
decfsz ZAEHLER2,1
goto loop1
loop2 decfsz ZAEHLER1,1
goto loop2
decfsz ZAEHLER2,1
goto loop2
return
end
http://mitglied.lycos.de/schtiewen/switchbox.bmp