Untitled
unknown
plain_text
3 years ago
2.2 kB
8
Indexable
; Program włącza diody w kolejności 3, 2, 1 co 10 ms, wykorzystując
; moduł Timer2, tablice i rezonator kwarcowy o częstotliwości 4 MHz.
list C=160, N=80, ST=OFF, MM=OFF
#include "P16F74.INC"
__config ( _CP_OFF & _PWRTE_ON & _XT_OSC & _WDT_OFF & _BODEN_OFF )
errorlevel -302
Freq equ 4
Bank0RAM equ H'20'
MaksLicz equ 5 ; liczba pętli wymaganych dla czasu 10 ms.
Dioda3 equ B'00000001'
cblock Bank0RAM
W_TEMP
STATUS_TEMP
SKALER
LICZPETLE
endc
org H'000'
goto ProgramGlowny
org H'004'
goto ProcObsPrzerwan
TablicaPrzelacz
movf PORTD, W
andlw B'00000111'
addwf PCL, F
retlw B'00000001'
retlw B'00000011'
retlw B'00000110'
retlw B'00000010'
retlw B'00000101'
retlw B'00000100'
retlw B'00000111'
retlw B'00000110'
ProgramGlowny
call Inicjalizacja
PetlaGlowna
call Przelacz
call Opoznienie
goto PetlaGlowna
Inicjalizacja
movlw MaksLicz
movwf LICZPETLE
movlw Dioda3
movwf PORTD
movlw (4*Freq) - 3
movwf T2CON
movlw 2 ; Wart. pocz. zmiennej SKALER zmieniona na 2, bo teraz potrzebujemy 10 ms.
movwf SKALER
bsf INTCON, PEIE
bsf STATUS, RP0
clrf TRISD
movlw 124 ; Inicjalizacja rejestru PR2 (124 -> PR2), główny skaler ma wartość 125
movwf PR2
bsf PIE1, TMR2IE
bcf STATUS, RP0
bsf INTCON, GIE
return
Przelacz
decfsz LICZPETLE, F
goto PrzelaczKoniec
movlw MaksLicz
movwf LICZPETLE
call TablicaPrzelacz
xorwf PORTD, F
PrzelaczKoniec
return
Opoznienie
btfss SKALER, 7
goto Opoznienie
movlw 2
addwf SKALER, F
return
ProcObsPrzerwan
movwf W_TEMP
swapf STATUS, W
assembly
movwf STATUS_TEMP
btfsc PIR1, TMR2IF
call Timer2
swapf STATUS_TEMP, W
movwf STATUS
swapf W_TEMP, F
swapf W_TEMP, W
retfie
Timer2
bcf PIR1, TMR2IF
decf SKALER, F
return
end
Editor is loading...