Sehr geehrtes Forum,
ich habe folgendes Programm geschrieben, welches einen im FLASH
gespeicherten String ausliest, und Zeichen für Zeichen auf dem Display
angibt, dabei achtet es auf die Null Terminierung am Ende des Strings,
und auf ein Zeilenumbruchszeichen "#".
1 | .include "M48PAdef.inc"
|
2 |
|
3 | ; //////////////////////////////////////////////////////////////
|
4 | ; SPEICHER
|
5 | ; Kevin Riehl - 28.03.2013
|
6 | ;
|
7 | ; Dieses Programm läd Zeichenketten / Texte in den FLASH,
|
8 | ; liest diese dann wieder aus und stellt sie auf dem LCD dar
|
9 | ;
|
10 | ; //////////////////////////////////////////////////////////////
|
11 | ; /////// Defintionen
|
12 | ; //////////////////////////////////////////////////////////////
|
13 |
|
14 | .DEF STACK_LOW = R16
|
15 | .DEF STACK_HIG = R17
|
16 |
|
17 | ; //////////////////////////////////////////////////////////////
|
18 | ; Stackpointerinitialisierung
|
19 | LDI STACK_LOW, LOW(RAMEND) ;Stackpointer initialisieren
|
20 | OUT SPL, STACK_LOW
|
21 | LDI STACK_HIG, HIGH(RAMEND) ;Stackpointer initialisieren
|
22 | OUT SPH, STACK_HIG
|
23 | ; //////////////////////////////////////////////////////////////
|
24 |
|
25 | RCALL Wait1000MS
|
26 | RCALL LCD_INIT
|
27 |
|
28 |
|
29 | b:
|
30 | RCALL LCD_HOME
|
31 |
|
32 | LDI ZL,LOW (text*2)
|
33 | LDI ZH,HIGH(text*2)
|
34 |
|
35 | loop:
|
36 | LPM
|
37 |
|
38 | ; Testen ob Zeilenumbruch
|
39 | MOV R28,R0
|
40 | CPI R28,'#'
|
41 | BREQ l
|
42 |
|
43 | ; Testen ob Ende
|
44 | TST R0
|
45 | BREQ a
|
46 |
|
47 | ; Zeichen ausgegeben
|
48 | MOV INFO,R0
|
49 | RCALL LCD_DATA
|
50 |
|
51 | ; Zeiger auf nächstes Byte setzen
|
52 | ADIW ZL,1
|
53 | RCALL Wait1000MS
|
54 | RJMP loop
|
55 |
|
56 | a :
|
57 | RJMP b
|
58 |
|
59 | l :
|
60 | RCALL LCD_LINE2
|
61 | ADIW ZL,1
|
62 | RJMP loop
|
63 | ; //////////////////////////////////////////////////////////////
|
64 |
|
65 | .include "LCD_Lib.asm"
|
66 |
|
67 | text: .DB "Schön jemacht#weiter so DDX!",0
|
Komisch ist nun, dass auf dem Display nicht "Schön jemacht#weiter so
DDX!"
angezeigt wird, sondern "SchΣn..." ankommt.
Dasselbe Problem, kann ich mich erinnern, hatte ich auch in meiner Zeit,
als ich mit C++ gearbeitet habe.
Hat das vielleicht was mit meinem Editor / meiner IDE zu tun, oder was
ist das falsch?
(Ich habe AVR Studio 4.x)
m.f.G. Developer_X