Skissar lite på ett program till en 16F628A, och då behöver jag en någorlunda exakt delay-funktion.
Problemet är att alla timers är upptagna redan...
Däremot så har jag massor med dödtid för just denna funktion, så då passar det ju sig med en mjukvarulösning.
Så jag skrev ett program i C och lät kompilatorn (CC5X) skapa en ASM-fil.
Tanken är att man lägger ett värde i timer-variabeln och sedan får man en fördröjning på ett antal uS.
Sedan tänds RB3 och förblir tänd i evighet.
Jag använder den interna 4MHz oscillatorn, vilket gör att en instruktion blir ca 1 uS
Kod: Markera allt
; C compiler for the PICmicro family
; ************ 24. Dec 2008 13:15 *************
processor 16F628
radix DEC
__config 0x3F10
PORTA EQU 5
TRISA EQU 133
PORTB EQU 6
TRISB EQU 134
RP0 EQU 5
RP1 EQU 6
CMCON EQU 31
timer EQU 32
GOTO main
main
BCF 3,RP0
BCF 3,RP1
CLRF CMCON
BSF 3,RP0
CLRF TRISB
CLRF TRISA
BCF 3,RP0
CLRF PORTA
CLRF PORTB
MOVLW .100
MOVWF timer
m001
BCF 3,RP0 //1 uS
BCF 3,RP1 //1 uS
DECFSZ timer,1 //1 uS
GOTO m001 //2 uS
BSF PORTB,3
m002 GOTO m002
END
Kod: Markera allt
Fördröjning = (timer * 5) + 2