Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Почему не управляет? А зачем биты 5 и 4 в регистре LCR микросхемы 16с450 и её клонов? А винде это же можно сделать через API упраляя контекстом устройства...

Отправлено Petrovich 20 марта 2007 г. 13:34
В ответ на: я знаю что был, и знаю что комп его не управляет отправлено DASM 20 марта 2007 г. 12:58

Регистр LCR по адресу +3 от базового адреса сом порта, доступен по чтению и записи
Бит 5
0 - паритет генерится микросхемой по передаваемым данным
1 - бит паритета устанавливается программно
Бит 4 при Lcr.5 =1
0 - бит паритета 1
1 - бит паритета 0
Только при передаче адреса надо фифо запретить, чтоб данные из фифо не передались как адрес...
Для этого в регистр FCR (+2 от базовой) надо записать
0000 0000
Для включения 0000 0001
Биты FCR.2 FCR.1 сбрасывают Фифо передатчика и приемника...

Для дельфей под винду
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Spin;
.....

Var
dcb :TDCB;
hCom :THANDLE;

dwError :DWORD;
fSuccess :BOOl;
modemstatus:Dword;
// процедура открытия порта
procedure OpenCom;
var Tmp:Pchar;
begin
dwError:=Noerror;
hCom := CreateFile(pchar(Form1.Port.text),
GENERIC_READ or GENERIC_WRITE,
0, (* comm devices must be opened w/exclusive-access *)
Nil, (* no security attrs *)
OPEN_EXISTING, (* comm devices must use OPEN_EXISTING *)
0, (* not overlapped I/O *)
0 (* hTemplate must be NULL for comm devices *)
);
if (hCom = INVALID_HANDLE_VALUE)
then
begin
dwError := GetLastError();
exit;
end;
(*
* Omit the call to SetupComm to use the default queue sizes.
* Get the current configuration.
*)
fSuccess := GetCommState(hCom, dcb);{берем контекст устройства}
if not(fSuccess)
then
begin
dwError := GetLastError();
exit;
end;
with dcb do
begin
DCBlength:=sizeof(Dcb);
BaudRate :=STRtoint(Form1.speed.items[Form1.speed.itemindex]);
ByteSize := STRtoint(Form1.Lenght.items[Form1.Lenght.itemindex]);
Case Form1.Control.itemindex of
0: Parity := NoParity; {бит 9 негенерится}
1: Parity := ODDParity; {бит 9 генерится микросхемой}
2: Parity := EVENPARITY;{бит 9 генерится микросхемой}
3: Parity := MarkPARITY;{бит 9 = 1}
4: Parity := SPACEPARITY;{бит 9 = 0}
end;
case form1.stopbit.itemindex of
0: StopBits := ONESTOPBIT;
1: stopbits := One5STOPBITS;
else StopBits := TWOSTOPBITS;
end;
end;
fSuccess := SetCommState(hCom, dcb);
if not(fSuccess)
then
begin
dwError := GetLastError();
exit;
end;

end;
// процедура закрытия порта
procedure CloseCom;
begin
dwError:=Noerror;
fSuccess := CloseHandle(hCom);
if not(fSuccess)
then
begin
dwError := GetLastError();
exit;
end;
end;




Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
поделите шесть пополам:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru