logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[AVR ATMega644p][asm/AVR Studio] Obsługa przerwań

TatOR 16 Mar 2010 16:30 1398 0
REKLAMA
  • #1 7837879
    TatOR
    Poziom 2  
    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:
    .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" 
  • REKLAMA
REKLAMA