/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
BCD til char
Fra : Flemming Hansen


Dato : 13-03-06 21:45

Hej,
Jeg er i gang med at lave et program til PIC 18F452, hvor der kommunikeres
med en Real Time Clock (ds1305) vha SPI interface og den aflæste værdi
sendes til PC'ens RS232 (serial) port. Da RTC'en sende værdien som BCD skal
den laves om til ASCII. I forbindelse med det har jeg lavet føgende
funktion:

void bcd2char(unsigned char bcd)
{
*tal1 = ((bcd & 0xf0) >> 4) + 0x30;
*tal2= ((bcd & 0x0f) + 0x30);
}

Der forudsættes at der sendes en værdi mellem 00 - 59. *tal1 og *tal2 er
globale variabler/pointer. Grunden til at jeg splitter værdien op til 2 er
at der er fra lærerens side krav på at bruge "hjemmelavet" RS232
kommunications program hvor jeg kun kan sende et array eller en karakter ad
gangen. Mit problem er bare at når *tal1 og *tal2 sendes til hyperterminal
lige efter hinanden for at vise f.eks. 12 sekunder viser det 22, for 13
viser det 33, altså *tal1 og *tal2 får det samme værdi. Jeg kunne ikke lige
gennemskue hvorfor det gør det. Har I et bud?



 
 
Bertel Brander (13-03-2006)
Kommentar
Fra : Bertel Brander


Dato : 13-03-06 22:52

Flemming Hansen wrote:
> gangen. Mit problem er bare at når *tal1 og *tal2 sendes til hyperterminal
> lige efter hinanden for at vise f.eks. 12 sekunder viser det 22, for 13
> viser det 33, altså *tal1 og *tal2 får det samme værdi. Jeg kunne ikke lige
> gennemskue hvorfor det gør det. Har I et bud?

De to pointere peger på det samme?

(Er der i øvrigt nogen grund til at det er pointere?)

--
Absolutely not the best homepage on the net:
http://home20.inet.tele.dk/midgaard
But it's mine - Bertel

Flemming Hansen (13-03-2006)
Kommentar
Fra : Flemming Hansen


Dato : 13-03-06 23:20

> De to pointere peger på det samme?
>

I følge koden skulle de to pointere indeholde 2 forskellige værdier. og de
er defineret som unsigned char *tal1, *tal2; hvordan kan de pege på det
samme?

> (Er der i øvrigt nogen grund til at det er pointere?)
>

Well, det returnede tal indeholde 2 ASCII værdier, altså for at kunne skrive
f.eks 12 på hyperterminal skal der skrives et ASCII 1 og ASCII 2. Jeg har i
første omgang returnere en string der indeholder 1 og 2 som eksempel, men
jeg fik bare fejl meddelelser når jeg returnerede string.



Bertel Brander (14-03-2006)
Kommentar
Fra : Bertel Brander


Dato : 14-03-06 00:13

Flemming Hansen wrote:
>> De to pointere peger på det samme?
>>
>
> I følge koden skulle de to pointere indeholde 2 forskellige værdier. og de
> er defineret som unsigned char *tal1, *tal2; hvordan kan de pege på det
> samme?

char whatever;
char *tal1 = &whatever;
char *tal2 = &whatever;

Eller:
char whatever[44];
char *tal1 = whatever;
char *tal2 = whatever;

>> (Er der i øvrigt nogen grund til at det er pointere?)
>>
>
> Well, det returnede tal indeholde 2 ASCII værdier, altså for at kunne skrive
> f.eks 12 på hyperterminal skal der skrives et ASCII 1 og ASCII 2. Jeg har i
> første omgang returnere en string der indeholder 1 og 2 som eksempel, men
> jeg fik bare fejl meddelelser når jeg returnerede string.

Du burde kunne:

void bcd2char(char *Dest, unsigned char bcd)
{
Dest[0] = ((bcd & 0xf0) >> 4) + 0x30;
Dest[1] = ((bcd & 0x0f) + 0x30);
}

--
Absolutely not the best homepage on the net:
http://home20.inet.tele.dk/midgaard
But it's mine - Bertel

Thomas Lykkeberg (18-03-2006)
Kommentar
Fra : Thomas Lykkeberg


Dato : 18-03-06 10:55

On Mon, 13 Mar 2006 23:20:07 +0100, "Flemming Hansen"
<dsl34257@cybercity.dk> wrote:

>I følge koden skulle de to pointere indeholde 2 forskellige værdier. og de
>er defineret som unsigned char *tal1, *tal2; hvordan kan de pege på det
>samme?
De er ikke initieret til at pege på noget (med mindre du selv har
gjort det). De peger nok på adresse 0. Hvis der ligger noget RAM på
adresse 0, ja så har du forklaringen at de kan pege på det samme

/Thomas

Ukendt (19-03-2006)
Kommentar
Fra : Ukendt


Dato : 19-03-06 19:01

"Flemming Hansen" <dsl34257@cybercity.dk> skrev i en meddelelse
news:4415d9ad$0$67262$157c6196@dreader2.cybercity.dk...
> Hej,
> Jeg er i gang med at lave et program til PIC 18F452, hvor der kommunikeres
> med en Real Time Clock (ds1305) vha SPI interface og den aflæste værdi
> sendes til PC'ens RS232 (serial) port. Da RTC'en sende værdien som BCD
> skal den laves om til ASCII. I forbindelse med det har jeg lavet føgende
> funktion:
>
> void bcd2char(unsigned char bcd)
> {
> *tal1 = ((bcd & 0xf0) >> 4) + 0x30;
> *tal2= ((bcd & 0x0f) + 0x30);
> }

Hvorfor ikke lave din BCD værdi som input, og char som output? Er der noget
som forhindrer det?

ps: går du på NOEA?



Flemming Hansen (19-03-2006)
Kommentar
Fra : Flemming Hansen


Dato : 19-03-06 21:00

> Hvorfor ikke lave din BCD værdi som input, og char som output? Er der
> noget som forhindrer det?

Jeg har valgt at gemme indholdet i 2 globale variabler. Der findes
garanteret nogle smartere metoder, men en nybegynder som mig kunne ikke
finde en bedre løsning :)


> ps: går du på NOEA?

Well, ja, kender vi hinanden? :)



Ove Kjeldgaard (19-03-2006)
Kommentar
Fra : Ove Kjeldgaard


Dato : 19-03-06 21:39

"Flemming Hansen" <dsl34257@cybercity.dk> wrote:

>Jeg har valgt at gemme indholdet i 2 globale variabler. Der findes
>garanteret nogle smartere metoder, men en nybegynder som mig kunne ikke
>finde en bedre løsning :)

Hvorfor så pointerne til variablerne?
Der er jo begrænset mængde RAM osv.

--
Med venlig hilsen, Ove Kjeldgaard, nospam AT privat DOT dk
Natur og Friluftsliv: <http://hiker.dk>

Flemming Hansen (19-03-2006)
Kommentar
Fra : Flemming Hansen


Dato : 19-03-06 23:18

>
> Hvorfor så pointerne til variablerne?
> Der er jo begrænset mængde RAM osv.
>

Well, nu stiller jeg det samme spørgsmål til mig selv :) Men jeg havde bare
hørt at hvis man skulle returnere flere værdier så kunne man bruge pointere,
men vidste bare ikke helt hvordan man skulle gøre det. Jeg tror nu at jeg
har styr på det :)



Ukendt (20-03-2006)
Kommentar
Fra : Ukendt


Dato : 20-03-06 08:57

"Flemming Hansen" <dsl34257@cybercity.dk> skrev i en meddelelse
news:441db81d$0$67258$157c6196@dreader2.cybercity.dk...
>> ps: går du på NOEA?
>
> Well, ja, kender vi hinanden? :)

Ikke personligt :)
Jeg har bare overhørt "jer" ævle om jeres bcd2char hele sidste uge oppe i
lab ;)



Flemming Hansen (20-03-2006)
Kommentar
Fra : Flemming Hansen


Dato : 20-03-06 15:51

>
> Ikke personligt :)
> Jeg har bare overhørt "jer" ævle om jeres bcd2char hele sidste uge oppe i
> lab ;)

Dvs. at du har hørt "men in action" ;)



Søg
Reklame
Statistik
Spørgsmål : 177577
Tips : 31968
Nyheder : 719565
Indlæg : 6409071
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste