реклама на сайте
подробности

 
 
> Хочу прерывание на Паскале от СОМ-порта, (Турбо Паскаль, не Дельфи)
Diusha
сообщение May 26 2009, 17:11
Сообщение #1


Вечный студент
****

Группа: Участник
Сообщений: 500
Регистрация: 11-09-06
Из: Питер
Пользователь №: 20 262



Программка (запускается под DOS, Win98):


CODE
Uses crt, dos;

Label Finish, ll00;

Const
baud = 38400;
COM=$3F8 { $2F8 };
intr=$0C { $0B };

Var
stv, srv : pointer;
cnt : word;
b : byte;
key : char;
speed_fr : word;

{----------------------------------------------------------------------------------}
{$F+}
Procedure int_1c; interrupt;
Begin
inc(cnt);
if cnt=18 then begin cnt:=0; write ('g') end;
End;
{$F-}
{-----------------------------------------------------------------------------------}
{$F+}
Procedure int_rs; interrupt;
Begin
b:=port[COM];
write (b,' ');
End;
{$F-}
{----------------------------------------------------------------------------------}

BEGIN
speed_fr:=trunc(115200/baud+0.5);
port[COM+3]:=$80; { ўЄ«. гбв ­®ўЄ бЄ®p®бвЁ }
port[COM+1]:=hi(speed_fr); port[COM+0]:=lo(speed_fr);
port[COM+3]:=$00; { 5 bit, 1 stop, parity=none }
port[COM+4]:=0;
port[COM+2]:=$03; { FIFO on }
port[COM+1]:=$01; { interrupt when rec'd data is available }

getintvec($1C,stv);
getintvec(intr,srv);

cnt:=0;
setintvec($1C,addr(int_1c));
setintvec(intr,addr(int_rs));

ll00 : if keypressed then begin
key:=readkey;
goto Finish;
end;

{ b:=port[COM+5]; }
{ if (b and $01)<>0 then begin }
{ b:=port[COM]; }
{ write (b,' '); }
{ end; }

goto ll00;

Finish :
setintvec($1C,stv);
setintvec(intr,srv);
halt;
END.



Процедурка int_1c - для тренировки - раз в сек пишет "g"; работает. По ее образу и подобию - int_rs - должна непечатать принятые с СОМ данные. Не работает. Что не так?
Порт настраивается нормально, в этом легко убедиться раскомментировав 5 строчек выше "goto ll00;"
Причина редактирования: Оформление цитаты исходника.
Go to the top of the page
 
+Quote Post
2 страниц V  < 1 2  
Start new topic
Ответов (15 - 18)
Diusha
сообщение May 30 2009, 14:25
Сообщение #16


Вечный студент
****

Группа: Участник
Сообщений: 500
Регистрация: 11-09-06
Из: Питер
Пользователь №: 20 262



Уррра-ааааа!!!
Заработало!!!

Цитата(SysRq @ May 26 2009, 20:34) *
Цитата

port[COM+4]:=0;

Попробуйте $0B вместо 0


Цитата(defunct @ May 27 2009, 02:06) *
Это не нужно. Мы ж мышку питать не собираемся.

Самое смешное, что именно это и нужно было. Но вот почму так? Опять магия какая-то.

Всем большое спасибо!

Теперь остается только магию разоблачить
Go to the top of the page
 
+Quote Post
defunct
сообщение May 30 2009, 14:42
Сообщение #17


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Diusha @ May 30 2009, 17:25) *
Теперь остается только магию разоблачить

com+4 = 0xB = 0b1011 - два младших разряда отвечают за RTS/DTR сингналы, их включение ни на что не должно влиять. Потому что их можно и иногда нужно менять в процессе работы с портом.
Попробуйте вместо 0xB записать 0x8 (только bit OUT2). Если дело в нем, скорее всего этот сигнал (OUT2), что-то "запитывает" в схеме порта.
Go to the top of the page
 
+Quote Post
Diusha
сообщение May 30 2009, 15:02
Сообщение #18


Вечный студент
****

Группа: Участник
Сообщений: 500
Регистрация: 11-09-06
Из: Питер
Пользователь №: 20 262



Да, действительно, только бит 3 влияет
Go to the top of the page
 
+Quote Post
SysRq
сообщение May 30 2009, 15:36
Сообщение #19


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Цитата
The Interrupt Enable bit is a PC-specific item. This is normally a general purpose output (OUT 2) on the 8250 SCC. However IBM's designers connected this output to an external gate to enable or disable all interrupts from the SCC. This bit must be programmed with a one to enable interrupts. Likewise you must ensure that this bit contains a zero if you are not using interrupts.

Цитата
Set OUT2 in the MODEM CONTROL Register so that the interrupt signal from the 8250 ACE is passed to the IRQ4 Interrupt Request Line


..just Gooooooooooooogle it :)
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 6th July 2025 - 10:29
Рейтинг@Mail.ru


Страница сгенерированна за 0.01531 секунд с 7
ELECTRONIX ©2004-2016