www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

podatki v spremenljivki se izgubijo

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> AVR, LPC900, x51
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
damo
Član
Član



Pridružen-a: Čet 31 Jul 2003 13:45
Prispevkov: 2008
Aktiv.: 8.48
Kraj: Krško

PrispevekObjavljeno: Sob Mar 11, 2006 11:25 pm    Naslov sporočila:  podatki v spremenljivki se izgubijo Odgovori s citatom

Ojla,

V spodnjem programu mi ne deluje funkcija lcd_text. Izpisuje neke čudne znake. Podatki (torej spremeljivka text) se nekje izgubijo. funkcija lcd_data dela ok, na display lahko pišem z uporabo le-te. Torej inicializacija lcdja in lcd_data so ok - npr če kličem lcd_data ('D'); mi lepo izpiše D. Problem je v lcd_text.

Bega me to, da sem te funkcije za display uporabljal že pred časom in so delale b.p. . Edina razlika je, da sem v stari lcd_text podal tudi kolono in vrsto izpisa - bila je lcd_display(unsigned char kolona, unsigned char vrsta, unsigned char text[20], v tej verziji pa podam le kolono (ki pa jo ne uporabljam) in text.

Sedaj uporabljam 89s53, prej pa 89c55, vendar to nebi smelo biti problem. Sedaj uporabljam 1x16 lcd, ponavadi pa sem 4x20, ampak tudi to ni problem.

Ima kdo kako idejo? Probal sem deklarirat spremenljivko text v data in idata spominu, ampak zadeva ne deluje.

Hvala za pomoč!



Prilagam tudi program:


#pragma SMALL NOREGPARMS DEBUG SYMBOLS CODE OBJECTEXTEND
#include <stdio.h>
#include <intrins.h>
#include <regs53.h>

sbit IN1 = P2^7;
sbit IN2 = P2^6;
sbit IN3 = P2^5;
sbit IN4 = P2^4;
sbit IN5 = P2^3;
sbit IN6 = P2^2;
sbit IN7 = P2^1;
sbit IN8 = P2^0;

sbit OUT1 = P1^0;
sbit OUT2 = P1^1;
sbit OUT3 = P1^2;
sbit OUT4 = P1^3;
sbit OUT5 = P1^4;
sbit OUT6 = P3^7;

sbit RS = P0^1;
sbit RW = P0^0;
sbit EN = P0^2;
sbit D4 = P0^4;
sbit D5 = P0^5;
sbit D6 = P0^6;
sbit D7 = P0^7;
unsigned char idata text[20];


# define BUFFERSIZE 2
# define MINFILTER 48000
# define MAXFILTER 52000

# define T_START IN1
# define T_STOP IN2

# define LUC_START OUT1
# define LUC_STOP OUT2

# define SIG_START OUT3
# define SIG_STOP OUT4

# define RELE_SEL OUT5

# define SONDE OUT6


//---------------------------------------------------------------
// zakasnitev v milisekundah
//---------------------------------------------------------------

void delay (unsigned int milisek)
{
unsigned int x,y;
for (y=0; y<milisek; y++)
for (x=0; x<68; x++);

return;
}



//---------------------------------------------------------------
// lcd_code (char znak) - poslje instrukcijo v lcd (write data)
//---------------------------------------------------------------

void lcd_code(unsigned char podatek)

{
delay (1);
RW=0; RS=0; EN=1;

D4= (podatek & 0x10);
D5= (podatek & 0x20);
D6= (podatek & 0x40);
D7= (podatek & 0x80);

_nop_(); _nop_();_nop_(); _nop_(); _nop_();
EN=0; _nop_(); _nop_(); EN=1;


D4= (podatek & 0x01);
D5= (podatek & 0x02);
D6= (podatek & 0x04);
D7= (podatek & 0x08-);

_nop_(); _nop_();_nop_(); _nop_(); _nop_();
EN=0;

delay(1);

return;
}



//---------------------------------------------------------------
// lcd_data (char znak) - poslje karakter v lcd (write data)
//---------------------------------------------------------------

void lcd_data(unsigned char podatek)

{
if (podatek<32) return;

RW=0; RS=1; EN=1;

D4= (podatek & 0x10);
D5= (podatek & 0x20);
D6= (podatek & 0x40);
D7= (podatek & 0x80);
_nop_(); _nop_();_nop_(); _nop_(); _nop_();

EN=0; _nop_(); _nop_(); EN=1;


D4= (podatek & 0x01);
D5= (podatek & 0x02);
D6= (podatek & 0x04);
D7= (podatek & 0x08-);

_nop_(); _nop_();_nop_(); _nop_(); _nop_();
EN=0;

delay(1);

return;
}



//---------------------------------------------------------------
// lcd_init - inicializacija displaya
//---------------------------------------------------------------

void lcd_init(void)
{
RS=0; RW=0; EN=0;
delay (15);

RS=0;
EN=1;
D7=0;D6=0;D5=1;D4=1;
EN=0;

delay (5);
RS=0;
EN=1;
D7=0;D6=0;D5=1;D4=1;
EN=0;

delay (1);
RS=0;
EN=1;
D7=0;D6=0;D5=1;D4=1;
EN=0;

//nible instrukcija
delay (1);
RS=0;
EN=1;
D7=0;D6=0;D5=1;D4=0;
EN=0;

lcd_code (0x28-);
lcd_code (0x0C);
lcd_code (0x06);
lcd_code (0x01);

return;
}



//---------------------------------------------------------------
// lcd_text - izpis teksta
//---------------------------------------------------------------

void lcd_text (unsigned char kolona, unsigned char text[20])
{
unsigned char x;

lcd_code (128-); /* postavi kurzor na zeljeno pozicijo */

for (x=0;x<8;x++)
{
if (text[x]==0) return; /* ce je konec stringa break */
lcd_data (text[x]); /* drugace napisi znak na LCD */
}

return;

lcd_code (128+40); /* postavi kurzor na zeljeno pozicijo */


for (x=8;x<16;x++)
{
if (text[x]==0) return; /* ce je konec stringa break */
lcd_data (text[x]); /* drugace napisi znak na LCD */
}


return;
}


//---------------------------------------------------------------
// lcd_clear - brisanje displaya
//---------------------------------------------------------------

void lcd_clear(void)
{
lcd_code (1); /* koda za CLS */
delay (200);
return;
}




//---------------------------------------------------------------
// glavni program
//---------------------------------------------------------------


main ()

{

unsigned char stevec;
unsigned int a;

EN=0; RS=0; RW=0; D4=1; D5=1; D6=1; D7=1;
IN1=1; IN2=1; IN3=1; IN4=1; IN5=1; IN6=1; IN7=1; IN8=1;
OUT1=0; OUT2=0; OUT3=0; OUT4=0; OUT5=0; OUT6=0;


lcd_init();
lcd_clear();

lcd_data ('B');lcd_data ('X');

lcd_text (1,"damo");

}



Nazadnje urejal/a damo Ned Mar 12, 2006 7:23 pm; skupaj popravljeno 1 krat
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
damo
Član
Član



Pridružen-a: Čet 31 Jul 2003 13:45
Prispevkov: 2008
Aktiv.: 8.48
Kraj: Krško

PrispevekObjavljeno: Ned Mar 12, 2006 7:21 pm    Naslov sporočila:  Še nekaj.... Odgovori s citatom

zgleda da imam problem z data pointerjem, ker mi tudi npr ukaz: printf ("Maxi") ne deluje....

kakšna ideja?
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 23.58

PrispevekObjavljeno: Ned Mar 12, 2006 7:30 pm    Naslov sporočila:   Odgovori s citatom

Ni ravno to kar najbrz zelis, a vseeno:

1: Ti podas lcd_text() string brez terminacije, kar lahko povzroci tezave (odvisno od tega kaj je bilo prej v pomnilniku). To je slaba navada, ki sicer ne more biti vzrok za tvoj problem, a bo povzrocila prej ali slej kaksnega drugega..

2: Cemu sluzi prvi return izven for zanke v lcd_text() ? To sicer ni vzrok tvojih tezav, a daljsega stringa ne bos nikoli pravilno izpisal v dve vrstici, ce bo vsakic prej lcd_text() skocil ven.

Jaz bi se resevanja tezave lotil takole: izpusti klic lcd_code() iz funkcije lcd_text(), tako da bos samo izpisal text[] preko lcd_data(). Ce se to ne zgodi pravilno, potem imas zanic compiler. Ce to dela v redu, potem je problem v lcd_code() (napacen klic, napacno delovanje, ...). V lcd_text() ni nic ocitnega narobe (razen omenjenega nesmisla, ki pa za niz "damo" ne bi smel vplivati na izvajanje).
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
damo
Član
Član



Pridružen-a: Čet 31 Jul 2003 13:45
Prispevkov: 2008
Aktiv.: 8.48
Kraj: Krško

PrispevekObjavljeno: Ned Mar 12, 2006 8:10 pm    Naslov sporočila:   Odgovori s citatom

Ojla,

1. res je brez terminacije, ampak to sem delal že skoz do zdaj, pa ni blo problema. Zgleda, da se je 0 dodala sama na konec. Pa tudi če nebi mel konec, bi v najslabšem primeru izpisalo še nekaj smeti na koncu mojega stringa.

2. prvi in drugi return v lcd_text služi temu, da detektira konec vhodnega stringa ter gre ven iz funkcije. Ker imam trenutni display 1x16, moram posebej pisati v prvih 8 znakov, potem pa še v naslednjih 8 znakov. Ponavadi tega nimam v dveh delih.

3. probal sem že brez lcd_code (ta samo pozicionira začetek izpisa) a problem ostane isti. Prav tako sem sprobal, da sem namesto vrstice lcd_data (text[x]); napisal vrstico lcd_data ('x'). Dobil sem toliko iksov, koliko je bil dolgi vhodni string. Tudi pozicioniranje deluje.

Opazil sem tudi, da imam probleme s funkcijo printf ("Maxi"); - to mi da misliti, da je problem v data pointerju...

Compiler imam nek stari Keilov C, prav tako tudi najnovejši Keilov uVision2. Naj povem, da mi je pred časom to vse lepo delalo v starem compilerju.


Meni je že zmanjkalo idej.... za rešitev pade :lasko:
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 23.58

PrispevekObjavljeno: Ned Mar 12, 2006 8:47 pm    Naslov sporočila:   Odgovori s citatom

Mislim, da se nisva razumela, tako pod 1 kot 2 Very Happy

1: Kako dela tvoj program ? V flashu/EPROMu imas vpisane stringe. Compiler ve, da je text[] velik 20 bajtov, zato mora alocirati 20 bajtov RAMa (ker lahko text[] manipuliras pac ne more biti konstanta, ampak spremenljivka). Z movc eventuelno prekopira tisti parameter iz flasha v RAM ter nato izvede funkcijo lcd_text(). "damo" je manj kot 20 znakov, zato ostane od konca niza "damo" pa do konca spremenljivke text[] vsebina RAMa taka, kot je bila ob resetu (0x00), zaradi cesar ponesreci tvoja koda deluje in ti verjames, da to ni potencialni bug (smeti na displayu v dolocenih primerih). Ker se najbrz istih 20 bajtov uporablja ob vsakem klicu lcd_text(), bi recimo lcd_text(nepomembna_stevilka, "12345678901234567890") in nekoliko za tem lcd_text(nepomembna_stevilka, "damo") izpisal na zaslonu "damo5678901234567890", kljub temu, da tega ocitno noces, saj preverjas prisotnost terminacijskega znaka ("\0"). To sem imel v mislih, ko sem omenil "grdo" programiranje - pri majhnih zadevah se gre, ker se problem redko opazi, pri vecjih so pa zaradi malomarnosti tezave (izguba $$$).

2: Sem dojel kaj je bil namen tiste delitve - tezava je v tem, da tvoja koda ne pocne tega kar ti mislis da pocne. Do tistega returna bo ob nizu, daljsem od 8 znakov, prisla brezpogojno in zato izpis ustavila, namesto da bi izpisala tudi znake 9-16, tako kot si si to zamislil. lcd_text(nepomembna_stevilka, "1234567887654321" tako ne bo izpisal druge polovice, tudi ce bi lcd_text() sicer delovala pravilno.

Za resitev tvoje tezave (le kdo bi se lahko uprl :lasko: Rolling Eyes ) pripni assembly listing tvojega programa, ki ga izpljune prevajalnik (torej koda v C-ju s prevodom v assembler), da vidimo kaj se sploh dogaja tam, pa bo najbrz bolj jasno kje je problem.
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
damo
Član
Član



Pridružen-a: Čet 31 Jul 2003 13:45
Prispevkov: 2008
Aktiv.: 8.48
Kraj: Krško

PrispevekObjavljeno: Ned Mar 12, 2006 9:22 pm    Naslov sporočila:   Odgovori s citatom

pripenjam listing iz compilerja. V glavnem programu sem dal funkcije data in code ter putchar zato, da preverim hardware. funkcije lcd_text in printf mi ne delata Sad


Aja, tisto z zaključevanjem maš pa prav. Pravzaprav sem jaz funkcijo lcd_text uporabljal na 2 načina:

1. lcd_text ("Napisi text");


2. sprintf (buffer,"%b %2.3f\n",vrednost1, vrednost2);
lcd_text (buffer);

tukaj pa je sprintf sam dodal terminator na koncu stringa, zato očitno nisem imel problemov.

p.s. se opravičujem, ne rata mi pripeti datoteke, zato je tukaj copy/paste:

C51 COMPILER V3.07, TCG3 12/03/06 20:15:35 PAGE 1


DOS C51 COMPILER V3.07, COMPILATION OF MODULE TCG3
OBJECT MODULE PLACED IN TCG3.OBJ
COMPILER INVOKED BY: D:\C51\C51.EXE TCG3.C

stmt level source

1 #pragma SMALL NOREGPARMS DEBUG SYMBOLS CODE
2 #include <stdio.h>
3 #include <intrins.h>
4 #include <regs53.h>
5
6 sbit IN1 = P2^7;
7 sbit IN2 = P2^6;
8 sbit IN3 = P2^5;
9 sbit IN4 = P2^4;
10 sbit IN5 = P2^3;
11 sbit IN6 = P2^2;
12 sbit IN7 = P2^1;
13 sbit IN8 = P2^0;
14
15 sbit OUT1 = P1^0;
16 sbit OUT2 = P1^1;
17 sbit OUT3 = P1^2;
18 sbit OUT4 = P1^3;
19 sbit OUT5 = P1^4;
20 sbit OUT6 = P3^7;
21
22 sbit RS = P0^1;
23 sbit RW = P0^0;
24 sbit EN = P0^2;
25 sbit D4 = P0^4;
26 sbit D5 = P0^5;
27 sbit D6 = P0^6;
28 sbit D7 = P0^7;
29
30 # define BUFFERSIZE 2
31 # define MINFILTER 48000
32 # define MAXFILTER 52000
33
34 # define T_START IN2
35 # define NT_STOP IN1
36
37 # define LUC_START OUT5
38 # define LUC_STOP OUT6
39
40 # define SIG_START OUT3
41 # define SIG_STOP OUT4
42
43 # define RELE_SEL OUT1
44
45 # define SONDE OUT2
46
47
48
49 //---------------------------------------------------------------
50 // zakasnitev v milisekundah pri 11.059 MHz in 12 ciklih na ukaz
51 //---------------------------------------------------------------
52
53 void delay (unsigned int count_ms)
54 {
55 1 unsigned int i,j;
56 1 for (j=0; j<count_ms; j++)
57 1 for (i=0; i<68; i++);
58 1
59 1 return;
C51 COMPILER V3.07, TCG3 12/03/06 20:15:35 PAGE 2

60 1 }
61
62
63
64 //---------------------------------------------------------------
65 // lcd_code (char znak) - poslje instrukcijo v lcd (write data)
66 //---------------------------------------------------------------
67
68 void lcd_code(unsigned char podatek)
69
70 {
71 1 delay (1);
72 1 RW=0; RS=0; EN=1;
73 1
74 1 D4= (podatek & 0x10);
75 1 D5= (podatek & 0x20);
76 1 D6= (podatek & 0x40);
77 1 D7= (podatek & 0x80);
78 1
79 1 _nop_(); _nop_();_nop_(); _nop_(); _nop_();
80 1 EN=0; _nop_(); _nop_(); EN=1;
81 1
82 1
83 1 D4= (podatek & 0x01);
84 1 D5= (podatek & 0x02);
85 1 D6= (podatek & 0x04);
86 1 D7= (podatek & 0x08-);
87 1
88 1 _nop_(); _nop_();_nop_(); _nop_(); _nop_();
89 1 EN=0;
90 1
91 1 delay(1);
92 1
93 1 return;
94 1 }
95
96
97
98 //---------------------------------------------------------------
99 // lcd_data (char znak) - poslje karakter v lcd (write data)
100 //---------------------------------------------------------------
101
102 void lcd_data(unsigned char podatek)
103
104 {
105 1 if (podatek<32) return;
106 1
107 1 RW=0; RS=1; EN=1;
108 1
109 1 D4= (podatek & 0x10);
110 1 D5= (podatek & 0x20);
111 1 D6= (podatek & 0x40);
112 1 D7= (podatek & 0x80);
113 1 _nop_(); _nop_();_nop_(); _nop_(); _nop_();
114 1
115 1 EN=0; _nop_(); _nop_(); EN=1;
116 1
117 1
118 1 D4= (podatek & 0x01);
119 1 D5= (podatek & 0x02);
120 1 D6= (podatek & 0x04);
121 1 D7= (podatek & 0x08-);
122 1
123 1 _nop_(); _nop_();_nop_(); _nop_(); _nop_();
124 1 EN=0;
125 1
C51 COMPILER V3.07, TCG3 12/03/06 20:15:35 PAGE 3

126 1 delay(1);
127 1
128 1 return;
129 1 }
130
131
132
133 //---------------------------------------------------------------
134 // lcd_init - inicializacija displaya
135 //---------------------------------------------------------------
136
137 void lcd_init(void)
138 {
139 1 RS=0; RW=0; EN=0;
140 1 delay (15);
141 1
142 1 RS=0;
143 1 EN=1;
144 1 D7=0;D6=0;D5=1;D4=1;
145 1 EN=0;
146 1
147 1 delay (5);
148 1 RS=0;
149 1 EN=1;
150 1 D7=0;D6=0;D5=1;D4=1;
151 1 EN=0;
152 1
153 1 delay (1);
154 1 RS=0;
155 1 EN=1;
156 1 D7=0;D6=0;D5=1;D4=1;
157 1 EN=0;
158 1
159 1 //nible instrukcija
160 1 delay (1);
161 1 RS=0;
162 1 EN=1;
163 1 D7=0;D6=0;D5=1;D4=0;
164 1 EN=0;
165 1
166 1 lcd_code (0x28-);
167 1 lcd_code (0x0C);
168 1 lcd_code (0x06);
169 1 lcd_code (0x01);
170 1
171 1 return;
172 1 }
173
174
175
176 //---------------------------------------------------------------
177 // lcd_text - izpis teksta
178 //---------------------------------------------------------------
179
180 void lcd_text (unsigned char text[20])
181 {
182 1 unsigned char x;
183 1
184 1 lcd_code (128-); /* postavi kurzor na zeljeno pozicijo */
185 1
186 1 lcd_data (text[1]);
187 1
188 1 for (x=0;x<8;x++)
189 1 {
190 2 if (text[x]==0) return; /* ce je konec stringa break */
191 2 lcd_data (text[x]); /* drugace napisi znak na LCD */
C51 COMPILER V3.07, TCG3 12/03/06 20:15:35 PAGE 4

192 2 }
193 1
194 1 return;
195 1
196 1 lcd_code (128+40); /* postavi kurzor na zeljeno pozicijo */
197 1
198 1
199 1 for (x=8;x<16;x++)
200 1 {
201 2 if (text[x]==0) return; /* ce je konec stringa break */
202 2 lcd_data (text[x]); /* drugace napisi znak na LCD */
203 2 }
204 1
205 1
206 1 return;
207 1 }
208
209
210 //---------------------------------------------------------------
211 // lcd_clear - brisanje displaya
212 //---------------------------------------------------------------
213
214 void lcd_clear(void)
215 {
216 1 lcd_code (1); /* koda za CLS */
217 1 delay (200);
218 1 return;
219 1 }
220
221
222
223 //---------------------------------------------------------------
224 // glavni program
225 //---------------------------------------------------------------
226
227 main ()
228
229 {
230 1 unsigned char stevec;
231 1
232 1
233 1 EN=0; RS=0; RW=0; D4=1; D5=1; D6=1; D7=1;
234 1 IN1=1; IN2=1; IN3=1; IN4=1; IN5=1; IN6=1; IN7=1; IN8=1;
235 1 OUT1=0; OUT2=0; OUT3=0; OUT4=0; OUT5=0; OUT6=0;
236 1
237 1 SCON = 0x52; TMOD = 0x21; // set 9600 baud at 11.059 MHz
238 1 TCON = 0x69; TH1 = 250; PCON |= 0x80;
239 1
240 1
241 1 lcd_init();
242 1 lcd_clear();
243 1
244 1
245 1 lcd_data ('A'); lcd_code(131); lcd_data ('B'); // test funkcij lcd data in code
246 1
247 1 putchar ('M'); putchar ('a'); putchar ('x'); putchar ('i');putchar (13);
248 1
249 1
250 1 lcd_text("Start"); // test funkcije lcd text
251 1
252 1 printf ("\nTest serijskega kanala\n"); // test serijskega porta
253 1
254 1
255 1
256 1 while(1) {_nop_();};
257 1
C51 COMPILER V3.07, TCG3 12/03/06 20:15:35 PAGE 5

258 1 }
C51 COMPILER V3.07, TCG3 12/03/06 20:15:35 PAGE 6

ASSEMBLY LISTING OF GENERATED OBJECT CODE


; FUNCTION delay (BEGIN)
; SOURCE LINE # 53
; SOURCE LINE # 54
; SOURCE LINE # 56
;---- Variable 'j' assigned to Register 'R6/R7' ----
0000 E4 CLR A
0001 FF MOV R7,A
0002 FE MOV R6,A
0003 ?C0001:
0003 C3 CLR C
0004 EF MOV A,R7
0005 9500 R SUBB A,count_ms+01H
0007 EE MOV A,R6
0008 9500 R SUBB A,count_ms
000A 501A JNC ?C0007
; SOURCE LINE # 57
;---- Variable 'i' assigned to Register 'R4/R5' ----
000C E4 CLR A
000D FD MOV R5,A
000E FC MOV R4,A
000F ?C0004:
000F C3 CLR C
0010 ED MOV A,R5
0011 9444 SUBB A,#044H
0013 EC MOV A,R4
0014 9400 SUBB A,#00H
0016 5007 JNC ?C0003
0018 0D INC R5
0019 ED MOV A,R5
001A 7001 JNZ ?C0025
001C 0C INC R4
001D ?C0025:
001D 80F0 SJMP ?C0004
001F ?C0003:
001F 0F INC R7
0020 EF MOV A,R7
0021 7001 JNZ ?C0026
0023 0E INC R6
0024 ?C0026:
0024 80DD SJMP ?C0001
; SOURCE LINE # 60
0026 ?C0007:
0026 22 RET
; FUNCTION delay (END)

; FUNCTION lcd_code (BEGIN)
; SOURCE LINE # 68
; SOURCE LINE # 70
; SOURCE LINE # 71
0000 750000 R MOV ?delay?BYTE,#00H
0003 750001 R MOV ?delay?BYTE+01H,#01H
0006 120000 R LCALL delay
; SOURCE LINE # 72
0009 C280 CLR RW
000B C281 CLR RS
000D D282 SETB EN
; SOURCE LINE # 74
000F E500 R MOV A,podatek
0011 A2E4 MOV C,ACC.4
0013 9284 MOV D4,C
; SOURCE LINE # 75
0015 A2E5 MOV C,ACC.5
0017 9285 MOV D5,C
C51 COMPILER V3.07, TCG3 12/03/06 20:15:35 PAGE 7

; SOURCE LINE # 76
0019 A2E6 MOV C,ACC.6
001B 9286 MOV D6,C
; SOURCE LINE # 77
001D 33 RLC A
001E 9287 MOV D7,C
; SOURCE LINE # 79
0020 00 NOP
0021 00 NOP
0022 00 NOP
0023 00 NOP
0024 00 NOP
; SOURCE LINE # 80
0025 C282 CLR EN
0027 00 NOP
0028 00 NOP
0029 D282 SETB EN
; SOURCE LINE # 83
002B E500 R MOV A,podatek
002D 13 RRC A
002E 9284 MOV D4,C
; SOURCE LINE # 84
0030 E500 R MOV A,podatek
0032 A2E1 MOV C,ACC.1
0034 9285 MOV D5,C
; SOURCE LINE # 85
0036 A2E2 MOV C,ACC.2
0038 9286 MOV D6,C
; SOURCE LINE # 86
003A A2E3 MOV C,ACC.3
003C 9287 MOV D7,C
; SOURCE LINE # 88
003E 00 NOP
003F 00 NOP
0040 00 NOP
0041 00 NOP
0042 00 NOP
; SOURCE LINE # 89
0043 C282 CLR EN
; SOURCE LINE # 91
0045 750000 R MOV ?delay?BYTE,#00H
0048 750001 R MOV ?delay?BYTE+01H,#01H
004B 120000 R LCALL delay
; SOURCE LINE # 94
004E ?C0008:
004E 22 RET
; FUNCTION lcd_code (END)

; FUNCTION lcd_data (BEGIN)
; SOURCE LINE # 102
; SOURCE LINE # 104
; SOURCE LINE # 105
0000 E500 R MOV A,podatek
0002 C3 CLR C
0003 9420 SUBB A,#020H
0005 4045 JC ?C0010
0007 ?C0009:
; SOURCE LINE # 107
0007 C280 CLR RW
0009 D281 SETB RS
000B D282 SETB EN
; SOURCE LINE # 109
000D E500 R MOV A,podatek
000F A2E4 MOV C,ACC.4
0011 9284 MOV D4,C
; SOURCE LINE # 110
C51 COMPILER V3.07, TCG3 12/03/06 20:15:35 PAGE 8

0013 A2E5 MOV C,ACC.5
0015 9285 MOV D5,C
; SOURCE LINE # 111
0017 A2E6 MOV C,ACC.6
0019 9286 MOV D6,C
; SOURCE LINE # 112
001B 33 RLC A
001C 9287 MOV D7,C
; SOURCE LINE # 113
001E 00 NOP
001F 00 NOP
0020 00 NOP
0021 00 NOP
0022 00 NOP
; SOURCE LINE # 115
0023 C282 CLR EN
0025 00 NOP
0026 00 NOP
0027 D282 SETB EN
; SOURCE LINE # 118
0029 E500 R MOV A,podatek
002B 13 RRC A
002C 9284 MOV D4,C
; SOURCE LINE # 119
002E E500 R MOV A,podatek
0030 A2E1 MOV C,ACC.1
0032 9285 MOV D5,C
; SOURCE LINE # 120
0034 A2E2 MOV C,ACC.2
0036 9286 MOV D6,C
; SOURCE LINE # 121
0038 A2E3 MOV C,ACC.3
003A 9287 MOV D7,C
; SOURCE LINE # 123
003C 00 NOP
003D 00 NOP
003E 00 NOP
003F 00 NOP
0040 00 NOP
; SOURCE LINE # 124
0041 C282 CLR EN
; SOURCE LINE # 126
0043 750000 R MOV ?delay?BYTE,#00H
0046 750001 R MOV ?delay?BYTE+01H,#01H
0049 120000 R LCALL delay
; SOURCE LINE # 129
004C ?C0010:
004C 22 RET
; FUNCTION lcd_data (END)

; FUNCTION lcd_init (BEGIN)
; SOURCE LINE # 137
; SOURCE LINE # 138
; SOURCE LINE # 139
0000 C281 CLR RS
0002 C280 CLR RW
0004 C282 CLR EN
; SOURCE LINE # 140
0006 750000 R MOV ?delay?BYTE,#00H
0009 75000F R MOV ?delay?BYTE+01H,#0FH
000C 120000 R LCALL delay
; SOURCE LINE # 142
000F C281 CLR RS
; SOURCE LINE # 143
0011 D282 SETB EN
; SOURCE LINE # 144
C51 COMPILER V3.07, TCG3 12/03/06 20:15:35 PAGE 9

0013 C287 CLR D7
0015 C286 CLR D6
0017 D285 SETB D5
0019 D284 SETB D4
; SOURCE LINE # 145
001B C282 CLR EN
; SOURCE LINE # 147
001D 750000 R MOV ?delay?BYTE,#00H
0020 750005 R MOV ?delay?BYTE+01H,#05H
0023 120000 R LCALL delay
; SOURCE LINE # 148
0026 C281 CLR RS
; SOURCE LINE # 149
0028 D282 SETB EN
; SOURCE LINE # 150
002A C287 CLR D7
002C C286 CLR D6
002E D285 SETB D5
0030 D284 SETB D4
; SOURCE LINE # 151
0032 C282 CLR EN
; SOURCE LINE # 153
0034 750000 R MOV ?delay?BYTE,#00H
0037 750001 R MOV ?delay?BYTE+01H,#01H
003A 120000 R LCALL delay
; SOURCE LINE # 154
003D C281 CLR RS
; SOURCE LINE # 155
003F D282 SETB EN
; SOURCE LINE # 156
0041 C287 CLR D7
0043 C286 CLR D6
0045 D285 SETB D5
0047 D284 SETB D4
; SOURCE LINE # 157
0049 C282 CLR EN
; SOURCE LINE # 160
004B 750000 R MOV ?delay?BYTE,#00H
004E 750001 R MOV ?delay?BYTE+01H,#01H
0051 120000 R LCALL delay
; SOURCE LINE # 161
0054 C281 CLR RS
; SOURCE LINE # 162
0056 D282 SETB EN
; SOURCE LINE # 163
0058 C287 CLR D7
005A C286 CLR D6
005C D285 SETB D5
005E C284 CLR D4
; SOURCE LINE # 164
0060 C282 CLR EN
; SOURCE LINE # 166
0062 750028 R MOV ?lcd_code?BYTE,#028H
0065 120000 R LCALL lcd_code
; SOURCE LINE # 167
0068 75000C R MOV ?lcd_code?BYTE,#0CH
006B 120000 R LCALL lcd_code
; SOURCE LINE # 168
006E 750006 R MOV ?lcd_code?BYTE,#06H
0071 120000 R LCALL lcd_code
; SOURCE LINE # 169
0074 750001 R MOV ?lcd_code?BYTE,#01H
0077 120000 R LCALL lcd_code
; SOURCE LINE # 172
007A ?C0011:
007A 22 RET
C51 COMPILER V3.07, TCG3 12/03/06 20:15:35 PAGE 10

; FUNCTION lcd_init (END)

; FUNCTION lcd_text (BEGIN)
; SOURCE LINE # 180
; SOURCE LINE # 181
; SOURCE LINE # 184
0000 750080 R MOV ?lcd_code?BYTE,#080H
0003 120000 R LCALL lcd_code
; SOURCE LINE # 186
0006 AB00 R MOV R3,text
0008 AA00 R MOV R2,text+01H
000A A900 R MOV R1,text+02H
000C 900001 MOV DPTR,#01H
000F 120000 E LCALL ?C_CLDOPTR
0012 F500 R MOV ?lcd_data?BYTE,A
0014 120000 R LCALL lcd_data
; SOURCE LINE # 188
0017 E4 CLR A
0018 F500 R MOV x,A
001A ?C0012:
001A E500 R MOV A,x
001C C3 CLR C
001D 9408 SUBB A,#08H
001F 503D JNC ?C0016
; SOURCE LINE # 189
; SOURCE LINE # 190
0021 AB00 R MOV R3,text
0023 AA00 R MOV R2,text+01H
0025 A900 R MOV R1,text+02H
0027 850082 R MOV DPL,x
002A 758300 MOV DPH,#00H
002D 120000 E LCALL ?C_CLDOPTR
0030 FF MOV R7,A
0031 602B JZ ?C0016
0033 ?C0015:
; SOURCE LINE # 191
0033 8F00 R MOV ?lcd_data?BYTE,R7
0035 120000 R LCALL lcd_data
; SOURCE LINE # 192
0038 0500 R INC x
003A 80DE SJMP ?C0012
; SOURCE LINE # 196
; SOURCE LINE # 199
003C ?C0017:
003C E500 R MOV A,x
003E C3 CLR C
003F 9410 SUBB A,#010H
0041 501B JNC ?C0016
; SOURCE LINE # 200
; SOURCE LINE # 201
0043 AB00 R MOV R3,text
0045 AA00 R MOV R2,text+01H
0047 A900 R MOV R1,text+02H
0049 850082 R MOV DPL,x
004C 758300 MOV DPH,#00H
004F 120000 E LCALL ?C_CLDOPTR
0052 FF MOV R7,A
0053 6009 JZ ?C0016
0055 ?C0020:
; SOURCE LINE # 202
0055 8F00 R MOV ?lcd_data?BYTE,R7
0057 120000 R LCALL lcd_data
; SOURCE LINE # 203
005A 0500 R INC x
005C 80DE SJMP ?C0017
; SOURCE LINE # 207
C51 COMPILER V3.07, TCG3 12/03/06 20:15:35 PAGE 11

005E ?C0016:
005E 22 RET
; FUNCTION lcd_text (END)

; FUNCTION lcd_clear (BEGIN)
; SOURCE LINE # 214
; SOURCE LINE # 215
; SOURCE LINE # 216
0000 750001 R MOV ?lcd_code?BYTE,#01H
0003 120000 R LCALL lcd_code
; SOURCE LINE # 217
0006 750000 R MOV ?delay?BYTE,#00H
0009 7500C8 R MOV ?delay?BYTE+01H,#0C8H
000C 120000 R LCALL delay
; SOURCE LINE # 219
000F ?C0021:
000F 22 RET
; FUNCTION lcd_clear (END)

; FUNCTION main (BEGIN)
; SOURCE LINE # 227
; SOURCE LINE # 229
; SOURCE LINE # 233
0000 C282 CLR EN
0002 C281 CLR RS
0004 C280 CLR RW
0006 D284 SETB D4
0008 D285 SETB D5
000A D286 SETB D6
000C D287 SETB D7
; SOURCE LINE # 234
000E D2A7 SETB IN1
0010 D2A6 SETB IN2
0012 D2A5 SETB IN3
0014 D2A4 SETB IN4
0016 D2A3 SETB IN5
0018 D2A2 SETB IN6
001A D2A1 SETB IN7
001C D2A0 SETB IN8
; SOURCE LINE # 235
001E C290 CLR OUT1
0020 C291 CLR OUT2
0022 C292 CLR OUT3
0024 C293 CLR OUT4
0026 C294 CLR OUT5
0028 C2B7 CLR OUT6
; SOURCE LINE # 237
002A 759852 MOV SCON,#052H
002D 758921 MOV TMOD,#021H
; SOURCE LINE # 238
0030 758869 MOV TCON,#069H
0033 758DFA MOV TH1,#0FAH
0036 438780 ORL PCON,#080H
; SOURCE LINE # 241
0039 120000 R LCALL lcd_init
; SOURCE LINE # 242
003C 120000 R LCALL lcd_clear
; SOURCE LINE # 245
003F 750041 R MOV ?lcd_data?BYTE,#041H
0042 120000 R LCALL lcd_data
0045 750083 R MOV ?lcd_code?BYTE,#083H
0048 120000 R LCALL lcd_code
004B 750042 R MOV ?lcd_data?BYTE,#042H
004E 120000 R LCALL lcd_data
; SOURCE LINE # 247
0051 7F4D MOV R7,#04DH
C51 COMPILER V3.07, TCG3 12/03/06 20:15:35 PAGE 12

0053 120000 E LCALL _putchar
0056 7F61 MOV R7,#061H
0058 120000 E LCALL _putchar
005B 7F78 MOV R7,#078H
005D 120000 E LCALL _putchar
0060 7F69 MOV R7,#069H
0062 120000 E LCALL _putchar
0065 7F0D MOV R7,#0DH
0067 120000 E LCALL _putchar
; SOURCE LINE # 250
006A 750005 R MOV ?lcd_text?BYTE,#05H
006D 750000 R MOV ?lcd_text?BYTE+01H,#HIGH @@CONST_0000H
0070 750000 R MOV ?lcd_text?BYTE+02H,#LOW @@CONST_0000H
0073 120000 R LCALL lcd_text
; SOURCE LINE # 252
0076 7B05 MOV R3,#05H
0078 7A00 R MOV R2,#HIGH @@CONST_0006H
007A 7900 R MOV R1,#LOW @@CONST_0006H
007C 120000 E LCALL _printf
007F ?C0022:
; SOURCE LINE # 256
007F 00 NOP
0080 80FD SJMP ?C0022
; SOURCE LINE # 258
0082 22 RET
; FUNCTION main (END)

C51 COMPILER V3.07, TCG3 12/03/06 20:15:35 PAGE 13

NAME CLASS MSPACE TYPE OFFSET SIZE
==== ===== ====== ==== ====== ====


P0 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0080H 1
P1 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0090H 1
P2 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00A0H 1
P3 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00B0H 1
delay. . . . . . . . . . . . . . . . . PUBLIC CODE PROC ----- -----
count_ms . . . . . . . . . . . . . . AUTO DATA U_INT 0000H 2
i. . . . . . . . . . . . . . . . . . AUTO DATA U_INT 0004H 2
j. . . . . . . . . . . . . . . . . . AUTO DATA U_INT 0006H 2
EN . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0082H 1
lcd_clear. . . . . . . . . . . . . . . PUBLIC CODE PROC ----- -----
RS . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0081H 1
main . . . . . . . . . . . . . . . . . PUBLIC CODE PROC ----- -----
stevec . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0000H 1
RW . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0080H 1
OUT1 . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0090H 1
OUT2 . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0091H 1
OUT3 . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0092H 1
OUT4 . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0093H 1
OUT5 . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0094H 1
OUT6 . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B7H 1
lcd_data . . . . . . . . . . . . . . . PUBLIC CODE PROC ----- -----
podatek. . . . . . . . . . . . . . . AUTO DATA U_CHAR 0000H 1
PCON . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0087H 1
lcd_code . . . . . . . . . . . . . . . PUBLIC CODE PROC ----- -----
podatek. . . . . . . . . . . . . . . AUTO DATA U_CHAR 0000H 1
SCON . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0098H 1
TMOD . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0089H 1
TCON . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0088H 1
IN1. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00A7H 1
IN2. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00A6H 1
IN3. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00A5H 1
lcd_init . . . . . . . . . . . . . . . PUBLIC CODE PROC ----- -----
IN4. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00A4H 1
IN5. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00A3H 1
IN6. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00A2H 1
TH1. . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 008DH 1
IN7. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00A1H 1
IN8. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00A0H 1
_putchar . . . . . . . . . . . . . . . EXTERN CODE PROC ----- -----
lcd_text . . . . . . . . . . . . . . . PUBLIC CODE PROC ----- -----
text . . . . . . . . . . . . . . . . AUTO DATA PTR 0000H 3
x. . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0003H 1
_printf. . . . . . . . . . . . . . . . EXTERN CODE PROC ----- -----
D4 . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0084H 1
D5 . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0085H 1
D6 . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0086H 1
D7 . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0087H 1


MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 560 ----
CONSTANT SIZE = 31 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 9
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 23.58

PrispevekObjavljeno: Ned Mar 12, 2006 9:35 pm    Naslov sporočila:   Odgovori s citatom

U, kaksen gravz od izpisa Laughing Ali lahko nastavis, da je koda med izpisom listinga namesto na vrhu ? Tako bo moral skakati gor in dol ves cas da bi nasel relevantne vrstice, to bi bilo pa nesmiselna izguba casa.

Glede terminacije niza: moras lociti \n (newline, 0x10) in \0 (0x00, vrednost,za katero tvoja funkcija preverja konec niza). Razen ce compiler ne pocne kaj nenavadnega bi \n moral povzrociti enako tezavo, saj (unsigned char) "\n" != 0x00.
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
damo
Član
Član



Pridružen-a: Čet 31 Jul 2003 13:45
Prispevkov: 2008
Aktiv.: 8.48
Kraj: Krško

PrispevekObjavljeno: Ned Mar 12, 2006 9:37 pm    Naslov sporočila:   Odgovori s citatom

Ne vem, kako se tak listing v Keilu nastavi, če se sploh da Sad
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
damo
Član
Član



Pridružen-a: Čet 31 Jul 2003 13:45
Prispevkov: 2008
Aktiv.: 8.48
Kraj: Krško

PrispevekObjavljeno: Ned Mar 12, 2006 10:08 pm    Naslov sporočila:  Eureka!!! Odgovori s citatom

Rešil sem zadevo..... vedel sem, da mora bit nekaj butastega....

Uporabljam isp kabel in program. Po nešteto poskusih menjanja kode in procesorja, sem za hec pritisnil gumb "Erase & program all" - to pomeni code, eeprom in signature (ter verjetno še kake lock bite) . Za eeprom in signature nisem mel nastavljeno nič, stisnem program.... in evo, zadeva deluje tako kot bi mogla. Deluje funkcija printf kakor tudi moj nesrečni lcd.

Sokrat, hvala za trud, za pivo pa vseeno dam, ko (oz. če) se srečava). Iz katerega konca Slovenije si? Lahko tudi na ZS, če nočeš na tablo.

lp, Damo
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> AVR, LPC900, x51 Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 491 dni


Powered by phpBB © 2001, 2005 phpBB Group