
- •Лабораторная работа
- •Стандартный обработчик прерываний таймера
- •Регистровая организация и режимы работы Микросхемы таймера 8254.
- •Программирование таймеров на уровне портов
- •4. Средства bios для работы с таймером
- •Средства ms-dos для работы с таймером
- •6.Таймер и музыка
- •Генерация случайных чисел
- •Варианты индивидуальных заданий к лабораторной рабо“системный таймер”.
- •Порядок выполнения работы.
- •Содержание отчета.
- •Контрольные вопросы.
- •Литература:
Генерация случайных чисел
Для генерации случайных чисел лучше всего использовать канал 2 в режиме 3. В регистр счетчика канала занесем значение, равное диапазону нужных случайных чисел. Например, если занести в регистр 80 и запустить канал таймера, получаемые случайные числа будут лежать в диапазоне от 0 до 79.
Пример программы:
#include <stdio.h>
#include <conio.h>
#include <sysp.h>
/**
Name rnd_set
Title Инициализация генератора случайных чисел
Descr Эта функция инициализирует канал 2 таймера для использования в качестве генератора случайных чисел
Proto void rnd_set(int bound)
Params int bound – верхняя граница для генерируемых случайных чисел
Return Nothing
Sample random.c
**/
void rnd_set(int bound){
//Устанавливаем режим 3 для второго канала таймера.
outp(0x43, 0xb6);
//Загружаем рагистр счетчика таймера - сначала
//младший, затем старший байт
outp(0x42, bound & 0x00ff);
outp(0x42, (bound & 0xff00)>>8);
//Разрешаем работу канала
outp(0x61, inp(0x61) | 1);
}
/**
Name rnd_get
Title Получение от таймера случайного числа
Descr Эта функция получает случайное число от таймера, который был предварительно проинициализирован функцией rnd_set
Proto int rnd_get(void)
Params Отсутствуют
Return Случайное число в диапазоне от 0 до уменьшенного на 1значения заданного в качестве параметра функции rnd_set()
Sample random.c
**/
int rnd_get(void){
int i;
//Выдаем команду CLC для фиксирования
//текущего значения регистра канала2 таймера
outp(0x43,0x86);
//Вводим младший и старший байты счетчика
i=inp(0x42);
i+=(inp(0x42)<<8);
return i
}
void main(){
int i, j;
printf(“\nГенератор случайных чисел.”
“\nНажмите любую клавишу.”
“\nдля завершения работы нажмите ctrl+C\n”);
for(;;){
//Устанавливаем диапазон генерации случайных
//чисел и инициализируем таймер
rnd_set(80);
//Ожидаем нажатия клавиши
getch();
//После нажатия на клавишу
//получаем случайное число
j=rnd_get();
//Выводим на экран строку символов “g”,
//длина которой равна полученному
//случайному числу
for (i=0; i<j; i++) putchar(219);
printf(“\n”);
}
}
Программа получает случайные числа и отображает их в наглядном виде с помощью столбчатой диаграммы.
В ходе работы должна быть разработана программа, основанная на принциах действия системного таймера, которая будет реализовывать следующие возможности:
Составить программу для генерации случайных чисел с помощью системного таймера в диапазоне, указанном в таблице №1.
Составить программу для генерации звукового сигнала заданной частоты, используя системный таймер.
Варианты заданий в таблице № 1.
С помощью функции 83h прерывания 15h организовать задержку на указанное в таблице № 1 количество секунд и проконтролировать уходящее время.
Выполнить задание согласно таблицы № 2
Варианты индивидуальных заданий к лабораторной рабо“системный таймер”.
Таблица № 1
Вариант |
Частота1, в Гц |
Частоата2, в Гц |
Диапазон Начало | Конец |
Задержка, в мс |
||
1 |
15000 |
50 |
0 |
80 |
15000 |
|
2 |
10000 |
100 |
10 |
100 |
10000 |
|
3 |
5000 |
500 |
25 |
90 |
5000 |
|
4 |
3000 |
1500 |
15 |
40 |
3000 |
|
5 |
50 |
2000 |
0 |
50 |
50 |
|
6 |
100 |
2500 |
20 |
100 |
100 |
|
7 |
500 |
3000 |
15 |
90 |
500 |
|
8 |
1500 |
5000 |
60 |
80 |
1500 |
|
9 |
2000 |
10000 |
20 |
70 |
2000 |
|
10 |
2500 |
15000 |
10 |
60 |
2500 |
Таблица № 2
Вариант |
Задание |
Примечание |
1 |
а. Отображение слова состояния и содержимого счетчика для 1 порта б. Часы реального времени |
программирование на уровне портов
использование int 1 Ch |
2 |
а. Формирование задержки
б. Генерация случайных чисел |
функции 00h и 01прерывания int 1 Ah BIOS |
3 |
а. Получение и установка текущей даты б. Отображение слова состояния и содержимого счетчика для 2 порта |
средства MS DOS - int 21h
программирование на уровне портов |
4 |
а. Получение и установка текущего времени б. Генерация звука с использованием таймера |
средства MS DOS - int 21h |
5 |
а. Отображение слова состояния и содержимого счетчика для 3 порта б. Часы реального времени |
программирование на уровне портов
использование int 1 Ch |
6 |
а. Генерация звука с использованием таймера б. Часы реального времени |
использование int 1Ch |
7 |
а. Отображение слова состояния и содержимого счетчика для 3 порта б. Получение и уствновка текущей даты |
программирование на уровне портов
средства MS DOS - int 21 h |
8 |
а. Получение и установка текущего времени б. Отображение слова состояния и содержимого счетчика для 2 порта |
средства MS DOS - int 21h
программирование на уровне портов |
9 |
а. Генерация случайных чисел б. Формирование задержки |
функции 00h и01h прерывания int 1 Ah BIOS |
10 |
а. Получение и установка текущей даты б. Отображение слова состояния и содержимого счетчика для 1 порта |
средства MS DOS - int 21h
программирование на уровне портов |