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

[ASM][TIMER1] Dziwnie działa na początku, potem normalnie

11111olo 03 Paź 2009 15:38 1073 2
REKLAMA
  • #1 7086153
    11111olo
    Poziom 42  
    Witam
    Zacząłem sprawdzać przerwanie TIMER1 w trybie przepełnienia. Na symulatorze program normalnie działa jednak w rzeczywistości inaczej.
    .include "m8def.inc"
    
    .equ przyciski = portc
    .equ in_przyciski = ddrc
    .equ wyjscie1 = portb
    .equ out_wyjscie1 = ddrb
    .equ wyjscie2 = portd
    .equ out_wyjscie2 = ddrd
    .equ wys0 = portd0
    .equ wys1 = portd1
    .equ vol0 = portd2
    .equ vol1 = portd3
    .equ bass0 = portd4
    .equ bass1 = portd5
    
    
    .cseg
    .org 0
    rjmp reset
    
    .org OVF1addr 
    rjmp przerwanie
    
    reset:
    ldi r17,high(ramend)
    ldi r16,low(ramend)
    out sph,r17
    out spl,r16
    
    ;ldi r16,0
    ;out in_przyciski , r16
    ldi r16,255
    out out_wyjscie1 , r16
    ;out out_wyjscie2 , r16
    ;out przyciski , r16
    
    in r16,tccr1a
    cbr r16,1<<wgm11
    cbr r16,1<<wgm10
    out tccr1a,r16
    cbr r16,1<<wgm13
    cbr r16,1<<wgm12
    out tccr1b,r16
    ldi r16,(1<<cs12) |(0<<cs11) |(0<<cs10);prescale 256
    out tccr1b,r16
    
    ldi r16,(1<<toie1) ;wl timera1
    out timsk,r16
    ;ldi r17,high(65500)
    ;ldi r16,low(65500)
    sei
    ldi r20,255
    ldi r21,64
    out wyjscie1,r21
    petla:
    
    rjmp petla
    
    przerwanie:
    cli                   ;timer=63000
    ldi r17,high(63000)
    ldi r16,low(63000)
    out tcnt1l,r16
    out tcnt1h,r17
    sei
    
    eor r21,r20
    out wyjscie1,r21
    reti


    Zadaniem programu jest cykliczne zmienianie pinu B6 i pozostałych linii portu B na przeciwny w odstępach wyznaczanych przez przerwanie. I tak się dzieje. Jednak na początku bardzo długo panuje stan wysoki na PD6 - zanim przerwanie nie zaskoczy ;) Po tym PD6 zmienia stan na niski i pozostałe linie portu B są w stanie wysokim. I to trwa znowu bardzo długo. Jak znowu PD6 ma stan wysoki to program działa tak jak chcę czyli zmiana następuje co kilkaset ms.

    Proszę o pomoc.
  • REKLAMA
  • Pomocny post
    #2 7086202
    Konto nie istnieje
    Poziom 1  
  • #3 7086256
    11111olo
    Poziom 42  
    Dzięki za pomoc.
    Teraz działa.
    A tam chodziło mi o port B6 jak zauważyłeś.
REKLAMA