Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
сист. таймер.rtf
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
242.21 Кб
Скачать

Генерация случайных чисел

Для генерации случайных чисел лучше всего использовать канал 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.

  2. Составить программу для генерации звукового сигнала заданной частоты, используя системный таймер.

Варианты заданий в таблице № 1.

  1. С помощью функции 83h прерывания 15h организовать задержку на указанное в таблице № 1 количество секунд и проконтролировать уходящее время.

  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

программирование на уровне портов