ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Структура данных программы
Из статической модели следует, что передача информации между программными модулями осуществляется с помощью наборов данных. Результаты разработки структуры данных сведем в таблицу (таблица 4.1).
Таблица 4.1 Структура данных программы устройство проверки реакции.
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 Не нашли, что искали? Воспользуйтесь поиском:
|