MicroCHIP.RU
Главная Документация Отладочные средства Справочник Поиск Ссылки
 Новости   Конференция   Контакты 
 

Контроль четности по RS232

 Нoвaя темa  |  Наверх  |  Перейти к теме  |  Поиск  |  Правила  |  Вход 

ВНИМАНИЕ!
Вы просматриваете архив форума.

Этот форум работает только в режиме просмотра и поиска.

Действующий форум переведен на новый движок и
находится по адресу www.microchip.su

 Контроль четности по RS232
Автор: Руслан ()
Дата:   10/05/2005 12:59

Всем привет. Сейчас успешно обмениваюсь между PIC16F877 и компом по RS232,
но без контроля четности. Подскажите, пожалуйста, как правильно
сделать контроль четности и что именно означает наличие этого контроля,
т.е. что именно контролируется и как.

Вот как я сейчас работаю по USART без контроля четности:
;////////////////////////////////////////////////////////////////
;Инициализация USART

InitUSART:
bsf STATUS, RP0
bcf STATUS, RP1 ;Bank 1
movlw 5
movwf SPBRG ;9600 bod
bcf TXSTA, SYNC ;Asynchronous mode
bcf TXSTA, TX9 ;8-bit transmission
bcf TXSTA, BRGH ;Low speed
bsf TXSTA, TXEN ;Transmission enable
bcf STATUS, RP0 ;Bank 0
bsf RCSTA, SPEN ;Serial port enable
bcf RCSTA, TX9 ;8-bit reception
bsf RCSTA, CREN ;Enable reception

return

;////////////////////////////////////////////////////////////////
;отправка байта в комп

out:
movwf TXREG
btfss PIR1,TXIF
goto $-1

;--------------------------------
;** проверка ушло ли

bsf STATUS, RP0
bcf STATUS, RP1 ;Bank 1

btfss TXSTA,TRMT ; ушло ли?
goto $-1 ; если нет то жду

bcf STATUS, RP0 ;Bank 0

;***END проверка ушло ли

return

;////////////////////////////////////////////////////////////////
;прием байта из компа

in:
btfss PIR1,RCIF
goto $-1
movf RCREG,W
return

;////////////////////////////////////////////////////////////////

Заранее благодарен!
С уважением, Руслан.




 
 Наверно тут ошибка
Автор: Entuziast ()
Дата:   10/05/2005 13:28


> Всем привет. Сейчас успешно обмениваюсь между PIC16F877 и
> компом по RS232,
> но без контроля четности. Подскажите, пожалуйста, как правильно
> сделать контроль четности и что именно означает наличие этого
> контроля,
> т.е. что именно контролируется и как.

Бит чётности передаётся после последнего бита данных. Его значение зависит от значения битов
данных и от того какая проверка на чётность задана - на чётность или на нечётность. Если число
битов с 1 в блоке данных чётно и задана проверка на чётность(EVEN Parity) то в этот бит надо
записать 0, если задана проверка на НЕчётность (Odd Parity) то 1 и т.д.
Не забудь выставить в терминалке соотв. параметр


 
 Re: Контроль четности по RS232
Автор: Ecole ()
Дата:   10/05/2005 14:15

>Подскажите, пожалуйста, как правильно
>сделать контроль четности и что именно означает наличие этого контроля,
>т.е. что именно контролируется и как.

Про сам бит четности тебе уже ответили, поэтому повторяться не буду.

Может появиться другой вопрос: как убедиться, что данные, переданные
на РС из контроллера (или переданные из контроллера в РС), являются
достоверными? Вот для этого уже нужна контрольная сумма. Т.е.
данные нужно передавать блоками с контрольной суммой. При приеме
должна подсчитываться контрольная сумма принятого блока и сверяться
с переданной контрольной суммой. Если контрольная сумма неправильная,
блок нужно передать/принять еще раз.

А бит четности (ИМХО) реально ничего не дает.

------------------------------------------------------
http://www5.domaindlx.com/cprime/lesson/dir2.htm
http://www5.domaindlx.com/cprime/
обновление: новый раздел в Уроках С++


 
 Re: Контроль четности по RS232
Автор: VaBо ()
Дата:   10/05/2005 14:25

Ecole писал(а):

>>
> А бит четности (ИМХО) реально ничего не дает.
>

Сам по себе - мало что даёт. Как, впрочем, и контрольная сумма (LRC). А в паре -
дают, и ещё как!!



Отправка отредактированного (10/05/2005 14:26)


 
 Re: Наверно тут ошибка
Автор: Руслан ()
Дата:   10/05/2005 18:04

>какая проверка на чётность задана

где я должен задать параметр?
...
>то в этот бит надо
>записать 0, если задана проверка на НЕчётность (Odd Parity) то 1 и т.д.

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




 
 т.е. выходит
Автор: Руслан ()
Дата:   10/05/2005 18:09

что сам по себе каждый из способов не дает полной гарантии контроля
правильной передачи данных.

И если применить еще третий способ проверки то будет еще точнее...

Что бы еще применить?


 
 в пике контроль чётности нужно делать программно
Автор: patton ()
Дата:   10/05/2005 18:35

т.е. использовать 9-ти битную передачу и в зависимости от выбранного
способа программно выставлять 9-ый бит.
По-поводу, что бы ещё применить, неплохо бы сделать хотя бы то что
реализовано в винде, т.е. контроль чётности, а потом делать CRC, а уже
потом думать, что делать дальше.


 
 а со стороны компа как?
Автор: Руслан ()
Дата:   10/05/2005 18:43

тоже программно или там аппаратно без моего активного участия?


 
 а в MSDN глянуть? ( - )
Автор: patton ()
Дата:   10/05/2005 18:46

-


 
 Re: т.е. выходит
Автор: VаBo ()
Дата:   10/05/2005 19:41

Руслан писал(а):

> что сам по себе каждый из способов не дает полной гарантии
> контроля
> правильной передачи данных.
>
> И если применить еще третий способ проверки то будет еще
> точнее...
>
> Что бы еще применить?

Больше - ничего. Но контроль чётности каждого байта и контрольная сумма пакета
должны применяться вместе. См. MODBUS ASCII.


 
 Сделай ЦИК16
Автор: Entuziast ()
Дата:   10/05/2005 20:05

и не заморачивайся. Затраты те же а эффективности намного выше.


 
 Странный код для передачи
Автор: Entuziast ()
Дата:   10/05/2005 20:34

> ;отправка байта в комп
>
> out:
> movwf TXREG ;без проверки бухнул байт в шифт регистр
> btfss PIR1,TXIF ;и теперь тока интеррапт ждёшь
> goto $-1
>
> ;--------------------------------
> ;** проверка ушло ли А ЧЕГО ТЕПЕРЬ ПРОВЕРЯТЬ? ЕСЛИ ИНТЕРРАПТ ОТ
ПЕРЕДАЧИ БЫЛ ТО 100% УШЛО - ИНТЕРРАПТ ПЕРЕДАЧИ ВОЗНИКАЕТ КОГДА ПЕРЕДАЧА ЗАВЕРШЕНА
>
> bsf STATUS, RP0
> bcf STATUS, RP1 ;Bank 1
>
> btfss TXSTA,TRMT ; ушло ли?
> goto $-1 ; если нет то жду
>
> bcf STATUS, RP0 ;Bank 0
>
> ;***END проверка ушло ли
>
> return
>
> ;////////////////////////////////////////////////////////////////

Вот этого имхо достаточно
; *****************************************************************************
; Write a byte to the serial port.

WrRS232
btfss PIR1, TXIF ; Write only if TXREG is ready
bra WrRS232

movwf TXREG
return
; *****************************************************************************

ну если шибко надо удостовериться что байт ушёл то так
Вот этого имхо достаточно
; *****************************************************************************
; Write a byte to the serial port.

WrRS232
btfss PIR1, TXIF ; Write only if TXREG is ready
bra WrRS232

movwf TXREG
;
btfss TXSTA,TRMT ;Можно и так
btfss PIR1, TXIF ;но я бы так сделал вместо предыдущей строчки. хотя это
лишнее всё если перед записью в TXREG проверяеться TXIF - новый байт не запишется пока прежний
не уйдёт
goto $-1 ; если нет то жду


return
; *****************************************************************************

Sapienti sat

Отправка отредактированного (10/05/2005 20:44)


 
 Re: Странный код для передачи
Автор: FDA ()
Дата:   10/05/2005 21:55

Контроль чётности сам по себе фигня. Обычно данные передаются пакетами, так что
лучше просто дополнять каждый пакет контрольной суммой. При длине пакета до 255
байт обычно достаточно CRC-8, при большей длине можно использовать CRC-16.


 
 Совет мне?
Автор: VаBo ()
Дата:   10/05/2005 22:19

Entuziast писал(а):

> и не заморачивайся. Затраты те же а эффективности намного выше.

Тогда насчёт затрат на реализацию CRC и LRC поспорю..


 
 Стандартный протокол
Автор: PICal ()
Дата:   10/05/2005 22:20

http://www.spetspribor.com/support/software/wake/wake.html


 
 CRC - это НЕ контрольная сумма!
Автор: VаBo ()
Дата:   10/05/2005 22:21

это немного другое :)


 
 подскажите, пожалуйста
Автор: Руслан ()
Дата:   11/05/2005 10:55

>См. MODBUS ASCII

а что такое MODBUS ASCII и где его смотреть


 
 :))Совет автору темы в ответ на это
Автор: Entuziast ()
Дата:   11/05/2005 10:56

>что сам по себе каждый из способов не дает полной гарантии контроля
>правильной передачи данных.
>И если применить еще третий способ проверки то будет еще точнее...
>Что бы еще применить?
и имелось ввиду что ЦИК16 лучше комбинации LRC+Parity Bit. А полной гарантии не даёт ничто.

VаBo писал(а):
> Тогда насчёт затрат на реализацию CRC и LRC поспорю..
Поспорить можно.Но сначала давайте определимся что такое затраты.Я считаю затратами (по
убыванию важности)место в программной памяти, избыточность информации и время обработки.
ЦИК16 проигрывает только по месту в памяти.


 
 а что такое ЦИК16?
Автор: Руслан ()
Дата:   11/05/2005 10:59

где его смотреть?


 
 Здесь
Автор: VaBо ()
Дата:   11/05/2005 11:16

Руслан писал(а):

>> а что такое MODBUS ASCII и где его смотреть

http://users.senet.com.au/~akouz/main.html

и модбас и многое другое. Автор обитает на сахаре под ником АК


 
 Посмотри почту а дальше гуглом
Автор: Entuziast ()
Дата:   11/05/2005 11:26

-


 
 2FDA - your responce waiting :-))
Автор: Entuziast ()
Дата:   11/05/2005 11:54

http://www.microchip.ru/phorum/read.php?f=2&i=89219&t=88799


 
 благодарю
Автор: Руслан ()
Дата:   11/05/2005 12:20

буду разбираться


 
 Re: CRC - это НЕ контрольная сумма!
Автор: abvc ()
Дата:   11/05/2005 14:13

Пример подсчета CRC16. Сначала инициализируем crc_lo и crc_hi значениями 0xFF или
другими, процедура вызывается для каждого байта. В результате в crc_lo и crc_hi
содержится crc пакета данных. Для одного байта тратится около 120 тактов, так что
данные можно гнать непрерывным потоком(если порт аппаратный).


movlw 0xFF
movwf crc_hi
movlw 0xFF
movwf crc_lo

crc16:
movwf A
movlw 8
movwf N
crc_get_bit:
rrf A, f
btfsc STATUS, C
goto crc_in_1
rrf crc_lo, w
goto crc_cont
crc_in_1:
comf crc_lo, f
rrf crc_lo, w
comf crc_lo, f
crc_cont:
btfss STATUS, C
goto crc_shift
movlw b'01000000'
xorwf crc_hi, f
movlw b'00000010'
xorwf crc_lo, f
crc_shift:
rrf crc_hi, f
rrf crc_lo, f
decfsz N, f
goto crc_get_bit
return

На компе можно считать по таблице:

unsigned int CRC16;

const unsigned int CRCtbl[256] = { //таблица для полинома
A001
0x0000, 0xC0C1, 0xC181, 0x0140, 0xC301, 0x03C0, 0x0280, 0xC241,
0xC601, 0x06C0, 0x0780, 0xC741, 0x0500, 0xC5C1, 0xC481, 0x0440,
0xCC01, 0x0CC0, 0x0D80, 0xCD41, 0x0F00, 0xCFC1, 0xCE81, 0x0E40,
0x0A00, 0xCAC1, 0xCB81, 0x0B40, 0xC901, 0x09C0, 0x0880, 0xC841,
0xD801, 0x18C0, 0x1980, 0xD941, 0x1B00, 0xDBC1, 0xDA81, 0x1A40,
0x1E00, 0xDEC1, 0xDF81, 0x1F40, 0xDD01, 0x1DC0, 0x1C80, 0xDC41,
0x1400, 0xD4C1, 0xD581, 0x1540, 0xD701, 0x17C0, 0x1680, 0xD641,
0xD201, 0x12C0, 0x1380, 0xD341, 0x1100, 0xD1C1, 0xD081, 0x1040,
0xF001, 0x30C0, 0x3180, 0xF141, 0x3300, 0xF3C1, 0xF281, 0x3240,
0x3600, 0xF6C1, 0xF781, 0x3740, 0xF501, 0x35C0, 0x3480, 0xF441,
0x3C00, 0xFCC1, 0xFD81, 0x3D40, 0xFF01, 0x3FC0, 0x3E80, 0xFE41,
0xFA01, 0x3AC0, 0x3B80, 0xFB41, 0x3900, 0xF9C1, 0xF881, 0x3840,
0x2800, 0xE8C1, 0xE981, 0x2940, 0xEB01, 0x2BC0, 0x2A80, 0xEA41,
0xEE01, 0x2EC0, 0x2F80, 0xEF41, 0x2D00, 0xEDC1, 0xEC81, 0x2C40,
0xE401, 0x24C0, 0x2580, 0xE541, 0x2700, 0xE7C1, 0xE681, 0x2640,
0x2200, 0xE2C1, 0xE381, 0x2340, 0xE101, 0x21C0, 0x2080, 0xE041,
0xA001, 0x60C0, 0x6180, 0xA141, 0x6300, 0xA3C1, 0xA281, 0x6240,
0x6600, 0xA6C1, 0xA781, 0x6740, 0xA501, 0x65C0, 0x6480, 0xA441,
0x6C00, 0xACC1, 0xAD81, 0x6D40, 0xAF01, 0x6FC0, 0x6E80, 0xAE41,
0xAA01, 0x6AC0, 0x6B80, 0xAB41, 0x6900, 0xA9C1, 0xA881, 0x6840,
0x7800, 0xB8C1, 0xB981, 0x7940, 0xBB01, 0x7BC0, 0x7A80, 0xBA41,
0xBE01, 0x7EC0, 0x7F80, 0xBF41, 0x7D00, 0xBDC1, 0xBC81, 0x7C40,
0xB401, 0x74C0, 0x7580, 0xB541, 0x7700, 0xB7C1, 0xB681, 0x7640,
0x7200, 0xB2C1, 0xB381, 0x7340, 0xB101, 0x71C0, 0x7080, 0xB041,
0x5000, 0x90C1, 0x9181, 0x5140, 0x9301, 0x53C0, 0x5280, 0x9241,
0x9601, 0x56C0, 0x5780, 0x9741, 0x5500, 0x95C1, 0x9481, 0x5440,
0x9C01, 0x5CC0, 0x5D80, 0x9D41, 0x5F00, 0x9FC1, 0x9E81, 0x5E40,
0x5A00, 0x9AC1, 0x9B81, 0x5B40, 0x9901, 0x59C0, 0x5880, 0x9841,
0x8801, 0x48C0, 0x4980, 0x8941, 0x4B00, 0x8BC1, 0x8A81, 0x4A40,
0x4E00, 0x8EC1, 0x8F81, 0x4F40, 0x8D01, 0x4DC0, 0x4C80, 0x8C41,
0x4400, 0x84C1, 0x8581, 0x4540, 0x8701, 0x47C0, 0x4680, 0x8641,
0x8201, 0x42C0, 0x4380, 0x8341, 0x4100, 0x81C1, 0x8081, 0x4040 };

void addCRC16(char b)
{
CRC16 = (CRC16>>8)^CRCtbl[(CRC16&0xFF)^b];
}


 
 выходит
Автор: Руслан ()
Дата:   11/05/2005 18:36

как-то криво. т.е. надо программно что-то анализировать и в 9-й бит
регистра USART что-то записывать.

Но я ведь могу этот 9-й бит как-нибудь по своему алгоритму записывать
только потом как это принимать в компе? Или там можно указать 9-битную передачу,
а контроль четности не указывать при этом самому анализировать 9-й бит...




 
 а в MSDN глянуть?
Автор: patton ()
Дата:   11/05/2005 22:15

http://msdn.microsoft.com


 
 Re: выходит
Автор: Ecole ()
Дата:   12/05/2005 10:48

>... т.е. надо программно что-то анализировать и в 9-й бит
>регистра USART что-то записывать.

Вообще-то советую почитать даташит от Микрочипа по USART (ищи AN744).
Там все написано.

Если на пальцах, то можно сказать так:
Берем для примера 2 числа
5 = 0b00000101
13 = 0b00001101
Видим, что у числа 5 количество единиц = 2, а у числа 13 количество единиц = 3.
Поскольку у числа 5 количество единиц четное, то parity bit = 0.
У числа 13 количество единиц нечетное, значит parity bit = 1.
Вот и весь алгоритм.

Со стороны PC дополнительно ничего делать не нужно. Просто когда пишешь программу,
нужно указать правильный тип данных, т.е. 8 бит + бит четности.
Рекомендую заглянуть на www.rs232.ru - там много информации о том, как
писать программу под Windows. Особенно рекомендую:
http://rs232.ru/doc002.html
Лучшей статьи мне видеть не приходилось.

------------------------------------------------------
http://www5.domaindlx.com/cprime/lesson/dir2.htm
http://www5.domaindlx.com/cprime/
обновление: новый раздел в Уроках С++


 
 а как
Автор: Руслан ()
Дата:   12/05/2005 13:37

>Видим, что у числа 5 количество единиц = 2, а у числа 13 количество единиц = 3

а как "увидеть" это на asm?


 
 А так (+)
Автор: Ecole ()
Дата:   12/05/2005 14:00

Скачиваешь с сайта microchip.com AN774 вместе с 00744.zip - в этом ZIP-файле
имеются примеры на асм.

------------------------------------------------------
http://www5.domaindlx.com/cprime/lesson/dir2.htm
http://www5.domaindlx.com/cprime/
обновление: новый раздел в Уроках С++


 
 поиском пользоваться умеешь?
Автор: Vova ()
Дата:   12/05/2005 15:46

http://www.piclist.com/techref/microchip/math/bit/countbits.htm


 
 благодарю, только там
Автор: Руслан ()
Дата:   12/05/2005 16:38

примеры на с, а мне надо на asm
пример проверки четности, чтоб не изобретать велосипед...


 
 глянул эту ссылку
Автор: Руслан ()
Дата:   12/05/2005 16:46

и не понял, к чему это?
там про установки каких-то битов,
а про проверку четности байта ч ничего не обнаружил...
или я не прав?


 
 Re: глянул эту ссылку
Автор: Greg ()
Дата:   12/05/2005 16:56

Руслан писал(а):

> а про проверку четности байта ч ничего не обнаружил...
> или я не прав?


прав, прав. лучше здесь посмотреть

http://www.piclist.com/techref/microchip/math/bit/parity.htm


 
 упс, чуть-чуть не про то получилось (-)
Автор: Vova ()
Дата:   12/05/2005 16:59

упс, чуть-чуть не про то получилось (-)


 
 ты эта..., рукой покажи :)
Автор: pal ()
Дата:   12/05/2005 17:01

odd_parity:
movwf tmp
swapf tmp,W
xorwf tmp,W
movwf tmp
rrf tmp,F
rrf tmp,F
xorwf tmp,W
movwf tmp
rrf tmp,F
xorwf tmp,F
rrf tmp,F;результат возвращается в переносе
return



 
 Re: ты эта..., рукой покажи :)
Автор: Greg ()
Дата:   12/05/2005 17:06

не впечатляет...

http://www.microchip.ru/phorum/read.php?f=2&i=89898&t=89640


 
 Странно... (+)
Автор: Ecole ()
Дата:   12/05/2005 17:14

У меня в файле 00774.zip находится следующее:
Appendix A for PIC16
   p16_2stp.asm
   p16_prty.asm
   p16_tiri.asm
   p16_tprp.asm
   p16_twrp.asm
   Readme16.txt
Appendix B for PIC17
   p17_2stp.asm
   p17_prty.asm
   p17_tiri.asm
   p17_tprp.asm
   p17_twrp.asm
   Readme17.txt
Appendix C for PIC18
   p18_2stp.asm
   p18_prty.asm
   p18_tiri.asm
   p18_tprp.asm
   p18_twrp.asm
   Readme18.txt


------------------------------------------------------
http://www5.domaindlx.com/cprime/lesson/dir2.htm
http://www5.domaindlx.com/cprime/
обновление: новый раздел в Уроках С++


 
 горе мне, 3 цикла просрал
Автор: pal ()
Дата:   12/05/2005 17:31

:)


 
 а можно
Автор: Руслан ()
Дата:   12/05/2005 17:36

дописать комментарии к коду asm на русском языке,
если не затруднит? а то не могу уловить мыслю...

и че там с этими циклами?

Заранее благодарю.


 
 OFF
Автор: Ник ()
Дата:   12/05/2005 17:53

Нечаянно навеяло воспоминание: - консультация перед госсом. Спрашиваем напрямую у
препода по политэкономии - подсказывать будете? - Да!... только толку? Отличнику
скажешь 2 слова - он доклад на 2х листах напишет, а двоечник - и эти 2 слова
переврет!




 
 а у меня все срр и h
Автор: Руслан ()
Дата:   12/05/2005 18:01

сбрось, пожалуйста, мне на почту
свой 00774.zip

мой e-mail: ruslan_b76@mail.ru


 
 маска я Вас знаю :)
Автор: pal ()
Дата:   12/05/2005 18:11

не можно, т.к. я не понимаю из чего следует вот это:
"if the parity of (a,b,e,f) is 0, then the parity of (a,b,c,d,e,f,g,h) is equal to
the parity of (c,d,g,h)..."


 
 Re: маска я Вас знаю :)
Автор: Greg ()
Дата:   12/05/2005 18:39

pal писал(а):

> не можно, т.к. я не понимаю из чего следует вот это:
> "if the parity of (a,b,e,f) is 0, then the parity of
> (a,b,c,d,e,f,g,h) is equal to
> the parity of (c,d,g,h)..."


что, действительно не понимаете?

сумма abef равна 0 (имеется в виду пролучаемый бит четности). Если из abcdefgh
выкинуть abef (поскольку их сумма даст 0), то
останутся пресловутые cdgh ...


беда с асмистами :)



Отправка отредактированного (12/05/2005 18:40)


 
 кстати, на С это будет короче
Автор: Greg ()
Дата:   12/05/2005 18:42

http://www.microchip.ru/phorum/read.php?f=2&i=38107&t=37983


 
 Re: Контроль четности по RS232
Автор: Doclor ()
Дата:   12/05/2005 22:59

А MODBUS кто нибуть реализовывал на пике если да то в каком объеме, как организовывали интервал
ожидания?
В MODBUS можно контроль четности + стоп или 2 стопа после восьми бит данных вопрос как два
стопа сделать?

=== Почем опиум для народа ? ===


 
 Только что сбросил 00744.zip - лови (-)
Автор: Ecole ()
Дата:   13/05/2005 10:26

-

------------------------------------------------------
http://www5.domaindlx.com/cprime/lesson/dir2.htm
http://www5.domaindlx.com/cprime/
обновление: новый раздел в Уроках С++


 
 Re: Контроль четности по RS232
Автор: VaBо ()
Дата:   13/05/2005 11:04

Doclor писал(а):

> А MODBUS кто нибуть реализовывал на пике если да то в каком
> объеме, как организовывали интервал
> ожидания?
> В MODBUS можно контроль четности + стоп или 2 стопа после
> восьми бит данных вопрос как два
> стопа сделать?
>

Ты это, определись для начала. Если модбас АСКИИ, то интервалы ожидания пох (но
контроль чётности нужен), а если РТУ - то там в конце CRC, но без контроля чётности
битов в процессе...


 
 благодарю
Автор: Руслан ()
Дата:   13/05/2005 11:15

буду разбираться


 
 со стороны компа
Автор: Руслан ()
Дата:   13/05/2005 17:46

инициализирую так:

----------------------------------------
// Fill in the DCB: baud=9600, 9 data bits, no parity, 1 stop bit.
dcb.BaudRate = 9600;
dcb.ByteSize = 9;
dcb.Parity = EVENPARITY;//NOPARITY; тут перебрал все варианты
dcb.StopBits = ONESTOPBIT;
dcb.fParity = TRUE;

dcb.fDtrControl = DTR_CONTROL_ENABLE; //+12
dcb.fRtsControl = RTS_CONTROL_DISABLE; //-12

fSuccess = SetCommState(hCom, &dcb);
------------------------------------------

выдает ошибку, что неверно сконфигурирован порт.
Че компу надо?




 
 hCom откуда берёшь?
Автор: patton ()
Дата:   14/05/2005 01:38

dcb.fDtrControl = DTR_CONTROL_ENABLE;

и это зачем?


 
 отсюда
Автор: Руслан ()
Дата:   16/05/2005 18:59

HANDLE hCom = CreateFile(
szComPort,
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
NULL
);




 
 чёто не то делаете, я же спросил нафиг вам эта модемная бодяга здесь нужна?
Автор: patton ()
Дата:   16/05/2005 22:16

/*dcb.fDtrControl = DTR_CONTROL_ENABLE; //+12*/
это вам нафиг здесь не нужно

не надо лишних движений

парити ставите какой надо, какой хотите и какой собираетесь использовать,
этим вам уже все уши объяснили, для записи этого хватит,

а для чтения используете GetCommState и смотрите fErrorChar


 
 сюда смотрели?
Автор: patton ()
Дата:   16/05/2005 22:21

http://msdn.microsoft.com/library/default.asp?url=/library/en-
us/dnfiles/html/msdn_serial.asp

вроде всё верно, но статья полезная


 
 посмотрел
Автор: Руслан ()
Дата:   17/05/2005 11:06

но там нет контроля четности, а без него у меня и так работает
------------------------
DCB dcb;

FillMemory(&dcb, sizeof(dcb), 0);
dcb.DCBlength = sizeof(dcb);
if (!BuildCommDCB("9600,n,8,1", &dcb)) {
// Couldn't build the DCB. Usually a problem
// with the communications specification string.
return FALSE;
}
else
// DCB is ready for use.


 
 согласен
Автор: Руслан ()
Дата:   17/05/2005 11:08

что это здесь не надо, но оно никакой роли не играет,
т.к.этих ножек у меня аппаратно нет