Hallo Leute
Ich möchte einen (später noch ein paar mehr) Taster an den PORTB <7:4> drantun, der dann bei Betätigung einen Interrupt auslöst. Dieser Interrupt sollte dann dazu führen, dass der Timer 1 zu laufen beginnt.
Ich dachte eigentlich, dass das ne ziemlich simple Sache sein sollte, doch so langsam bin ich mit meinem Latein am Ende und das Ding läuft noch immer nicht.
Als Taster verwende ich so ein Ding: http://www.distrelec.com/ishopWebFro...ries/is/1.html
Dieser ist einerseits an 5V, und über eine Pull-Down-Widerstand von 470 Ohm mit der Masse verbunden. Ich habe das ganze auch mal mit dem Multimeter getestet und bekomme bei offenem Taster 0.1mV und bei gedrücktem Taster 5.01V. Somit ist da noch das Problem des Entprellens, doch das sollte ich eigentlich softwaremässig mit einer Warteschleife von 20ms überbrückt haben.
Doch auch so reagiert der PIC nicht auf die Betätigung des Tasters.
Das Programm sieht dann so aus:Die Hardware und der restliche Code sollten einwandfrei sein, da das ganze ohne den Taster ohne Probs funktionniertCode:ISR ;interupt service routine movwf copyw swapf STATUS, W bcf STATUS, RP0 movwf copys btfsc PIR1, TMR1IF goto TMR1ISR btfsc PORTB, 7 goto RBInt goto ISRend .......... RBInt bcf INTCON, RBIF bsf UPDRBI goto ISRend ISRend ;interupt end routine swapf copys, w movwf STATUS swapf copyw, f swapf copyw, w bsf UPDLCD retfie ............... InitTimer bcf STATUS, RP0 movlw B'00110101' ;prescaler: 1:8; internal clock; no synchronize; Timer1 enabled movwf T1CON bsf STATUS, RP0 bcf PIE1, TMR1IE bcf STATUS, RP0 bsf INTCON, RBIE bsf INTCON, PEIE bsf INTCON, GIE return Main btfsc UPDLCD goto WriteLcd call Init call InitLCD call InitTimer WriteLcd bcf UPDLCD btfsc UPDRBI goto TestRBI call printzehn call printseke call printsekz call printmine call printminz call printstde call printstdz movlw b'11001111' call OutLcdControl movlw D'10' movwf loops call WAIT goto WriteLcd TestRBI bcf UPDRBI movlw D'20' movwf loops call WAIT btfsc PORTB, 7 goto StartTMR goto WriteLcd StartTMR bsf STATUS, RP0 bsf PIE1, TMR1IE bcf STATUS, RP0 goto WriteLcd
Etwas lustiges ist mir auch noch aufgefallen: Wenn ich den Pull-Down Widerstand am Taster entferne, und dann nur ein Bein des Widerstands an die Masse hänge, läuft der Timer/Uhr. (Das 2. Bein hängt in der Luft) Das ist irgendwie ein bisschen komisch. ^^
Hat jemand schon mal so etwas gemacht, und könnte mir sagen, was ich ändern sollte?
mfg orph







 
			
			 
					
					
					
						 Zitieren
Zitieren

Lesezeichen