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

Вниз

Хелп!!! Что за глюка с прерыванием !!! TP7   Найти похожие ветки 

 
YAndrey   (2002-09-02 15:08) [0]

Нужна прога на TP7 работающая с COM портом,
Перехватывающая прерывание !!!!

Информация передается и принимается, а прерывания не происходит!
В чем здесь глюк?


uses Сrt,WinDos;
var
ptrIntFromRs232 : Pointer;
Fl : Boolean;
N :Byte;

ByteFromPort:byte;
{-------------------------------------------------------------------}
procedure InitPortRs232;
begin
Port[$3FB]:=128; {Устанавливаем бит DLAB}

{Скорость работы порта 9600 бод/c}
Port[$3F9]:=0; {Старший байт делителя}
Port[$3F8]:=$0C; {Младший байт делителя}


Port[$3FB]:=$23;
{ бит=
11 8 бит данных
0 1 стоп бит
00 нет четности
1 без бита четности
0
0 бит DLAB
}

Port[$39F]:=$FF; {Разрешить прерывание по завершению передачи символа}
end;
{-------------------------------------------------------------------}

procedure WriteByte(ByteOutToPort:byte);
Begin
Port[$3F8]:=ByteOutToPort;
end;
{-------------------------------------------------------------------}

{ Сделал как в Хелпе }
{$F+}
procedure IntFromRs232;Interrupt;
var SourceOfInt:byte;
begin
SourceOfInt:=Port[$3FA];{Rg Идентификации прерывания}
N:=N+1;

If Fl Then NoSound Else Sound(1000);
Fl:=Not Fl;

end;
{$F-}
{-------------------------------------------------------------------}

Begin
N:=0;
InitPortRs232;

GetIntVec($C, ptrIntFromRs232);
SetIntVec($C, @IntFromRs232);

WriteByte(1);
WriteByte(2);
WriteByte(3);
WriteByte(23);
WriteByte(45);
WriteByte(76);

Writeln(N); {= раз произошло прерывание}
WriteLn("Нажмите любую клавишу для снятия обработчика...");
readln;
SetIntVec($C, ptrIntFromRs232);

End.


 
YAndrey   (2002-09-02 16:34) [1]

Вспомните кто-нибудь старый, добрый ПАСКАЛЬ!!!


 
BillyJeans   (2002-09-02 16:48) [2]

If Fl Then NoSound Else Sound(1000);
Fl:=Not Fl;

а что за Fl???


 
Dimk   (2002-09-02 17:40) [3]

У меня есть модуль - я делал его давно.
Отдам как есть. Он работал. Разбираться будешь сам OK?
Пиши мыло.


 
км   (2002-09-02 19:09) [4]

в твоей процедуре старый обработчик вызывается?


 
YAndrey   (2002-09-03 08:03) [5]

BillyJeans:
Fl - просто переменная, 1-е прерывание произошло -- звук врубтлся, 2-ое произошло -- звук вырубился и так д.
На нее можно забить.

Dimk: Спасибочки, бросай!!!
AndreyMyMail@rambler.ru

КМ:
Неа, это простенькая програмулька чтобы проверить будет прерывание или нет, - а его нет!!!




 
Dimk   (2002-09-03 09:19) [6]

To YAndrey
Приехало?


 
Anatoly Podgoretsky   (2002-09-03 09:30) [7]

Как определяешь что не приходили прерывания, но так как у тебя нет вызова предыдущего обработчика, то в лучшем случае у тебя будет только одно.


 
BillyJeans   (2002-09-03 09:39) [8]

хм, а зачем ты ловишь прерывание?
если скажем прога прямо в порт пишет:
out 3F8h, byte
как ты тут ловить будешь?


 
Dimk   (2002-09-03 09:44) [9]

А оно возникнет если разрешено.
Причем возникает по изменению статуса линии (DTR, DSR и тд)
если последний байт передан
если байт принят.


 
YAndrey   (2002-09-03 10:56) [10]

Dimk - Ага, приехало (пока не разбирался)
Сенгькс

Anatoly Podgoretsky - Так и одног не происходит! N=0

BillyJeans , Dimk - Мне пока важно только происходит Int или нет
поэтому я разрешил все прерывания




... Прогу немного изменил -----все равно остается N=0 !!! перед <<<Нажмите любую клавишу для снятия обработчика...">>.




uses crt,WinDos;
var
ptrIntFromRs232 : Pointer;
Fl : Boolean;
N :Byte;

ByteFromPort:byte;

{ ByteOutToPort:byte;}
{-------------------------------------------------------------------}
procedure InitPortRs232;
var bb:byte;
begin
Port[$3FB]:=128; {Устанавливаем бит DLAB}

{Скорость работы порта 9600 бод/c}
Port[$3F9]:=0; {Старший байт делителя}
Port[$3F8]:=$0C; {Младший байт делителя}
{-----}
Port[$3FB]:=$23;
{ бит=
11 8 бит данных
0 1 стоп бит
00 нет четности
1 без бита четности
0
0 бит DLAB
}
{-----}
Port[$39F]:=$FF; {Разрешить прерывание по завершению передачи символа}


{\\\\\\\\\\\\\\\}
asm
cli ; запретить прерывания
end;

{; in al,21h ; IMR 1-го контроллера прерываний
; and al,not 10h
; out 21h,al ; разрешить прерывания от COM1
}
bb:=port[$21];
bb:= bb and not $10;
port[$21]:=bb;

asm
sti
end;

{\\\\\\\\\\\\\\\}

end;
{-------------------------------------------------------------------}
procedure ReadByte;
begin
ByteFromPort:=Port[$3F8];
end;
{-------------------------------------------------------------------}
procedure WriteByte(ByteOutToPort:byte);
Begin
Port[$3F8]:=ByteOutToPort;
end;
{-------------------------------------------------------------------}

{$F+}
procedure IntFromRs232;Interrupt;
var SourceOfInt:byte;
begin
SourceOfInt:=Port[$3FA];{Rg Идентификации прерывания}
N:=N+1;

{ If Fl Then NoSound Else Sound(1000);Fl:=Not Fl; }

asm
mov al, 20h
out 20h, al
iret
end;

end;
{$F-}

{-------------------------------------------------------------------}

Begin
N:=0;
InitPortRs232;

GetIntVec($C, ptrIntFromRs232);
SetIntVec($C, @IntFromRs232);

WriteByte(1);
Delay(3000);
WriteByte(2);
Delay(3000);
WriteByte(3);
Delay(3000);
WriteByte(23);
Delay(3000);
WriteByte(45);
Delay(3000);
WriteByte(76);

Writeln(N);
WriteLn("Нажмите любую клавишу для снятия обработчика...");
readln;
SetIntVec($1C, ptrIntFromRs232);
End.





 
Dimk   (2002-09-03 11:14) [11]

Port[$39F]:=$FF; {Разрешить прерывание по завершению передачи символа}

Надо похоже $3F9

Пришлось доку читать :0)



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

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

Наверх




Память: 0.48 MB
Время: 0.006 c
1-50679
Guzz
2002-09-04 19:53
2002.09.16
Вопрос по активизации форм


3-50595
IvanKohut
2002-08-25 13:40
2002.09.16
mysql


14-50939
Milz
2002-08-21 14:30
2002.09.16
Подскажите алгоритмик


14-50977
nic418
2002-08-22 12:13
2002.09.16
ротвейлер


4-51020
MrBeer
2002-07-25 01:27
2002.09.16
Zastavit Internet Explorer zagruzit conf. iz reestra





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский