Untitled
unknown
plain_text
2 years ago
2.2 kB
6
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...