Assembly array

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 p=16F84 ; list directive to define processor #include ; 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.
Reply to
Anders
Loading thread data ...

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

Reply to
Carsten

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

Reply to
Carsten

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.

Reply to
Anders

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

formatting link

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

Reply to
Carsten

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.

Reply to
Anders

bøvlet

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 .....

--------------

Reply to
Anders

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

Reply to
Carsten

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

Reply to
Carsten

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.