Øvelse 12
UART, RS232 og en rigtig god guide her: http://www.easysw.com/~mike/serial/serial.html
Koden indsættes, kig godt på den, der er nemlig //kommentarer i den :)
read.cpp, koden der læser fra en port, og dermed modtager det:
#include <stdio.h> /* Standard input/output definitions */
#include <string.h> /* String function definitions */
#include <unistd.h> /* UNIX standard function definitions */
#include <fcntl.h> /* File control definitions */
#include <errno.h> /* Error number definitions */
#include <termios.h> /* POSIX terminal control definitions */
//opretter POSIX terminal struct, hvor vi kan indsætte muligheder
struct termios options;
void main()
{
//åbner porten, /dev/ttyS0 angiver at der arbejdes med seriel kabler. (J1)
int fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY);
/*fcntl () angiver om den skal være blocking*/
fcntl(fd, F_SETFL, 0);
//IOCTL kald der ligger i .
tcgetattr(fd, &options);
//Her opsættes BAUD til 115200
cfsetispeed(&options, B115200);
cfsetospeed(&options, B115200);
//Aktiver modtageren og fastsætte lokale mode ...
options.c_cflag | = (clocal | CREAD);
//Sæt de nye muligheder for porten ...
tcsetattr(fd, TCSANOW, &options);
//opsætter til ingen paritet 8-bit (8N1):
options.c_cflag &= ~PARENB;
options.c_cflag &= ~CSTOPB;
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8;
//laver en modtage buffer
char buf [21];
read(fd,buf, 20);
//udskriver det til skærmen:
printf("Der modtages: %s",buf);
}
Vi sluttede de to porte sammen, med et null modem, startede to terminaler op, kørte read i den ene, og write i den anden, og minsandten om den ikke sendte:
#include <stdio.h> /* Standard input/output definitions */
#include <string.h> /* String function definitions */
#include <unistd.h> /* UNIX standard function definitions */
#include <fcntl.h> /* File control definitions */
#include <errno.h> /* Error number definitions */
#include <termios.h> /* POSIX terminal control definitions */
struct termios options;
void main()
{
int fd = open("/dev/ttyS1", O_RDWR | O_NOCTTY | O_NDELAY);
fcntl(fd, F_SETFL, 0);
tcgetattr(fd, &options);
//Sætter Baud til 115200
cfsetispeed(&options, B115200);
cfsetospeed(&options, B115200);
//Aktiver modtageren og fastsætte lokale mode ...
options.c_cflag |= (CLOCAL | CREAD);
//Sæt de nye muligheder for porten ...
tcsetattr(fd, TCSANOW, &options);
//opsætter til ingen paritet 8-bit (8N1):
options.c_cflag &= ~PARENB;
options.c_cflag &= ~CSTOPB;
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8;
//opretter skrive buffer:
char buf [21];
//Udskrver at brugeren gerne må skrive noget:
printf("Indskriv tekst (max 20 char.)\n\r");
//low-tec CIN:
gets(buf);
//skriver til filen, og dermed sender den noget:
write(fd,buf, sizeof(buf));
}
og modtog:













