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

[ATMEGA8][ASM] programowe PWM, prośba o ocenę

Shanleaf 05 Sty 2009 18:41 1507 2
REKLAMA
  • #1 5954637
    Shanleaf
    Poziom 17  
    Witam. Zainteresował mnie niedawno temat mikrokontrolerów, postanowiłem zacząć naukę programowania. Wybór padł na rodzinę AVR (ze względu na popularność). Na forum wiele osób polecało na początek Assemblera, tak też wybrałem. Przedstawiam jeden z moich pierwszych programów, jest to programowo zrealizowane "dwukanałowe", 8-bitowe PWM. Proszę o ocenę tego programu, krytykę, oraz porady na przyszłość. Każda sugestia będzie bardzo mile widziana :)

    
    .nolist
    .include "m8def.inc"
    .list
    
    .def red = R16 ;PD0
    .def green = R17 ;PD1
    .def pomocniczy = R18
    .def licz = R19 ;licznik PWM
    
     RJMP main
    
    
    niskiR:
     CBI PORTD,0
     RJMP dalej2
    
    niskiG:
     CBI PORTD,1
     RJMP dalej3
    
    
    main:
     LDI red,0b01111111 ;współczynnik wypełnienia PWM, PORTD.0
     LDI green,0b01000000 ;współczynnik wypełnienia PWM, PORTD.1
     LDI pomocniczy,0xFF
     OUT DDRD,pomocniczy
     LDI pomocniczy,HIGH(RAMEND)
     OUT SPH,pomocniczy
     LDI pomocniczy,LOW(RAMEND)
     OUT SPL,pomocniczy
     LDI pomocniczy,0xFF
     
    petla:
     OUT PORTD,pomocniczy
    
    czas:
     INC licz
     CP licz,red
     BREQ niskiR
    dalej2:
     cp licz,green
     BREQ niskiG
    dalej3:
     CPI licz,255
     BREQ petla
     RJMP czas
    
    
  • REKLAMA
  • Pomocny post
    #2 5954707
    ZbeeGin
    Poziom 39  
    1. Eliminacja niepotrzebnych skoków tu i tam. Da się to zrobić inaczej - patrz CPSE, SBIC, SBIS.
    2. Brak podstawy czasu - impulsy nie będą zawsze równe w czasie. Użycie licznika bardzo wskazane.
    3. Brak synchronizacji zmiany stanów na portach - możliwe przesunięcia fazowe.
    4. Skąpe komentarze. Za dwa dni nie będziesz wiedział co, jak i dlaczego tak.
  • #3 5955063
    marenc
    Poziom 24  
    Ad. 2 - użycie licznika nie jest konieczne, ale jest najprostszą formą rozwiązania problemu. Dobrze napisany i policzony kod w ASM może działać równo i optymalnie ... powodzenia ;)
REKLAMA