pagpapadala ng isang lumutang sa serial

S

stygops

Guest
hello,
im trying upang magpadala ng isang magpalutang ng numero mula sa 89s8252 sa pc sa pamamagitan ng serial, gamit ang term232 ang maaari kong makita ang bilang na ako ay sended sa ika-ecomputer, ngunit ito ay hindi kumpleto ..
hal:
ako magpadala 98624.8736 at ako makatanggap ng 95624.8800 ...

kung bakit ito nangyari?

ang aking code ay sa C.

magpawalang-bisa pangunahing (walang laman)
(
magpalutang conta = 0;
hindi linagdaan char cont;
bit buffer [40];

SCON = 0x50; / * SCON: mode 1, 8-bit UART, paganahin ang rcvr * /
TMOD | = 0x20; / * TMOD: 1 timer, mode 2, 8-bit reload * /
TH1 = 0xfd; / * TH1: reload halaga para sa 9600 baud * /
TR1 = 1; / * TR1: timer 1 tumakbo * /
TI = 1; / * TI: itakda ang TI na magpadala ng unang char ng UART * /

conta = 98624.8736;
sprintf (buffer, "% .4 f \ 0", conta);
(
habang (buffer [cont]! = 0x00)
(
putchar (buffer [cont]);
cont ;
)
habang (1) ()
)
)

napaka thanks, sorry masamang ingles; p

 
W 2013 roku o 62 proc. w stosunku do roku poprzedniego wzrosła liczba naruszeń danych, co łącznie poskutkowało bezprawnym ujawnieniem 552 milionów tożsamości. Jak zauważa Jolanta Malak z firmy Symantec, liczba wykradzionych danych dotyczy zarówno podstawowych informacji, jak i wartości intelektualnej.

Read more...
 
Hi

Tukuyin ang isang unyon na binubuo ng isang magpalutang at apat na byte variable, at pagkatapos ay hayaan ang mga pantay-pantay na pantay-pantay na bahagi upang magpalutang ng numero (na gusto mong tosend), at magpadala ng mga byte mga variable sa PC.

Pagbati

 
Kung magpalutang ng iyong C compiler ay IEEE 32-bit na format, at pagkatapos nito ay may isang maliit na bahagi 24 bit, at sa gayon ang isang resolution ng humigit-kumulang sa pitong decimal na numero.

Subukang gumamit ng doble sa halip ng karosa.Ito ay may maraming mas bits.

 
Ako may tried double gamitin sa halip ng lumangoy ...error ang nananatiling ...

circuit_seller: maari kang gumawa ng isang halimbawa kung paano na ito?

 
Ano ang resulta ng mga sumusunod na binago ang code?
Code:magpawalang-bisa pangunahing (walang laman)

(

double conta = 0;

hindi linagdaan char cont;

bit buffer [40];SCON = 0x50; / * SCON: mode 1, 8-bit UART, paganahin ang rcvr * /

TMOD | = 0x20; / * TMOD: 1 timer, mode 2, 8-bit reload * /

TH1 = 0xfd; / * TH1: reload halaga para sa 9600 baud * /

TR1 = 1; / * TR1: timer 1 tumakbo * /

TI = 1; / * TI: itakda ang TI na magpadala ng unang char ng UART * /conta = 98624.8736;

sprintf (buffer, "% .4 lf \ n", conta);

(

habang (buffer [cont]! = 0x00)

(

putchar (buffer [cont]);

cont ;

)conta = 98624.8736F;

sprintf (buffer, "% .4 lf \ n", conta);

(

habang (buffer [cont]! = 0x00)

(

putchar (buffer [cont]);

cont ;

)conta = 98624.8736L;

sprintf (buffer, "% .4 lf \ n", conta);

(

habang (buffer [cont]! = 0x00)

(

putchar (buffer [cont]);

cont ;

)habang (1) ()

)

)

 
stygops wrote:

Ako may tried double gamitin sa halip ng lumangoy ...
error ang nananatiling ...
 
hai,
makuha ang simula address ng magpalutang ng variable sa pamamagitan ng isang vanturo at i-convert na char vanturo at ihatid ang mga 4 bytes.sa pc side makuha ang apat na char at reassable ito sa parehong order at i-convert sa karosa, na magiging trabaho pagmultahin.

paki-check ng panahon ang magpalutang ng halaga 98624.8736 kinakatawan ng 4 bytes occupies parehong halaga ng hex pareho sa ur xcompiler at ang compiler sa pc side dahil compiler sa bawat karosa ay kumakatawan sa diff format.Murugan

 
ok,
ako ginamit ng isang unyon at ipadala ang magpalutang sa bytes ..
ngunit ang magpalutang ay kinakatawan sa '5 'bytes!
at i-convert ang mga numero ng hexa na ako tumanggap at tugmang nito sa bilang sended ...ngunit bilugan ...

 
magpalutang ay laging katawanin ng 4 bytes sa kahit anong compiler, i-check ang attachment sa ibaba kung ang hex halaga ay pareho sa ur xcompiler at compiler sa pc at ang halaga ay kinakatawan ng dalawang sa parehong paraan (magkapareho 4 byte hex values) pagkatapos ay ang compiler sa pc panig ay maaaring may Rounded off-check ang preprocessor header na file math.h

murugan
Paumanhin, ngunit kailangan mong mag-login in upang makita ang attachment na ito

 
Hi stygops

Narito ang isang code ng ako ay ginagamit upang ilipat ang isang nakalutang resulta point sa PC mula sa DSP UART.

unyon
(
char ng isang [4];
maikling b [2];
magpalutang f;
) Data3, Result2, Result3;Result2.f = GetValue (& Data2 [0]);
TempValue1 = Result2.b [0] & 0xFF;
TempValue2 = (Result2.b [0] & 0xFF00)>> 8;
TempValue3 = Result2.b [1] & 0xFF;
TempValue4 = (Result2.b [1] & 0xFF00)>> 8;
habang ((ScibRegs.SCICTL2.all & 0xC0)! = 0xC0);
ScibRegs.SCITXBUF = TempValue1;
habang ((ScibRegs.SCICTL2.all & 0xC0)! = 0xC0);
ScibRegs.SCITXBUF = TempValue2;
habang ((ScibRegs.SCICTL2.all & 0xC0)! = 0xC0);
ScibRegs.SCITXBUF = TempValue3;
habang ((ScibRegs.SCICTL2.all & 0xC0)! = 0xC0);
ScibRegs.SCITXBUF = TempValue4;

sa gilid din ng PC na dapat mong makakuha ng isang magpalutang vanturo sa natanggap na byte array.

Pagbati

 
muruga86 wrote:

magpalutang ay laging katawanin ng 4 bytes sa kahit anong compiler
 
thanks echo para sa impormasyon, kami halos gamitin ang magpalutang ng halaga na ng 4 bytes sa haba at anim na numero sa precission.bawat proseso ng compiler magpalutang ng iba batay sa halaga na itinakda sa float.h isama ang file.Karamihan sa mga libro C sabihin sa iyo na ang mga wastong hanay para sa kamay ay 10-38 sa 1,038.Nakarating na ba naisip kung paano tulad ng isang saklaw ng kakaiba ay ginagamit?Balon, sagutin ang mga kasinungalingan sa representasyon IEEE.Dahil ang simbolo ng isang lumutang sa IEEE format ay naka-imbak sa isang positibong bias ng 127, na ang pinakamaliit na positibong halaga na maaari mong itabi sa isang variable magpalutang ay 2-127, na kung saan ay humigit-kumulang sa 1,175 x 10-38.Ang pinakamalaking halaga ng positibong ay 2,128, na kung saan ay tungkol sa 3.4 x 1,038.Katulad din na para sa isang double variable na ang pinakamaliit na posibleng halaga ay 2-1,023, na kung saan ay humigit-kumulang 2.23 x 10-308.Ang positibong pinakamalaking halaga na maaaring gaganapin sa isang double variable ay 21,024, na kung saan ay humigit-kumulang na 1.8 x 10,308.May isa pang biro.Matapos makuha ang IEEE format para sa isang magpalutang kapag oras na pagdating sa mga aktwal na tindahan ng mga ito sa memory na ito ay naka-imbak sa reverse order.Iyon ay kung ang tawag namin sa apat na mga byte IEEE form bilang ABCD pagkatapos habang naglalagay sa memorya na ito ay naka-imbak sa form sa DCBA.Let us maunawaan na ito kasama ang isang halimbawa.Ipalagay na ang lumulutang-point numero sa tanong ay 5,375.Its IEEE representasyon ay 0100 0000 1010 1100 0000 0000 0000 0000.Na ipinahayag sa kulam na ito ay 40 AC 00 00.Habang naglalagay ng ito sa memorya na ito ay naka-imbak na bilang 00 00 AC 40.Paano kumpirmahin namin ito?Paano iba kundi sa pamamagitan ng isang programa.Narito na ito ay ...

pangunahing ()
(
magpalutang ng isang = 5,375;
char * p;
int ako;

p = (char *) at isang;
for (i = 0; i <= 3; i )
printf ( "% 02x", (hindi linagdaan char) p );
)

extracte mula sa isang site
www.funducode.com/freec/Datatypes/datatypes1.htm [/ url]
 
IEEE 754 ay hindi usapan bytes o byte storage order.That's hanggang sa pagpapatupad.
Little endian machine tulad ng Pentium gamitin 00 00 AC 40.Big endian machine tulad ng PowerPC gamitin ang 40 AC 00 00.

Ang C standard na hindi nangangailangan ng anumang partikular na nakalutang point na format.Thankfully, karamihan sa mga modernong CPUs at compiler gamitin IEEE 754.

Subalit ang lahat ng ito ay anyong deviating mula sa orihinal na katanungan.Siya ay pagpapadala ng isang ascii string, hindi binary.

 
ako may tride muli.

ang code im gamit ang:

magpawalang-bisa pangunahing (walang laman)
(
hindi linagdaan char cont = 0;
unyon conta (
magpalutang num;
hindi linagdaan char num2 [3];
);
unyon conta numero;

SCON = 0x50; / * SCON: mode 1, 8-bit UART, paganahin ang rcvr * /
TMOD | = 0x20; / * TMOD: 1 timer, mode 2, 8-bit reload * /
TH1 = 0xfd; / * TH1: reload halaga para sa 9600 baud * /
TR1 = 1; / * TR1: timer 1 tumakbo * /
TI = 1; / * TI: itakda ang TI na magpadala ng unang char ng UART * /

numero.num = 98624.8736;
habang (cont <4)
(
putchar (numero.num2 [cont]);
cont ;
)
habang (1) ()
)sa ikalimang byte na im pagtanggap marahil ay basura ..
kaya, ngayon ako magpadala lamang ng apat na bytes, ito ay malutas ang problema ng ihinto ang comunication kung anumang mga byte ay zero.
ngunit ang mga numero ng 98624.8736 ay bilugan sa 98624.875!(i kalkulahin na ito gamit ang C51.pdf file kung keil ng tulong)

thanks a lot ...: p

 
Hi

Gamitin ang code sa ako ay may naka-post, kayo ay magtagumpay.

Pagbati

 

Welcome to EDABoard.com

Sponsor

Back
Top