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

Prośba o sprawdzenie kodu w assemblerze AVR do generowania BCD na wyjściu

ewsd75 28 Gru 2006 12:53 2095 3
REKLAMA
  • #1 3378144
    ewsd75
    Poziom 13  
    Posty: 90
    Ocena: 20
    Witam rozpoczołem pierwsze kroki w pisaniu programów w assamblerze. Jako pierwszy programik napiasłem skrypt do generowania kodu BCD na wyjściu procesora. Jeśli ktoś może zobaczyć czy program jest napisany prawidłowo to będę wdzięczny. Konkretnie interesuje mnie czy tak to powinno być pisane czy są jakieś błędy. Jeśli tak to poproszę o info co jest źle

    .include "2313def.inc"
    .def acc1= r16
    .def acc2= r12
    .cseg
    .org 0x00

    rjmp reset


    reset:
    cli
    ldi acc1,LOW(RAMEND)
    out SPL,acc1

    clr acc1

    loop:

    ldi acc1,0x00
    inc acc1
    out portb,acc1
    out ddrb,acc1
    inc acc1
    out portb,acc1
    out ddrb,acc1
    inc acc1
    out portb,acc1
    out ddrb,acc1
    inc acc1
    out portb,acc1
    out ddrb,acc1
    inc acc1
    out portb,acc1
    out ddrb,acc1
    inc acc1
    out portb,acc1
    out ddrb,acc1
    inc acc1
    out portb,acc1
    out ddrb,acc1
    inc acc1
    out portb,acc1
    out ddrb,acc1
    inc acc1
    out portb,acc1
    out ddrb,acc1
    inc acc1
    out portb,acc1
    out ddrb,acc1

    rjmp loop

    .exit
  • REKLAMA
  • #2 3378310
    Klima
    Poziom 31  
    Posty: 1535
    Pomógł: 112
    Ocena: 180
    ewsd75 napisał:
    Witam rozpoczołem pierwsze kroki w pisaniu programów w assamblerze. Jako pierwszy programik napiasłem skrypt do generowania kodu BCD na wyjściu procesora. Jeśli ktoś może zobaczyć czy program jest napisany prawidłowo to będę wdzięczny. Konkretnie interesuje mnie czy tak to powinno być pisane czy są jakieś błędy. Jeśli tak to poproszę o info co jest źle
    
    .include "2313def.inc"
    .def acc1= r16
    .def acc2= r12
    .cseg
    .org 0x00
    
      rjmp  reset
    
      
      reset:
           cli    
           ldi acc1,LOW(RAMEND)  
           out SPL,acc1 
    
         clr acc1
    
    loop:
    
       ldi acc1,0x00
       inc acc1  
       out portb,acc1 
       out ddrb,acc1  
       inc acc1   
       out portb,acc1 
       out ddrb,acc1  
       inc acc1    
       out portb,acc1 
       out ddrb,acc1  
       inc acc1    
       out portb,acc1
       out ddrb,acc1
       inc acc1    
       out portb,acc1
       out ddrb,acc1  
       inc acc1  
       out portb,acc1
       out ddrb,acc1  
       inc acc1    
       out portb,acc1
       out ddrb,acc1
       inc acc1   
       out portb,acc1 
       out ddrb,acc1 
       inc acc1   
       out portb,acc1
       out ddrb,acc1  
       inc acc1
       out portb,acc1
       out ddrb,acc1
       
    rjmp loop 
    
    .exit


    No a co na to asembler? I symulator? W AVR Studio jest coś takiego, dla takich prostych rzeczy powinno wystarczyć.
    Chyba o jeden raz za dużo w tej pętli zmieniasz acc1 - ostatnia wartość to 10, a zatem 1010 w binarnym - to nie jest BCD, natomiast zero, którego nie dajesz na wyjście, jest poprawną wartością BCD.
    I jeszcze jedno - czy nie możesz po prostu ustawić DDRB na początku, a nie za każdym razem?
  • REKLAMA
  • #3 3403984
    ImPuLs
    Poziom 23  
    Posty: 568
    Pomógł: 64
    Ocena: 36
    Wg mnie przydałaby się jakaś pętla opóźniająca bo efektów pracy tego programu na procesorze chyba nie zauważysz.
    Chyba że analizator stanów logicznych podłączysz.
REKLAMA