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

MSP430FG4618 asembler IARv4 wyświetlanie LCD, tryb 4mux

stargate12 16 Mar 2009 01:34 2556 8
REKLAMA
  • #1 6287846
    stargate12
    Poziom 10  
    Dzień dobry!
    Mam mały problem który pewnie wyda się banalny, jednak już sporo czasu nad tym siedzę:

    
    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!
  • REKLAMA
  • REKLAMA
  • #3 6289049
    stargate12
    Poziom 10  
    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:)
  • REKLAMA
  • #4 6289150
    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!!
  • #5 6289348
    stargate12
    Poziom 10  
    #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ę:)
  • #6 6289370
    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!!
  • REKLAMA
  • #7 6289482
    stargate12
    Poziom 10  
    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:
    
    #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
    
  • #8 6290098
    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.
  • #9 6306000
    stargate12
    Poziom 10  
    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".

    
    #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
    
REKLAMA