Рефераты. Вычислительная система обработки данных в реальном времени

portSW EQU 0322h

S_STACK SEGMENT PARA STACK 'stack'

DB 32 DUP('stack')

S_STACK ENDS

S_DAT SEGMENT PARA PUBLIC 'data'

msgErrDevice label dword

db 'Устройство сломано!'

outData dd ?

FName label dword

db 'output.dat', 0

FHandler dw ?

oldVect label dword

oldIp dw ?

oldCs dw ?

IntVect dd Int8

S_DAT ENDS

PRG_COD SEGMENT PARA PUBLIC 'code'

ASSUME CS:PRG_COD, DS:S_DAT, SS:S_STACK

Int8 PROC FAR ; модуль перегруженного прерывания

pusha ; сохраним все регистры

in Al, portSW ; читаем SW

test Al, 10000000b ; результат готов?

jz @@EXIT ; нет - на выход

in Ax, portDAT ; читаем результат

cmp Ax, 0 ; исключительная ситуация

jne @NO_EXEPTION ; нет - переход

; обработка исключения (может отсутствовать)

;…

@NO_EXEPTION:

mov word ptr [outData], Ax ; сохраним результат в файле

mov Ah, 40h

mov Bx, Ds:FHandler

mov Cx, 2

lds Dx, outData

int 21h

@@EXIT:

popa ; восстановим регистры

iret

Int8 ENDP

SetInt8 PROC

pusha

mov Ax, 3508h ; сохраним старый вектор прерывания

int 21h

mov oldIp, Bx

mov Ax, Es

mov oldCs, Ax

lds Dx, IntVect

mov Ax, 2508h ; установим новый

int 21h

popa

ret

SetInt8 ENDP

MAIN PROC FAR

pusha

mov Ah, 3Ch ; создадим файл

mov Cx, 0020h

lds Dx, FName

int 21h

jc @ERROR ; ошибка?

mov Ds:FHandler, Ax ; сохраним хэндлер

in Al, portSW ; читаем SW

cmp Al, 0FFh ; ошибка в устройстве?

jne @DEVICE_OK ; нет - переход

mov Ah, 40h ; запишем в выходной файл

mov Bx, Ds:FHandler ; сообщение об ошибке

mov Cx, 20

lds Dx, msgErrDevice

int 21h

mov Ah, 3Eh ; закроем файл

int 21h

jmp @ERROR ; на выход

@DEVICE_OK:

mov Al, 00000011b

out portCW, Al ; запишем CW

call SetInt8 ; «посадим» на прерывание от таймера

@ERROR:

popa

ret

MAIN ENDP

PRG_COD ENDS

END MAIN

Параметры системы

1. Максимальная частота работы системы:

fmax=5 МГц

2. Максимальное время задержки выходных данных:

TЗД=727tCLK=145 мкс

3. потребляемая мощность:

не более 15 Вт

4. надежность устройства (=10-7 час-1):

P(10000)=e-25t= 0,98

Конструктивно УВ может быть выполнено на двух печатных платах. На первой будут размещаться блок цифровой обработки и блок интерфейса, на второй - блок АЦП. Подключение к ПЭВМ осуществляется посредством разъема тип EISA. Подключение блока АЦП к устройству - посредством разъема RS_232 (или другого).

Временная диаграмма работы устройства ввода приведена на чертеже К2.006.223.ТЧ.

Заключение

В ходе работы над курсовым проектом по курсу «Организация ЭВМ комплексов и систем» было разработано устройство ввода, предназначенное для автоматического ввода и цифровой обработки аналогового сигнала. Были разработаны модули, входящие в состав устройства ввода, а также программное обеспечение самого УВ и для совместной работы его в ПЭВМ. Были оценены параметры вычислительной системы, выбран оптимальный вариант схемы. В соответствии со всеми этапами проекта были оформлены соответствующие чертежи и документация.

Список использованной литературы

1. Компьютерное оформление отчетных документов: методические указания / Составитель Т.И. Матикашвили; ТулГУ. Тула, 2000. - 36 с.

2. Пухальский Г.И., Новосельцева Т.Я. Проектирование дискретных устройств на интегральных микросхемах: Cправочник. - М.: Радио и связь, 1990. - 304 c

3. Микропроцессоры и микропроцессорные комплекты интегральных микросхем. Справочник в 2-х томах под ред. В.А. Шахнова.

4. Нефедов А.В. Интегральные микросхемы и их зарубежные аналоги: Справочник. Т. 8. - М.: ИП РадиоСофт, 2000

5. Цифровые и аналоговые интегральные микросхемы: Справочник / Под ред. С.В. Якубовского. - М., 1990

6. Телец В.А., Федорков Б.Г. Микросхемы ЦАП и АЦП: Функционирование, параметры, применения. - М.: Энергоатом, 1998

7. Казаринов Ю.М. и др. Микропроцессорный комплект К1810: Структура, программирование, применение. - М.: Высш. шк., 1990

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

SegRAM EQU 0FC00h ; сегмент ПЗУ

PrgSize EQU 112 ; размер программы (в словах)

portDAC EQU 0000b ; порт АЦП

portDAT EQU 0001b ; порт данных

portCW EQU 0110b ; порт упр. слова (CW)

portSW EQU 1010b ; порт слова сост. (SW)

portPRG EQU 0011b ; порт УС микросхем интерфейса

CODE

STARTUP

; тест ПЗУ

mov Ax, SegRAM

mov Ds, Ax ; в Ds - сегмент ПЗУ

xor Ax, Ax ; очистим Ax

mov Cx, PrgSize ; в Cx - размер программы (в словах)

xor Bx, Bx

@@LOOP1:

add Ax, Ds: [Bx] ; в Ax - сумма всех слов

add Bx, 2

loop @@LOOP1

cmp Ax, Ds: [PrgSize*2] ; совпадает ли с заданным?

je @CONTINUE1 ; да - идем дальше

mov Al, 0FFh

out portSW, Al ; SW < - ошибка

@HALT:

hlt ; вешаем систему

jmp @HALT

@CONTINUE1:

; программирование интерфейса

mov Al, 10010000b ; первая МС. порт C на ввод

mov Ah, 10011001b ; вторая МС. порт C на вывод

out portPRG, Ax ; программируем

; выполнение функции

mov Bx, 1 ; по-умолчанию X(0)=1

xor Cx, Cx ; очистим Cl=SW и Ch=CW

@@LOOP2:

xchg Ax, Cx

out portSW, Al ; SW < - данные не готовы

xchg Ax, Cx

and Cl, 01100000b

shr Cl, 2

in Ax, portCW ; в Ch - слово управления

mov Ch, Ah

in Ax, portDAC ; в Ax - с АЦП

test Ax, 0400h ; было переполнение?

jz @@LABEL1 ; не было - приступим к работе

test Ch, 00000010b ; переполнение. Что делать?

jz @@LABEL2

or Cl, 01100000b ; установим в бесконечность

@@LABEL2:

mov Ax, 0FFFFh ; установим максимум

@@LABEL1:

test Cl, 01010000b ; будут ли исключительные ситуации?

jnz @@LABEL3 ; будут -> переход

mov Dx, Ax

shr Dx, 8

cmp Dx, Bx ; X(i)>=256*X (i_1)?

jae @@LABEL8

@@LABEL9:

cmp Ax, Bx ; X(i)<X (i_1)?

jl @@LABEL10

xor Dx, Dx ; очистим Dx

div Bx ; Dx: Ax/Bx -> A+D/B

mov Si, Ax ; сохраним значение A

mul Dx ; Dx: Ax < - A*D

shl Ax, 1 ; *2

shl Dx, 1

div Bx ; 2*A*D/B

mov Bx, Ax

mov Ax, Si ; восстановим A

mul Ax ; Dx: Ax < - A*A

add Ax, Bx ; в Ax - результат!

jmp @@LABEL7

@@LABEL8:

or Cl, 00000010b ; SW < - OF

test Ch, 00000100b ; переполнение. Что делать?

jnz @@LABEL9

mov Ax, 0FFFFh ; результат < - максимум

jmp @@LABEL7

@@LABEL10:

or Cl, 00000001b ; SW < - UF

mov Al, Ch

and Ax, 0001h ; результат < - UF

jmp @@LABEL7

@@LABEL3:

xor Ax, Ax ; результатом будет 0

mov Dl, Cl ; Dl < - SW

mov Dh, Cl ; Dh < - SW

and Dx, 0001100001100000b ; замаскируем по операндам

cmp Dl, 01000000b ; X(i)==0?

je @@LABEL4 ; да - на выход

cmp Dh, 00011000b ; X (i_1)==бесконечность?

je @@LABEL4 ; да - на выход

test Ch, 00001000b ; результат = бесконечность

jnz @@LABEL4

mov Ax, 0FFFFh ; результат < - максимум

@@LABEL4:

cmp Dl, 01100000b ; X(i)==бесконечность?

jne @@LABEL5

or Cl, 00000010b ; SW < - OF

@@LABEL5:

cmp Dh, 00010000b ; X (i_1)==0?

jne @@LABEL6

or Cl, 00000100b ; SW < - div0

@@LABEL6:

cmp Dh, 00011000b ; X (i_1)==бесконечность?

jne @@LABEL7

or Cl, 00000001b ; SW < - UF

@@LABEL7:

out portDAT, Ax ; результат в порт

mov Bx, Ax ; X (i_1)=X(i)

mov Al, Cl

or Al, 10000000b ; SW < - данные готовы!

out portSW, Al ; SW в порт

wait ; ждем пока данные прочитают

jmp @@LOOP2 ; в начало

db 00h ; выравниевание на границу слова

dw xxxxh ; контрольная сумма ПЗУ

END

Также, при программировании ПЗУ необходимо записать команду перехода jmp 0FC00:0000h по адресу ПЗУ 3F0h (физический адрес 0FFF0h).

Страницы: 1, 2, 3, 4



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.