Similar presentations:
Линии последовательной передачи данных
1. Линии последовательной передачи данных
2. RS-232
UAA1
G
+25В
R
0
+3В
R
A2
G
0
t
-3В
1
GND
-25В
G – генератор сигнала (передатчик); R – приемник;
A1, A2 – сигнальные проводники;
GND – земля
3. RS-422
UABA1
G
B1
RН
+6В
R
0
+0.2В
A2
R
RН
B2
G
0
t
-0.2В
1
GND
-6В
G – генератор сигнала (передатчик); R – приемник;
A1, B1, A2, B2 – сигнальные проводники;
GND – земля;
RН – сопротивление нагрузки
4. RS-485 (четырехпроводная схема)
ENABLEA1
G
ENABLE
R
RН
B1
A2
R
RН
G
B2
GND
SLAVE
MASTER
R
ENABLE
G
SLAVE
5. RS-485 (двухпроводная схема)
ENABLEA
G
RН
B
R
RН
ENABLE
G
R
GND
SLAVE
MASTER
R
ENABLE
G
SLAVE
6. Кодирование сообщений
Стартовыйбит
Бит
четности
U(t)
+UС
0
…1
0
1
0
0
0
1
1
0
1
0
1
0
t
-UС
Холостой
ход
Информационные биты
10110001
Стоповый
бит
7. Режимы кодирования
БитыСтартовый бит
Информационные биты
Бит четности
Стоповые биты
Режимы бита четности:
код с проверкой на четность;
код с проверкой на нечетность;
бит четности не передается.
Количество
1
5, 6, 7, 8
0, 1
1, 1.5, 2
8. Открытие порта последовательной передачи данных (Windows)
void* CreateFile(const char *Name,
long AccessFlags,
long ShareMode,
void *Ptr,
long CreateFlags,
long Flags,
void *TemplateH
);
//
//
//
//
//
//
//
”COM1”, ”COM2”, …
GENERIC_READ|GENERIC_WRITE
0
0
OPEN_EXISTING
FILE_FLAG_WRITE_THROUGH
0
void *Hnd;
Hnd = CreateFile( ”COM1”, GENERIC_READ|GENERIC_WRITE,
0, 0, OPEN_EXISTING, FILE_FLAG_WRITE_THROUGH, 0 );
if( Hnd == INVALID_HANDLE_VALUE ) {
printf("Open error\n");
}
9. Установка режима приема/передачи
bool SetCommState( void *Hnd, DCB *dcb );struct
long
long
long
long
long
long
char
char
char
…
};
DCB {
DCBlength;
BaudRate;
fBinary : 1;
fParity : 1;
fDtrControl : 2;
fRtsControl : 2;
ByteSize;
Parity;
StopBits;
//
//
//
//
//
//
//
//
//
sizeof(DCB)
скорость передачи в бодах
1
вкл./откл. бит четности
DTR_CONTROL_DISABLE
RTS_CONTROL_ENABLE
5, 6, 7, 8
0-нет, 1-нечетн., 2-четн.
0-1, 1-1.5, 2-2
10. Установка режима приема/передачи (пример)
DCB dcb;memset( &dcb, 0, sizeof(dcb) );
dcb.DCBlength
= sizeof(DCB);
dcb.BaudRate
= CBR_9600;
dcb.fBinary
= true;
dcb.ByteSize
= 8;
dcb.fParity
= true;
dcb.Parity
= EVENPARITY;
dcb.StopBits
= ONESTOPBIT;
dcb.fDtrControl = DTR_CONTROL_DISABLE;
dcb.fRtsControl = RTS_CONTROL_ENABLE;
if( !SetCommState(Hnd,&dcb) ) {
printf("SetCommState error\n");
}
11. Чтение/запись данных
bool ReadFile( int Hnd, void *Buf, long N,long *M, void *Ptr );
bool WriteFile( int Hnd, void *Buf, long N,
long *M, void *Ptr );
unsigned char Buf[100];
long BytesRead;
if( !ReadFile( Hnd, Buf, 100, &BytesRead, 0 ) ) {
printf("ReadFile error\n");
}