Kā nosūtīt masīvs datus no datora uz 89C51 caur RS232?

E

elchula

Guest
Help me.Es gribu nosūtīt masīvs datu 89C51 no PC caur RS232, pēc tam eksportēt šos datus P1 ... Es esmu iesācējs, tad es nezinu, kā to izdarīt !!!!!!.

 
Wheather nosūtāt masīvu skaitlisku datu vai stīgas ..vienmēr tas pats.
Šajā līmenī jūs nodarbojas ar sērijas Komunikācijas kanālu, kas tikai sūta bytes .. Tātad, jums ir nepieciešams ieviest PROTOKOLS, to var ļoti vienkārši, piemēram, galvenes, kas apraksta sākumā, ko jūs sūtīs un cik bytes jums būt gaida.Ja ir problēma, un dati nav atbilst header .. tad jūsu kārta varat nosūtīt citu ziņojumu, kurā teikts nosūtīt vēlreiz. Vai pārraides ok .. ir atkarīgs no jums kā organizēt tā ..
HEADER var būt viena baita vai vairāk atkarībā no tā, cik baitus jūsu spect nosūtīt. šādā header Jūs varētu norādīt arī to, kā dati var tikt atgūti
kā chars, Ints, longs, utt.
in header kods ir atkarīgs no jums, ex 77 = char, 33 var uc

 
Protokols, ak, es nezinu, kā to radīt, jūs varat man palīdzēt?.

 
elchula wrote:

Protokols, ak, es nezinu, kā to radīt, jūs varat man palīdzēt?.
 
Jūs varat nepārprotami izskaidrot, par mani, man nav vēl izdarīt.

Jums ir saikne ar "8.051 un iegultās sistēmas"?Send to me.Thanx

 
Hi elchula,
lūdzu visite šo lionk, es domāju, ka laba lieta
http://chaokhun.kmitl.ac.th/ ~ kswichitSiswanto

 
Hic, i to nevar atrast informāciju, ko es gribu zināt!

 
Hi ir daudz veidu, kā orgenize tā ..
piemēram, jūs varat izmantot jebkuru charactor definēt kā sākt charactor plūsmā un tad programma rēķināties summu baits saņemt un nodot katru datu masīvs vai ostas ..Jūs varētu izmantot arī sērijas pārtraukt labāk saņem datu plūsmas

 
elchula wrote:

Jūs varat nepārprotami izskaidrot, par mani, man nav vēl izdarīt.Jums ir saikne ar "8.051 un iegultās sistēmas"?
Send to me.
Thanx
 
Quote:

Help me.
Es gribu nosūtīt masīvs datu 89C51 no PC caur RS232, pēc tam eksportēt šos P1 dati
 
Hic es rakstu šo programmu, C valodai, un mans kods, kam seko:

---------------------------------------
# include <AT89S53.h>
unsigned char CHR, h;
unsigned char s [8];
anulēts kavēšanās (unsigned char k);
anulēts delay1 ();
char getchr (spēkā neesošs);
anulēts sendchr (char CHR);
unsigned int array (unsigned char CHR);

anulēts main ()
(
SCON = 0x50;
TMOD = 0x20;
TH1 = 0xFD; / / 9600 Baud
TR1 = 1;
TI = 1;
P1 = 0xff;
while (1)
(
for (h = 15; h> = 0, h -)
(
CHR = getchr ();
Array (CHR); / / saņem masīvu no COM porta
P0 = P2 = CHR; / / sūtīt uz LEDs.
P1 = h; / / maiņā.
delay1 ();
)
)
)

char getchr (spēkā neesošs)
(
char CHR;
(
CHR = SBUF;
RI = 0;
return (CHR);
) while (RI! = 1);
)

anulēts sendchr (char CHR)
(
if (CHR == '\ r') CHR = '\ n';
(
TI = 0;
SBUF = CHR;
return;
) while (TI! = 1);
)

anulēts delay1 ()
(
unsigned int i;
for (i = 0; i <40.000, i );
)

anulēts kavēšanās (unsigned int k)
(
unsigned int i;
for (i = 0; i <= k, i );
)

unsigned int array (unsigned char CHR)
(
unsigned char s [8];
unsigned char i;
i = 0;
while (buffull! = 0)
(
for (i = 0; chr! = 0xa, i )
(
CHR = getchr ();
s = CHR;
)
s [i - 1] = 0;
return;
)
)Bet, kad es sūtu raksturu, to labi, un tad es gribu nosūtīt 8 rakstzīmes - masīvs, tas ir nepareizi.Vai varat izskaidrot, un atrast savu nepareizi.Thanx!

 
Kas terible haoss!Ka tā ir viņa mājas?

while (TI! = 1); un while (RI! = 1); novietot pēc atgriešanās paziņojumu.
nezināms identifikators buffull.Iespējams, buferis, pilnībā saņem.
trūkst atgriešanās vārda funkciju array (tas nav deklarēta kā atgriežas spēkā neesošu, bet unsigned int)
unsigned char s [8] pasludināja iekšā funkciju klāstu saskaņā ar darbības funkciju noteikumus, tā ir paslēpta no ārpasaules.
Viņš sagaida izmantot masīvu s par globālo mainīgo lielumu (deklarētas top programmā), lai nosūtītu 8 rakstzīmēm, kas saņemti no datora uz ostas P0 un P2.
Viņš rod ne izmantojot visos s masīvā un viņš prasa kur 8 simboli nosūtīts ieradies un kāpēc neparādās P0 kad P0 = P2 = CHR;.
Sendchr funkcija nekad neizmanto.
P1 = h; / / maiņu kāda veida maiņu sūta numurus no 0 15 downto par zemu skrubināt no P1?
i = 0; tieši pirms while (buffull! = 0), kāpēc tā ir inicializēts sākot cikla sistēmu (tā nav liela kļūda, bet kā jūs varat pastāstīt viņam par šiem mazajiem nekaitīgs lietām)

Viņš mēģināja sastādīt programmu Pirms ievietot šeit?
Jo viņš var viegli izrēķināt, kas nedarbojas.

Dažreiz es nevaru palīdzēt sev un brīnīties, kā tik tiešām var palīdzēt Newbie.
Darot savu darbu?

Paskaties kods ievietojis suromenggolo.
Viņš mēģināja laipni palīdzēt elchula.
Viņš nezināja, ka elchula ienīst montētājs, bet mīl vairāk C, no kurām nesaprot pārāk daudz ko līdz šim.

 
var būt problēma aizkavēt procedūru.Ja sūtāt 8 raksturs, tas saņems pirmo raksturs ātri masīvs un P0, P2.
pēc ieraksta kavēšanās uztvērēju otrā raksturs vēl jāgaida aizture pirms saglabāt masīvu, tāpēc 3., 4 ....var stiill izpildīt nekavējoties procedūra

Es domāju, ka jums ir jāizmanto sērijas pārtraukšanu ir tas, vai par kavēšanās procedūra vieta RI pārbaudiet kodu, ja dati ir jāsaņem.

 
suromenggolo wrote:

var būt problēma aizkavēt procedūru.
Ja sūtāt 8 raksturs, tas saņems pirmo raksturs ātri masīvs un P0, P2.

pēc ieraksta kavēšanās uztvērēju otrā raksturs vēl jāgaida aizture pirms saglabāt masīvu, tāpēc 3., 4 ....
var stiill izpildīt nekavējoties procedūraEs domāju, ka jums ir jāizmanto sērijas pārtraukšanu ir tas, vai par kavēšanās procedūra vieta RI pārbaudiet kodu, ja dati ir jāsaņem.
 
elchula wrote:

Help me.
Es gribu nosūtīt masīvs datu 89C51 no PC caur RS232, pēc tam eksportēt šos datus P1 ... Es esmu iesācējs, tad es nezinu, kā to izdarīt !!!!!!.
 
Vai jums ir nepieciešams tikai nosūtīt vērtību osta 8.051 caur hiper gala?.
Pašlaik Es rakstu C-8.051 in Keil tikai, nekādu problēmu ar tevi?.

bsiswoyo

 
Sveiki,
Uzrakstīt nelielu programmu, izmantojot C51 Keil uVision un Bascom-51.
Šajā programmā tiks noteikti P0, P1, P2, P3, ierakstot virkni no sērijas vai attālo programmu, piemēram, Visual Basic.

8.051-MCU no RX pin lasīs line string ar šādu formātu:
PX = nnn [CR] -> X porta numuru, 0 .. 3 un nnn ir 0 .. 255 (decimal formātā)

piemēri:

P0 = 15
visi P0 (zems nyble) tiks iestatīts augsts

P1 = 255
visi P1 (baitu) noteiks augsta

Lai pārbaudītu šīs programmas izmantošanu hiper termināls ar 9600, n, 8,1 iestatījumu.

Komanda formāts nav noteikusi osta simultan bet, kas pa vienam.
Par simultan var izmantot [Pnnn, nnn, nnn, nnn] komandu.

Šādu sarakstu raksta C51, izmantojot Keil uVision:

/************************************************* *****************************/
/ * HOWTO SET PORT 8.051 NO HYPER Terminal (REMOTE PROGRAM) * /
/ * Written by Bambang SISWOYO (http://www.bsiswoyo.com) * /
/ * * /
/ * Izmantojot C51 Keil programmatūra * /
/ * Veltīta EDABOARD.COM FOR Tutorial * /
/ * * /
/ * PROTOKOLS: * /
/ * 1.8.051 RX jāgaida rinda PX = nnn [CR] -> X: 0 .. 3, nnn: 0 .. 255 * /
/ * 2.Otrais char ir porta numuru, kuru piešķir vērtību nnn * /
/ * 3.String ir pārbaudīti un virknes vērtību konvertē baits un jānosaka ostas * /
/ * 4.Sūtīt 'Labi', ja norunāts, kļūdu, ja ir kāda kļūda * /
/************************************************* *****************************/

/************************************************* *****************************/
/ * Amats: getchar (), putchar, print_string var aizstāt: * /
/ * Getchar (..), putchar (..) un printf (..) in stdio.h bibliotēka * /
/ * * /
/ * For apmācība, pastāv lietot atsevišķi funkcijas vietā izmantot stdio bibliotēka.* /
/************************************************* *****************************/
/ * KOPĀ kods = 731 * /

statiskā char ok_msg kods [] = "OK";
statiskā char kods error_msg [] = "KĻŪDA komandu";
statiskā char kods error_port [] = "KĻŪDA: porta numurs";
statiskā char kods error_assign [] = "KĻŪDA: Piešķirt";
statiskā char kods error_value_enter [] = "KĻŪDA: Vērtība neeksistē";
statiskā char kods error_value_number [] = "KĻŪDA: Vērtība NOT IN RANGE";
statiskā char kods cmd_msg [] = "Ievadiet komandu:";

char lineinput [20];
char port;

# include <reg51.h>
# include "stdlib.h"

initSerial ()
(/ * Init sērijas līdz 1200 Baud, izmantojot 11.0592MHz kristāla * /
SCON = 0x50; / * SCON: mode 1, 8-bit UART, lai RCVR * /
TMOD | = 0x20; / * TMOD: taimeris 1, Mode 2, 8-bit pārlādēt * /
TH1 = 0xFD; / * TH1: reload vērtība 9.600 bodu * /
TR1 = 1; / * TR1: taimeris 1 skaitīt * /
TI = 1; / * TI: set TI nosūtīt pirmo char par UART * /
)

/************************************************* *****************************/
/ * FUNCTION LIKE getchar (..) * /
/************************************************* *****************************/
char getchar ()
/ * Funkcija pagaidiet char no rx pin * /
(
while (! RI);
RI = 0;
atpakaļ SBUF;
)

/************************************************* *****************************/
/ * FUNCTION LIKE putchar (..) * /
/************************************************* *****************************/
anulēts putchar (char ch)
(
while (! TI);
TI = 0;
SBUF = ch;
)

/************************************************* *****************************/
/ * SEND NEW LINE CHARACTER * /
/************************************************* *****************************/
anulēts put_newline ()
(
putchar (0x0D);
putchar (0x0A);
)

/************************************************* *****************************/
/ * FUNCTION LIKE printf (...) * /
/************************************************* *****************************/
anulēts print_string (char * PTR)
(Char ch;
while ((ch = * PTR )! = 0)
(Putchar (ch);)
put_newline ();
)

/************************************************* *****************************/
/ * WAIT LINE STRING ENTER * /
/************************************************* *****************************/
anulēts getlineinput ()
/ * Get vienā rindā string * /
/ * Jāgaida rinda no rx, līdz beidzot ar CR un Line Feed char * /
(
unsigned char cnt, / * Counter rakstura * /
char ch; / * buferis char * /
cnt = ch = 0;
while (cnt <19 & & ch! = 0x0D) / * lasīt line input * /
(Ch = getchar ();
if (ch! = 0x0D) / * ja CR atpakaļ kopums null * /
(
lineinput [cnt ] = ch;
putchar (CH) / * sūta atpakaļ (ECHO) termināla * /
)
)
lineinput [cnt] = 0;
put_newline ();
)

/************************************************* *****************************/
/ * IZVĒRTĒTU LINE STRING * /
/ * Un piešķirt VĒRTĪBU porta numuru 8.051-MCU * /
/************************************************* *****************************/
anulēts action_port ()
(Unsigned char vērtība;
int value_int;
char * PTR = &lineinput;
/ * Novērtēt stīgu un nosūtīt kļūda ja tāda pastāv * /
/ * Pārbaudīt "P" raksturu * /
if (* PTR ! = 'P')
(Print_string (& error_msg) return;)
/ * Pārbaudīt port /
if ((port = * PTR ) <'0 '| | Port> 3 ")
(Print_string (& error_port) return;)
/ * Pārbaudīt nodot * /
if (* PTR ! = '= ")
(Print_string (& error_assign) return;)
/ * Pārbaudīt vērtības pastāv * /
if (* PTR == 0)
(Print_string (& error_value_enter) return;)

/ / Pārvērš uz baitu no virknes ievade
value_int = atoi (PTR);
if (value_int <0 | | value_int> 255)
(Print_string (& error_value_number) return;)
/ * Pārvērst to baits * /
vērtība = value_int;
/ / Piešķir vērtību porta numurs
if (osta == '0 ') P0 = vērtība;
if (osta == '1 ') P1 = vērtība;
if (osta == '2 '), P2 = vērtība;
if (osta == '3 ') P3 = vērtība;
/ / Print ok
print_string (& ok_msg);
)

anulēts main ()
(
initSerial ();

while (1)
(Put_newline ();
/ * Sūtīt komandas virkni * /
/ * Ja izmanto ar Visual Basic (attālinātais programmu), lūdzu, noņemt * /
print_string (& cmd_msg);
/ * Lasīt line string, no sērijas * /
getlineinput ();
/ * Prasību port /
action_port ();
)
)

Šādu sarakstu raksta Bascom-51:

'/************************************************ ******************************/
"/ * HOWTO SET PORT 8.051 NO HYPER Terminal (REMOTE PROGRAM) * /
"/ * Written by Bambang SISWOYO (http://www.bsiswoyo.com) * /
'/ * * /
"/ * Izmantojot BASCOM51 * /
"/ * Veltīta EDABOARD.COM FOR Tutorial * /
'/ * * /
"/ * PROTOKOLS: * /
"/ * 1.8.051 RX jāgaida rinda PX = nnn [CR] -> X: 0 .. 3, nnn: 0 .. 255 * /
"/ * 2.Otrais char ir porta numuru, kuru piešķir vērtību nnn * /
"/ * 3.String ir pārbaudīti un virknes vērtību konvertē baits un jānosaka ostas * /
'/ * 4.Sūtīt 'Labi', ja norunāts, kļūdu, ja ir kāda kļūda * /
'/************************************************ ******************************/
"/ * KOPĀ kods = 991 * /

$ kristāla = 11059200
$ Baud = 9.600
$ regfile = "reg51.dat"

Dim Lineinput As String * 20
Dim Port As Byte
Dim Ch As String * 1
Dim vērtību Byte

'********************* GALVENIE PROGRAMMAS ************************** ******************
Nobraukums:
"/ * Ja izmanto ar Visual Basic (attālinātais programmu), lūdzu, noņemt * /
Print "Ievadiet komandu:"
"/ * Lasīt line string, no sērijas * /
Input Lineinput
"/ * Prasību port /
Gosub Action_port
Drukāt
Goto Run

'/************************************************ ******************************/
"/ * IZVĒRTĒTU LINE STRING * /
"/ * Un piešķirt VĒRTĪBU porta numuru 8.051-MCU * /
'/************************************************ ******************************/
Action_port:
"/ * Novērtē String Un Kļūdas sūtīšana Ja Exist * /
"/ * Pārbaudīt" P "raksturu * /
Ch = Left (lineinput, 1)
Ja Ch <> "P" Tad
Print "ERROR komandu"
Atpakaļ
Mērķi, ja
"/ * Pārbaudīt port /
Ch = MID (lineinput, 2, 1)
Port = Val (CH)
Ja Ch < "0" Or Ch> "3" Tad
Print "ERROR: PORT NUMURS"
Atpakaļ
Mērķi, ja
"/ * Pārbaudīt nodot * /
Ch = MID (lineinput, 3, 1)
Ja Ch <> "=" Tad
Print "ERROR: Piešķirt"
Atpakaļ
Mērķi, ja

"/ * Pārbaudīt vērtības pastāv * /
Ja Len (lineinput) = 3 Tad
Print "ERROR: Vērtība neeksistē"
Atpakaļ
Mērķi, ja

'/ / Pārvērtīsies baitu no virknes ievade
Vērtība = Val (MID (lineinput, 4))
'/ / Piešķir vērtību porta numurs
Select Case Port
Case 0: P0 = vērtība
Case 1: P1 = vērtība
Case 2: P2 = Vērtība
Case 3: P3 = vērtība
End Select
Print "OK"
Atpakaļ
Atvainojiet, bet jums ir nepieciešams autorizēties, lai skatītu šo pielikumu

 
elchula wrote:

Help me.
Es gribu nosūtīt masīvs datu 89C51 no PC caur RS232, pēc tam eksportēt šos datus P1 ... Es esmu iesācējs, tad es nezinu, kā to izdarīt !!!!!!.
 
bsiswoyo wrote:

Sveiki,

/ * PROTOKOLS: * /

/ * 1.
8.051 RX jāgaida rinda PX = nnn [CR] -> X: 0 .. 3, nnn: 0 .. 255 * /

/ * 2.
Otrais char ir porta numuru, kuru piešķir vērtību nnn * /

/ * 3.
String ir pārbaudīti un virknes vērtību konvertē baits un jānosaka ostas * /

/ * 4.
Sūtīt 'Labi', ja norunāts, kļūdu, ja ir kāda kļūda * /

/************************************************* *****************************/

 

Welcome to EDABoard.com

Sponsor

Back
Top