Проектирование микропроцессорного модуля автоматизированной информационной системы

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

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

Полученный модуль является готовым устройством и может быть применен в качестве устройства управления и обработки информации.

Приложения

 

Приложение А

 

Текст программного обеспечения МП-модуля на языке ассемблера

 

0; по адресу ffff0h находится команда call far test

1; остальной код - последовательно, начиная с адреса f4000h.

2datasg segment para data ; определение данных

3equ ROM F400h ;базовый адрес начала ПЗУ

4equ RAMEND 1FFFh ;база адреса конца ОЗУ(верхняя граница ОЗУ-1FFFFh)

equ CONST1 10101010h ;константы тестирования ОЗУ

6equ CONST2 01010101h

7equ PICW 00010110b ;управляющее слово для ПКП

8equ PPIW 10000010b ;УС для ППИ

9equ LPTW1 00001010b ;УС для принтера

10equ LPTW2 00001111b ;УС для принтера

11equ PKDIW 00000001b ;УС для ПККИ

12equ PPIA 08h ;адреса портов ППИ - А

13equ PPIB 09h ;В

14equ PPIC 0Ah ;С

15equ PPIR 0Bh ;регистр упр. слова ППИ

16equ PKDID 020h ;регистр данных ПККИ

17equ PKDIR 021h ;регистр слова состояния ПККИ

18equ PICR1 010h ;регистры ПКП

19equ PICR2 011h

20controlsum db ? ;переменная для эталонной контр. суммы ПЗУ

21datasg ends

 

22codesg segment para code

23init proc far ; программа инициализации при включении

24call test ; тест АЛУ

call test_rom ; тест ПЗУ

call test_ram ; тест ОЗУ

xor ax, ax ; обнулить аккумулятор

mov bx,ffffh ; заполнить bx единицами

29mov es, ax ; инициализировать сегмент es

30mov di, 010h ; 10h = 4*4 - прерывание INT O (по переполнению) -

31init_int: ; последнее из обязательных системных прерываний

32mov es:[di], bx ; инициализировать вектор прерывания значениями

33mov es:[di+2], ax ; адреса стартовой ячейки памяти

34sub di,2 ; перейти к следующему вектору

35jnz init_int

mov es:[014h], cs ; 5*4=20=14h. прерывание №5 - от принтера

37mov es:[016h], offset output ; переход на программу вывода

38mov es:[018h], cs ; прерывание №6 - от клавиатуры

39mov es:[01Ah], offset input ; переход на программу ввода

mov ax, 1Ch ; установка сегментов данных

41mov es, ax ; сразу после таблицы векторов прерываний

42mov ds, ax

43mov ax, 1000h ; базовый адрес стека - 10000h

44mov ss, ax

mov sp, 0fffeh ; начало стека - с конца ОЗУ

46mov al, PPIW ; загрузка упр. слова для ППИ

47out PPIR, al

48mov al, 00001101b ; сигнал сброса принтера

49out PPIC, al ; загрузить в порт С - порт УС принтера

mov al, PICW ; загрузка упр. слова для ПКП

51out PICR1, al ; адрес ПКП при A0=0

mov al, PKDIW ; загрузка упр. слова для ПККИ

53out PKDIR, al

54mov al,00001111b ; снятие сигнала сброса принтера

55out PPIC, al

56xor ax,ax ; обнулить аккумулятор

57mov si,ax ; указать на последний введенный элемент

58sti ; разрешить прерывания по входу INTR

59hlt ; перевести МП в режим останов

60init ENDP

 

61test PROC NEAR ; подпрограмма тестирования работы процессора

62mov ax, 5 ; проверка сумматора

63mov bx, ax

64mov cx, ax

mov dx, ax

add ax, ax

cmp ax, 10

jne error_cpu

add bx, bx

cmp bx, ax

jne error_cpu

add cx, cx

cmp cx, ax

jne error_cpu

add dx, dx

cmp dx, ax

jne error_cpu

mov ah, 11111111b ; проверка сдвигателя

mov cx, 8

shift:

shr ah, 1

jnc error_cpu

loop shift

ret

error_cpu:

86mov si,1 ; указать на смещение в области вывода

87mov ds:[si],FFFFh ; поместить в обл. вывода значение кода ошибки

88int 32 ; вызов п/программы вывода

89jmp error_cpu

90test ENDP

 

91test_rom PROC NEAR ; подпрограмма тестирования пзу

92mov ax, ROM ; начальный адрес пзу - F4000h

93mov es, ax

94mov si, 0 ; тест с ячейки 2

95xor ax, ax ; обнулить аккумулятор

96mov cx, BFFFh; счетчик цикла теста (48Кбайт -1)

count:

add ax, es:[si] ; добавить к сумме содержимое текущей ячейки

inc si ; передвинуть указатель на следующую

loop count ; повторять в цикле

cmp al, controlsum ; сравнить полученную сумму с эталонной

102je end_tst ; если совпадают - конец теста

103error_rom:

104mov si,1

105mov ds:[si],FFFEh ; поместить в область вывода знач. кода ошибки

106int 32 ; вызов п/программы вывода

107jmp error_rom

108end_tst: ret

test_rom endp

 

110test_ram PROC NEAR ; подпрограмма тестирования озу

111mov cx,1000h ; вначале - тест старшего банка ОЗУ

112test_bank:

mov ds, cx

mov di, 0ffffh ; счетчик повторений

115test_cell: mov ax, СONST1

116mov [di],ax ; записать в память

117mov bx,[di] ; считать из памяти

cmp ax,bx ; сравнить записанное и считанное

119jne error_ram ; перейти на обработчик ошибок

120mov ax, СONST2; продолжить тест с другой константой

mov [di],ax ; записать в память

122mov bx,[di] ; считать из памяти

cmp ax,bx ; сравнить записанное и считанное

jne error_ram ; перейти на обработчик ошибок

dec di ; перейти к следующему адресу

126jnz test_cell

127test cx,0 ; младший банк протестирован?

128jz end_test_ram

129mov cx,0 ; переход к тестированию младшего банка ОЗУ

130jmp test_bank

error_ram:

132mov si,1

133mov ds:[si],FFFDh ; поместить в обл. вывода значение кода ошибки

134int 32 ; вызов п/программы вывода

135jmp error_ram

136end_test_ram: ret

137test_ram ENDP

 

138input PROC NEAR ; обработчик прерывания от клавиатуры

139in al, PKDID ; считать номер клавиши из ПККИ

140test al,64 ; анализировать его значение

141jz need_output ; нажата клавиша печати

142test al,63

jz need_comp ; нажата клавиша обработки

144cli ; запретить прерывания

145inc si

mov ds:[si],al ; иначе сохраним ее код в области вывода

147sti ; разрешить прерывания

148jmp end_input

need_comp:

call computing

need_output:

int 32 ; вызов п/программы вывода

153end_input:

154mov al,64h ; очистка регистра текущих прерываний ПКП

155out PICR1, al

iret

input ENDP

 

158output PROC NEAR ; обработчик прерывания от принтера

159and si,si ; установить флаг z

160jz end_out ; если si=0, данные к выводу не готовы

161ready:

in al, PPIB ; считать слово состояния принтера (порт В ППИ)

163or al,00011111b ; выделить значащие биты

164test al,19h ; 11001b -слово состояния принтера, готового к приему

165jnz ready ; дожидаться