PIC programering / PICKit 2 Demoboard
Postat: 9 januari 2009, 13:02:23
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?

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?
Kod: Markera allt
list p=16f690 ; list directive to define processor
#include <P16F690.inc> ; processor specific variable definitions
__CONFIG _CP_OFF & _CPD_OFF & _BOR_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _MCLRE_ON & _FCMEN_OFF & _IESO_OFF
cblock 0x20
swStat
counter
delayCount1
delayCount2
endc
;**********************************************************************
ORG 0x000 ; processor reset vector
goto Start ; go to beginning of program
Start
clrf swStat
clrf PORTC
bsf STATUS,RP0 ; select bank 1
bsf TRISA,3
clrf TRISC ; set all Port C output
bcf STATUS,RP0 ; back to bank 0
Released
bsf swStat,0
movf swStat,w
movwf PORTC
clrf counter
ReleasLoop
btfss PORTA,3 ; if pressed
goto $-2 ; clear counter if not pressed
incf counter ; increment counter
movlw 0x05 ; compare to 5
subwf counter,w
btfsc STATUS,Z
goto Pressed
goto Delay
Pressed
bcf swStat,0
movf swStat,w
movwf PORTC
clrf counter
PressLoop
btfsc PORTA,3
goto $-2
incf counter
movlw 0x05
subwf counter,w
btfsc STATUS,Z
goto Released
goto Delay
Delay
movlw 0x07
movwf delayCount1
DelayLoop
decfsz delayCount2
goto DelayLoop
decfsz delayCount1
goto DelayLoop
btfsc swStat,0
goto ReleasLoop
goto PressLoop
END