Assembly array

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From Danish to

Threaded View
Hejsa.

I forbindelse med at jeg skal udskrive noget tekst til mit LCD-Display(som
er kommet til at virke nu, det gamle VAR brændt af), vil jeg gerne oprette
et array med den tekst der skal udskrives, og så vha. indirekte adressering
kan skrive en karakter ad gangen til displayet. Mit problem er dog at jeg
ikke kan finde ud af at oprette selve arrayet.  Herunder ses starten af mit
program:

----------
 list      p16%F84            ; list directive to define processor
 #include <p16F84.inc>        ; processor specific variable definitions
 __CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

;;Variabler

  ORG  0x00  ;reset hertil
  GOTO  main

  T1  EQU  0x0C
  T2  EQU  0x0D
  HT EQU  0x0E

;herunder følger programkoden
----------

...men hvor skal jeg så oprette arrayet? Jeg tænkte at man bare kunne skrive
besked DB "hej med dig", men så giver MPLAB(min IDE/assembler) følgende
fejl:
Message[303] C:\...\...\...\...\DAU.ASM 24 : Program word too large.
Truncated to core size. (6865).


Nogen forslag?

--
Venlig Hilsen Anders.



Re: Assembly array
desvære er min tid lidt sparsom, men her er et lille udpluk at et program
som skulle virke
/Carsten



TABLE_MSG
                MOVLW   0               ; Startindex of table message
DISP_MSG        MOVWF   TABLE_INDEX     ; Holds message address
                CALL    MSG0
                ANDLW   0xFF            ; Check if at end of message
                BTFSC   STATUS, Z       ; (zero returned at end)
                GOTO    TABLE_MSG_END            
                movwf   temp1
                movfw   temp1
                call    SEND_CHAR_W     ; sender byte til lcd
                MOVF    TABLE_INDEX, W  ; Point to next character
                ADDLW   1
                GOTO    DISP_MSG
TABLE_MSG_END   RETURN

MSG0
                addwf   PCL ,F          ;Jump to char pointed to in W reg
                retlw   'S'     ;0
                retlw   'o'     ;1
                retlw   'l'     ;2
                retlw   'f'     ;3
                retlw   'a'     ;4
                retlw   'n'     ;5
                retlw   'g'     ;6
                retlw   'e'     ;7
                retlw   'r'     ;8
                retlw   ' '     ;9
                retlw   'T'     ;a
                retlw   'm'     ;b
                retlw   'p'     ;c
                retlw   0xFE    ;d

MSG0_END



Re: Assembly array
Quoted text here. Click to load it

Hej Carsten.

Okay. Jeg har ikke mulighed for at afprøve koden før på fredag/i næsten uge,
da jeg er kommet til at knække et ben på min PIC-processor :-) Hvis koden
virker er det selvfølgelig godt, men jeg synes det er en lidt bøvlet måde at
oprette arrayet på. Kan man ikke oprette det a-la:

label MNEMONIC "Her er arrayets data"

?


Venlig Hilsen,
Anders.



Re: Assembly array
Quoted text here. Click to load it

du fik en klokke til at ringe, og
efter en timers søgning fandt jeg dette her compiler direktiv
dt som generere retlw
se i øvrigt http://gputils.sourceforge.net/33014g.pdf

følgende subrutine er testet og virker, jeg regner med du selv har en rutine
til at kommuniker med lcd, den skal du indsætte i stedet for SEND_CHAR_W

TABLE_MSG
                MOVLW   0               ; Startindex of table message
DISP_MSG        MOVWF   TABLE_INDEX     ; Holds message address
                CALL    MSG0
                ANDLW   0xFF            ; Check if at end of message
                BTFSC   STATUS, Z       ; (zero returned at end)
                RETURN
                call    SEND_CHAR_W     ; sender byte til lcd
                MOVF    TABLE_INDEX, W  ; Point to next character
                ADDLW   1
                GOTO    DISP_MSG
                RETURN

MSG0
                addwf   PCL ,F          ;Jump to char pointed to in W reg
                dt "solfange temp",0xfe,0x00
                


/Carsten
  


Re: Assembly array


Quoted text here. Click to load it
rutine

Hej Carsten.

Okay, det lyder godt. Kan du fortælle mig hvorfor du skriver 0xFE både efter
dt "..." her og efter RETLW i det første eksempel?



Venlig hilsen,
Anders.



Re: Assembly array


Quoted text here. Click to load it


pt. kan jeg ikke huske det, du må tænke på at koden taget ud af et støre
sammen hæng, og der er fjernet noget du ikke har brug for, men middel bart
er det vist nok der står 0x00 til sidst
/Carsten

Re: Assembly array
Quoted text here. Click to load it
bøvlet
Quoted text here. Click to load it
rutine
Hej Carsten.

Jeg får en underlig fejl. Hvis jeg udskriver "solfange temp", lige som dig,
så virker det! Men hvis jeg for eksempel skriver "solfange te", så virker
det ikke! Jeg synes det er meget mystisk. Her er min kode:
-----------------
Tekst
                addwf   PCL ,F
                dt "solfange te",0xfe,0x00

CLRF T1   ;bruges som tæller

ts  CALL CBF
  MOVF T1, W
  CALL Tekst
  ADDLW 0
  BTFSC STATUS, Z
  GOTO main
  CALL send_char
  INCF T1, F
  GOTO ts

main
            .....
--------------



Re: Assembly array

Quoted text here. Click to load it

jeg kan ikke kende min kode længere  :-)
jeg tror at hvis du holder dig lidt tættere på min kode vil det lykkedes
/Carsten

Re: Assembly array
kan du få det til at virke eller skal du have det hele foræret ? :-)
/Carsten

Site Timeline