Lernfähig
20.11.2006, 23:26
Hallo erstmal. Habe schon überall gesucht, aber nix gefunden, also hier mein eigener kleiner thread.
Ich will/muss mit dem 16F628 zwei LEDs an RB5 und RB3 wechselweise an und ausschalten, also LED1 an und LED2 aus, dann nach Timer0-Interrupt genau umgekehrt.
Hier mein eigentliches Problem:
Ich bringe es nicht fertig irgendwas in PORTA oder B zu schreiben (ja RB sind pins von PortB, ich weiß). Ich kann zwar den Timer reseten, die Bänke wechseln, in TRISB/Intcon/Option was reinschreiben, Bank wieder wechseln, PortB in w einlesen; aber ich schaffs ums Verrecken nicht irgendwas in PortB zu schreiben.
Bitte helft mir wenn Ihr Rat wißt, bin echt am verzweifeln!!
main
; Hauptprogramm,-Code einfügen
clrf TMR0 ;Timer0 zurücksetzten, steht sonstwas drin nach Reset
bsf PORTB, 3 ;-----> hier passiert schon mal nix <---------
bsf STATUS, RP1
bsf STATUS, RP0 ;schalte auf Bank 1
movlw B'11101011' ; PortB.3/5 als Ausgänge, Rest Eingänge; in W schreiben
;RB.7 --> RB.0
movwf TRISB ;schreibe diese Bitfolge in TRISB
movlw B'00000111' ;RBPU\=void, INTEDG=void, TOCS=0 interner Takt, T0SE=void,
;PSA=0 Vorteiler nutzen, PS2/1/0=1 höchster Teiler (256:1)->langsam
movwf OPTION_REG ;schreibe Bitfolge in Spec.Func.Reg "Option"
movlw B'00100000' ;gerade LED1 an RB5 wird angeschaltet, LED2 bleibt aus
bcf STATUS, RP1
bcf status, RP0 ;"bit clear file": RP0=0 --> auf Bank 0 umschalten
movwf PORTB
; clrf TMR0 ;
movfw PORTB ; Wert von PortB wird wie gewünscht in wreg geschrieben
movwf PORTA ;-----> hier passiert nix mehr
movwf PORTB ;-----> -"-
bsf PORTB, 6 ;-----> hier auch nicht <-------
bsf PORTB,7 ;-----> hier ebenfalls nicht <-------
ende
goto ende ;dann hängt PIC in Endlosschleife wie gewünscht bis Interrupt kommt
](*,) [/scroll][/code]
(geschrieben und simuliert hab ich übrigens mit MPLAB)
Ich will/muss mit dem 16F628 zwei LEDs an RB5 und RB3 wechselweise an und ausschalten, also LED1 an und LED2 aus, dann nach Timer0-Interrupt genau umgekehrt.
Hier mein eigentliches Problem:
Ich bringe es nicht fertig irgendwas in PORTA oder B zu schreiben (ja RB sind pins von PortB, ich weiß). Ich kann zwar den Timer reseten, die Bänke wechseln, in TRISB/Intcon/Option was reinschreiben, Bank wieder wechseln, PortB in w einlesen; aber ich schaffs ums Verrecken nicht irgendwas in PortB zu schreiben.
Bitte helft mir wenn Ihr Rat wißt, bin echt am verzweifeln!!
main
; Hauptprogramm,-Code einfügen
clrf TMR0 ;Timer0 zurücksetzten, steht sonstwas drin nach Reset
bsf PORTB, 3 ;-----> hier passiert schon mal nix <---------
bsf STATUS, RP1
bsf STATUS, RP0 ;schalte auf Bank 1
movlw B'11101011' ; PortB.3/5 als Ausgänge, Rest Eingänge; in W schreiben
;RB.7 --> RB.0
movwf TRISB ;schreibe diese Bitfolge in TRISB
movlw B'00000111' ;RBPU\=void, INTEDG=void, TOCS=0 interner Takt, T0SE=void,
;PSA=0 Vorteiler nutzen, PS2/1/0=1 höchster Teiler (256:1)->langsam
movwf OPTION_REG ;schreibe Bitfolge in Spec.Func.Reg "Option"
movlw B'00100000' ;gerade LED1 an RB5 wird angeschaltet, LED2 bleibt aus
bcf STATUS, RP1
bcf status, RP0 ;"bit clear file": RP0=0 --> auf Bank 0 umschalten
movwf PORTB
; clrf TMR0 ;
movfw PORTB ; Wert von PortB wird wie gewünscht in wreg geschrieben
movwf PORTA ;-----> hier passiert nix mehr
movwf PORTB ;-----> -"-
bsf PORTB, 6 ;-----> hier auch nicht <-------
bsf PORTB,7 ;-----> hier ebenfalls nicht <-------
ende
goto ende ;dann hängt PIC in Endlosschleife wie gewünscht bis Interrupt kommt
](*,) [/scroll][/code]
(geschrieben und simuliert hab ich übrigens mit MPLAB)