Köpte en PICKit 2 för några dagar sedan och försöker vänja mig vid PIC Assemblern
Stötte dock på lite problem när jag försökte använda switchen. Ville att en LED skulle tändas medan man höll knappen intryckt men det vill sig inte riktigt. LED lyser när knappen är uppe istället, så då tänkte jag att man jag gjort fel på när den ger 1 resp 0. Men sen insåg jag att den aldrig använder Pressed sektionen så den beter sig precis likadant om man tar bort denna (och ändrar lite hopp). Någon som kan förklara varför?
> hur ska man då göra för att kunna avända switchen?
Om det *är* en reset-switch (alltså kopplad till MCLR) så använder du den
när du vill starta om ("resetta") processorn. Till något annat kan den i så
fall naturligstvis inte användas...
Men i de exempel som följer med PICKit 2 så använder dom den till att bland annat öka en räknare
(Det står att man ska kryssa i så att den "Setting MCLR 3-State" för att switchen ska fungera vilket jag gjort antar att detta sätter en 3-state som då gör att den inte "resettas")
Senast redigerad av sheazar 9 januari 2009, 13:33:15, redigerad totalt 1 gång.
#include <p16F690.inc>
__config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF)
cblock 0x20
Delay ; Assign an address to label Delay1
Display ; define a variable to hold the diplay
LastStableState ; keep track of switch state (open-1; closed-0)
Counter
endc
org 0
Start:
bsf STATUS,RP0 ; select Register Page 1
movlw 0xFF
movwf TRISA ; Make PortA all input
clrf TRISC ; Make PortC all output
bcf STATUS,RP0 ; address Register Page 2
bsf STATUS,RP1
movlw 0xF7 ; PortA3 pin is digital
movwf ANSEL
bcf STATUS,RP0 ; address Register Page 0
bcf STATUS,RP1
clrf Display
clrf PORTC
movlw 1
movwf LastStableState ; Assume the Switch is up.
clrf Counter
MainLoop:
btfsc LastStableState,0
goto LookingForUp
LookingForDown:
clrw ; assume it's not, so clear
btfss PORTA,3 ; wait for switch to go low
incf Counter,w ; if it's low, bump the counter
movwf Counter ; store either the 0 or incremented value
goto EndDebounce
LookingForUp:
clrw ; assume it's not, so clear
btfsc PORTA,3 ; wait for switch to go low
incf Counter,w
movwf Counter
EndDebounce:
movf Counter,w ; have we seen 10 in a row?
xorlw 5
btfss STATUS,Z
goto Delay1mS
comf LastStableState,f ; after 10 straight, reverse the direction
clrf Counter
btfss LastStableState,0 ; Was it a key-down press?
goto Delay1mS ; no: take no action
incf Display,f ; if it's the down direction,
movf Display,w ; take action on the switch
movwf PORTC ; (increment counter and put on display)
Delay1mS:
movlw .71 ; delay ~1000uS
movwf Delay
decfsz Delay,f ; this loop does 215 cycles
goto $-1
decfsz Delay,f ; This loop does 786 cycles
goto $-1
goto MainLoop
end
Kappen är kopplad til MCLR och därför fungerar denj inte om man styr PICKIt2 från MPLAB, men väl om man styr den från PICKIT2-programvaran. Det finns dokumenterat på Microchips webbplats