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

ADUC845: Wyświetlanie zawartości rejestru na LCD w asm - jak to zrobić?

zeniuzeniu 26 Wrz 2016 12:26 3621 13
  • #1 15955432
    zeniuzeniu
    Poziom 11  
    Witam
    Potrzebuje pomocy w dokończeniu programu w asm.
    Programik steruje mi pracą falownika i ma na wyświetlaczu lcd wyświetlać ile przejazdów zostało do końca pracy.
    Wszystko działa tylko problem z wyświetleniem zawartości rejestru na wyświetlaczu.
    Proszę o pomoc.
  • #2 15956382
    Artur k.
    VIP Zasłużony dla elektroda
    A jak Ci pomóc, skoro nie zamieściłeś nawet kawałka kodu?
    Skąd my mamy wiedzieć po pierwsze jaki wyświetlacz, po drugie jaką procedurę zastosowałeś do jego obsługi i po trzecie co ma być wyświetlanie i w jakiej postaci?
  • #3 15957216
    zeniuzeniu
    Poziom 11  
    Witam
    Wyświetlacz LCD 2x16 HY-1602F6.
    Chciałbym wyświetlić liczbę w postaci dziesiętnej odpowiadająca wartości rejestru (w moim przypadku R1).
    Wyświetlanie tekstu mi działa prawidłowo.

    Kod: x86 Assembly
    Zaloguj się, aby zobaczyć kod
  • #4 15961611
    zeniuzeniu
    Poziom 11  
    Witam
    Czy jest możliwość stworzenia podprogramu w asemblerze (np. Procedury inicjalizacji i wyświetlania na lcd) i umieszczenie go w części pamięci programu (w aduc845 62kB) zamiast w programie głównym by zwolnić miejsce w części codu
  • #5 15961633
    Artur k.
    VIP Zasłużony dla elektroda
    Nie bardzo rozumiem co chcesz w ten sposób osiągnąć. Przecież kod to kod, jaki by nie był, zostanie umieszczony w pamięci programu. Tworzysz procedurę i wywołujesz ją w programie głównym w zależności od potrzeb.
  • Pomocny post
    #6 15961637
    conan02

    Poziom 30  
    Masz tutaj konwerter BIN2ASCII:

    PUSH ACC
    PUSH B
    MOV A,R1
    MOV B,#100
    DIV a,b
    ADD A,#30h ; Setki
    MOV <var100>,A
    MOV A,B
    MOV B,#10
    DIV A,B
    ADD A,#30h ; dziesiątki
    MOV <var10>,A
    MOV A,B
    ADD A,#30h ; jedności
    MOV <var1>,A
    POP B
    POP ACC
    RET

    Napisane na poczekaniu, powinno działać. Za var100, var10 i var1 podstaw rejestry docelowe na dane znakowe, które mają być wyświetlone.
    Resztę już masz.
  • #7 15961668
    zeniuzeniu
    Poziom 11  
    piszę program w uVision3 i program mi w takim razie blokuje napisanie programu większego niż 2k.
    W jakim inny program nie ma takiego ograniczenia albo jak ten odblokować?
  • Pomocny post
    #8 15961683
    conan02

    Poziom 30  
    Sciąg sobie coś takiego: AT89LP Developer Studio. Używam tego do MCS51, i LP51.
    ADUC niczym się nie różni poza rdzeniem jednotaktowym (zamiast 6 jak w standardzie MCS51). Po prostu jest szybszy, od strony programowej jest to samo. Dodatkowe peryferia można dołożyć w includach.

    EDIT:
    Pamięć kodu zawiera zarówno program główny jak i podprogramy. Tego nie przeskoczysz.
  • #10 15961725
    zeniuzeniu
    Poziom 11  
    Sciągnełem uVision 4 z chomikuj.pl pełna wersja :)
  • #11 15971758
    zeniuzeniu
    Poziom 11  
    Witam.
    Chciałbym zawartość rejestru zapisać w pamięci tak aby po wyłączeniu zasilania i ponownym włączeniu mógł z kolei ją ponownie wczytać.
    Jak narazie udało mi się zapisać że po resecie jeszcze zawartość jest ale nie po wylaczeniu.

    ZAW_REJ DATA 30H

    MOV R1, #5
    MOV ZAW_REJ, R1
    MOV R1, ZAW_REJ
  • #12 15971968
    conan02

    Poziom 30  
    Reset nie kasuje danych w pamięci DATA i XDATA, wyłączenie inicjuje rejestry specjalne i pozostawia resztę pamięci w stanie nieokreślonym.
    Zapoznaj się z datasheetem tego procesora i użyj wbudowanej pamięci danych EEPROM.
    Można ją dowolnie programować przez użycie odpowiednich rejestrów specjalnych.
  • #13 15992158
    zeniuzeniu
    Poziom 11  
    Witam
    Proszę o podpowiedź czy dobrze wykonuje zapis i odczyt z pamięci flash

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #14 16000210
    conan02

    Poziom 30  
    Może być, tylko przed zapisem skasuj stronę. Nie robi tego z automatu.
    Poza tym szybciej będzie użyć całej strony i jednego bajtu z następnej.
    Nie musisz modyfikować jednego bajtu na stronie więc kombinacje typu odczyt/mod/zapis cię ominą - jeśli zawsze zapisujesz cały zestaw.
REKLAMA