[an error occurred while processing this directive] [an error occurred while processing this directive]
На мыло лень пока.
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено John 10 апреля 2002 г. 15:50
В ответ на: Если не затруднит мылом. отправлено spectr 10 апреля 2002 г. 14:52

Почему это так пишется - не помню за давности лет.
На самом деле еще придется восстанавливать часы - они сбиваются, восстановление - чтение данных из микросхемы RTC.
Здесь не описано, как заменять процедуру обработки прерывания таймера на свою.

const
TimerFreq = 1193180 / TicksInSec;

{ Изменить частоту }
procedure BeginWork;
var
t : word;
begin
t := Round ( TimerFreq );
asm
cli
mov al,$36;
out $43,al
mov ax,t
out $40,al
mov al,ah
out $40,al
sti
end;
end;

{ Восстановить }
procedure StopWork;
var
t : word;
begin
t := 0;
asm
cli
mov al,$36;
out $43,al
mov ax,t
out $40,al
mov al,ah
out $40,al
sti
end;
RestoreTimer;
end;

{ Восстановление системных часов }
procedure RestoreTimer;
var
w : byte;
regs : registers;
begin
regs.ah := $02;
Intr ( $1A, regs );
w := regs.ch;
w := ( w mod 16 ) + ( w div 16 ) * 10;
regs.ch := w;
w := regs.cl;
w := ( w mod 16 ) + ( w div 16 ) * 10;
regs.cl := w;
w := regs.dh;
w := ( w mod 16 ) + ( w div 16 ) * 10;
regs.dh := w;

regs.ah := $2d;
Intr ( $21, regs );
end; { RestoreTimer }



Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru