Stap 5: PIC 12F508 geannoteerde broncode; Als iemand een probleem monteren heeft zoals gepost, gelieve te becommentariëren
lijst van p = 12F508; lijst richtlijn processor definiëren
#include; specifieke variabele definities van processor
__CONFIG _MCLRE_OFF, _CP_ON, _WDT_OFF & _IntRC_OSC
; '__CONFIG' richtlijn wordt gebruikt om configuratie word binnen .CATPart bestand insluiten.
; De lables na de richtlijn bevinden zich in de respectieve Inc-bestand.
; Zie de respectieve data sheet voor meer informatie over configuratie word.
; *** VARIABELE DEFINITIES
cblock 07h
qw1
qw2
Temp
test
teller
counter2
on_counter
off_counter
endc
; PINOUT
; pin 1 is macht
; pin 8 is grond
; pin 5 is niet aangesloten
knop equ 3; pin 4, naar de knop. interne pullup is ingesteld
uitgang equ 4; pin 3, aan de P-FET; Er is geen interne pullup op deze pin.
Ik moet heb een fysieke pullup op de P-FET-poort,
; in het geval de PIC moesten brownout of anders storing.
LED equ 1; pin 6, Hallo = aan, Lo = off
LBI equ 5; pin 2, lage batterij indicator output van de LT1308 gaat hier.
Als u de biasing weerstanden op 825K en 67K instelt
; het setpoint is 2.9V. Zie LT1308 gegevensblad voor de details.
; deze pin ook beschikt niet over een interne pullup. Ik herinner me om dit op de pcb. :)
;**********************************************************************
ORG 0X3FF; Processor resetten vector
; Interne RC kalibratie waarde wordt door Microchip geplaatst op de locatie 0x3FF
; Als een movlw k, waar de k een letterlijke waarde.
ORG 0X000; codering begint hier
movwf OSCCAL; Update inschrijven bij fabriek cal waarde
initialiseren
movlw b "00000000"
; 7:lo_enable wakker; 6:lo_enable zwak pullups; 5:lo_timer klokbron is interne
; 4:hi_timer klokbron ingeschakeld op dalende rand; 3:lo_prescaler Selecteer timer (vs WDT)
2-0:prescaler (p22)
optie
Start
oproep duidelijk; instellen tristate en output van I/O pinnen naar standaard/OFF staat
btfss GPIO, knop; status van de knop controleren
goto op; als ingedrukt, goto op
slaap; zoniet, goto slaap
NOP
Op
BSF GPIO, LED, LED inschakelen
BCF GPIO, uitgang; P-FET inschakelen
Bel DD; vertraging Debounce
btfss GPIO, knop; knopstatus controleren
goto $-1; wachten tot het wordt vrijgegeven voordat u verdergaat met de hoofdlus
oproep DD
lus
btfss GPIO, LBI; deze controles de lage batterij-Indicator
goto LB_shutdown; als laag, trok vervolgens goto lage batterij afsluiten
btfsc GPIO, knop; zo lang als de knop niet is ingedrukt, de PIC blijft in "lus".
goto lus
afsluiten; als de knop is ingedrukt, alles uitgeschakeld wordt en de PIC gaat slapen.
; Dit apparaat begint aan het begin van de code als het wakker, FYI
Bel duidelijk zijn;
oproep DD
btfss GPIO, knop
goto $-1
oproep DD
slaap
NOP
; Subroutines;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
wissen
movlw b '101000'
Tris GPIO
movlw b "010000"
movwf GPIO
keren; dit apparaat hoeft eigenlijk niet een "terugkeer" commando.
; Dit is een pseudo-opdracht, die is eigenlijk samengesteld als de opdracht "retlw 0".
; Plaatst die gewoon betekent dat het letterlijke 0 in de W-accumulator wanneer knalt.
DD
movlw.100
movwf qw2
goto dsub.2
DSUB.2
decfsz qw1
goto $-1
decfsz qw2
goto $-3
terugkeer
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LB_shutdown; Dit is de afsluitprocedure fancy-broek
LB.1
clrf teller
LB.2
btfss GPIO, LBI
goto LB.3
BSF GPIO, LED
goto lus
LB.3
goto $+ 1; slechts enkele extra vertraging
goto $+ 1
goto $+ 1
goto $+ 1
goto $+ 1
goto $+ 1
goto $+ 1
goto $+ 1
decfsz teller, f
goto $+ 2
goto shutdown_kewl
movf teller, w
movwf qw2
movlw b "000010"
xorwf GPIO, f
oproep DLB
movwf temp
decfsz temp, f
goto LB.2
goto afsluiten
DLB; vertraging batterij Routine
btfss GPIO, knop; constant controleren van de status van de knop
retlw.1; als deze wordt ingedrukt, dan onmiddellijk pop met letterlijke.1 in de accumulator,
; zodat we dat weten de knop
; werd ingedrukt en de vertraging was weggegaan vroeg... dus we annuleertekenzwenking vandoor
; de macht in plaats van voortzetting van de fancy pants BLINKIE licht afsluiten routine.
goto $+ 1
decfsz qw1
goto DLB
decfsz qw2
goto DLB
retlw.0
shutdown_kewl; fade-out van de LED, in plaats van enkel het uitschakelen
clrf on_counter
movlw.1
movwf off_counter
shutdown_kewl.1
BSF GPIO, LED
oproep on_delay
BCF GPIO, LED
oproep off_delay
INCF off_counter, f
decfsz on_counter, f
goto shutdown_kewl.1
goto afsluiten
on_delay
movf on_counter, w
movwf qw2
goto vervagen
off_delay
movf off_counter, w
movwf qw2
goto vervagen
vervagen
goto $+ 1
goto $+ 1
goto $+ 1
goto $+ 1
goto $+ 1
goto $+ 1
goto $+ 1
goto $+ 1
goto $+ 1
goto $+ 1
goto $+ 1
goto $+ 1
goto $+ 1
goto $+ 1
goto $+ 1
goto $+ 1
goto $+ 1
goto $+ 1
goto $+ 1
goto $+ 1
goto $+ 1
goto $+ 1
goto $+ 1
goto $+ 1
decfsz qw2, f
goto vervagen
terugkeer
EINDE; richtlijn 'end of programma'