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

[ASM]Dane z zewnętrznego pliku.

gamgee1 23 Gru 2008 22:13 1322 6
  • #1 5896661
    gamgee1
    Poziom 11  
    Mam taki problem:
    Chce, aby program wczytywał mi liczby, z zewnętrznego pliku. Stworzyłem plik i umieściłem go w tym samym folderze, co program. Wzorowałem się na programie z pracowni, który również korzystał z pliku, w którym miał masę liczb i przetwarzał to potem na dźwięk..... ale to inna bajka....
    Napisałem prosty programik, którym chciałem sprawdzić, czy uda mi się wyciągnąć te liczby z pliku i kiedy chcę go asemblować, wyskakuje mi, że nie możne go znaleźć.

    Mój program
    
    .include "m16def.inc"
    
    
    ldi r16, low(ramend)              
    out spl, r16
    
    ldi r16, high(ramend)             
    out sph, r16
    
    
    ldi zl, low(plik<<1)
    ldi zh, high(plik<<1)
    
    ldi r16, 0xff
    out ddrb, r16
    
    
    main:
    
    lpm r0, z+
    
    out portb, r0     ;przykładowe zastosowanie
    
    stop:
    rjmp stop
    
    
    plik: .db .include "lik.txt"
    plik_end:
    


    Czy ktoś wie czego tu jeszcze brakuje ?


    Proszę zapoznać sie z regulaminem i zasadami pisania postów na tym forum.
    Poprawiłem treść wiadomości - regulamin p.15,
    dodałem znaczniki [code],
    poprawiłem tytuł - regulamin p.11
    [zumek]
  • #2 5897104
    mirekk36
    Poziom 42  
    Bo coś pokręciłeś z includowaniem na maxa.
    Jak chcesz inkludować jakiś plik (np swoją bibliotekę) to piszesz:

    .INCLUDE "I2C.ASM"

    podobnie z plikiem danych. Czyli .INCLUDE a po tym nazwa pliku w cudzysłowiach i nie inaczej

    natomiast w includowanym pliku możesz sobie podać dyrektywy typu .DB i tu liczby
  • #3 5901464
    gamgee1
    Poziom 11  
    No dobra ale w programie o którym wspomniałem jest to zrobione identycznie i w pliku w "...." jest zapisany spory ciąg liczb oddzielonych przecinkami (tak jak bym to zrobił przez .db 23, 12, 54.......) Zrobiłem dokładnie tak samo i u mnie nie działa. A zależny mi na tym zeby nie wklepywac ciągu liczb w program tylko do pliku
  • #4 5901712
    zumek
    Poziom 39  
    gamgee1 napisał:
    No dobra ale w programie o którym wspomniałem jest to zrobione identycznie ...

    A możesz nam zdradzić, jakiego środowiska/kompilatora używasz :?:
    Czy dane, w tym nieszczęsnym pliku tekstowym, są rozdzielone znakami końca wiersza :?:

    Piotrek
  • #5 5910446
    gamgee1
    Poziom 11  
    Używam AVR Studio a w pliku jest zamieszczony ciąg liczb oddzielonych przecinkami. Bez zaznaczonego początku i końca ciągu.

    To jest wycinek tego ciągu który znajduje się w pliku "alleluja.txt":
    127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
    zaczyna się od liczby a kończy na przecinku.

    Zamieszczam też program który działa i wykorzystuje liczby z tego ciągu i przerabia je potem na dźwięk. Próbowałem skopiować to rozwiązanie ale mi nie działa. Opisałem wszystko wyżej
    
    .include "m16def.inc"
    
    jmp start
    
    .org OVF0addr
    jmp ovf0sub
    
    start:
    
    ldi r16, low(ramend)
    out spl, r16
    
    ldi r16, high(ramend)
    out sph, r16
    
    sbi ddrb, 3
    
    ldi zl, low(sound<<1)
    ldi zh, high(sound<<1)
    
    lpm r0, z+
    out ocr0, r0
    
    ldi r16,0x69
    out tccr0, r16
    
    in r16, timsk
    ori r16, 1
    out timsk, r16
    
    sei
    
    ldi r16, 8
    
    main:
    
    rjmp main
    
    ovf0sub:
    
    dec r16
    breq setr16newval
    reti
    
    setr16newval:
    
    ldi r16, 8
    
    lpm r0, z+
    out ocr0, r0
    
    cpi zl, low(sound_end<<1)
    brne ovf0syb_end
    cpi zh, high(sound_end<<1) 
    brne ovf0syb_end
    
    ldi zl, low(sound<<1)
    ldi zh, high(sound<<1)
    
    ovf0syb_end:
    reti
    
    sound: .db .include "alleluja.txt"
    sound_end:
    



    Tylko proszę nie rozpisujcie się na temat tego programu. Chodzi mi wyłącznie o to jak zostały przeniesione dane z pliku do procesora i dlaczego mój nie chce działać.
    Dodam jeszcze że plik musi znajdować się w tym samym miejscu gdzie program.
  • #6 5910784
    mirekk36
    Poziom 42  
    Wiesz co? ja normalnie zrobiłbym wcześniej na twoim miejscu tak:

    sound:
    .include "alleluja.txt"


    a w pliku alleluja dodałbym "ręcznie" na początku przed liczbami dyrektywę .db - o tak:

    .db 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126


    ..... ale zdziwiłem się, że jednak taka konstrukcja też działa jak piszesz tyle, że

    sound: .db .include "alleluja.txt" 


    musi być w jednej linii kodu po pierwsze a po drugie - na końcu tych liczb nie może być przecinek - bo inaczej wywala mi błąd. Na końcu liczb powinien kończyć się plik albo powinien być znak końca linii i ew kolejna linia danych. Wtedy wszystko ładnie działa.

    Ale tak coś mi się wydaje, że powinieneś usunąć ten przecinek na końcu a jeśli nadal będzie ci pokazywał się komunikat, że nie może znaleźć tego pliku to sprawdź czy przypadkiem w jego nazwie nie ma spacji albo polskich literek "ogonków"
REKLAMA