|
| 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" ;)
| |
|
|