Перейти к содержанию

Связь Atmega8 С Пк Через Rs232


Рекомендуемые сообщения

Привет всем местным!

Имеется вот такая схемка:

5dcbb5ec840f.jpg

Алгоритм на контроллере простой - принимает два байта данных по UART. Каждый байт подтверждает специальным байтом (не XOn/XOff). На ПК программа аналогичная, только наоборот - посылает два байта по одному и после каждого ожидает подтверждения.

Но на ПК программа при чтении из порта говорит, что прочитано 0 байтов и выходит (так и должно быть - в плане выхода, а не нуля байтов).

Алгоритм на контроллере:

.include "m8def.inc"
; fosc = 8MHz
; Fuse-bits : MSB ... LSB (76543210)
; High byte: 11011111
; Low byte : 11100100

.def temp = r22
.def temp2 = r18
.def dataTemp = r21
.def driveN = r19
.def stepsN = r20

; ----------------------------------
; подтверждение при передаче по uart - C5
.equ UART_ACK = 0b11000101

.def tempBaudRateH = r17
.def tempBaudRateL = r16
.equ DDR_SPI = DDRB
.equ DD_SCK = DDB5
.equ DD_MISO = DDB4
.equ DD_MOSI = DDB3

; uart baudrate coeff
.equ uart_baudrate_h = 0b00000000
.equ uart_baudrate_l = 0b00110011

; zero address
rjmp MAIN;
; ------------ MAIN --------------
MAIN:
; configurations block
; сразу же отключаем прерывания
cli
; stack init
ldi temp, low(RAMEND);
ldi temp2, high(RAMEND);
out SPH, temp2;
out SPL, temp;
; communications configuration
rcall ConfigPorts;
rcall SPI_MasterInit;
rcall UART_Init;
main_cycle:
; ожидаем приема от ПК по uart
rcall UART_Rcv
mov driveN, dataTemp ; номер двигателя
ldi dataTemp, UART_ACK
rcall UART_Snd
nop
rcall UART_Rcv
mov stepsN, dataTemp ; число шагов
mov dataTemp, driveN
rcall select_Drive
; ожидаем по времени сколько необходимо для включения SPI на ведомом МК
nop;
nop;
nop;
nop;
nop;
nop;
nop;
; передаем число шагов для выполнения
mov dataTemp, stepsN
rcall SPI_MasterTransmit
; немного ожидания
nop;
nop;
nop;
; отключаем ведомый МК
rcall deselect_Drives
; немного выжидаем
nop;
nop;
; говорим ПК, что мы передали ведомому МК данные
ldi dataTemp, UART_ACK
rcall UART_Snd
rjmp main_cycle;
; ------------------------------- MAIN FINISHED -----------------------------
; ----------- PROCS ------------
; configure ports
; In - NONE
; Out - NONE
ConfigPorts:
; config drive selector (PORTC) - 0,1,2,3,4,5 - out, 6 - in
ldi temp, 0b00111111;
out DDRC, temp;
; config (PORTB) - 0, MOSI, SCK, [1, 2 - unsused,for safety] - out, MISO - in.
ldi temp, 0b00101111;
out DDRB, temp;
; config UART (PORTD) - 1,2,3,4,5,6,7 - out, 0 - in
ldi temp, 0b11111110;
out DDRD, temp;
; globaly disable interrupts
cli;
ret
; allow SPI
; In - NONE
; Out - NONE
SPI_MasterInit:
; Set MOSI and SCK direction to output, all others are set to input
ldi temp, (1<<DD_MOSI)|(1<<DD_SCK)
out DDR_SPI,temp
; Enable SPI, Master, set clock rate fck/4
ldi temp, (1<<SPE)|(1<<MSTR)
out SPCR, temp
; Double the clock rate! up to fck/2
; sbi SPSR, SPI2X
ret
; SPI tranmition as master
; In - dataTemp - byte to be tranmitted
; Out - NONE
SPI_MasterTransmit:
; Start transmission of data (r16)
out SPDR, dataTemp
Wait_Transmit:
; Wait for transmission complete
sbis SPSR,SPIF
rjmp Wait_Transmit
ret
; UART initialization @ 9600 bps
; In - NONE
; Out - NONE
UART_Init:
; setting baudrate
ldi tempBaudRateH, uart_baudrate_h
ldi tempBaudRateL, uart_baudrate_l
out UBRRH, tempBaudRateH
out UBRRL, tempBaudRateL
; Enable reciever and transmitter
ldi dataTemp, (1<<RXEN)|(1<<TXEN)
out UCSRB, dataTemp
; setting frame format: 8data bits, 2 stop bits
ldi dataTemp, (1<<URSEL)|(1<<USBS)|(1<<UCSZ1)|(1<<UCSZ0)
out UCSRC, dataTemp
ret
; UART recieve proc
; In - NONE
; Out - dataTemp - recieved byte
UART_Rcv:
sbis UCSRA, RXC
rjmp UART_Rcv
in dataTemp, UDR
ret
; UART send proc
; In - dataTemp - byte to be transmitted over UART
; Out - NONE
UART_Snd:
sbis UCSRA, UDRE
rjmp UART_Snd
CheckFinishPrevSnd:
sbis UCSRA, TXC
rjmp CheckFinishPrevSnd
out UDR, dataTemp
ret
; select drive
; In - dataTemp - drive to select
; Out - NONE
select_Drive:
andi dataTemp, 0b00000111
ori dataTemp, 0b00001000
out PORTC, dataTemp
nop;
nop;
ret
; deselect drives
; In - NONE
; Out - dataTemp = 0
deselect_Drives:
clr dataTemp
ori dataTemp, 0b00110000
out PORTC, dataTemp
nop;
nop;
ret

На ПК программа выглядит так:

//#include <stdafx.h>
#include <Windows.h>
#include <stdio.h>
#include <windows.h> // ??
#define RDWR_BUFSZ 1
#define NDRIVES_MASK 0x07
#define DIR_MASK 0x01
#define DIR_POSITION 0x03
#define NSTEPS_MASK 0x7f
#define ONE_BYTE 0xff
#define uart_ack 0xc5
void Recv (HANDLE, unsigned char *);
void Send (HANDLE, unsigned char *);
int main(int argc, char* argv[])
{
char file_name[256];
wchar_t wFlName[256];
LPCWSTR flName;
HANDLE hSerial;
DCB dcbSerialParams = {0};
COMMTIMEOUTS timeouts = {0xFFFFFFFF,0,0,0,1500};
unsigned int DriveN;
unsigned int Nsteps;
unsigned int Direction;
unsigned int GotSmth;
wchar_t lastError[1024];
unsigned char drvN, Nst, rslt;
const WCHAR FileFullPath[] = {L"COM1"};
printf("Type in COM-port name. ");
wscanf(L"%s", wFlName);
//swprintf(wFlName, L"%s", file_name);
printf("port - %s\n", wFlName);
/** Начало. открытие порта. настройка **/
hSerial = CreateFile (FileFullPath, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hSerial == INVALID_HANDLE_VALUE) {
printf(" Can't open port.\n");
system("pause");
 ExitProcess(1);
};
// Конфигурирования
dcbSerialParams.DCBlength = sizeof(dcbSerialParams);
if (!GetCommState(hSerial, &dcbSerialParams)) {
printf(" Can't get port parameters\n");
CloseHandle(hSerial);
 ExitProcess(1);
};
dcbSerialParams.BaudRate = CBR_9600;
dcbSerialParams.fBinary = true;
dcbSerialParams.fParity = NOPARITY;					 // False
dcbSerialParams.fOutxCtsFlow = false;				 // no flow control by hardware (CTS)
dcbSerialParams.fDtrControl = DTR_CONTROL_DISABLE;	 // no handshaking
dcbSerialParams.fDsrSensitivity = false;			 // no look at DSR
dcbSerialParams.fOutX = false;						 // no software flow control (Xon/Xoff) on Tx
dcbSerialParams.fInX = false;						 // no software flow control (Xon/Xoff) on Rx
dcbSerialParams.fErrorChar = false;					 // don't change error chars (checked by parity if it is True)
dcbSerialParams.fNull = false;						 // we'll take even NULL characters
dcbSerialParams.fRtsControl = RTS_CONTROL_DISABLE;	 // no flow control by hardware (RTS)
// 8 битов данных, без бита четности, два стоповых бита
dcbSerialParams.ByteSize = 8;
dcbSerialParams.Parity = NOPARITY;
dcbSerialParams.StopBits = TWOSTOPBITS;
if(!SetCommState(hSerial, &dcbSerialParams)){
printf(" Can't set port parameters.\n");
 CloseHandle(hSerial);
system("pause");
 ExitProcess(1);
};
 // время ожидания
/*
timeouts.ReadIntervalTimeout=50;
timeouts.ReadTotalTimeoutConstant=50;
timeouts.ReadTotalTimeoutMultiplier=10;
timeouts.WriteTotalTimeoutConstant=50;
timeouts.WriteTotalTimeoutMultiplier=10;
*/
if(!SetCommTimeouts(hSerial, &timeouts)){
printf(" Can't set port timeout.\n");
 CloseHandle(hSerial);
 ExitProcess(1);
};
do {
printf("Type in drive No (0..7, 8 - exit) - ");
scanf("%u", &DriveN);
if (DriveN == 8) break;
DriveN &= NDRIVES_MASK;
printf("Number of halfsteps (0..127, 128 - exit) - ");
scanf("%u", &Nsteps);
if (Nsteps == 128) break;
Nsteps &= NSTEPS_MASK;
printf("Direction (1 - to there, 0 - from there) - ");
scanf("%u", &Direction);
Direction &= DIR_MASK;
Direction <<= DIR_POSITION;
Nsteps = Nsteps | Direction;
drvN = DriveN & ONE_BYTE;
printf(" Drive number is ready to be sent - %x\n", drvN);
Send(hSerial, &drvN);
Recv(hSerial, &rslt);
if (rslt != uart_ack) {
printf(" Wrong acknowledge got - %x\n", rslt);
break;
};
Nst = Nsteps & ONE_BYTE;
printf(" Command is ready to be sent - %x\n", Nst);
Send(hSerial, &Nst);
Recv(hSerial, &rslt);
if (rslt != uart_ack) {
printf(" Wrong acknowledge - %x\n", rslt);
break;
};
} while (true);
/** Конец. **/
CloseHandle(hSerial);
system("pause");
return 0;
}
void Recv (HANDLE hSerial, unsigned char *szBuff)
{
DWORD dwBytesRW = 0;
int RdWrResult;
DWORD i;
wchar_t lastError[1024];
 // чтение
RdWrResult = ReadFile(hSerial, szBuff, RDWR_BUFSZ, &dwBytesRW, NULL);
printf(" Number of bytes read - %u\n", dwBytesRW);
printf(" Data read - ");
 for (i = 0; i < dwBytesRW; i ++) {
 printf("%x ", szBuff[i]);
 };
printf("\n");
if(!RdWrResult){
printf("Fail on recieve.\n");
 CloseHandle(hSerial);
system("pause");
 ExitProcess(1);
}
}
void Send (HANDLE hSerial, unsigned char *szBuff)
{
DWORD dwBytesRW = 0;
int RdWrResult;
DWORD i;
wchar_t lastError[1024];
 // запись
RdWrResult = WriteFile(hSerial, szBuff, RDWR_BUFSZ, &dwBytesRW, NULL);
printf(" Number of bytes writen - %u\n", dwBytesRW);
printf(" Data writen - ");
 for (i = 0; i < dwBytesRW; i ++) {
 printf("%x ", szBuff[i]);
 };
printf("\n");
if(!RdWrResult || dwBytesRW != RDWR_BUFSZ) {
printf("Fail on send.\n");
 CloseHandle(hSerial);
system("pause");
 ExitProcess(1);
}
}

Связь настроена на формат 8N2.

Помогите советом или хотя бы направлением на поиск.

Еще вопрос небольшой. Хотелось бы мигалки впендюрить на линии RX и TX на MAX232. Что бы наблюдать есть ли вообще передача.

Изменено пользователем Sergy
Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Индикация для MAX 232:

А можно ли обойтись без MX33199? Просто это нужно наскоряк - за два дня доделать (вместе с программой).

Я имею в виду - осилит ли RS232 на компьютере нагрузку в два канала?

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Да не нужно эту микросхему (MC33199)-это схема для автодиагностики . Просто на примере этой схеме хотел показать, как реализована индикация приема-передачи для MAX 232 . Смотрите только на обвязку MAX232.

Ссылка на комментарий
Поделиться на другие сайты

Да не нужно эту микросхему (MC33199)-это схема для автодиагностики . Просто на примере этой схеме хотел показать, как реализована индикация приема-передачи для MAX 232 . Смотрите только на обвязку MAX232.

Но в описании на MAX232 (от MAXIM и от TI) конденсаторы указаны в 1мкФ. А вот у st232 - 0.1мкФ.

Может какая опечатка на картинке?

И все же мне досадно с программой.

Ссылка на комментарий
Поделиться на другие сайты

Ладно. С max-ми я-то разберусь. Тут бы еще с включением к компьютеру разобраться. Нарыл схемку на сайте. И никак не могу сообразить - чего же они используют одну единую линию (и то - зацикленную) и DB9 у них находится со стороны TTL? Может я не правильно составил свою схему?

Ссылка на комментарий
Поделиться на другие сайты

А схема там попутана, точно.

Там - по ссылке или у меня?

Вообще, я по-думываю, что наверное надо было таймауты выставить вменяемые, а не безожидательный порт настраивать.

И, вообще, это нормально, что сразу по получении первого байта данных я начинаю отправку подтверждения? В плане - "стоповые биты" и все такое, линия должна быть отпущена некоторое время перед очередной отправкой. То есть: у меня скорость передачи данных выставлена 9600 битов в секунду; это значит, что один бит занимает 0,000104167 секунды; при двух стоповых битах линия должна быть отпущена вот столько времени - 0,000208333 секунды. А у меня сразу же начинается отправка байта подтверждения. Это нормально или стоило бы выждать?

Ссылка на комментарий
Поделиться на другие сайты

Ясно. А, вообще, моя схема хоть работоспособна?Я уже замаялся тестовые прошивки клепать по пара-пять раз в день и на диоды смотреть как они молчат.

К примеру:

.include "m8def.inc"
; fosc = 8MHz
; Fuse-bits : MSB ... LSB (76543210)
; High byte: 11011111
; Low byte : 11100100
.def temp = r25
.def temp2 = r18
.def dataTemp = r21
.def driveN = r19
.def stepsN = r20
; формируем задержку
.def Razr0 = r22
.def Razr1 = r23
.def Razr2 = r24
.equ Waiting0 = 0b10000000
.equ Waiting1 = 0b00011010
.equ Waiting2 = 0b00000110
; ----------------------------------
; подтверждение при передаче по uart - C5
.equ UART_ACK = 0b11000101
.def tempBaudRateH = r17
.def tempBaudRateL = r16
.equ DDR_SPI = DDRB
.equ DD_SCK = DDB5
.equ DD_MISO = DDB4
.equ DD_MOSI = DDB3
; uart baudrate coeff
.equ uart_baudrate_h = 0b00000000
.equ uart_baudrate_l = 0b00110011
; zero address
rjmp MAIN;
; ------------ MAIN --------------
MAIN:
; configurations block
; сразу же отключаем прерывания
cli
; stack init
ldi temp, low(RAMEND);
ldi temp2, high(RAMEND);
out SPH, temp2;
out SPL, temp;
; communications configuration
rcall ConfigPorts;
rcall SPI_MasterInit;
rcall UART_Init;
sbi PORTB, 1
main_cycle:
; ожидаем приема от ПК по uart
; cbi PORTB, 1
; посылаем по uart один единственный байт.
ldi dataTemp, UART_ACK
rcall UART_Snd
; sbi PORTB, 1
; подождем 250 миллисекунд? ;-)
ldi Razr0, Waiting0
ldi Razr1, Waiting1
ldi Razr2, Waiting2
Waiting_250ms:
subi Razr0, 1
sbci Razr1, 0
sbci Razr2, 0
brcc Waiting_250ms
rjmp main_cycle;
; ------------------------------- MAIN FINISHED -----------------------------
; ----------- PROCS ------------
; configure ports
; In - NONE
; Out - NONE
ConfigPorts:
; config drive selector (PORTC) - 0,1,2,3,4,5 - out, 6 - in
ldi temp, 0b00111111;
out DDRC, temp;
; config (PORTB) - 0, MOSI, SCK, [1, 2 - unused,for safety] - out, MISO - in.
ldi temp, 0b00101111;
out DDRB, temp;
; config UART (PORTD) - 1,2,3,4,5,6,7 - out, 0 - in
ldi temp, 0b11111110;
out DDRD, temp;
; globaly disable interrupts
cli;
ret
; allow SPI
; In - NONE
; Out - NONE
SPI_MasterInit:
; Set MOSI and SCK direction to output, all others are set to input
ldi temp, (1<<DD_MOSI)|(1<<DD_SCK)
out DDR_SPI,temp
; Enable SPI, Master, set clock rate fck/4
ldi temp, (1<<SPE)|(1<<MSTR)
out SPCR, temp
; Double the clock rate! up to fck/2
; sbi SPSR, SPI2X
ret
; SPI tranmition as master
; In - dataTemp - byte to be tranmitted
; Out - NONE
SPI_MasterTransmit:
; Start transmission of data (r16)
out SPDR, dataTemp
Wait_Transmit:
; Wait for transmission complete
sbis SPSR,SPIF
rjmp Wait_Transmit
ret
; SPI recieve routine (it uses FIFO-ed SPI with 0b00000000 data to be sent)
; In - NONE
; Out - dataTemp - retrieved byte
SPI_Recieve:
clr dataTemp
rcall SPI_MasterTransmit
in dataTemp, SPDR
ret
; UART initialization @ 9600 bps
; In - NONE
; Out - NONE
UART_Init:
; setting baudrate
ldi tempBaudRateH, uart_baudrate_h
ldi tempBaudRateL, uart_baudrate_l
out UBRRH, tempBaudRateH
out UBRRL, tempBaudRateL
; Enable reciever and transmitter
ldi dataTemp, (1<<RXEN)|(1<<TXEN)
out UCSRB, dataTemp
; setting frame format: 8data bits, 2 stop bits
ldi dataTemp, (1<<URSEL)|(1<<USBS)|(1<<UCSZ1)|(1<<UCSZ0)
out UCSRC, dataTemp
ret
; UART recieve proc
; In - NONE
; Out - dataTemp - recieved byte
UART_Rcv:
sbis UCSRA, RXC
rjmp UART_Rcv
in dataTemp, UDR
ret
; UART send proc
; In - dataTemp - byte to be transmitted over UART
; Out - NONE
UART_Snd:
sbis UCSRA, UDRE
rjmp UART_Snd
CheckFinishPrevSnd:
sbis UCSRA, TXC
rjmp CheckFinishPrevSnd
out UDR, dataTemp
ret

Если закоментировать перед main_cycle команду sbi PORTB, 1 и раскоментировать эту же команду внутри цикла main_cycle, то на 15-м пине (PORTB1) нет напряжения. А если оставить команду sbi PORTB, 1 перед main_cycle рамкоменьированной - на PORTB1 есть напряжение. При этом на линии TX (третий пин) всегда +5В.

Что это за дела не могу сообразить.

Изменено пользователем Sergy
Ссылка на комментарий
Поделиться на другие сайты

Обнаружил, что эдакое "зависание" происходит на вот этом участке:

CheckFinishPrevSnd:
   sbis UCSRA, TXC
   rjmp CheckFinishPrevSnd

Из этого цикла и не можем выйти.

А ведь именно после него происходит выдача на отправление через

out UDR, dataTemp

.

Помогите разобраться что не так в этом цикле?

Я так думаю, что придется использовать прерывания "по приему" и "по передаче"?

Ссылка на комментарий
Поделиться на другие сайты

MAX232 работает и с 0.1 мкф и с 1 мкф. проверено!

Использую обычно 0.1

У меня с 10 мкФ и 22 мкФ работает

Помогите разобраться что не так в этом цикле?

Евстифеев рекомендует такую процедуру передачи

USARTJTransmit:
; Ждать очистки буфера передатчика
sbis UCSRA,UDRE
rjmp USART_Transmit
; Скопировать 9-й бит данных из г17 в ТХВ8
;мой коммент: следующие 4 строки можно выкинуть если используется 8N1 без проверки на ошибки.
cbi UCSRB,TXB8
sbrc rl7,0
sbi UCSRB,TXB8
; Загрузить младший байт данных в буфер, начать передачу
out UDR,rl6
ret

Может дело в ожидании UDRE а не TXC.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Может дело в ожидании UDRE а не TXC.

Я уже проверил. убрал цикл проверки флага TXC. На max232 пошел бликовать диод, показывающий передачу.

UPD: Возможная причина - у меня отключены прерывания как USART-а так и глобально. А это значит, что если я нигде не записываю 1 в флаг TXC, то он никоим образом не снимется. Потому и был стопор. Думаю (надеюсь), что это так.

Изменено пользователем Sergy
Ссылка на комментарий
Поделиться на другие сайты

COKPOWEHEU на сколько я помню там по рекомендациям является кратность 10. В отладочных платах ,микрочипа по-крайней мере, вешают кондеры 0.1 мк

В поисках работы..

Looking for job

Ссылка на комментарий
Поделиться на другие сайты

зависит от марки микросхемы, для старых версий рекомендуется 10 мкФ, новые и при 0.1 мкФ работают. 22 мкФ ставил так как ничего лучше под рукой не было.

<...> Возможная причина - у меня отключены прерывания как USART-а так и глобально.<...>Думаю (надеюсь), что это так.

Нет, я недавно пытался запустить avr910-совместимый бутлоадер, не разрешал там прерывания, но прием и передача осуществлялись нормально, именно с проверкой битов UDRE и RXC (если интересно частота 115200, 8N1) причем в симуляторе студии на этом месте зависает либо я просто не знаю как ему сказать что передача завершена, но это не важно.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Нет, я недавно пытался запустить avr910-совместимый бутлоадер, не разрешал там прерывания, но прием и передача осуществлялись нормально, именно с проверкой битов UDRE и RXC (если интересно частота 115200, 8N1) причем в симуляторе студии на этом месте зависает либо я просто не знаю как ему сказать что передача завершена, но это не важно.

По RXC у меня прием нормально осуществляется. Передача нормально ведется по UDRE.

P.S.: У студии есть симулятор? Возможно ему стоит дать на скормление какой-нибудь файл или по-пробовать что-нибудь с виртуальным портом?

Ссылка на комментарий
Поделиться на другие сайты

С UART-ом я разобрался. Выставил таймауты, нормально прием пошел (контроллер не успевал так быстро отвечать).

Но появились кое-какие помехи. Составил небольшую программу (для ПК и для меги) для кольцевания связи. То есть - на компе задал байт на отправку, мега его принимает и отправляет назад, комп этот байт выводит. Помехи такие - иногда выставляется старший бит в логическую единицу. При этом, когда подключаюсь через HyperTerminal, то таких "спецэффектов" не показывается.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...