Схема работы системы

Разработанную программу можно условно разбить на несколько функциональных блоков, в каждом из которых выполняются определенные задачи. Данное разбиение представлено в приложении C («Схема работы системы»).

Каждому функциональному блоку поставлен в соответствие идентификационный номер.

В блоке 3 происходит вызов подпрограммы, которая предназначена для вывода текущего времени на экран. Затем в блоке 4 происходит вывод сообщения, которое информирует пользователя о необходимости ввести символьную последовательность.

В блоке 6 осуществляется ввод информационного потока с клавиатуры с эхо - выводом на экран. Ввод завершается, если выполняется одно из следующих условий:

· было введено максимальное число символов, равное 16;

· в процессе ввода в информационном потоке встретился символ завершения ввода «U»;

· была нажата клавиша Enter.

В блоке 8 происходит вызов подпрограммы, которая реализует вывод и обработку введённой последовательности в обратном порядке, то есть вывод с заменой цифр на их дополнения до 10.

В блоке 11 вызывается подпрограмма осуществляющая печать обработанной последовательности так же в обратном порядке.

1.3.2 Схема программы

Схема программы представлена в приложении E.

При реализации проекта использовалось разбиение программы на процедуры – подпрограммы, которые реализуют определённые действия и могут вызываться из тела главной процедуры. Листинг программы приведен в Приложении А.

В программе были использованы следующие переменные и константы (см. листинг программы):

cr - константа возврат каретки

lf - константа перевода строки

symblos_num - количество символов

arr_symbols – массив байт размерностью 16 для хранения введённой последовательности;

txt_empty_str – переменная, хранящая сообщение, информирующее о том, что была введена пустая последовательность;

txt_separator – переменная, хранящая символ(ы) разделителя;

txt_enter_symb – переменная, хранящая сообщение с приглашением к вводу;

txt_out_symb – переменная, хранящая сообщение, информирующее пользователя о том, что сейчас будет выведен результат обработки введенной символьной последовательности;

txt_print_start – переменная, хранящая сообщение о выводе на печать;

txt_print_busy – переменная, хранящая сообщение о занятости принтера;

txt_print_no_paper – переменная, хранящая сообщение об отсутствии бумаги в принтере;

txt_print_error – переменная, хранящая сообщение об ошибки, произошедшей во время печати.

В программе были использованы следующие процедуры (см. листинг программы):

main - основная процедура, реализующая схему работы системы, изображённую в приложении C, её схема представлена в приложении E;

out_bcd_val - процедура вывода десятичного байтового числа (BCD) на экран (схема процедуры представлена в приложении G);

out_curr_time - процедура вывода времени в текущую позицию курсора (схема процедуры представлена в приложении F);

input_symbols - процедура ввода символьной строки с клавиатуры и эхо - выводом на видеотерминал (схема процедуры представлена в приложении H);

out_revers_replace_symb - процедура вывода символьной последовательности в обратном порядке и заменой цифр на их дополнения на экран (схема процедуры представлена в приложении I);

out_symbols_on_printer - процедура вывода обработанной символьной последовательности на принтер (схема процедуры представлена в приложении J);

Описание прерываний, используемых в этих процедурах, описано в приложении K.

1.3.3 Схема взаимодействия программ

Схема взаимодействия программ представлена в приложении D.

Разработанная программа использует прерывания BIOS и DOS. Схема взаимодействия программ наглядно отображает путь активаций подпрограмм и взаимодействий с соответствующими данными.

В первом блоке показана главная процедура “main”.

Главная процедура, в свою очередь, вызывает прерывания, необходимые для очистки экрана (блок 2), считывания ответов пользователя на вопросы программы (блок 5), вывода информационных сообщений (блок 16).

Так же процедура main может временно передавать управление в другие процедуры (подпрограммы):

· out_curr_time (блок 7)

· input_symbols (блок 8)

· out_revers_replace_symb (блок 3)

· out_symbols_on_printer (блок 14)

Указанные подпрограммы, в свою очередь, так же используют прерывания BIOS и DOS.

Подпрограмма вывода времени использует функцию 02h прерывания 01Ah для получения системного времени (блок 6). Так же, для представления времени в формате ЧЧ:ММ:СС, данная подпрограмма использует функцию 0Eh прерывания 10h. В блоке 9 указано, что для вывода чисел на экран подпрограмма вывода времени использует ещё одну подпрограмму: out_bcd_val.

В блоке 13 указано, что подпрограмма out_bcd_val использует 02h функцию прерывания 21h для вывода на видеотерминал цифр.

Остальные подпрограммы аналогичным образом используют функции прерываний BIOS и DOS.

2 Принтер

2.1 Матричный принтер

Матричный принтер (англ. dot matrix printer) —принтер, создающий изображение на бумаге из отдельных маленьких точек ударным способом. Это старейшие из применяемых в настоящий момент принтеров. Их механизм был изобретён в 1964 году корпорацией Seiko Epson.

Долгое время данные принтеры являлись стандартным устройством вывода для РС. В то время, когда струйные принтеры работали еще неудовлетворительно, а цена лазерных принтеров была достаточно высока, игольчатые принтеры повсеместно использовались с компьютерами.

Принцип действия

В матричном принтере изображение формируется на носителе печатающей головкой, представляющей собой набор иголок, приводимых в действие электромагнитами. Головка располагается на каретке, движущейся по направляющим поперёк листа бумаги; при этом иголки в заданной последовательности наносят удары по бумаге через красящую ленту, аналогичную применяемой в печатных машинках и обычно упакованную в картридж, тем самым формируя точечное изображение. Для перемещения каретки обычно используется ременная передача, реже — зубчатая рейка или винтовая передача. Приводом каретки является шаговый электродвигатель. Такой тип матричных принтеров именуется SIDM (англ. Serial Impact Dot Matrix — последовательные ударно-матричные принтеры). Скорость печати таких принтеров измеряется в CPS (англ. characters per second — символах в секунду).

Иглы в печатающей головке располагаются, в зависимости от их количества, одним или двумя вертикальными столбцами, или в виде ромба. Материалом для игл служит износостойкий вольфрамовый сплав. Для привода игл используются две технологии, основанные на электромагнитах — баллистическая и с запасенной энергией. Поскольку электромагниты нагреваются при работе, печатающая головка снабжается радиатором для пассивного отвода тепла; в высокопроизводительных принтерах может применяться принудительное охлаждение печатающей головки вентилятором, а также система температурного контроля, снижающая скорость печати или прекращающая работу принтера при превышении допустимой температуры печатающей головки.

Для печати на носителях различной толщины в матричном принтере имеется регулировка зазора между печатающей головкой и бумагоопорным валом. В зависимости от модели, регулировка может производится вручную, либо автоматически. При автоматической установке зазора принтер имеет функцию определения толщины носителя.

В разное время выпускались принтеры с 9, 12, 14, 18, 24 и 36, 48 иголками в головке; разрешающая способность печати, а также скорость печати графических изображений напрямую зависят от числа иголок. Наибольшее распространение получили 9- и 24-игольчатые принтеры.

9-игольчатые принтеры применяются для высокоскоростной печати с невысокими требованиями к качеству. Для достижения высокой скорости в некоторых принтерах используются сдвоенные (2х9) и счетверенные (4х9) 9-игольчатые печатающие головки. За счет меньшего количества игл 9-игольчатая печатающая головка отличается большей надежностью и меньшим нагревом.

Преимуществом 24-игольчатого принтера является высокое качество печати, в графическом режиме максимальное разрешение составляет 360х360 точек на дюйм. При этом скорость печати 24-игольчатого принтера существенно ниже, чем у 9-игольчатого. Основная сфера применения — печать с высокими требованиями к качеству.

В современных матричных принтерах красящая лента из плотного нейлона упакована в картридж, содержащий также узлы для протяжки и натяжения ленты. В зависимости от конструкции принтера, картридж располагается на станине или на каретке. В ранних моделях вместо картриджа может использоваться лента на катушках для пишущей машинки. Для повышения ресурса ленты, ее длина часто составляет 6 и более метров. В случае короткой ленты используется дополнительная подкраска с помощью бункера или ролика из пористого материала (фетра), пропитанного краской. В некоторых принтерах для увеличения ресурса лента имеет вид Ленты Мёбиуса.

2.2 Управление печатью и взаимодействие с ПЭВМ

Управление матричными принтерами осуществляется при помощи различных систем команд, общепринятыми из которых являются две: Epson ESC/P (англ. EPSON Mode) и IBM ProPrinter (англ. IBM Mode); большинство принтеров поддерживает обе системы.

Традиционно матричные принтеры подключаются к компьютерам через параллельный интерфейс. Другой устоявшийся интерфейс — RS-232C токовая петля 20 мА. Выпускающиеся в настоящее время матричные принтеры имеют современный интерфейс USB, однако поддержка «устаревших» интерфейсов в них, как правило, сохраняется для обеспечения совместимости с существующими промышленными или измерительными системами.

Компьютер IBM может управлять тремя параллельными портами LPT1-LPT3. Базовый адрес LPT1 находится в ячейке BIOS 0040:0008 (слово), LPT2 - 0040:000A и т. д. Какой адаптер назначен, какому LPT не определено и зависит от конфигурации компьютера и ОС, поэтому программа должна определить используемые ими адреса. При инициализации базовому адресу присваивается 0, если адаптер не установлен.

Таблица 1. Адреса портов

Адаптер Регистр входных данных Регистр статуса Регистр управления
LPT1 378h 379h 37Ah
LPT2 278h 279h 27Ah

Регистр выходных данных - тот адрес порта, через который проходит каждый байт данных, посылаемый в порт. Регистр статуса сообщает различную информацию о входных линиях; процессор может постоянно опрашивать его, чтобы распознать момент, когда все в порядке и можно посылать данные. Регистр статуса сообщает также, что произошла ошибка (линия ERROR). Регистр управления инициализирует адаптер и управляет выводом данных. Он может также подготавливать параллельный порт для операций прерывания, с тем чтобы устройство посылало прерывание к процессору, когда оно готово к приему очередной порции данных, оставляя процессор свободным для других дел. Ниже перечислены значения битов регистров статуса и управления:

Таблица 2. Регистр статуса

Бит 7 0 = принтер занят 1 = принтер свободен
Бит 6 0 = принтер подтверждает приём символа 1 = нормальная установка
Бит 5 0 = бумага вставлена 1 = бумага отсутствует
Бит 4 0 = принтер off-line 1 = принтер on-line
Бит 3 0 = ошибка принтера 1 = без ошибок
Биты 2-0 Не используются

Таблица 3. Регистр управления

Биты 7-5 Не используются
Бит 4 0 = прерывание принтера запрещено 1 = прерывание принтера разрешено
Бит 3 0 = отмена выбора принтера 1 = нормальная установка
Бит 2 0 = инициализировать порт принтера 1 = нормальная установка
Бит 1 0 = нормальная установка 1 = автоматический перевод строки после возврата каретки
Бит 0 0 = нормальная установка 1 = вызывает вывод байта данных

Из этих таблиц видно, как соотносятся входные линии порта и биты регистров управления и статуса.

Мы можем управлять отдельно каждой выходной линией порта, послыая соответствующий байт в базовый регистр, и знать состояние каждой входной линии, читая из регистров статуса/управления.


3 Инструкция оператору

Программа написана на языке ассемблера и была транслирована в Turbo Assembler 2.51. Для нормальной работы программы оператор должен проделать следующие шаги:

1. Загрузить компьютер под управлением операционной системы MS-DOS. Подключить принтер, вставить бумагу, убедиться (если возможно) в готовности принтера к печати.

2. Запустить программу (файл cours_pr.exe).

3. Программа предложит ввести символьную последовательность, на что оператор должен ввести необходимую символьную последовательность. Для завершения ввода оператор должен ввести символ “u”, либо нажать клавишу Enter.

4. На экран выведутся обработанные данные (символьная строка в обратном порядке с заменой цифр на их дополнения до 10).

5. Затем программа приступит к печати обработанных данных.

6. После, программа будет ожидать нажатия любой клавиши для завершения работы.

4 Тестирование программы.

Для проверки правильности работы разработанной программы было произведено ее тестирование.

Для проверки контроля ввода была введена пустая строка. Программа отреагировала нормально, выдав сообщение с запросом о повторе ввода (рисунок Б.1).

Для проверки контроля ввода так же была проверена реакция программы на клавиши Enter и Backspace. Программа нормально выполняет функции, возложенные на эти клавиши по умолчанию. Так же при вводе происходит контроль нажатия посторонних клавиш (таких как F1-F12, Numpad-клавиатура, Esc и др.). Проверка показала, что программа работает верно (рисунок Б.2).

Далее для проверки алгоритма обработки строк и их вывода была введена последовательность символов «sotnikov s a 07». Ожидаемый результат вывода: «310 a s vokintos». Проведённый тест показал, что программа работает верно (рисунок Б.3).

Вывод времени так же работает верно. Вывод на печать осуществляется нормально.

В ходе тестирования программы было установлено, что программа работает верно.


Приложения

Приложение A

Листинг программы ввода-вывода на языке Ассемблер.

;; Разработать алгоритм и программу для ввода информационного потока

;; с одного из периферийных устройств ПЭВМ и вывода на два других.

;; Входное устройство: клавиатура

;; Выходное устройство: видеомонитор

;; Количество символов: 16

;; Порядок ввода/вывода: LIFO

;; Символ прекращения ввода: U

;; Дополнительно выводимая информация: время

;; Алгоритм обработки: символы цифр заменить на дополнения до 10

;; Дополнительно: вывод на печать

;; Разработчик: Сотников С. А.

;; Группа: 10ВО1

;; Вариант: 11

;; TODO: -

;; -------------------------------------------------------------------------


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: