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