Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛАБОРАТОРНА РОБОТА общее.doc
Скачиваний:
34
Добавлен:
18.03.2015
Размер:
5.16 Mб
Скачать

Процес розробки програмного забезпечення

При розробці складних програм необхідно дотримуватися наступної послідовності:

визначити завдання;

прийняти рішення - розділити на функціональні блоки;

скласти алгоритм програми;

написати програму;

випробувати й налагодити кожну команду;

випробувати й налагодити повну програму.

Перший крок очевидний. До того, як прийняти рішення, необхідно зрозуміти завдання. Потрібно скласти набір характеристик програми: визначити, що є вхідними параметрами, як їх потрібно обробити, що є виходом.

Після визначення цих характеристик можна приступитися до розробки програми. Спочатку треба продумати її, загальну конструкцію. Краще розділити програму на невеликі модулі, кожний з яких повинен мати чітко певні вхід і вихід. Пошук дефектів у програмі, розділеної на функціональні блоки, значно полегшується. Такий же метод застосовується при конструюванні апаратної частини.

Одним з методів визначення структури розроблювальної програми є структурне програмування, загальний принцип якого приводиться в даному розділі.

Після визначення завдання, вибору методу й поділу програми на модулі можна приступитися до складання алгоритмів. Звичайно складається загальний алгоритм, у якому кожний модуль програми зображується у вигляді квадрата. Складаються алгоритми й для кожного модуля.

Після цього можна писати програму. Старанність виконання попередніх кроків полегшує написання програми.

Після складання програми її необхідно перевірити. Модульність програми полегшує перевірку. Кожний модуль може бути перевірений окремо. Коли всі модулі перевірені, можна з'єднати їх разом і перевіряти всю програму.

Приклад розробки програмного забезпечення

Розглянемо опис програми контролера " вогні, що біжать,".

Індикатори вихідного порту /світлодіоди/ використовуються як імітатори " вогнів, що біжать,". Контролер повинен регулювати наступну послідовність чергування горіння світлодіодів:

1. Горять світлодіоди 1, 4, 7; інші погашені.

2. Час горіння встановлених світлодіодів.

3. Горять світлодіоди 2, 5, 8; інші погашені.

4. Час горіння встановлених світлодіодів.

5. Горять світлодіоди 3, 6; інші погашені.

6. Час горіння встановлених світлодіодів.

7. Повторення процесу /перехід до кроку 1/.

На мал.1, наведений алгоритм роботи контролера.

Вихідні індикатори / світлодіоди YDI...YD8/ підключаються до шини даних за допомогою програмувального інтерфейсу.

У табл.1 показані використовувані комбінації сигналів імітування " вогнів, що біжать," на світлодіодах. Одиниця у двійковому коді сигналу означає включений індикатор.

VD1 VD2 VD3 VD4 VD5 VD6 VD7 VD8

КОД

1 0 0 1 0 0 1 0

0 1 0 0 1 0 0 1

0 0 1 0 0 1 0 0

92 16

49 16

24 16

Рис.1. Алгоритм програми послідовності горіння світлодіодів

Програма затримки

Для роботи основної програми необхідно розробити підпрограму, що викликає затримку. Найпростіший спосіб генерування затримки показаний на мал.2. Однак, максимальний час затримки, отримане таким способом, не перевищує 1785 мкс. Принцип одержання більше тривалої затримки буде описаний нижче.

ПРОГРАМА КОНТРОЛЕРА " ВОГНІ, ЩОБІЖАТЬ,"

Після складання алгоритмів і визначення характеристик -, можна писати програми. Основна програма послідовності досить проста /табл.2/ .

Таблиця 2

Мітки

Команди

Коментарі

SEQ

MOV А, 92

Установка горіння світлодіодів 1,4,7 Час горіння встановлених сигналів

MVI D, I

CALL DELAY

MOV A, 49

Установка горіння світлодіодів 2,5,8 Час горіння встановлених сигналів

MVI D, I

CALL DELAY

MOV A, 24

Установка горіння світлодіодів 3,6 Час горіння встановлених сигналів

MVI D, I

CALL DELAY

Програма послідовності встановлює в регістр А число 92 - код вихідних індикаторів, при якому світлодіоди 1, 4, 7 - горять, а світлодіоди 2, 3, 5, 6, 8 - погашені.

Потім викликає підпрограму затримки. Для чого програма послідовності задає величину затримки в регістр D, після чого викликається сама підпрограма затримки. Далі ця послідовність повторюється для інших кодів вихідних сигналів світлодіодів .

Рис.2. Алгоритм програми затримки

РОЗРОБКА ПРОГРАМИ ЗАТРИМКИ

У табл.3 наведена програма затримки, алгоритм якої показаний на мал.2.

Таблиця 3 Проста програма затримки

Мітки

Команди

Коментарі

Примітка

DELAY

DCR A

рахунок, що зменшує

4 такти

JNZ DELAY

Продовження рахунку, якщо вміст акумулятора 0

7/10 тактів

RET

Повернення

10 тактів

Щоб використовувати цю програму, в акумуляторі встановлюється потрібне значення затримки й викликається програма затримки. Уміст акумулятора зменшується доти, поки не досягає нуля, після чого керування вертається на програму виклику.

затримки. У цій програмі дві петлі: зовнішня й внутрішня. Внутрішня петля генерує затримку 0,786 з, зовнішня - безліч таких затримок. Така організація програми називається вкладенням.

Повна програма контролера " вогні, що біжать," наведена в табл.4.

Таблиця 4

Адреси

Коди

Мітки

Команди

Коментарі

8000

ЗЕ

MOV A ,81

MOV A ,81

Програмування інтерфейсу

8001

81

8002

D3

8003

FB

OUT FB

8004

ЗЕ

SEQ

MOV A, 92

Установка коду горіння 1,4,7 світлодіодів,

8005

92

8006

D3

OUT F9

8007

F9

8008

16

MVI D, I

Горіння даної послідовності

8009

01

800А

CD

CALL DELAY

800У

22

800С

80

800D

ЗЕ

MOV A , 4 9

Установка коду горіння 2,5,8 світлодіодів

800Е

49

800F

D3

OUT F9

8010

F9

8011

16

MVI D, I

Горіння даної послідовності-

8012

01

8013

CD

CALL DELAY

8014

22

8015

80

8016

ЗЕ

MOV A, 24

Установка коду горіння 3,6 світлодіодів

8017

24

8018

D3

OUT F9

8019

F9

801А

16

MVI D,I

Горіння даної послідовності

801У

01

801С

CD

CALL DELAY

8010

22

801Е

80

801F

СЗ

JMP SEQ

Повернення в основну програму" вогні, що біжать,"

8020

04

8021

80

8022

01

DELAY

LXI B,0025

Початок внутрішньої петлі затримки

8023

00

8024

25

8025

LOOP

OCX В

Внутрішня петля, що генерує затримку 0,786 с

8026

78

MOV А, В

8027

В1

ORA С

8028

З2

JNZ LOOP

8029

25

802А

80

802У

15

OCR D

Основна петля затримки

802С

З2

JNZ DELAY

802D

22

802Е

80

802F

З9

RET

Повернення

Продовження табл.1

Перевірка програми

1. Уведіть програму з табл.4 в ОЗУ акумулятора.

2. Упевніться, що вона правильно записана на згадку.

3. Виконуйте основну програму, що починається за адресою 8000.

4. Значення тимчасових затримок можна замінити на інші значення, для зменшення швидкості " вогнів, щобіжать," по адресах 8009, 8012,801А, 8023, 8024.

КЛАВІАТУРА Й ІНДИКАЦІЯ КЛАВІАТУРА

Клавіатура являє собою набір ключів /кнопок/, організованих у вигляді матриці 8x3. Кожний ряд з 8 кнопок допитується окремо/апаратне забезпечення описане в уроці 9/. Зчитувальні дані перетворяться в код, що відповідає натиснутій кнопці, за допомогою програми монітора KEYIN /адреса 0216Н/. Ця програма викликається за допомогою команди CALL KEYIN. Після повернення із програми KEYIN в акумуляторі буде втримуватися код натиснутої кнопки /табл.1/. Ця моніторна програма може використовуватися для читання клавіатури.

Таблиця 1 Коди кнопок мікролабораторії

Кнопка

Код /Н/

Кнопка

Код /Н/

0

00

D

OD

1

01

Е

ОЕ

2

02

F

OF

3

03

ПУСК

10

4

04

ВОЗВР .

11

5

05

УСТ . АД .

12

6

06

АД.-

13

7

07

АД.+

14

8

08

ЗП

15

9

09

ВИВІД

16

А

ОА

УВЕДЕННЯ

17

В

ОВ

С

ОС

У табл.2 показаний лістинг програми, що викликає звуковий сигнал, якщо натиснуто кнопку 7. Клавіатура читається за допомогою вищеописаної програми KEYIN, що заносить код натиснутої клавіші в акумулятор.

Команда CPI 07 установлює нульовий прапор процесора, якщо вміст акумулятора дорівнює 07. Команда JNZ READ викликає повернення програми на початок, якщо нульовий прапор не встановлений. Якщо нульовий прапор установлений, то буде визиватися підпрограма BEEP. Потім процес повторюється. Таким чином, звуковий сигнал буде генеруватися при натисканні кнопки 7.

Уведіть лістинг програми в мікролабораторію й перевірте правильність уведення. Запустите програму.

Таблиця 2 Програма виклику звукового сигналу

Адреса

Уміст

Мітка

Команда

Коментарі

8000

CD

READ

CALL KEYIN

Виклик програми, читання клавіатури

8001

16

8002

02

8003

FE

CPI 07

Порівняння коду ключа з 07

8004

07

8005

З2

JNZ READ

Повернення, якщо кнопка 7 не натиснута

8006

00

8007

80

8008

CD

CALL BEEP

Звуковий сигнал, якщо до

8009

50

7 натиснута

800А

03

800У

СЗ

JMP READ

Повторення програми

800С

00

800D

80

Натисніть кнопку 7 - динамік гуде. Натисніть будь-яку іншу кнопку - звуковий сигнал відсутній. Складіть програму, що генерує звуковий сигнал, якщо натиснуті в певній послідовності три певні кнопки, наприклад 7, 3, 9 . Цю програму можна взяти за основу при створенні електронного замка. Складання програми почніть зі структурної схеми. Уведіть програму в мікролабораторію й перевірте її виконання.

СКАНУВАННЯ КЛАВІАТУРИ

На мал.1 наведена спрощена схема клавіатури. За один цикл зчитуються дані з одного ряду з восьми кнопок. Для простоти розглянемо тільки один ряд, тобто кнопки 0,1,2,7

Читання ряду ключів являє собою двушагову операцію: запис даних у скануючий порт для вибору кнопок, читання байта даних читаючим портом.

Щоб вибрати певний ряд кнопок, що відповідає біт скануючого порту /РС4, РС5 або РС6/ установлюється в лог.1, інші біти залишаються рівними лог.О. Таким чином, щоб вибрати ряд кнопок 0...7, потрібно послати в порт FA код 1010 1111 /9 F-H/, щоб вибрати 8...F - код 1010 1111 /AFH/ і щоб вибрати кнопки ПУСК. .. УВЕДЕННЯ, - код (1100 1111) /CFH/. Біти РС0...РС3, РС7 не використовуються при скануванні клавіатури й установлюються рівними лог.1

Рис.1. Спрощена схема клавіатури

Отже, щоб Зчитати дані з ряду 0...7, у порт FA виводиться байт 9F. Потім виробляється читання вхідним портом для збору інформації про стан колонок. При натисканні певної кнопки відповідний біт читаючого порту буде встановлюватися в 0 /табл.3/. /Звернути увагу, що коди кнопок, наведені в табл. 1 і 3, не збігаються/. Кнопка з інших рядів при читанні обраного ряду не впливає на результати читання. Табл.4 показує програму, що реалізує тільки що описаний процес читання,

Таблиця 3 Коди, що читаються із клавіатури

Кнопка

Код, що читається /двійковий/

Код, що читається, / шістнядцятковий/

Немає натиснутих кнопок

1111

1111

FF

0

1111

1110

FE

1

1111

1101

FD

2

1111

1011

FB

3

1111

0111

F7

4

1110

1111

EF

5

1101

1111

DF

6

1011

1111

BF

7

0111

1111

7F

Таблиця 4 Програма визначення стану кнопок

Команда

Коментарі

MVI A, 9F

Вибір ряду кнопок 0. . .7

OUT FA

IN F8

Читання стану кнопок

Програма KEYIN, описана вище, не тільки сканує клавіатуру, але й перетворить коди, що читаються з колонок /залежно від обраного ряду/, у коди, наведені в табл 1 .

У табл.5 наведена програма для перевірки стану кнопки 2, що використовує вищеописаний спосіб читання клавіатури. Якщо кнопка 2 натиснута, генерується звуковий сигнал.

Таблиця 5 Програма перевірки стану кнопки 2

Адреса

Зміст

Мітка

Команда

Коментарі

8000

ЗЕ

MVI А,9F

Вибір ряду кнопок 0...7

8001

9F

8002

D3

OUT FA

8003

FA

8004

DB

READ

IN F8

Читання стану колонок

8005

F8

8006

FE

CPI FB

Порівняння акумулятора з

с кодом /кнопка 2/

8007

FB

JNZ READ

Читати знову, якщо кнопка

8008

З2

2 не натиснута

8009

04

800А

80

800У

CD

CALL BEEP

Якщо натиснуто кнопку 2,

800С

50

з'являється звуковий сигнал

800D

03

800Е

СЗ

JMP READ

Повторення програми

800F

04

8010

80

Наберіть програму на "Микролаб" і перевірте її роботу УСУНЕННЯ ДЗВОНУ