Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2003.02.10;
Скачать: [xml.tar.bz2];

Вниз

программирование Com порта на asm е   Найти похожие ветки 

 
Safonov   (2002-12-05 16:41) [0]

Передо мной поставили задачу переписать старую прогу.
Программа написана на Delphi1. Работа с Com портом в ней ведется через модуль TUart половина которого написана на ASM"е.
Если я запускаю Delphi1 то прога спокойненько работает.
Если же запускаю Delphi 6, то вываливается с:"Privileged instruction" при старте. Ошибка при инициализации порта в строчке
OUT DX,AL.
Вопрос: есть ли какой-либо ключик, выставив который Delphi будет компилировать код совместимый с Delphi1 ? Или просто подскажите как решить проблему ?
Очень сильно не хочется переписывать часть программы отвечающую за обмен с портом, т.к. железо спаяно на коленке российскими "левшами". Протокол обмена нигде не описан. Разбор исходников займет слишком много времени...


 
Evgeny V   (2002-12-06 07:27) [1]

Проблема в том, что на дельфи 1 ты строишь 16-битные приложения, ну а на дельфи 6 32-бита, ну да ладно вроде ты и сам все понял, тебе или придется переписать работу с портом самому, или использовать готовые компоненты, которые ты можешь найти например или здесь на этом сайте они были, или на www.torry.net, в разделе vcl, communication, ports and modems


 
raiv   (2002-12-06 10:29) [2]

var
hCOM: THandle;
ComPort: PChar;
Function OpenPort_IO(hCOM: THandle;COMN:PChar;BaudR,ByteS:Integer;Parit,StopB:Byte):THandle;




Function OpenPort_IO(hCOM: THandle;COMN:PChar;BaudR,ByteS:Integer;Parit,StopB:Byte):THandle;
var
DCB: TDCB;
begin
hCOM:=CreateFile(COMN,GENERIC_READ or GENERIC_WRITE,0,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
if (hCom = INVALID_HANDLE_VALUE) then begin
ShowMessage("Невозможно открыть порт");
hCom:=0;
Result:=hCom;
Exit;
end;

if not GetCommState(hCOM, DCB) then begin
ShowMessage("Немогу прочитать статус порта: " + IntToStr(GetLastError));
hCom:=0;
Result:=hCom;
Exit;
end;
dcb.BaudRate :=BaudR;
dcb.ByteSize :=ByteS;
dcb.Parity :=Parit;
dcb.StopBits :=StopB;
//Настройка TimeOut
//ct.ReadIntervalTimeout:=MaxDWord;
//ct.ReadTotalTimeoutConstant:=0;
//ct.ReadTotalTimeoutMultiplier:=0;

//ct.WriteTotalTimeoutMultiplier:=0;
//ct.WriteTotalTimeoutConstant:=0;
//SetCommTimeouts(hCom,ct);


if not SetCommState(hCOM, DCB) then begin
ShowMessage("Немогу записать статус в порт: " + IntToStr(GetLastError));
hCom:=0;
Result:=hCom;
Exit;
end;
Result:=HCom;
end;


procedure TFormVlag.LbSpeedButton1Click(Sender: TObject);
begin
hCOM:=OpenPort_IO(hCOM,ComPort,1200,8,0,2);
if hCom=0 Then Exit;
RCom:=TCom.Create(False);
RCom.Priority:=tpHigher;
end;

А это на потоке

procedure TCom.Execute;
begin
While not Terminated do begin
Read_Vlag(HCom);
end;
end;
Procedure Read_Vlag(HCom:THandle);
var
summa,d: Double;
Count_io: Integer;
Data_Stack: Array [0..800] of double;
k: Integer;
begin
Summa:=0;
//Режим отсчета
if Read_B(hCom,1)=1 then begin
.......
end;


Function Read_B(HC:THandle;BufSize:Integer):Byte;
var
Buf: Byte;
count: DWord;
begin
ReadFile(hC, Buf, BufSize, count, nil);
Result:=Buf;
end;

Если я что-то пропустил или тебе не понятно пиши на мыло raiv@okg.sea.ru






 
Dorin   (2002-12-06 11:21) [3]

Esti takoe poniatie kak IOBMP.
V neom zapisano kakie porty mojno ispolizovati progge ...
Napishi mne na mylo(esle esheo nado) ia tebe prishliu SYS kotoryii izmeniaet IOBMP i EXE kotoryii zapuskaet tvoiu progu i obrashiaetsa k sys-u dlia izmenenia IOBMP ...



Страницы: 1 вся ветка

Форум: "Система";
Текущий архив: 2003.02.10;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.009 c
3-28688
Ihor Osov'yak
2003-01-24 03:03
2003.02.10
Сервис + созданный в рантайме TADOConnection -> проблема с


14-29065
Vox
2003-01-24 19:26
2003.02.10
В WinXP исчезла клавиатура!!!


4-29144
Igorek
2002-12-24 13:30
2003.02.10
Очистка очереди сообщений


1-28770
_hunter_
2003-02-01 15:07
2003.02.10
Запуск по таймеру


14-29074
JibSkeart
2003-01-25 13:18
2003.02.10
Эхх Лето бы скорее !!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский