Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нужна помощь, Таймер 
:(
    Опции темы
pechkin
Дата 9.3.2008, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 15.2.2008

Репутация: нет
Всего: нет



Требуется написать программу для вывода на экран символов латинского алфавита с периодичностью 1 символ в секунду. Таймер настроить на частоту 100Гц.

Макрокоманда инициализации таймера:
Код

TaimIni MACRO freq,vector ;инициализация таймера канала 0
;на заданную частоту (freq) с указанием
;адреса программы обслуживания прерывания
;(формальный параметр - vector)
mov al,0 ;очистка масок прерываний
out 21h,al ;
cli ;запретить прерывания(очистить разряд I флагового регистра)
push ds ;сохранить регистры
push es ;
mov ah,35h ;сохраняем старый вектор прерываний с номером 8
mov al,08h ;IRQ8 в отведенных для этого ячейках
int 21h ;
mov [oldip8],bx ;адрес смещения программы обслуживания
mov [oldcs8],es ;адрес кодового сегмента
mov dx,offset vector;устанавливаем новый пользовательский
mov ax,seg vector ;вектор прерывания с указанием
mov ds,ax ;на нашу программу обслуживания
mov ah,25h ;
mov al,08h ;
int 21h ;
mov al,00110110b ;перепрограммирование нулевого канала
out 43h,al ;таймера на частоту, равную 1,19Мгц
mov ax,freq ;деленную на введенный коэффициент
out 40h,al ;запись младшего байта делителя в регистр данных
mov al,ah ;
out 40h,al ;вывод старшего байта делителя
pop es ;восстановить регистры
pop ds ;ES,DS
sti ;разрешить прерывания процессору(установить флаг FI)
ENDM

ExitInt MACRO arg ;Выход из программы с применением Таймера
cli ;запретить прерывания (FI=0)на время
mov al,00110110b;пограммирования нулевого канала
out 43h,al ;таймера на стандартную
;частоту прерываний(18,2 Гц)
sub ax,ax ;в счетчик таймера заносится 0
out 40h,al ;и выполняется деление
mov al,ah ;1193180:65536=18,2Гц
out 40h,al ;
push ds ;сохpанить регистры на вpемя
push es ;восстановления
mov dx,[oldip8] ;восстановление системного вектора
mov ax,[oldcs8] ;прерывания IRQ8
mov ds,ax ;используя функцию 25h прерывания
mov ah,25h ;21H DOS
mov al,08h ;эдесь указывается номер прерывания
int 21h ;(для таймера - это 8)
pop es ;восстановить использованные
pop ds ;регистры
mov al,0 ;очистка масок прерываний
out 21h,al ;по регистру 21 контроллера прерываний
sti ;разрешение прерываний
jmp arg ;goto_0 ;на главное меню
ENDM


Это сообщение отредактировал(а) MAKCim - 10.3.2008, 09:59
PM MAIL   Вверх
Wowa
Дата 10.3.2008, 03:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: нет
Всего: 290



Модератор: Название темы должно отражать ее суть!
 Правила форума: http://forum.vingrad.ru/index.php?act=boardrules
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0422 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.