PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ablauf des Programms sehr zögerlich...



Black_Arrow
27.01.2008, 12:00
Hallo zusammen,
schon hat sich das nächste Problem angebahnt:
Ich will ein Programm schreiben, dass je nach gedrückter Taste an PortA eine LED-Folge an Port B schaltet.

Hier der Code:

list p=16f870
#include <P16f870.INC>
__config _LVP_OFF & _HS_OSC & _WDT_ON & _PWRTE_ON & _CP_OFF & _CPD_OFF & _BODEN_ON & _DEBUG_OFF
ORG 0x00
NOP
goto Init
ORG 0x04 ;ein interrupt?
retfie

Init
bsf STATUS, RP0 ;auf Bank 1 umschalten
bcf STATUS, RP1 ;auf Bank 1 umschalten
MOVLW 0x06
MOVWF ADCON1
movlw B'11111111'
movwf TRISA
movlw B'00000000'
movwf TRISB
bcf STATUS, RP0 ; auf Bank 0 umschalten
clrf PORTB

start
clrf PORTB ;PortB alle LED's ausschalten, wenn keine Taste gedrückt
nop
schleife
nop
BTFSC PORTA, 0 ;Wenn Taste1 nicht gedrückt, dann überspringen
goto test1 ;ansonsten PORTB entsprechend setzen
BTFSC PORTA, 1 ;Wenn Taste2 nicht gedrückt, dann überspringen
goto test2 ;ansonsten PORTB entsprechend setzen
goto start ;Wenn nichts gedrückt, dann von vorne
test1
movlw B'00101101'
movwf PORTB
goto schleife
test2
movlw B'00010010'
movwf PORTB
goto schleife
end

Nun, wenn ich Taste1 drücke dauert es eine Weile bis PortB die Folge '00101101' zeigt. Das selbe Problem habe ich bei Taste2 auch...
Kann mir jemand sagen, was ich falsch mache?

Beschaltung an PortA mit PullDown Widerständen und Tastern. Led's und deren Vorwiderstände zwischen PortB und 0V.

mfG. Michael

Andre_S
27.01.2008, 20:25
Hallo,

wenn Du den Watch-Dog-Timer einschaltest solltest Du diesen auch in Deiner Programmschleife mit clrwdt periodisch zurück setzen...


Gruß André

Black_Arrow
28.01.2008, 19:50
Servus!

Muss ich den WDT auch zurücksetzen, wenn er im Code garnicht verwendet wird?
Oder sollte ich den besser ausschalten?

mfG. Michael

MichaelM
28.01.2008, 20:25
Hallo,
für die Versuche schalte ich den WDT immer aus, so verursacht er wenigstens keine Probleme. Erst wenn ein Programm zufriedenstellend läuft kann man sich um den WDT kümmern.
Gruß,
Michael

Andre_S
29.01.2008, 06:34
Servus!

Muss ich den WDT auch zurücksetzen, wenn er im Code garnicht verwendet wird?
Oder sollte ich den besser ausschalten?

mfG. Michael

na ja,..
Du musst ihn nicht verwenden, aber wenn Du ihn einschaltest:
aus Deinem File -> "__config _...& _WDT_ON..."
dann musst Du dich auch um ihn kümmern, sonst gibts ständig einen Neustart...

Gruß André