[Pomoc] komunikacne rozhranie RS232 v C

Programovacie jazyky, rady, poradňa...
Xapoh1
Novice
Novice
Používateľov profilový obrázok
Príspevky: 6
Registrovaný: 24 jún 2006, 21:36
Kontaktovať používateľa:

[Pomoc] komunikacne rozhranie RS232 v C

Príspevok od používateľa Xapoh1 »

kompletne zadanie:

Kód: Vybrať všetko

http://www.kar.elf.stuba.sk/predmety/ap/blok3.php
Nejde mi konkretne prijimanie textu, ostatne facha v pohode.
Potreboval by som poradit, ako mam prijimat text, malo by to byt nieco, ako pri prijimani 1 pismena, ale v cykle, pokym neprijme napriklad "*". Moja funkcia:
  • void receivedFromPort()
    {
    int limit=0; // prijaty aspon jeden znak
    DWORD Pocet=0; // Pocet prijatých dát
    char Data=0; // Sem uloz prijatý znak
    HANDLE hConsole;
    hConsole = GetStdHandle(STD_OUTPUT_HANDLE);

    SetConsoleTextAttribute(hConsole,10);
    printf("Recieved: ");
    do
    {
    PurgeComm(hCom,PURGE_TXCLEAR | PURGE_RXCLEAR);
    ReadFile(
    hCom, // Handle portu, z ktorého cítame
    &Data, // Pointer na buffer, kam ukladáme prijaté dáta
    1, // Pocet bytov, na ktoré cakáme
    &Pocet, // Pointer na skutocný pocet prijatých dát
    NULL); // Musí byt NULL
    // Funkcia ReadFile tu teraz caká, az kým nieco nepríde,
    // ale môze aj skoncit bez zachyteného znaku, ak medzitým vyprsia timeouty.
    if(Pocet==1)
    {
    printf("%c",Data);
    limit==1;
    }
    //skonci az ked prijmeme aspon jeden znak a vyprsi timeout
    }while((limit!=1&&Pocet!=1)||(limit==1&&Pocet==1));

    printf("\n");
cize potrebujem poradit, ako to spravit. Treba tam dat asi nejaky while(znak!='*') alebo take daco.
Daco som aj skusal, ale neslo mi to a sam na to neviem prist.
Vopred dakujem
hazard16
Medium Expert
Medium Expert
Príspevky: 118
Registrovaný: 25 feb 2006, 8:57

Príspevok od používateľa hazard16 »

no myslim ze tento program mam niekde na disku este z prveho rocnika :D

//autoeditácia príspevku ( 17 May 2008, 10:01 )
tu masm oju funkciu prostrednictvom ktorej prebiehala komunikacia

Kód: Vybrať všetko

void konv(HANDLE hCom)
{
	system("cls");
	HANDLE  hConsole;  //Konzola na farby                         
	         hConsole = GetStdHandle(STD_OUTPUT_HANDLE);

	int a = 1, b = 0;
	DWORD Pocet3 = 0, k = 0;
	unsigned char Data3, znak[1000];
	do{
		DWORD Pocet2 = 0;
		unsigned char Data2;
		DCB dcb;
			dcb.DCBlength = sizeof(DCB);
			GetCommState(hCom,&dcb);
		PurgeComm(hCom,PURGE_TXCLEAR | PURGE_RXCLEAR);
		ReadFile(hCom, &Data2,  1, &Pocet2, NULL);
		if (Pocet2 != 0)
			if (Data2 != '\n')
				{
					znak[k] = Data2;
					k++;
				}		
		if (Data2 == '\n')
		{
			DWORD i;
			if (a == 0)
				printf("\n");
			SetConsoleTextAttribute(hConsole, 9);
			printf("on: ");
			for (i=0; i<k; i++)
				printf("%c", znak[i]);
			printf("\n");       
			k = 0; a = 1;Data2 = 0;
		}
		if (kbhit())                              
        { 
			SetConsoleTextAttribute(hConsole, 12);
			if (a == 1)
				printf("ja: ");
			Data3 = getch();                          
            switch(Data3)                           
            {
				case 13 : 
					printf("\n");		
					a = 1;
					Data3 = '\n';
					WriteFile(hCom, &Data3, 1, &Pocet3, NULL);
					break;              			
				default: 					
					a = 0;
					printf("%c",Data3); 
					WriteFile(hCom, &Data3, 1, &Pocet3, NULL);
			}
        }
       } while(Data3 != 27); 
    printf("\n");	
	SetConsoleTextAttribute(hConsole, 8);

}
Xapoh1
Novice
Novice
Používateľov profilový obrázok
Príspevky: 6
Registrovaný: 24 jún 2006, 21:36
Kontaktovať používateľa:

Príspevok od používateľa Xapoh1 »

dik moc, skusim daco vyhutat. Uz mi to aspon prijima, aj ked cez Terminal mi to nefacha. :smt006
Napísať odpoveď