Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

MSP430FG4618 asembler IARv4 wyświetlanie LCD, tryb 4mux

stargate12 16 Mar 2009 01:34 2331 8
  • #1 16 Mar 2009 01:34
    stargate12
    Poziom 8  

    Dzień dobry!
    Mam mały problem który pewnie wyda się banalny, jednak już sporo czasu nad tym siedzę:

    Code:

    a EQU 080h
    b EQU 040h
    c EQU 020h
    d EQU 001h
    e EQU 002h
    f EQU 008h
    g EQU 004h
    h EQU 010h

    MOV.B Table(/*Rx*/),0x90
    ;W manualu przykład wygląda mniej więcej tak, nie działa powyższa instrukcja choć już wielu rzeczy próbowałem...
    ;podejrzewam że to 0x90 to adres rejestru kontrolera LCD (sam to wstawiłem). Pozostaje ten tajemniczy Rx, jaki powinien ;to być rejestr?

    Table DB a+b+c+d+e+f
    DB b+c
    DB b+c+d+e+g
    DB a+d+e+f+g
    DB a+e+f+g


    Z góry dziękuję za pomoc,
    pozdrawiam!

    0 8
  • #2 16 Mar 2009 07:32
    Freddie Chopin
    Specjalista - Mikrokontrolery

    stargate12 napisał:
    jaki powinien ;to być rejestr?

    jeden z szesnastu (no dobra, moze poza PC, SP i SR, czyli jeden z trzynastu)

    4\/3!!

    0
  • #3 16 Mar 2009 14:33
    stargate12
    Poziom 8  

    Próbowałem - po którymś kroku występuje warning i wszystko jest przerywane - 'word access pod adresem jakimś tam' - mniej więcej coś takiego. Czy wogóle trzeba i jest wolno na siłę ustawiać ten rejestr np. R4 jako np. 01111101B? trzy pierwsze bity odpowiadają za konfigurację pinów próbowałem wszystkich opcji no i nic:)

    0
  • #4 16 Mar 2009 14:58
    Freddie Chopin
    Specjalista - Mikrokontrolery

    wrzucasz jakis kawalek kodu i oczekujesz odpowiedzi, dlaczego caly program sie wywala? proste - jest zle napisany. wiec nie jestem w stanie powiedzeic na podstawie informacji ktore dales

    4\/3!!

    0
  • #5 16 Mar 2009 15:48
    stargate12
    Poziom 8  

    Code:
    #include "msp430.h"                     ; #define controlled include file
    

            NAME    main                    ; module name

            PUBLIC  main                    ; make the main label vissible
                                            ; outside this module
            ORG     0FFFEh
            DC16    init                    ; set reset vector to 'init' label

            RSEG    CSTACK                  ; pre-declaration of segment
            RSEG    CODE                    ; place program in 'CODE' segment

    init:      MOV     #SFE(CSTACK), SP        ; set up stack

    main:   NOP                             ; main program
               MOV.W   #WDTPW+WDTHOLD,&WDTCTL  ; Stop watchdog timer



    a EQU 080h
    b EQU 040h
    c EQU 020h
    d EQU 001h
    e EQU 002h
    f EQU 008h
    g EQU 004h
    h EQU 010h

    MOV.B Table(Rx),0x90

    Table DB a+b+c+d+e+f
    DB b+c
    DB b+c+d+e+g
    DB a+d+e+f+g
    DB a+e+f+g
           

    JMP $                         
                          ; (endless loop)
    END


    ależ proszę:)

    0
  • #6 16 Mar 2009 15:54
    Freddie Chopin
    Specjalista - Mikrokontrolery

    w ten sposob zapisana tabela jest wlaczana do kodu. po wykonaniu sie instrukcji mov.b 'wykonywane' sa dane zapisane w tabeli.

    umiesc jmp $ przed tabela i powinno byc w miare dobrze - to taka poprawka na szybko

    dane stale (czyli tablica) powinny byc umieszczone w innej sekcji, a nie w sekcji na kod, czyli RSEG CODE.

    4\/3!!

    0
  • #7 16 Mar 2009 16:20
    stargate12
    Poziom 8  

    Hmm co do stałych to na pewno się zgadzam ale jmp $ przed tabela zatrzymuje program w tym miejscu... Po wyrzuceniu całkowicie jmpa też te same błedy:)
    Teraz tak to wygląda:

    Code:

    #include "msp430.h"                     ; #define controlled include file

            NAME    main                    ; module name

            PUBLIC  main                    ; make the main label vissible
                                            ; outside this module
            ORG     0FFFEh
            DC16    init                    ; set reset vector to 'init' label
           
    a EQU 080h
    b EQU 040h
    c EQU 020h
    d EQU 001h
    e EQU 002h
    f EQU 008h
    g EQU 004h
    h EQU 010h

                RSEG    CSTACK                  ; pre-declaration of segment
                RSEG    CODE                    ; place program in 'CODE' segment

    init:      MOV     #SFE(CSTACK), SP        ; set up stack

    main:   NOP                             ; main program
               MOV.W   #WDTPW+WDTHOLD,&WDTCTL  ; Stop watchdog timer



    JMP $     

    MOV.B Table(R4),0x90

    Table DB a+b+c+d+e+f
    DB b+c
    DB b+c+d+e+g
    DB a+d+e+f+g
    DB a+e+f+g

    END

    0
  • #8 16 Mar 2009 18:22
    Dr_DEAD
    Poziom 28  

    Hmmmm, co w ogóle próbujesz osiągnąć ??? bo jak narazie to dla mnie jest największą zagadką. Chcesz uruchomić wewnętrzny kontroler LCD?? Skoro tak to gdzie jest jego konfiguracja?? Jeżeli kompletnie nie wiesz jak się za to zabrać (a wygląda na to że nie wiesz) to ściągnij ze strony Texasa przykładowy kod do obsługi LCD.

    0
  • #9 20 Mar 2009 01:07
    stargate12
    Poziom 8  

    Skoro napisałem LCD, to pewnie nie jest jakąś wielką zagadką że chciałem wyświetlić jakieś liczby, bo do tego LCD służy.
    A gdyby komuś w przyszłości się to przydało, to zamieszczam działający kod, który dla przykładu wyświetla "3.461".

    Code:

    #include "msp430xG46x.h"

           NAME    main                   

           PUBLIC  main       
                                     
           ORG     0FFFEh
           DC16    init             
           
    a      EQU     001h
    b      EQU     002h
    c      EQU     010h
    d      EQU     004h
    e      EQU     080h
    f      EQU     020h
    g      EQU     008h
    h      EQU     040h

           RSEG    CSTACK                 
           RSEG    CODE                 

    init:  MOV     #SFE(CSTACK),SP     

    main:  NOP                             
           MOV.W   #WDTPW+WDTHOLD,&WDTCTL 

           MOV     #0,R4
           MOV     #0,R5
           MOV     #0,R6
           MOV     #0,R7
           MOV     #0,R8
           MOV     #0,R9
           MOV     #0,R10
                 
           MOV     #11111111B,&0x90
           MOV.B   Table(R4),LCDM1
           MOV.B   Table2(R5),LCDM2
           MOV.B   Table3(R6),LCDM3
           MOV.B   Table4(R7),LCDM4

           JMP $

    Table   DB     b+c
    Table2  DB     a+c+d+e+f+g
    Table3  DB     b+c+g+f
    Table4  DB     a+b+c+d+g+h

            END

    0