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 ; сохраним старый вектор прерывания
mov oldIp, Bx
mov Ax, Es
mov oldCs, Ax
lds Dx, IntVect
mov Ax, 2508h ; установим новый
popa
ret
SetInt8 ENDP
MAIN PROC FAR
mov Ah, 3Ch ; создадим файл
mov Cx, 0020h
lds Dx, FName
jc @ERROR ; ошибка?
mov Ds:FHandler, Ax ; сохраним хэндлер
cmp Al, 0FFh ; ошибка в устройстве?
jne @DEVICE_OK ; нет - переход
mov Ah, 40h ; запишем в выходной файл
mov Bx, Ds:FHandler ; сообщение об ошибке
mov Cx, 20
lds Dx, msgErrDevice
mov Ah, 3Eh ; закроем файл
jmp @ERROR ; на выход
@DEVICE_OK:
mov Al, 00000011b
out portCW, Al ; запишем CW
call SetInt8 ; «посадим» на прерывание от таймера
@ERROR:
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 < - данные не готовы
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 ; результат < - максимум
@@LABEL10:
or Cl, 00000001b ; SW < - UF
mov Al, Ch
and Ax, 0001h ; результат < - UF
@@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)==бесконечность?
test Ch, 00001000b ; результат = бесконечность
jnz @@LABEL4
@@LABEL4:
cmp Dl, 01100000b ; X(i)==бесконечность?
jne @@LABEL5
@@LABEL5:
cmp Dh, 00010000b ; X (i_1)==0?
jne @@LABEL6
or Cl, 00000100b ; SW < - div0
@@LABEL6:
jne @@LABEL7
@@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