Poniższy program dla wersji ATMega32 usiłuję przerobić na wersję dla ATMega644p /która posiadam/. Program ma za pomocą przerwań realizować opóźnienia. Niestety robi się to wszystko skomplikowane ponieważ jak wiadomo szczególnie system przerwań i timerów jest dużo bardzie rozbudowany niż na niższych modelach procesorów. Jeśli ktoś jest w stanie mi pomóc to proszę o radę. Poniżej kod programu:
Oczywiście nagłowek pliku zmieniam pod mój procesor czyli:
.include "m32def.inc" ;dołączenie pliku z definicjami rejestrów
.def Temp = R16 ;przyporządkowanie rejestrowi R16 wartości Temp
.org 0x00
rjmp reset ;wektor przerwan od resetu
.org 0x016
rjmp Timer0 ; skok do programu obslugi przerwania od przepełnienia licznika timer0
Reset:
ldi Temp, 0x01 ;załadowanie do r16 wartości 1
out TCNT0, Temp ;wpisanie do rejestru TCNT0 wartości 1
ldi Temp,0x05 ;załadowanie do r16 wartości 5
out TCCR0,Temp ;wpisanie do rejestru TCCR0 wartości 5 - konfiguracja licznika
ldi Temp,0x01 ;załadowanie do r16 wartości 1
out TIFR,Temp ;wpisanie do rejestru TIFR wartości 1 - Flaga przepełnienia licznika
ldi Temp,0x01 ;załadowanie do r16 wartości 1
out TIMSK,Temp ;wpisanie do rejestru TIMSK wartości 1 - uaktywnienie przerwania po przepełnieniu licznika
sei ;globalne odblokowanie przerwań
ldi Temp, LOW(RAMEND) ;inicjacja stosu
out SPL, Temp
ldi Temp, HIGH(RAMEND)
out SPH, Temp
ldi Temp,0xff ;załadowanie do r16 wartości 1
out DDRD,Temp ; załadowanie do rejestru kierunku portu D wartości z rejestru 16
Petla:
rjmp Petla ;pusta pętla
Timer0: ;procedura wykonywana po przepełnieniu się licznika
ldi Temp,0x01 ;załadowanie do r16 wartości 1
out TIFR,Temp ;wpisanie do rejestru TIFR wartości 1 - Flaga przepełnienia licznika
brbc 1,Ustaw ;jeśli flaga zera w SREG jest wyzerowana następuje skok do Ustaw
brbs 1,Zeruj ;jeśli flaga zera w SREG jest ustawiona następuje skok do Zeruj
Ustaw:
bset 1 ;ustaw flagę zera w SREG
sbi PORTD,0 ; ustawienie 0 bitu w rejestrze PORTD (zapalenie diody)
rjmp Wyjdz ;skok do procedury wyjścia z przerwania
Zeruj:
bclr 1 ;zeruj flagę zera w SREG
cbi PORTD,0 ; zeruj bit - zgaszenie diody
Wyjdz: ;procedura wyjścia z przerwania
reti
Oczywiście nagłowek pliku zmieniam pod mój procesor czyli:
include "m644pdef.inc"