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

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

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 28.08.2012
Размер файла 1,2 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

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

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

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

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

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

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

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

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

35 jnz init_int

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

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

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

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

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

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

42 mov ds, ax

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

44 mov ss, ax

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

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

47 out PPIR, al

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

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

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

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

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

53 out PKDIR, al

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

55 out PPIC, al

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

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

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

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

60 init ENDP

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

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

63 mov bx, ax

64 mov cx, ax

65 mov dx, ax

66 add ax, ax

67 cmp ax, 10

68 jne error_cpu

69 add bx, bx

70 cmp bx, ax

71 jne error_cpu

72 add cx, cx

73 cmp cx, ax

74 jne error_cpu

75 add dx, dx

76 cmp dx, ax

77 jne error_cpu

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

79 mov cx, 8

80 shift:

81 shr ah, 1

82 jnc error_cpu

83 loop shift

84 ret

85 error_cpu:

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

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

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

89 jmp error_cpu

90 test ENDP

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

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

93 mov es, ax

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

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

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

97 count:

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

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

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

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

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

103 error_rom:

104 mov si,1

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

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

107 jmp error_rom

108 end_tst: ret

109 test_rom endp

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

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

112 test_bank:

113 mov ds, cx

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

115 test_cell: mov ax, СONST1

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

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

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

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

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

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

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

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

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

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

126 jnz test_cell

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

128 jz end_test_ram

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

130 jmp test_bank

131 error_ram:

132 mov si,1

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

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

135 jmp error_ram

136 end_test_ram: ret

137 test_ram ENDP

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

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

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

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

142 test al,63

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

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

145 inc si

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

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

148 jmp end_input

149 need_comp:

150 call computing

151 need_output:

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

153 end_input:

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

155 out PICR1, al

156 iret

157 input ENDP

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

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

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

161 ready:

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

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

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

165 jnz ready ; дожидаться готовности принтера

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

167 mov al, ds:[si] ; получить очередной байт из памяти

168 dec si ; перевести указатель на следующий элемент

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

170 out PPIA,al ; вывести текущий байт на принтер (порт А ППИ)

171 mov al,LPTW1 ; управляющее слово для принтера - установить строб

172 out PPIC,al

173 mov al, LPTW2 ; снять строб

174 out PPIC,al

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

176 out PICR1, al

177 iret

178 output ENDP

179 computing PROC NEAR ; подпрограмма обработки данных

180 test si,0 ; данных нет - выход

181 jz comp_end

182 mov di,si ; начать с конца массива данных

183 mov al, ds:[di] ; загрузить первый элемент

184 mov ch,al ; сh - максимальный элемент

185 mov cl,ax ; cl - минимальный элемент

186 min_max:

187 mov al, ds:[di] ; загрузить очередной элемент

188 cmp al,ch ; сравнить полученный байт с максимальным значением

189 jns next_1 ; новое значение меньше предыдущего

190 mov ch,al ; иначе - обновить максимальное значение

191 next_1:

192 cmp cl,al ; сравнить полученный байт с миним. значением

193 jns next_2 ; новое значение больше пердыдущего

194 mov cl,al ; иначе - обновить минимум

195 next_2:

196 dec di ; перейти к след. байту

197 jnz min_max ; больше нет введенных данных

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

199 inc si ; указать на следующий (пустой) элемент массива данных

200 mov ds:[si],cx ; сохранить в массив макс. и мин. значения

201 inc si ; сдвинуть указатель в массиве на последний элемент

202 add ch,cl ; получить сумму мин. и макс. эл-ов

203 ror ch,1 ; разделить ее пополам

204 inc si ;

205 mov ds:[si],ch ; сохранить полученное значение в массив

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

207 comp_end: ret

208 computing ENDP

209 codesg ends

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.