Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Структура данных программы




 

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

Результаты разработки структуры данных сведем в таблицу (таблица 4.1).

 

Таблица 4.1 Структура данных программы устройство проверки реакции.

Наименование данных Символьное имя Формат данных Кодирование данных   примечание
D7 D6 D5 D4 D3 D2 D1 D0  
Данные в ОЗУ timeuser Массив слов * * * * * * * * 800 байт хранящих номера пользователей и их время
* * * * * * * *
...
* * * * * * * *
Накопитель nakopitel 5 байт         * * * * Накопительная часть
        * * * * Младшая цифра
        * * * * Средняя цифра
        * * * * Средняя цифра
        * * * * Старшая цифра
Счетчик замеров zamer байт         * * * * Позиционный код
Номер пользователя nomberuser 2 байта         * * * * * * * * Десятичное число от 00 до 99
Место пользователя mesto 2 байта         * * * * * * * * Десятичное число от 00 до 99
Флаг сортировки sort байт                 Включен Выключен
Флаг задержки flagtime байт                 Включен Выключен
Флаг готовности starts байт                 Включен Выключен
Образ кнопок obraz байт - * * * * * * * Каждый бит отвечает за свою кнопку
Вспомогательная переменная old байт - * * * * * * * Хранит старое значение кнопок
Случайное число random байт * * * * * * * * -
Случайное число iadro байт * * * * * * * * -
Накопитель time 4 байта         * * * * Младшая цифра
        * * * * Средняя цифра
        * * * * Средняя цифра
        * * * * Старшая цифра

 

 

5 Алгоритмы программы

 

Алгоритмизация программы сводится к разработке алгоритмов ее макроуровня и программных модулей нижнего уровня.

Из статической модели программы следует, что для решения поставленной задачи необходимо реализовать ряд процессов:

- Ввод с кнопок (readkey);

- Контроль работы программы (Control);

- Выбор пользователя (inuser);

- Выбор места (inmesto);

- Получение случайного числа (randomize);

- Задержка приглашения (priglashenie);

- Ожидание реакции пользователя (reakcia);

- Просмотр результатов (prosmotr);

- Вывод на семисегментные индикаторы (outtime).

 

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

Алгоритм макроуровня программы в одноуровневом представлении приведен на рисунке 5.1. Для повышения информативности ГСА на ней изображены входные и выходные данные, обрабатываемые каждым программным модулем.

 

 

 

Рисунок 5.1 – Граф-схема алгоритма работы программы (одноуровневое представление)

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

Рисунок 5.2 – Граф-схема алгоритма работы программы (двухуровневое представление)

Итак, после определения основных программных исполнителей необходимо

разработать алгоритм каждого из них.

Подзадача «Функциональная подготовка» (podgotovka) производит инициализацию флагов и начальных значений переменных.

Подзадача «Ввод» (readkey) осуществляет считывание данных с кнопок, расположенных на лицевой панели устройства и формирует соответствующий их состоянию образ в памяти. Граф-схема представлена на рисунке 5.3.

 

 

Рисунок 5.3 – Граф-схема алгоритма «ввод»

Подзадача «контрольный процесс» (control) осуществляет анализ образа клавиатуры и формирует значение флагов. Граф-схема представлена на рисунке 5.4.

 

 

 

 

Рисунок 5.4 – Граф-схема алгоритма «контрольный процесс»

Подзадача «выбор пользователя» (inuser) осуществляет изменение номера пользователя. Граф-схема представлена на рисунке 5.5.

 

Рисунок 5.5 – Граф-схема алгоритма «выбор пользователя»

 

 

Подзадача «вывод числа на индикаторы» (outdecimal) отвечает за визуальное представление номера пользователя или места на соответствующих семисегментных индикаторах. Необходимые параметры для данной подзадачи передаются через регистры dx, bx. Граф-схема алгоритма представлена на рисунке 5.6.

 

Рисунок 5.6 – Граф-схема алгоритма «вывод числа на индикаторы»

 

 

Подзадача «изменение места» (inmesto) осуществляет изменение места на одну позицию. Граф-схема алгоритма представлена на рисунке 5.7.

 

 

Рисунок 5.7 – Граф-схема алгоритма «изменение места»

 

Подзадача «получение случайного числа» (randomize) осуществляет генерацию случайного числа. Граф-схема алгоритма представлена на рисунке 5.8.

 

 

 

Рисунок 5.8 – Граф-схема алгоритма «получение случайного числа»

Процедура «задержка приглашения» (priglashenie) осуществляет задержку вывода приглашения на случайное время. Граф-схема представлена на рисунке 5.9.

 

 

Рисунок 5.11 – Граф-схема алгоритма «задержка приглашения»

Процедура «ожидание реакции от пользователя» (reakcia) считает время реакции пользователя, отвечает за накопление и сохранение результатов. Граф-схема представлена на рисунке 5.10.1.

Рисунок 5.10.1 – Граф-схема алгоритма «ожидания реакции от пользователя»

Рассмотрим алгоритмы подпрограмм использованные в процедуре «ожидание реакции от пользователя»

Рисунок 5.10.2 – Граф-схема алгоритма «накопление статистики»

 

Рисунок 5.10.3 – Граф-схема алгоритма «сохранение результатов»

 

Рисунок 5.10.4 – Граф-схема алгоритма «сортировка результатов»

 

Процедура «просмотр» (prosmotr) определяет взаимообратную зависимость между номером пользователя и занимаемым местом. В зависимости от флага сортировки находим интересующие нас данные, а затем в качестве параметров передаем их в процедуры вывода на семисегментные индикаторы (outdecimal,outtime). Граф-схема представлена на рисунке 5.11.

 

 

Рисунок 5.11.– Граф-схема алгоритма «просмотр»

Процедура «вывод времени на индикаторы» (outtime) осуществляет формирование образа переменной time и вывода его на семисегментные индикаторы. Граф-схема представлена на рисунке 5.12.

 

 

 

Рисунок 5.12.– Граф-схема алгоритма «вывод времени на индикаторы»

Процедура «вывод сообщения» (null) вызывается в случаи отсутствия результата по выбранному значению места или пользователя. Граф-схема представлена на рисунке 5.13.

 

 

Рисунок 5.13.– Граф-схема алгоритма «вывод сообщения»

 

6Руководство пользователя

Выберете номер пользователя, затем нажмите кнопку пуск, тем самым сообщив устройству о своей готовности. Справа от кнопки должен зажечься индикатор, информирующий о том, что устройство производит замеры. Если этого не произошло, возможно, вы находитесь в состоянии сортировки, переключитесь в состояние выбор пользователя.

При зажигании индикатора приглашения как можно быстрее нажмите на кнопку проверки реакции. После чего индикатор приглашения должен погаснуть. Повторите операцию 10 раз для накопления статистики. Индикатор горит в течение двух секунд, считается, что за это время вы должны среагировать. Если же вы не успели нажать на кнопку, то замер произведен, ваше время реакции считается равным двум секундам.

Просмотр результатов можно осуществлять, как изменяя номер пользователя, так и в состоянии сортировки изменяя место. Для переключения состояний воспользуйтесь кнопкой «сортировка/просмотр».


Заключение

 

В процессе работы была выполнена разработка «устройство проверки реакции». Проектирование осуществлялось в соответствии с техническим заданием.

При проектировании программных средств была выполнена декомпозиция задачи и построена статическая модель программы, которая определила состав программных модулей, необходимых для решения поставленной задачи. После этого была разработана структура данных программы и ее алгоритмизация. Далее было выполнено кодирование алгоритмов на языке ассемблера.

Таким образом, задание на лабораторную работу выполнено, а пояснительная записка оформлена в соответствии с действующими стандартами.

 
 
 

Список использованных источников

 


1. Комаров В. М. Микропроцессорные системы: учебное пособие / РГАТА. – Рыбинск,1997. – 324 с.

2. Комаров В. М. Микропроцессорные системы. Проектирование аппаратного и программного обеспечения: Учебное пособие. – 2 изд., перераб. и доп. – Рыбинск: РГАТА, 2004. – 176 с.

3. КомаровВ. М. Микропроцессорные системы. Программирование на ассемб-лере: Учебное пособие. – 2 изд., перераб. и доп. – Рыбинск: РГАТА, 2004. – 164 с.

4. СТП 1.01 – 2002. Общие требования к оформлению учебных документов.

Текстовые документы. – Введ. с 01.02.2003. – 28 с.

 


Приложение А Текст программы

RomSize EQU 4096

inport EQU 2

outsym EQU 0

outnum EQU 1

outflag EQU 3

NMax EQU 50

 

Data SEGMENT AT 0h

timeuser dw 200 DUP(?);время пользователей

nakopitel db 5 dup(?);сумма 10 замеров

zamer db 1 dup(?)

nomberuser dw 1 dup(?);номер пользователя

mesto dw 1 dup(?);место

sort db 1 dup(?);флаг сортировки

flagtime db 1 dup(?);флаг генерации задержки

obraz db 1 dup(?);ячейка хранящая образ кнопок

old db 1 dup(?);значение кнопок для выбора пользователя

random dw 2 dup(?);ячейка хранящая случайные числа

iadro dw 1 dup(?);ядро для получения случайных чисел

time db 4 dup(?);время для вывода на дисплей (время 1ого замера и среднее время)

starts db 1 dup(?);состояние устройства (просмотр или замеры)

 

Data ENDS

 

 

Stk SEGMENT AT 100h

dw 20 dup (?)

StkTop Label Word

Stk ENDS

 

 

Code SEGMENT

ASSUME cs:Code,ds:Data,es:Code,ss:Stk

 

SymImages DB 03Fh,00Ch,076h,05Eh,04Dh,05Bh,07Bh,00Eh

DB 07Fh,05Fh,040h,079h,033h,07Ch,073h,063h

 

nullimages DB 02fh,03Dh,031h,031h

 

readkey PROC NEAR

 

mov obraz,00h

in al,inport;читаем порт ввод номера

mov ah,al;выделение

xor al,old;переднего

and al,ah

mov old,ah

jz read1;фронта

mov obraz,ah

 

read1:

ret

readkey ENDP

 

Control PROC NEAR

;мы прочитав образ клавиатуры формируем флаги уравления

mov ah,obraz

cmp starts,0;если процесс измерения запущен

jne contr2;управление "сортировка/просмотр" невозможно.

and ah,10h

xor sort,ah;формирование флага сортировки

mov al,sort

out outflag,al

cmp sort,0

jne contr2

xor ax,ax

mov mesto,ax

contr2:

mov al,obraz

and al,00000100b;формирование флага запуска измерений

cmp al,0

je contr1

cmp starts,0ffh

je contr1

cmp sort,0

jne contr1

mov flagtime,0ffh

mov starts,0ffh

mov zamer,10

mov al,00000100b

out outflag,al

lea si,time

xor ax,ax

mov [si],ax

mov [si+2],ax

xor di,di

lea bx,timeuser

mov cx,100

contr4:mov ax,nomberuser

cmp [bx+di],ax

jne contr3

mov [bx+di],0ffffh

mov [bx+di+2],0ffffh

contr3:add di,4

loop contr4

contr1: ret

Control ENDP

 

 

inuser PROC NEAR

mov dx,nomberuser;считываем текущий номер пользователя

cmp dx,0ffffh

jne is4

mov nomberuser,01h

mov dx,01

is4: xor ax,ax

cmp starts,0;если программа выполняет замеры переходим к подпрограмме выводящей номер пользователя на индикаторы

jne is3

mov al,sort;если в режиме сортировки переходим к просмотру номера пользователя

cmp al,0

jne is3

mov al,03h;рассматриваем кнопки управление номером пользователя

and al,obraz;читаем образ кнопок

mov ah,al

cmp ah,1

jne is2

inc dl;увеличиваем его на 1

cmp dl,0Ah

jb is2

xor dl,dl

is2: cmp ah,2

jne is3

inc dh;или на 10 в зависимости от

cmp dh,0Ah;того какая кнопка была нажата

jb is3

xor dh,dh;не выходим за пределы 10ого счисления

is3: cmp sort,0

jne is1

mov nomberuser,dx;сохраняем текущего пользователя

mov dx,11011111b;передача параметров

mov bx,nomberuser;

CALL outdecimal

is1: ret

inuser ENDP

 

inmesto PROC NEAR

mov dx,mesto;считываем текущee место

cmp starts,0;если программа выполняет замеры выходим из подпрограммы.

jne im1

mov al,sort;если не в режиме просто переходим к подпрограмме вывода места на индикаторы.

cmp al,0

je im5

mov al,01100000b;рассматриваем кнопки управление местом

and al,obraz;читаем образ кнопок

mov ah,al

cmp ah,00100000b

jne im2

inc dl;увеличиваем его на 1

cmp dl,0Ah

jb im5

xor dl,dl

inc dh

cmp dh,0ah

jb im2

xor dx,dx;соблюдаем границы

im2: cmp ah,01000000b

jne im5

cmp dl,0

ja im3

mov dl,0ah

cmp dh,0

jne im4

mov dh,0ah

im4: dec dh

im3: dec dl

 

im5: cmp sort,0

je im1

mov mesto,dx;сохраняем текущего пользователя

mov dl,01111111b;передача параметров

mov ax,mesto

inc ax

aaa

cmp ah,0ah

jne im6

xor ah,ah

 

im6: mov bx,ax

CALL outdecimal

im1: ret

inmesto ENDP

 

outdecimal PROC NEAR;вывод двузначного десятичного числа на индикаторы в dx передается номера индикаторов, а в bx число.

CMP BX,0FFFFH

JNE OTN1

MOV BX,0A0AH

OTN1:

mov ax,Code

mov es,ax

xor ax,ax

mov al,dl

out outnum,al

mov al,bl

lea si,SymImages

add si,ax

mov al,es:[si]

out outsym,al

ror dl,1

xor al,al

out outsym,al

mov al,dl

out outnum,al

mov al,bh

lea si,SymImages

add si,ax

mov al,es:[si]

out outsym,al

xor al,al

out outsym,al

mov ax,data

mov es,ax

ret

outdecimal ENDP

 

randomize PROC NEAR;образовываем задержку по определенному алгоритму

cmp starts,0

je ran2

cmp flagtime,0

je ran2

mov ax,iadro;ядро

mov dx,random;случайный множитель

cmp dx,0;множитель не должен

jne ran1;быть равен 0

mov dx,random+2

cmp dx,0

jne ran1

mov dx,iadro

ran1: mul dx

mov random,ax;сохраняем младшую часть как новый множитель

shr ax,8

mov ah,dl

mov random+2,ax;середина числа является сл. числом

mov flagtime,0;сгенерировали время, сбросили флаг

ran2: ret

randomize ENDP

 

priglashenie PROC NEAR

cmp starts,0

je pr2

mov cx,random+2

and cx,03fffh;2 старших разряда отбросили, тк. утомляет ожидать.

cmp cx,0

je pr3

dec cx

mov random+2,cx

jmp pr2

pr3: mov al,00101100b;задержки нет, выводим сигнал приглашения

out outflag,al

pr2: ret

PRIGLASHENIE ENDP

 

Reakcia PROC NEAR

cmp starts,0

je rkc3

cmp random+2,0

jne rkc3

lea si,time

mov al,obraz

and al,00001000b

cmp al,0

je rkc1

jmp exit

rkc1:

mov al,[si+3]

cmp al,02h

je exit

 

 

xor ax,ax

MOV CX,3

mov al,[si]

add al,1;прибавляем 1

aaa

mov [si],al

rkc2: inc si

mov al,[si]

adc al,0;подбираем перенос

aaa

mov [si],al

loop rkc2

cmp al,02h;если более 2с. не ждем выходим.

je exit

jmp rkc3

exit: mov al,00000100b

out outflag,al

call sum

mov flagtime,0ffh

rkc3: ret

Reakcia ENDP

 

outtime PROC NEAR

mov ax,data

mov es,ax

lea si,time

mov ax,[si]

cmp ax,0f0fh

jne ot3

mov bx,11111111B

call outnull

jmp ot2

ot3:

xor cx,cx

mov cl,03h

xor dx,dx

mov dl,11110111b

ot1: lea di,SymImages

mov al,dl

out outnum,al

xor ax,ax

mov al,[si]

add di,ax

mov ax,Code

mov es,ax

mov al,es:[di]

out outsym,al

inc si

xor al,al

out outsym,al

mov ax,DATA

mov es,ax

ror dl,1

loop ot1

mov al,dl

out outnum,al

lea di,SymImages

xor ax,ax

mov al,[si]

add di,ax

mov ax,CODE

mov es,ax

mov al,es:[di]

or al,80h

out outsym,al

xor al,al

out outsym,al

mov ax,DATA

mov ax,es

ot2: ret

outtime ENDP

 

sum PROC NEAR

lea di,nakopitel;загрузка адресов

lea si,time

mov cx,4

clc

sm2:mov al,[si]

adc al,[di]

aaa

mov [di],al

inc si

inc di

loop sm2

mov al,0

adc al,[di]

aaa

mov [di],al

mov cx,4

lea si,time

xor ax,ax

sm1:mov [si],al

inc si

loop sm1

 

mov al,zamer

dec al

mov zamer,al

cmp al,0

jne sm4

mov starts,0;выполнили 10 замеров

mov flagtime,0;сбросили флаги

mov sort,0

xor al,al

out outflag,al

call save;вызвали подпрограмму записи

 

sm4:ret

sum ENDP

 

sortirovka proc near

xor cx,cx

lea bx,timeuser

mov cl,100

s3: push cx

xor si,si

mov cl,99

s2:

mov ax,[bx+si+2];берем время

cmp ax,[bx+si+6];сравниваем со след.

jbe s1; <=

mov ax,[bx+si];если справа меньше обмениваем dw 2

xchg ax,[bx+si+4]

mov [bx+si],ax

mov ax,[bx+si+2]

xchg ax,[bx+si+6]

mov [bx+si+2],ax

s1: add si,4

loop s2

pop cx

loop s3

ret

sortirovka endp

 

save PROC NEAR

lea si,nakopitel+4

lea di,timeuser+396

 

mov cx,4

xor ax,ax

sv1: shl ax,4;переводим время

or al,[si];в упакованный формат

dec si

loop sv1

 

MOV [DI+2],AX

MOV AX,NOMBERUSER

MOV [DI],AX

CALL sortirovka

xor ax,ax

lea si,nakopitel

mov [si],ax

mov [si+2],ax

mov [si+4],al

ret

save ENDP

 

raspakovka PROC NEAR

lea si,time

mov al,[bx+di+2]

and al,0fh

mov [si],al

mov al,[bx+di+2]

shr al,4

inc si

mov [si],al

inc si

mov al,[bx+di+3]

and al,0fh

mov [si],al

mov al,[bx+di+3]

shr al,4

inc si

mov [si],al

ret

raspakovka ENDP

 

PROSMOTR PROC NEAR

cmp starts,0

jne psmtr11

lea BX,timeuser

lea si,time

xor di,di

mov cx,100

cmp sort,0

je psmtr2

xor ax,ax

prsm2: cmp ax,mesto

jne prsm1

mov ax,[bx+di]

mov nomberuser,ax

 

call raspakovka

call outtime

mov dx,11011111b;передача параметров

mov bx,nomberuser;

CALL outdecimal

 

mov ax,mesto

inc ax

aaa

cmp ah,0ah

jne prsm6

xor ah,ah

prsm6:

mov dx,01111111b

mov bx,ax

call outdecimal

xor cx,cx

jmp psmtr1

prsm1:inc ax

aaa

add di,4

loop prsm2

mov bx,11011111b;передача параметров

call outnull

psmtr11: jmp psmtr1

 

 

psmtr2: xor ax,ax

inc ax

xor di,di

mov cx,100

prsm4:

mov dx,[bx+di]

cmp nomberuser,dx

jne prsm3

mov mesto,ax

call raspakovka

call outtime

mov dx,01111111b;передача параметров

mov bx,mesto;выводим место

mov ax,bx

dec ax

aaa

mov mesto,ax

CALL outdecimal

jmp psmtr1

prsm3:

inc ax

aaa

add di,4

loop prsm4

mov bx,01111111b

call outnull

 

psmtr1: ret

PROSMOTR ENDP

 

outnull PROC NEAR

mov cl,04h

mov ax,Code

mov es,ax

lea si,nullimages+3

xor dx,dx

mov dl,11110111b

o1: mov al,dl

out outnum,al

mov al,es:[si]

out outsym,al

dec si

xor al,al

out outsym,al

ror dl,1

loop o1

mov ax,DATA

mov ax,es

mov AX,05050H

MOV AX,0A0A0H

 

mov dx,bx;передача параметров

mov bx,0a0ah;выводим место

CALL outdecimal

 

lea si,time

mov ax,0f0fh

mov [si],ax

mov [si+2],ax

ret

outnull ENDP

 

PODGOTOVKA PROC NAER

lea si,time

xor ax,ax

mov cl,4

pd1: mov [si],al

inc si

loop pd1

mov cx,200

lea si,timeuser

mov ax,0ffffh

pd2: mov [si],ax

inc si

inc si

loop pd2

mov ax,01

mov nomberuser,ax;чистим начальное значение номера пользователя

 

xor ax,ax

mov mesto,ax;чистим начальное значение текущего места пользователя

mov obraz,al;чистим начальное значение образа кнопок

mov old,al;чистим начальное значение предыдущего состояния кнопок

mov sort,al;чистим начальное значение флага сортировки / просмотра

mov flagtime,al;чистим начальное значение флаг генерации задержки

mov starts,al;чистим начальное значение флаг запуска процесса измерений

mov zamer,al

lea si,nakopitel

mov [si],ax

mov [si+2],ax

mov [si+4],al

 

mov ax,1497h

mov iadro,ax

ret

PODGOTOVKA ENDP

 

Start:

mov ax,Data

mov ds,ax

mov es,ax

mov ax,Stk

mov ss,ax

lea sp,StkTop

call PODGOTOVKA

new:

call readkey

call Control

call inuser

call inmesto

call randomize

call priglashenie

call reakcia

call prosmotr

call outtime

jmp new

 

org RomSize-16

ASSUME cs:NOTHING

jmp Far Ptr Start

Code ENDS

END






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных