Sida 1 av 1

Input problem Pic - Löst

Postat: 8 augusti 2008, 15:40:58
av Nicke.orebro
Hej.

Helt ny på Pic-programmering.
Programmet är tänkt att blinka en lysdiod på portC, efter att portB.5 fått en +5v signal.
Blink-delen fungerar bra, men det är själva kollen på om portB.5 blivit "hög" som inte verkar fungera. Någon vänlig själ som kan tillrättavisa mig?

Pic 16F690 är det jag använder mig av.

Kod: Markera allt

#include <p16F690.inc>
    __config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF)

    cblock 0x20
Delay1                   ; Define two file registers for the
Delay2                   ; delay loop
     endc
      
     org 0
Start:
     bsf       STATUS,RP0          ; select Register Page 1
     bcf       TRISC,0             ; make IO Pin C.0 an output
	 bsf	   TRISB,5				;make IO Pin B.5 an input
     bcf       STATUS,RP0          ; back to Register Page 0

Wfportb:
	 BTFSS     PORTB,5				;Vänta på att port B.5 blir hög
     Goto Wfportb
     

MainLoop:
     bsf       PORTC,0             ; turn on LED C0
OndelayLoop:
     decfsz    Delay1,f            ; Waste time.  
     goto      OndelayLoop         ; The Inner loop takes 3 instructions per loop * 256 loopss = 768 instructions
     decfsz    Delay2,f            ; The outer loop takes and additional 3 instructions per lap * 256 loops
     goto      OndelayLoop         ; (768+3) * 256 = 197376 instructions / 1M instructions per second = 0.197 sec.
                                   ; call it a two-tenths of a second.
      
     bcf       PORTC,0             ; Turn off LED C0
OffDelayLoop:
     decfsz    Delay1,f            ; same delay as above
     goto      OffDelayLoop
     decfsz    Delay2,f
     goto      OffDelayLoop
     goto      MainLoop            ; Do it again...
     end
/Nicklas

Postat: 8 augusti 2008, 18:05:22
av marcla
Menar du att ditt program inte kontrolerar om Portc.5 blir låg när blink
processen startas? i sånna fall så ser det
ut som om programet fanstnar i "Mainloop" Ersätt "Goto Mainloop" i
slutet av ditt program med "Goto Wfportb"

Postat: 8 augusti 2008, 18:28:13
av Nicke.orebro
Nja..

Det är snarare i

Kod: Markera allt

Wfportb:
	 BTFSS     PORTB,5	 ;Vänta på att port B.5 blir hög
     Goto Wfportb
som det hänger sig, kommer aldrig vidare.

Postat: 8 augusti 2008, 22:36:54
av sodjan
Det ser ut att vara det mycket vanliga felet att slarva med
att kolla databladet. Det är *mycket* tydligt angivet där.

Om inte en viss del fungerar som det är tänkt, t.ex PORTB,
så kollar man *en gång till* det kapitel som handlar om t.ex PORTB.

Se sidan 69, Det gråa rutan med "Note:" i fet stil direkt
under "Example 4-3".

Kolla även om ANSEL på sidan 61...

Postat: 9 augusti 2008, 13:54:10
av Nicke.orebro
Tack så mycket.

Det var initiering jag hade missat...

Nu blinkar det så fint =)

/nicklas