Упражнение 4. Сериен порт (2): Difference between revisions

From Ilianko
Blanked the page
 
(35 intermediate revisions by the same user not shown)
Line 1: Line 1:
== Разглеждане на сигнал на сериен порт ==


''' Задача 1 ''' Създайте програма с безкраен цикъл, която да изпраща една буква към серийния порт. Използвайте специално пригодения кабел и разгледайте осцилограмата на серийни сигнал.
[[Image:square.png|right|200px|frame|Квадрат]]
== structures ==
'''Задача 3.''' Да се създаде програма за намиране на лицето на квадрат по дадени координати на точки на два срещуположни върха. Координатите на точките да се въвеждат от клавиатурата. Първо х и у за първа точка, после x и y за втората точка.
''' ''Упътване:'' Напишете
== cp, mv, mkdir, rm ==
[[Category:Компютърна периферия]]
== приемане ==
<code><pre>
#include <termios.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
     
#define BAUDRATE B9600
#define MODEMDEVICE "/dev/ttyS0"
     
int  main()
{
        int fd,c, res, stop = 0;
        struct termios oldtio,newtio;
        char buf[255];
       
        /* open the device to be non-blocking (read will return immediatly) */
        fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY | O_NONBLOCK);
        if (fd < 0) {perror(MODEMDEVICE); exit(-1);}
       
        fcntl(fd, F_SETFL, 0);
    fcntl(fd, F_SETFL, FNDELAY);       
       
       
             
        tcgetattr(fd,&oldtio); /* save current port settings */
        /* set new port settings for canonical input processing */
        newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD;
        newtio.c_iflag = IGNPAR | ICRNL;
        newtio.c_oflag = 0;
        newtio.c_lflag = ICANON;
       
        tcflush(fd, TCIFLUSH);
       
            newtio.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL|IXON);
            newtio.c_cflag &= ~( CRTSCTS );
            newtio.c_oflag &= ~OPOST;
            newtio.c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);
            newtio.c_cflag &= ~(CSIZE|PARENB);
            newtio.c_cflag |= CS8;
       
        newtio.c_cc[VMIN]=1;
        newtio.c_cc[VTIME]=0;
        tcsetattr(fd,TCSANOW,&newtio);
       
        /* loop while waiting for input. normally we would do something
          useful here */
             
    while ( stop == 0)
{
       
        usleep(100);
        fflush (stdout);
        res = read(fd,buf,10);
            // strcat(buf,buf2);
         
            for( c=0;c<res; c=c+1)
            {
              if ( buf[c] == 0xd ) 
              printf ("\n");
              else
              {
if (buf[c] == 0x61) { printf("oko");stop = 1;}
printf("%c", (char) buf[c]);
      }
           
            }
        }
       
        /* restore old port settings */
        tcsetattr(fd,TCSANOW,&oldtio);
return 0;
}
</pre></code>

Latest revision as of 17:44, 22 February 2012