Postat: 27 maj 2005, 20:31:44
Skrev en interruptbaserad kodsnutt som jag tycker är lite smidigare än att använd en massa loopar. Håll till godo. 

Kod: Markera allt
#include <p16F84A.inc> ; processor specific variable definitions
cblock 0x10
W_TEMP
STATUS_TEMP
LSByte
MIDbyte
MSByte
endc
org 0x00
goto start
org 0x04
;interruprutin
PUSH MOVWF W_TEMP ; Copy W to TEMP register,
SWAPF STATUS, W ; Swap status to be saved into W
MOVWF STATUS_TEMP ; Save status to STATUS_TEMP register
;öka värde av 24bitreg med ett
incfsz LSByte,f
goto POP
incfsz MIDbyte,f
goto POP
incfsz MSByte,f
goto POP
nop ;nu har det gått en minut
;60s = 60000000 instruktioner vid osc. 4mhz
;interrupt var 256:e instruktion. 60000000/256 = 234375
;234375 = hex 39387
;FFFFFFh - 39387h =FC6C79h
;värdet FC6C79h stoppas i ett 24bitarsregister bestående av LSByte,MIDbyte och MSByte
movlw 0x79
movwf LSByte
movlw 0x6c
movwf MIDbyte
movlw 0xfc
movwf MSByte
POP SWAPF STATUS_TEMP,W
MOVWF STATUS
SWAPF W_TEMP,F
bcf INTCON,T0IF
retfie ;återgå till huvudloop
start movlw 0x79
movwf LSByte
movlw 0x6c
movwf MIDbyte
movlw 0xfc
movwf MSByte
bsf INTCON,GIE ;tillåt interrupt
bsf INTCON,T0IE ;tillåt interrupt från timer0
bsf STATUS,RP0 ;gå till BANK1
movlw b'00001000'
movwf OPTION_REG ;koppla prescalern till WDT
bcf STATUS,RP0 ;återgå till BANK0
;timer0 kommer nu att generera ett interrupt var 256:e instruktion
loop goto loop
end