Помощничек
Главная | Обратная связь


Археология
Архитектура
Астрономия
Аудит
Биология
Ботаника
Бухгалтерский учёт
Войное дело
Генетика
География
Геология
Дизайн
Искусство
История
Кино
Кулинария
Культура
Литература
Математика
Медицина
Металлургия
Мифология
Музыка
Психология
Религия
Спорт
Строительство
Техника
Транспорт
Туризм
Усадьба
Физика
Фотография
Химия
Экология
Электричество
Электроника
Энергетика

Моделирование микропроцессорной системы



Для проверки работоспособности микропроцессорной системы в программе Proteus 7 Professional была разработана следующая модель (рис. 13):

Рис. 13. Модель микропроцессорной системы в программе Proteus 7 Professional.

Смоделируем работу системы при следующих граничных условиях:

1) U = 5 В, f = 5 Гц

Проверим, соблюдается ли требуемый период квантования синусоиды в данной модели. Из рис. 14 можно найти:

Тогда частота синусоиды:

Следовательно, моделирование выполнено верно и микропроцессорная система работает адекватно при данных значениях амплитудного напряжения и частоты синусоиды.

Рис. 14. Результаты моделирования для U = 5 В, f = 5 Гц.

2) U = 5 В, f = 100 Гц

Проверим, соблюдается ли требуемый период квантования синусоиды в данной модели. Из рис. 15 можно найти:

Тогда частота синусоиды:

Следовательно, моделирование выполнено верно и микропроцессорная система работает адекватно при данных значениях амплитудного напряжения и частоты синусоиды.

Рис. 15. Результаты моделирования для U = 5 В, f = 100 Гц.

 

3) U =15 В, f = 5 Гц

Проверим, соблюдается ли требуемый период квантования синусоиды в данной модели. Из рис. 16 можно найти:

Тогда частота синусоиды:

Следовательно, моделирование выполнено верно и микропроцессорная система работает адекватно при данных значениях амплитудного напряжения и частоты синусоиды.

Рис. 16. Результаты моделирования для U = 15 В, f = 5 Гц.

4) U =15 В, f = 100 Гц

Проверим, соблюдается ли требуемый период квантования синусоиды в данной модели. Из рис. 17 можно найти:

Тогда частота синусоиды:

Следовательно, моделирование выполнено верно и микропроцессорная система работает адекватно при данных значениях амплитудного напряжения и частоты синусоиды.

Рис. 17. Результаты моделирования для U = 15 В, f = 100 Гц.


 

Приложение 1: листинг программы

A51 MACRO ASSEMBLER MY_KURSOVOY 04/28/2013 18:50:47 PAGE 1

 

 

MACRO ASSEMBLER A51 V8.01

OBJECT MODULE PLACED IN MY_KURSOVOY.OBJ

ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE MY_KURSOVOY.a51 SET(SMALL) DEBUG EP

 

LOC OBJ LINE SOURCE

 

1 ;******************************************************************************************

************************

2 ;Кильчицкая М.В. 09-МиТЭ. Вариант 3.

3 ;Разработать генератор синусоидального напряжения

4 ;с частотой 5-100 Гц и ампитудой 5-15 В.Напряжение

5 ;формируется с помощью 12-разрядных ЦАП. Частота и

6 ;напряжение задаются с клавиатуры и выводятся на LCD

7 ;******************************************************************************************

************************

9 ;КОНСТАНТЫ

7DCA 10 Timer_1_ms equ (0FFFFh-33333) ;раз в 1 мс опрашиваем клаву: 1 такт = 30нс

, х тактов = 1 мс => х = 33333 такта

0080 11 Port_data equ P0 ;порт Р0 мы используем для передачи

данных для ЦАП

13 ;КОНСТАНТЫ ДЛЯ ЦАПов

14 ;выводы шины управления для ЦАПов:

00A3 15 CSL_REF equ P2.3 ;Опорный ЦАП: младший байт

00A4 16 CSM_REF equ P2.4 ;Опорный ЦАП: старший байт

00A5 17 LDAC_REF equ P2.5 ;Опорный ЦАП: вывод значения на вых

од ЦАП (LOAD DAC)

00A6 18 WR_DAC equ P2.6 ;Разрешение записи в ЦАПы

00A7 19 CSL_OUT equ P2.7 ;Выходной ЦАП:младший байт

00B0 20 CSM_OUT equ P3.0 ;Выходной ЦАП:старший байт

00B1 21 LDAC_OUT equ P3.1 ;Выходной ЦАП:вывод значения на вых

од ЦАП (LOAD DAC)

23 ;КОНСТАНТЫ ДЛЯ КЛАВИАТУРЫ

0090 24 Port_klava equ P1 ;порт Р1 мы используем для подключе

ния клавиатуры

25 ;коды режимов работы

0000 26 VVOD equ 00h

0001 27 VVOD_U equ 01h

0002 28 VVOD_f equ 02h

0003 29 RABOTA equ 03h

30 ;коды клавиш

0081 31 BUTTON_0 equ 10000001b

0082 32 BUTTON_1 equ 10000010b

0084 33 BUTTON_2 equ 10000100b

0088 34 BUTTON_3 equ 10001000b

0041 35 BUTTON_4 equ 01000001b

0042 36 BUTTON_5 equ 01000010b

0044 37 BUTTON_6 equ 01000100b

0048 38 BUTTON_7 equ 01001000b

0021 39 BUTTON_8 equ 00100001b

0022 40 BUTTON_9 equ 00100010b

0014 41 BUTTON_U equ 00010100b

0018 42 BUTTON_f equ 00011000b

0012 43 BUTTON_RABOTA equ 00010010b

45 ;КОНСТАНТЫ ДЛЯ ДИСПЛЕЯ

00A0 46 RS_LCD equ P2.0 ;выбор команда/данные

00A1 47 RW_LCD equ P2.1 ;выбор запись/чтение

00A2 48 E_LCD equ P2.2 ;строб выбранного - записи/чтения

FB4F 49 Timer_40 equ (0FFFFh-40*30) ;ждем 40 мкс при тактовой частоте МК 33МГц

51 ;**************************************************************

 

A51 MACRO ASSEMBLER MY_KURSOVOY 04/28/2013 18:50:47 PAGE 2

 

52 ;МАКРОСЫ

53 ;передает байт указанному ЦАП (его старшему или младшему байту)

54 MACRO_WR_DAC macro pin_,data_ ;(12)8

55 ;сначала выводим данные на пины порта - см. timing diagram

56 mov P0,data_ ;(2)2

57 clr pin_ ;(2)1

58 clr WR_DAC ;(2)1

59 ;40 нс - время записи- см. timing diagram

60 nop ;(1)1

61 nop ;(1)1

62 setb WR_DAC ;(2)1

63 setb pin_ ;(2)1

64 ENDM

66 ;обновляет значение (напряжение) на выходе ЦАП

67 MACRO_LDAC macro pin_ ;(6)4

68 clr pin_ ;(2)1

69 nop ;(1)1

70 nop ;(1)1

71 setb pin_ ;(2)1

72 ENDM

74 ;********************************************************************************

75 ;СЕГМЕНТ ДАННЫХ (В ОЗУ)

---- 76 DSEG AT 08h

0008 77 Addr_tochki: DS 2 ;здесь храним адрес выводимой точки в масси

ве

000A 78 Counter_tochka: DS 1 ;здесь храним число повторений выводимой то

чки

000B 79 Cod_tochki: DS 2 ;здесь храним код текущей точки - м

ладший и старший байты

000D 80 Regim_raboty: DS 1 ;здесь храним код режима работы: 0h - VVOD,

1h - U, 2h - f,3h - RABOTA

000E 81 U_value: DS 1 ;величина напряжения

000F 82 f_value: DS 1 ;величина частоты

0010 83 Predidyshiy_kod_s_klavy: DS 1

0011 84 Zaderzhka_f_5_100: DS 2

0013 85 Stack_base: DS 0 ;начальный адрес стека в памяти

87 ;**********************************************************************

88 ;СЕГМЕНТ КОДА (В ПЗУ)

---- 89 CSEG

0000 011D 91 ajmp start

0003 93 org 0003h ;установили в счетчик РС адрес вектора прерывания INT0

0003 219E 94 ajmp interrupt_VVOD

000B 96 org 000Bh ;установили в счетчик РС адрес вектора прерывания T0

000B 21C2 97 ajmp interrupt_T0

001B 99 org 001Bh ;установили в счетчик РС адрес вектора прерывания T1

001B 018E 100 ajmp podprog_DAC_OUT

102 ;**********************************************************

103 ;ИНИЦИАЛИЗАЦИЯ

001D 104 start:

001D 758113 105 mov SP,#Stack_base ;инициализация стека

0020 7580FF 106 mov P0,#0FFh ;установим на пины порта Р0 все 1цы

108 ;ИНИЦИАЛИЗАЦИЯ ЦАПов

109 ;пины должны быть не активны + они инверсные:

0023 D2A3 110 setb CSL_REF

0025 D2A4 111 setb CSM_REF

0027 D2A5 112 setb LDAC_REF

0029 D2A6 113 setb WR_DAC

 

A51 MACRO ASSEMBLER MY_KURSOVOY 04/28/2013 18:50:47 PAGE 3

 

002B D2A7 114 setb CSL_OUT

002D D2B0 115 setb CSM_OUT

002F D2B1 116 setb LDAC_OUT

118 ;ИНИЦИАЛИЗАЦИЯ КЛАВИАТУРЫ

0031 D288 119 setb IT0

0033 D2AF 120 setb EA

0035 D2A8 121 setb EX0

0037 751000 122 mov Predidyshiy_kod_s_klavy,#00h

124 ;ИНИЦИАЛИЗАЦИЯ ДИСПЛЕЯ

003A C2A2 125 clr E_LCD

003C 71DA 126 acall podprog_nastroyka_displaya

128 ;ИНИЦИАЛИЗАЦИЯ РЕЖИМА РАБОТЫ

003E 750D00 129 mov Regim_raboty,#VVOD

0041 750E05 130 mov U_value,#05h;#0Ah

0044 750F05 131 mov f_value,#05h

0047 713C 132 acall Redraw_LCD_RABOTA

134 ;**********************************************************

135 ;запуск таймера

0049 758911 136 mov TMOD,#00010001b ;16-битные таймеры Т0 и Т1

004C D2AF 137 setb EA ;снимаем запрет всех прерываний

004E D2A9 138 setb ET0 ;разрешаем прерывания от таймера Т0

0050 D2AB 139 setb ET1 ;разрешаем прерывания от таймера Т1

0052 758ACA 140 mov TL0,#low(Timer_1_ms)

0055 758C7D 141 mov TH0,#high(Timer_1_ms)

0058 D28C 142 setb TR0 ;запускаем таймер Т0

144 ;***************************************

145 ;инициализация синусоиды

146 ;адрес первой выводимой точки в массиве:

005A 750878 147 mov Addr_tochki,#LOW(Start_sin)

005D 750904 148 mov Addr_tochki+1,#HIGH(Start_sin)

150 ;число повторений точки - вытащим из ПЗУ

0060 900478 151 mov DPTR,#Start_sin

0063 7400 152 mov A,#00h

0065 93 153 movc A,@A+DPTR

0066 F50A 154 mov Counter_tochka,A

156 ;выводим код точки на выходной ЦАП

157 ;старший байт - вытащим из ПЗУ

0068 7402 158 mov A,#02h

006A 93 159 movc A,@A+DPTR

160 MACRO_WR_DAC CSM_OUT,A ;сначала старший байт кода точки в старший байт ЦАП

170 ;младший байт - вытащим из ПЗУ

0077 7401 171 mov A,#01h

0079 93 172 movc A,@A+DPTR

173 MACRO_WR_DAC CSL_OUT,A ;потом младший байт кода точки в младший байт ЦАП

183 MACRO_LDAC LDAC_OUT

008C 018C 189 ajmp $

191 ;*****************************************

192 ;ПРЕРЫВАНИЕ ОТ ТАЙМЕРА Т1

193 ;выводим код текущей точки синусоиды в ЦАП

194 ;call ;(2)2

008E 195 podprog_DAC_OUT:

196 ;обновим таймер Т1

008E C28E 197 clr TR1 ;1

0090 85118B 198 mov TL1,Zaderzhka_f_5_100 ;2

0093 85128D 199 mov TH1,Zaderzhka_f_5_100+1 ;2

0096 D28E 200 setb TR1 ;1

201 ;cpl P3.7

 

A51 MACRO ASSEMBLER MY_KURSOVOY 04/28/2013 18:50:47 PAGE 4

 

202 ;reti

0098 C0E0 203 push ACC ;(2)2

205 ;декремент и проверка, сколько осталось повторений текущей точки синусоиды

009A D50A55 206 djnz Counter_tochka,loop_Counter_tochka_not_zero ;если не ноль ;(5)2

009D C082 208 push DPL ;(2) 2

009F C083 209 push DPH ;(2) 2

211 ;если ноль:

00A1 E508 212 mov A,Addr_tochki

;(2)1 ;загрузим в А мл байт Addr_tochki - адрес выводимой точки в массиве

00A3 B45710 213 cjne A,#LOW(End_sin),loop_Addr_tochki_ne_ravno_End_sin ;(4)2 ;если мл байт Addr_

tochki не равен мл байту End_sin - идем по метке

00A6 E509 214 mov A,Addr_tochki+1

;(2)1 ;если мл байт равен мл байту End_sin - проверяем старший байт Addr_tochki

00A8 B4070B 215 cjne A,#HIGH(End_sin),loop_Addr_tochki_ne_ravno_End_sin ;(4)2 ;если он не равен с

тарш байту End_sin, идем по метке

217 ;помещаем в DPTR адрес первой выводимой точки в массиве, а из DPTR - в переменную Addr_toch

ki (2байтная):

00AB 900478 218 mov DPTR,#Start_sin

;(3)2

00AE 858208 219 mov Addr_tochki,DPL

;(3)2

00B1 858309 220 mov Addr_tochki+1,DPH

;(3)2

00B4 01C5 221 ajmp loop_Addr_tochki_ravno_End_sin ;(2

)2

00B6 223 loop_Addr_tochki_ne_ravno_End_sin:

224 ;увеличиваем текущий адрес точки на 3:

00B6 850882 225 mov DPL,Addr_tochki ;(3)2

00B9 850983 226 mov DPH,Addr_tochki+1 ;(3)2

00BC A3 227 inc DPTR ;(1)2

00BD A3 228 inc DPTR ;(1)2

00BE A3 229 inc DPTR ;(1)2

00BF 858208 230 mov Addr_tochki,DPL ;(3)2

00C2 858309 231 mov Addr_tochki+1,DPH ;(3)2

232 ;15

234 ;загрузим новое число потоврений точек и код следующей точки:

00C5 235 loop_Addr_tochki_ravno_End_sin:

236 ;число повторений точки - вытащим из ПЗУ

00C5 7400 237 mov A,#00h ;(2)1

00C7 93 238 movc A,@A+DPTR ;(3)2

00C8 F50A 239 mov Counter_tochka,A ;(2)1

241 ;выводим код точки на выходной ЦАП

242 ;старший байт

00CA 7402 243 mov A,#02h ;(2)1

00CC 93 244 movc A,@A+DPTR ;(3)2

245 MACRO_WR_DAC CSM_OUT,A ;(12)8 ;сначала старший байт кода точки в старший байт ЦАП

255 ;младший байт

00D9 7401 256 mov A,#01h ;(2)1

00DB 93 257 movc A,@A+DPTR ;(3)2

258 MACRO_WR_DAC CSL_OUT,A ;(12)8 ;потом младший байт кода точки в младший байт ЦАП

268 MACRO_LDAC LDAC_OUT ;(6)4

00EE D083 274 pop DPH ;(2)2

00F0 D082 275 pop DPL ;(2)2

00F2 277 loop_Counter_tochka_not_zero:

00F2 D0E0 278 pop ACC ;(2)2

00F4 32 279 reti ;(3)2

280 ;92 - если не последняя точка - 2760нс 68

 

A51 MACRO ASSEMBLER MY_KURSOVOY 04/28/2013 18:50:47 PAGE 5

 

281 ;96 - если последняя точка - 2880нс 74

282 ;14 - если точка не меняется - 420нс

284 ;*******************************************************

285 ;Подпрограмма, которая делает задержку на N мкс

286 ;в подпрограмму передается в качестве параметров: DPTR

287 ;подпрограмма возвращает в качестве парамаетров: -

00F5 288 podprog_wait_N_mks:

00F5 C0E0 289 push ACC

291 ;инициализация таймера T0:

00F7 758901 292 mov TMOD,#00000001b

294 ;в таймер пошло число N мкс и мы его запустили

00FA E582 295 mov A,DPL

00FC F58A 296 mov TL0,A

00FE E583 297 mov A,DPH

0100 F58C 298 mov TH0,A

0102 D28C 299 setb TR0

0104 301 podprog_wait_N_mks_loop:

0104 308DFD 302 jnb TF0,podprog_wait_N_mks_loop

0107 C28D 303 clr TF0

0109 C28C 304 clr TR0 ;остановили счетчик таймера

010B D0E0 306 pop ACC

010D 22 307 ret

309 ;****************************************************

310 ;Подпрограмма устанавливает напряжение на опорном ЦАП

311 ;в подпрограмму передается в качестве параметров: -

312 ;подпрограмма возвращает в качестве парамаетров: -

010E 313 podprog_DAC_U:

010E C0E0 314 push ACC

0110 C0F0 315 push B

0112 E50E 317 mov A,U_value

0114 75F011 318 mov B,#low(273)

0117 A4 319 mul AB

320 ;сохраним аккумулятор - в нем лежит мл байт, кот нужно вывести на опорный цап

0118 C0E0 321 push ACC

011A E50E 323 mov A,U_value

011C 75F001 324 mov B,#high(273)

011F A4 325 mul AB

326 ;в аккумуляторе лежит старший байт

328 ;установка опорного напряжения

329 ;выведем код в первый ЦАП:

330 ;сначала в старший байт:

331 MACRO_WR_DAC CSM_REF,A

012C D0E0 341 pop ACC

342 ;потом в младший байт

343 MACRO_WR_DAC CSL_REF,A

353 ;обновляем данные на выходе ЦАП

354 MACRO_LDAC LDAC_REF

0140 D0F0 360 pop B

0142 D0E0 361 pop ACC

0144 22 362 ret

364 ;********************************************************

365 ;Подпрограмма загружает значение частоты синусоиды из ПЗУ

366 ;в подпрограмму передается в качестве параметров: -

367 ;подпрограмма возвращает в качестве парамаетров: -

0145 368 podprog_f_SIN:

 

A51 MACRO ASSEMBLER MY_KURSOVOY 04/28/2013 18:50:47 PAGE 6

 

0145 C0E0 369 push ACC

370 ;номер текущей ячейки в пзу = f_value - 5

0147 E50F 371 mov A,f_value

0149 9405 372 subb A,#5

373 ;умножить на 2 можно не MUL AB, a RL A - сдвиг влево!!!!!

374 ;на 2 умножаем, т.к. задержки в таблице - 2байтные числа, их адреса кратны 2м

014B 23 375 rl A

014C C0E0 376 push ACC

377 ;помещаем в дптр начальный адрес в таблице частот, к нему будем + А

378 ;читаем мл байт из пзу

014E 90075A 379 mov DPTR,#f_5_100

0151 93 380 movc A,@A+DPTR

0152 F512 381 mov Zaderzhka_f_5_100+1,A

382 ;читаем старший байт из пзу

0154 A3 383 inc DPTR

0155 D0E0 384 pop ACC

0157 93 385 movc A,@A+DPTR

0158 F511 386 mov Zaderzhka_f_5_100,A

015A D0E0 388 pop ACC

015C 22 389 ret

391 ;*******************************************************************************

392 ;Подпрограмма работы с клавиатурой

393 ;в подпрограмму передается в качестве параметров: -

394 ;подпрограмма возвращает в качестве параметров: R0 (8-битный код нажатой кнопки)

015D 395 podprog_klava:

396 ;заносим переменные в стек

015D C0E0 397 push ACC

399 ;проверка строк

015F 75900F 400 mov Port_klava,#00001111b

0162 E590 401 mov A,Port_klava

0164 F4 402 cpl A ;инверсия аккумулятора

0165 540F 403 anl A,#00001111b ;логическое И с маской, которую задали в начале - т.к. мы п

роверяем строки

0167 F8 404 mov R0,A ;сохраним результат проверки на строки в регистре R

0, т.к. А нам еще понадобится

406 ;проверка столбцов

0168 7590F0 407 mov Port_klava,#11110000b

016B E590 408 mov A,Port_klava

016D F4 409 cpl A

016E 54F0 410 anl A,#11110000b

412 ;объединим результаты проверки на строки (младшая тетрада) и столбцы (старшая тетрада)с пом

ощью логич ИЛИ

413 ;результат объединения подпрограмма будет возвращать в регистр R0

0170 4200 414 orl 0,A

0172 D0E0 416 pop ACC

0174 22 417 ret

419 ;**********************************************************************

420 ;Подпрограмма защиты клавиатуры от дребезга

421 ;в подпрограмму передается в качестве параметров: -

422 ;подпрограмма возвращает в качестве параметров: А (код нажатой клавиши)

0175 423 podprog_anti_drebezg:

0175 C000 424 push 0

0177 C001 425 push 1

0179 C002 426 push 2

017B 315D 428 acall podprog_klava ;вызов подпрограмм

017D 430 loop_podprog_anti_drebezg_FAIL:

017D 7A05 431 mov R2,#5 ;наш счетчик - проверяем 5 раз

 

A51 MACRO ASSEMBLER MY_KURSOVOY 04/28/2013 18:50:47 PAGE 7

 

017F E8 432 mov A,R0 ;запомнили то, что вернула нам подпрограмма

0180 F9 433 mov R1,A ;в регистре R1 - с тим будем сравниваться R0 5 раз

0181 435 loop_podprog_anti_drebezg:

0181 315D 436 acall podprog_klava ;и снова вызвали подпрограмму

437 ;и сравнили тот новый код, что вернула подп

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

438 ;если не совпало - снова вернем в счетчик 5

ку

0183 E9 439 mov A,R1

0184 F4 440 cpl A

0185 5500 441 anl A,0

0187 70F4 442 jnz loop_podprog_anti_drebezg_FAIL

0189 DAF6 443 djnz R2,loop_podprog_anti_drebezg

018B E9 444 mov A,R1

018C B51004 445 cjne A,Predidyshiy_kod_s_klavy,kody_klavish_ne_ravny

018F 7400 446 mov A,#00h

0191 2197 447 ajmp loop_podprog_anti_drebezg_end

0193 448 kody_klavish_ne_ravny:

0193 E510 449 mov A,Predidyshiy_kod_s_klavy

0195 8910 450 mov Predidyshiy_kod_s_klavy,R1

0197 452 loop_podprog_anti_drebezg_end:

0197 D002 453 pop 2

0199 D001 454 pop 1

019B D000 455 pop 0

019D 22 456 ret

458 ;******************************************************************************************

***

459 ;ПРЕРЫВАНИЕ ВЫЗЫВАЕТСЯ ПО НАЖАТИЮ КНОПКИ ВВОД (P3.2, INT0 ИНВЕРСНОЕ)

019E 460 interrupt_VVOD:

019E C28E 461 clr TR1 ;при нажатии кнопки ВВОД мы должны остановить вывод синусоиды и начать опро

с клавы

462 ;в прерывании запускаем таймер Т0, чтобы опрашивать клавиатуру раз в милисекунду

01A0 C28C 463 clr TR0

01A2 758ACA 464 mov TL0,#low(Timer_1_ms)

01A5 758C7D 465 mov TH0,#high(Timer_1_ms)

01A8 750D00 466 mov Regim_raboty,#VVOD

01AB D28C 467 setb TR0

469 ;проверка нижнего допустимого значения напряжения - больше или равно 5

01AD 7405 470 mov A,#5

01AF 950E 471 subb A,U_value

01B1 4003 472 jc loop_podprog_VVOD_U_Value_correktno_vvod

01B3 750E05 473 mov U_value,#5

01B6 475 loop_podprog_VVOD_U_Value_correktno_vvod:

476 ;проверка нижнего допустимого значения частоты - больше или равно 5

01B6 7405 477 mov A,#5

01B8 950F 478 subb A,f_value

01BA 4003 479 jc loop_podprog_VVOD_f_Value_correktno_vvod

01BC 750F05 480 mov f_value,#5

01BF 482 loop_podprog_VVOD_f_Value_correktno_vvod:

01BF 713C 483 acall Redraw_LCD_Rabota

01C1 32 484 reti

486 ;****************************

487 ;ПРЕРЫВАНИЕ ОТ ТАЙМЕРА Т0

01C2 488 interrupt_T0:

489 ;перезапустим таймер Т0

01C2 C28C 490 clr TR0

01C4 758ACA 491 mov TL0,#low(Timer_1_ms)

01C7 758C7D 492 mov TH0,#high(Timer_1_ms)

01CA D28C 493 setb TR0

 

A51 MACRO ASSEMBLER MY_KURSOVOY 04/28/2013 18:50:47 PAGE 8

 

495 ;получим код текущего режима работы

01CC E50D 496 mov A,Regim_raboty

01CE B40034 498 cjne A,#VVOD,interrupt_T0_VVOD_U ;если в переменной Regim_raboty леж

ит не ВВОД (а U,f,РАБОТА)

499 ;ЕСЛИ РЕЖИМ РАБОТЫ - ВВОД:

01D1 3175 500 acall podprog_anti_drebezg

01D3 B4140A 501 cjne A,#BUTTON_U,interrupt_T0_BUTTON_f ;если была нажата клавиша не U, а д

ругая

502 ;если была нажата клавиша U, на дисплее высветится *U(B):000

01D6 750D01 503 mov Regim_raboty,#VVOD_U

01D9 750E00 504 mov U_value,#00h

01DC 7117 505 acall Redraw_LCD_U

01DE 4115 506 ajmp interrupt_T0_end

01E0 508 interrupt_T0_BUTTON_f:

01E0 B4180A 509 cjne A,#BUTTON_f,interrupt_T0_BUTTON_RABOTA ;если была нажата клавиша не f, а д

ругая

510 ;если была нажата клавиша f, на дисплее высветится *f(B):000:

01E3 750D02 511 mov Regim_raboty,#VVOD_f

01E6 750F00 512 mov f_value,#00h

01E9 51F2 513 acall Redraw_LCD_f

01EB 4115 514 ajmp interrupt_T0_end

01ED 516 interrupt_T0_BUTTON_RABOTA:

01ED B41225 517 cjne A,#BUTTON_RABOTA,interrupt_T0_end ;если не была нажата клавиша РАБОТА

518 ;если была нажата клавиша РАБОТА:

01F0 750D03 519 mov Regim_raboty,#RABOTA

520 ;здесь настроим вызов прерывания для синуоиды

01F3 C28C 521 clr TR0 ;остановили таймер клавы и дисплея

01F5 310E 522 acall podprog_DAC_U

01F7 3145 523 acall podprog_f_SIN

01F9 713C 524 acall Redraw_LCD_RABOTA

525 ;запускаем таймер для синусоиды

01FB 85118B 526 mov TL1,Zaderzhka_f_5_100

01FE 85128D 527 mov TH1,Zaderzhka_f_5_100+1

0201 D28E 528 setb TR1

0203 4115 530 ajmp interrupt_T0_end

0205 532 interrupt_T0_VVOD_U:

0205 B40106 533 cjne A,#VVOD_U,interrupt_T0_VVOD_f

534 ;поместим на 1ю строчку дисплея 00:

0208 5116 535 acall podprog_VVOD_U

020A F50D 536 mov Regim_raboty,A

020C 4115 537 ajmp interrupt_T0_end

020E 538 interrupt_T0_VVOD_f:

020E B40204 539 cjne A,#VVOD_f,interrupt_T0_end

0211 5186 540 acall podprog_VVOD_f

0213 F50D 541 mov Regim_raboty,A

0215 542 interrupt_T0_end:

0215 32 543 reti

545 ;******************************************************************************************

*****

546 ;Подпрограмма ввода напряжения с клавиатуры

547 ;в подпрограмму передается в качестве параметров: -

548 ;подпрограмма возвращает в качестве параметров: А (код режима (текущего или выбранного друг

ого))

0216 549 podprog_VVOD_U:

0216 C000 550 push 0

551 ;опрашиваем клавиатуру

0218 3175 552 acall podprog_anti_drebezg

021A 6063 553 jz loop_podprog_VVOD_U_END_VVOD_U ;если не нажата ни одна клавиша - в А будет

00000000b

 

A51 MACRO ASSEMBLER MY_KURSOVOY 04/28/2013 18:50:47 PAGE 9

 

021C 20E41D 555 jb ACC.4,loop_podprog_VVOD_U_regim

021F 7191 557 acall podprog_kod_v_chislo

0221 F8 558 mov R0,A

0222 E50E 559 mov A,U_value

0224 75F00A 560 mov B,#10

0227 A4 561 mul AB

0228 28 562 add A,R0

563 ;проверка В и С

0229 4054 564 jc loop_podprog_VVOD_U_END_VVOD_U

022B A8F0 565 mov R0,B

022D B8004F 566 cjne R0,#00h,loop_podprog_VVOD_U_END_VVOD_U

567 ;проверка, что число не больше 15

0230 F8 568 mov R0,A

0231 9410 569 subb A,#16

0233 E8 570 mov A,R0

0234 5049 571 jnc loop_podprog_VVOD_U_END_VVOD_U

0236 F50E 573 mov U_value,A

0238 7117 574 acall Redraw_LCD_U

023A 417F 575 ajmp loop_podprog_VVOD_U_END_VVOD_U

023C 577 loop_podprog_VVOD_U_regim:

023C B4140B 578 cjne A,#BUTTON_U,loop_podprog_VVOD_U_chislo_may_be_f

023F B2B6 579 cpl P3.6

0241 750E00 581 mov U_value,#00h

0244 7117 582 acall Redraw_LCD_U

0246 7401 584 mov A,#VVOD_U

0248 4183 585 ajmp loop_podprog_VVOD_U_END

024A 587 loop_podprog_VVOD_U_chislo_may_be_f:

024A B41812 588 cjne A,#BUTTON_f,loop_podprog_VVOD_U_chislo_may_be_RABOTA

590 ;проверка нижнего допустимого значения напряжения - больше или равно 5

024D 7405 591 mov A,#5

024F 950E 592 subb A,U_value

0251 4003 593 jc loop_podprog_VVOD_U_Value_correktno

0253 750E05 594 mov U_value,#5

0256 596 loop_podprog_VVOD_U_Value_correktno:

0256 750F00 597 mov f_value,#00h

0259 51F2 598 acall Redraw_LCD_f

025B 7402 599 mov A,#VVOD_f

025D 4183 600 ajmp loop_podprog_VVOD_U_END

025F 602 loop_podprog_VVOD_U_chislo_may_be_RABOTA:

025F B4121D 603 cjne A,#BUTTON_RABOTA,loop_podprog_VVOD_U_END_VVOD_U

605 ;проверка нижнего допустимого значения напряжения - больше или равно 5

0262 7405 606 mov A,#5

0264 950E 607 subb A,U_value

0266 4003 608 jc loop_podprog_VVOD_U_Value_correktno_rabota

0268 750E05 609 mov U_value,#5

026B 611 loop_podprog_VVOD_U_Value_correktno_rabota:

026B C28C 613 clr TR0 ;остановаили таймер клавы и дисплея

026D 310E 614 acall podprog_DAC_U

026F 3145 615 acall podprog_f_SIN

0271 713C 617 acall Redraw_LCD_RABOTA

0273 85118B 619 mov TL1,Zaderzhka_f_5_100

 

A51 MACRO ASSEMBLER MY_KURSOVOY 04/28/2013 18:50:47 PAGE 10

 

0276 85128D 620 mov TH1,Zaderzhka_f_5_100+1

0279 D28E 621 setb TR1

027B 7403 623 mov A,#RABOTA

027D 4183 625 ajmp loop_podprog_VVOD_U_END

027F 627 loop_podprog_VVOD_U_END_VVOD_U:

027F 7401 628 mov A,#VVOD_U

0281 4183 629 ajmp loop_podprog_VVOD_U_END

0283 631 loop_podprog_VVOD_U_END:

0283 D000 632 pop 0

0285 22 633 ret

635 ;******************************************************************************************

*****

636 ;Подпрограмма ввода частоты с клавиатуры

637 ;в подпрограмму передается в качестве параметров: -

638 ;подпрограмма возвращает в качестве параметров: А (код режима (текущего или выбранного друг

ого))

0286 639 podprog_VVOD_f:

0286 C000 640 push 0

641 ;опрашиваем клавиатуру

0288 3175 642 acall podprog_anti_drebezg

028A 6061 643 jz loop_podprog_VVOD_f_END_VVOD_f ;если не нажата ни одна клавиша - в А будет

00000000b

028C 20E41D 645 jb ACC.4,loop_podprog_VVOD_f_regim

028F 7191 647 acall podprog_kod_v_chislo

0291 F8 648 mov R0,A

0292 E50F 649 mov A,f_value

0294 75F00A 650 mov B,#10

0297 A4 651 mul AB

0298 28 652 add A,R0

653 ;проверка В и С

0299 4052 654 jc loop_podprog_VVOD_f_END_VVOD_f

029B A8F0 655 mov R0,B

029D B8004D 656 cjne R0,#00h,loop_podprog_VVOD_f_END_VVOD_f

657 ;проверка, что число не больше 15

02A0 F8 658 mov R0,A

02A1 9465 659 subb A,#101

02A3 E8 660 mov A,R0

02A4 5047 661 jnc loop_podprog_VVOD_f_END_VVOD_f

02A6 F50F 662 mov f_value,A

02A8 51F2 663 acall Redraw_LCD_f

02AA 41ED 664 ajmp loop_podprog_VVOD_f_END_VVOD_f

02AC 666 loop_podprog_VVOD_f_regim:

02AC B41809 667 cjne A,#BUTTON_f,loop_podprog_VVOD_f_chislo_may_be_U

02AF 750F00 669 mov f_value,#00

02B2 51F2 670 acall Redraw_LCD_f

02B4 7402 672 mov A,#VVOD_f

02B6 41EF 673 ajmp loop_podprog_VVOD_f_END

02B8 675 loop_podprog_VVOD_f_chislo_may_be_U:

02B8 B2B6 676 cpl P3.6

02BA B41412 677 cjne A,#BUTTON_U,loop_podprog_VVOD_f_chislo_may_be_RABOTA

679 ;проверка нижнего допустимого значения напряжения - больше или равно 5

02BD 7405 680 mov A,#5

02BF 950F 681 subb A,f_value

02C1 4003 682 jc loop_podprog_VVOD_f_Value_correktno

A51 MACRO ASSEMBLER MY_KURSOVOY 04/28/2013 18:50:47 PAGE 11

 

02C3 750F05 683 mov f_value,#5

02C6 684 loop_podprog_VVOD_f_Value_correktno:

02C6 750E00 685 mov U_value,#00h

02C9 7117 686 acall Redraw_LCD_U

02CB 7401 687 mov A,#VVOD_U

02CD 41EF 688 ajmp loop_podprog_VVOD_f_END

02CF 690 loop_podprog_VVOD_f_chislo_may_be_RABOTA:

02CF B4121D 691 cjne A,#BUTTON_RABOTA,loop_podprog_VVOD_f_END

693 ;проверка нижнего допустимого значения напряжения - больше или равно 5

02D2 7405 694 mov A,#5

02D4 950F 695 subb A,f_value

02D6 4003 696 jc loop_podprog_VVOD_f_Value_correktno_rabota

02D8 750F05 697 mov f_value,#5

02DB 699 loop_podprog_VVOD_f_Value_correktno_rabota:

02DB C28C 700 clr TR0 ;остановили таймер клавы и дисплея

02DD 310E 701 acall podprog_DAC_U

02DF 3145 702 acall podprog_f_SIN

02E1 713C 704 acall Redraw_LCD_RABOTA

02E3 85118B 706 mov TL1,Zaderzhka_f_5_100

02E6 85128D 707 mov TH1,Zaderzhka_f_5_100+1

02E9 D28E 708 setb TR1

02EB 7403 710 mov A,#RABOTA

02ED 712 loop_podprog_VVOD_f_END_VVOD_f:

02ED 7402 713 mov A,#VVOD_f

02EF 714 loop_podprog_VVOD_f_END:

02EF D000 715 pop 0

02F1 22 716 ret

718 ;*************************************************************************

719 ;Подпрограмма, выводящая на дисплей строки: U(B):0xx

720 ; *f(

Hz):xxx

721 ;в подпрограмму передается в качестве параметров: -

722 ;подпрограмма возвращает в качестве параметров: -

02F2 723 Redraw_LCD_f:

02F2 7401 724 mov A,#00000001b ;поместим курсор в начало строки + ОЧИСТКА ДИСПЛЕЯ

02F4 9118 725 acall podprog_wait_BUSY_flag_LCD

02F6 914F 726 acall podprod_write_command_LCD

02F8 7480 727 mov A,#00h|80h

02FA 9118 728 acall podprog_wait_BUSY_flag_LCD

02FC 914F 729 acall podprod_write_command_LCD

02FE 90045C 730 mov DPTR,#Stroka_U

0301 7161 731 acall print_string_LCD

0303 E50E 732 mov A,U_value

0305 716E 733 acall print_num_LCD

0307 74C0 735 mov A,#40h|80h

0309 9118 736 acall podprog_wait_BUSY_flag_LCD

030B 914F 737 acall podprod_write_command_LCD

030D 900470 738 mov DPTR,#Stroka_f_redaktir

0310 7161 739 acall print_string_LCD

0312 E50F 740 mov A,f_value

0314 716E 741 acall print_num_LCD

0316 22 742 ret

744 ;*************************************************************************

745 ;Подпрограмма, выводящая на дисплей строки: *U(B):0xx

746 ; f(H

z):xxx

 

A51 MACRO ASSEMBLER MY_KURSOVOY 04/28/2013 18:50:47 PAGE 12

 

747 ;в подпрограмму передается в качестве параметров: -

748 ;подпрограмма возвращает в качестве параметров: -

0317 749 Redraw_LCD_U:

0317 7401 750 mov A,#00000001b ;поместим курсор в начало строки + ОЧИСТКА ДИСПЛЕЯ

0319 9118 751 acall podprog_wait_BUSY_flag_LCD

031B 914F 752 acall podprod_write_command_LCD

031D 7480 753 mov A,#00h|80h

031F 9118 754 acall podprog_wait_BUSY_flag_LCD

0321 914F 755 acall podprod_write_command_LCD

0323 900462 756 mov DPTR,#Stroka_U_redaktir

0326 7161 757 acall print_string_LCD

0328 E50E 758 mov A,U_value

032A 716E 759 acall print_num_LCD

032C 74C0 761 mov A,#40h|80h

032E 9118 762 acall podprog_wait_BUSY_flag_LCD

0330 914F 763 acall podprod_write_command_LCD

0332 900469 764 mov DPTR,#Stroka_f

0335 7161 765 acall print_string_LCD

0337 E50F 766 mov A,f_value

0339 716E 767 acall print_num_LCD

033B 22 768 ret

770 ;*************************************************************************

771 ;Подпрограмма, выводящая на дисплей строки: U(B):0xx

772 ; f(H

z):xxx

773 ;в подпрограмму передается в качестве параметров: -

774 ;подпрограмма возвращает в качестве параметров: -

033C 775 Redraw_LCD_RABOTA:

033C 7401 776 mov A,#00000001b ;поместим курсор в начало строки + ОЧИСТКА ДИСПЛЕЯ

033E 9118 777 acall podprog_wait_BUSY_flag_LCD

0340 914F 778 acall podprod_write_command_LCD

0342 7480 779 mov A,#00h|80h

0344 9118 780 acall podprog_wait_BUSY_flag_LCD

0346 914F 781 acall podprod_write_command_LCD

0348 90045C 782 mov DPTR,#Stroka_U

034B 7161 783 acall print_string_LCD

034D E50E 784 mov A,U_value

034F 716E 785 acall print_num_LCD

0351 74C0 787 mov A,#40h|80h

0353 9118 788 acall podprog_wait_BUSY_flag_LCD

0355 914F 789 acall podprod_write_command_LCD

0357 900469 790 mov DPTR,#Stroka_f

035A 7161 791 acall print_string_LCD

035C E50F 792 mov A,f_value

035E 716E 793 acall print_num_LCD

0360 22 794 ret

796 ;**********************************************************************************

797 ;Подпрограмма, выводящая на дисплей строку символов U(B): или f(Hz):

798 ;в подпрограмму передается в качестве параметров: DPTR (адрес начала строки в ПЗУ)

799 ;подпрограмма возвращает в качестве параметров: -

0361 800 print_string_LCD:

0361 7400 801 mov A,#00h

0363 93 802 movc A,@A+DPTR

0364 6007 803 jz enpodprog_wait_BUSY_flag_LCD

0368 9132 805 acall podprog_write_data_LCD

036A A3 806 inc DPTR

036B 6161 807 ajmp print_string_LCD

036D 808 end_print_LCD:

036D 22 809 ret

811 ;******************************************************************************************

 

A51 MACRO ASSEMBLER MY_KURSOVOY 04/28/2013 18:50:47 PAGE 13

 

*********************

812 ;Подпрограмма, выводящая на дисплей численное значение напряжения или частоты

813 ;в подпрограмму передается в качестве параметров: А (перед вызовом подпроги поместим

туда U_value или f_value)

814 ;подпрограмма возвращает в качестве параметров: -

036E 815 print_num_LCD:

036E C0F0 816 push B

817 ;выводим сотни - извлекаем:

0370 75F064 818 mov B,#100

0373 84 819 div AB

0374 2430 820 add A,#30h

0376 9118 821 acall podprog_wait_BUSY_flag_LCD

0378 9132 822 acall podprog_write_data_LCD

823 ;извлекаем десятки:

037A E5F0 824 mov A,B

037C 75F00A 825 mov B,#10

037F 84 826 div AB

0380 2430 827 add A,#30h

0382 9118 828 acall podprog_wait_BUSY_flag_LCD

0384 9132 829 acall podprog_write_data_LCD

830 ;извлекаем единицы

0386 E5F0 831 mov A,B

0388 2430 832 add A,#30h

038A 9118 833 acall podprog_wait_BUSY_flag_LCD

038C 9132 834 acall podprog_write_data_LCD

038E D0F0 835 pop B

0390 22 836 ret

838 ;****************************************************************************

839 ;Подпрограмма, выводящая на дисплей численное значение напряжения или частоты

840 ;в подпрограмму передается в качестве параметров: А (двоичный код клавиши)

841 ;подпрограмма возвращает в качестве параметров: А (число от 0 до 9)

0391 842 podprog_kod_v_chislo:

0391 B48104 843 cjne A,#BUTTON_0,podprog_kod_v_chislo_1

0394 7400 844 mov A,#00h

0396 61D9 845 ajmp podprog_kod_v_chislo_END

0398 846 podprog_kod_v_chislo_1:

0398 B48204 847 cjne A,#BUTTON_1,podprog_kod_v_chislo_2

039B 7401 848 mov A,#01h

039D 61D9 849 ajmp podprog_kod_v_chislo_END

039F 850 podprog_kod_v_chislo_2:

039F B48404 851 cjne A,#BUTTON_2,podprog_kod_v_chislo_3

03A2 7402 852 mov A,#02h

03A4 61D9 853 ajmp podprog_kod_v_chislo_END

03A6 854 podprog_kod_v_chislo_3:

03A6 B48804 855 cjne A,#BUTTON_3,podprog_kod_v_chislo_4

03A9 7403 856 mov A,#03h

03AB 61D9 857 ajmp podprog_kod_v_chislo_END

03AD 858 podprog_kod_v_chislo_4:

03AD B44104 859 cjne A,#BUTTON_4,podprog_kod_v_chislo_5

03B0 7404 860 mov A,#04h

03B2 61D9 861 ajmp podprog_kod_v_chislo_END

03B4 862 podprog_kod_v_chislo_5:

03B4 B44204 863 cjne A,#BUTTON_5,podprog_kod_v_chislo_6

03B7 7405 864 mov A,#05h

03B9 61D9 865 ajmp podprog_kod_v_chislo_END

03BB 866 podprog_kod_v_chislo_6:

03BB B44404 867 cjne A,#BUTTON_6,podprog_kod_v_chislo_7

03BE 7406 868 mov A,#06h

03C0 61D9 869 ajmp podprog_kod_v_chislo_END

03C2 870 podprog_kod_v_chislo_7:

03C2 B44804 871 cjne A,#BUTTON_7,podprog_kod_v_chislo_8

03C5 7407 872 mov A,#07h

03C7 61D9 873 ajmp podprog_kod_v_chislo_END

03C9 874 podprog_kod_v_chislo_8:

03C9 B42104 875 cjne A,#BUTTON_8,podprog_kod_v_chislo_9

 

A51 MACRO ASSEMBLER MY_KURSOVOY 04/28/2013 18:50:47 PAGE 14

 

03CC 7408 876 mov A,#08h

03CE 61D9 877 ajmp podprog_kod_v_chislo_END

03D0 878 podprog_kod_v_chislo_9:

03D0 B42204 879 cjne A,#BUTTON_9,podprog_kod_v_chislo_ERROR

03D3 7409 880 mov A,#09h

03D5 61D9 881 ajmp podprog_kod_v_chislo_END

03D7 883 podprog_kod_v_chislo_ERROR:

03D7 7400 884 mov A,#00h

03D9 886 podprog_kod_v_chislo_END:

03D9 22 887 ret

889 ;******************************************************************************************

***

890 ;Подпрограмма настройки дисплея согласно таблице "Начальная настройка индикатора" из даташи

та:

891 ;в подпрограмму передается в качестве параметров: -

892 ;подпрограмма возвращает в качестве параметров: -

03DA 893 podprog_nastroyka_displaya:

03DA C0E0 894 push ACC

896 ;установить разрядность интерфейса (шины) - первый раз

03DC 7430 897 mov A,#00110000b

03DE 914F 898 acall podprod_write_command_LCD

03E0 90FB4F 900 mov DPTR,#Timer_40

03E3 11F5 901 acall podprog_wait_N_mks

903 ;установить разрядность интерфейса (шины) - второй раз

03E5 7430 904 mov A,#00110000b

03E7 914F 905 acall podprod_write_command_LCD

03E9 90FB4F 907 mov DPTR,#Timer_40

03EC 11F5 908 acall podprog_wait_N_mks

910 ;установить разрядность интерфейса (шины) - третий раз

03EE 7430 911 mov A,#00110000b

03F0 914F 912 acall podprod_write_command_LCD

03F2 90FB4F 914 mov DPTR,#Timer_40

03F5 11F5 915 acall podprog_wait_N_mks

917 ;установка разрядности интерфейса и страницы знакогенератора

03F7 9118 918 acall podprog_wait_BUSY_flag_LCD ;!!!!!!!!!!!

03F9 7438 919 mov A,#00111000b

03FB 914F 920 acall podprod_write_command_LCD

922 ;выключение дисплея и никакого курсора не будет

03FD 9118 923 acall podprog_wait_BUSY_flag_LCD

03FF 7408 924 mov A,#00001000b

0401 914F 925 acall podprod_write_command_LCD

927 ;очистка дисплея и помещаем курсор в левую позицию

0403 9118 928 acall podprog_wait_BUSY_flag_LCD

0405 7401 929 mov A,#00000001b

0407 914F 930 acall podprod_write_command_LCD

932 ;установка режима ввода данных: направление сдвига курсора - вправо, запрет сдвига дисплея

0409 9118 933 acall podprog_wait_BUSY_flag_LCD

040B 7406 934 mov A,#00000110b

040D 914F 935 acall podprod_write_command_LCD

937 ;и снова включим дисплей

040F 9118 938 acall podprog_wait_BUSY_flag_LCD

0411 740C 939 mov A,#000001100b

 

A51 MACRO ASSEMBLER MY_KURSOVOY 04/28/2013 18:50:47 PAGE 15

 

0413 914F 940 acall podprod_write_command_LCD

942 ;закончили настройку

0415 D0E0 943 pop ACC

0417 22 944 ret

946 ;****************************************************

947 ;Подпрограмма ожидания флага BUSY

948 ;в подпрограмму передается в качестве параметров: -

949 ;подпрограмма возвращает в качестве параметров: -

0418 950 podprog_wait_BUSY_flag_LCD:

0418 C0E0 951 push ACC

041A 953 loop_BUSY_flag_LCD_set:

041A 913F 954 acall podprod_read_command_LCD

041C 20E7FB 955 jb ACC.7,loop_BUSY_flag_LCD_set

041F D0E0 957 pop ACC

0421 22 958 ret

960 ;****************************************************

961 ;Подпрограмма чтения данных из дисплея

962 ;в подпрограмму передается в качестве параметров: -

963 ;подпрограмма возвращает в качестве парамаетров: А

0422 964 podprod_read_data_LCD:

0422 D2A0 965 setb RS_LCD

0424 D2A1 966 setb RW_LCD

0426 7580FF 967 mov P0,#0FFh

0429 00 968 nop ;надо подождать 80нс - см. timing diagram

042A D2A2 969 setb E_LCD

042C 00 970 nop ;надо подождать 230нс - см. timing diagram

042D E580 971 mov A,P0

042F C2A2 972 clr E_LCD

0431 22 973 ret

975 ;****************************************************

976 ;Подпрограмма записи данных в дисплей

977 ;в подпрограмму передается в качестве параметров: A

978 ;подпрограмма возвращает в качестве парамаетров: -

0432 979 podprog_write_data_LCD:

0432 D2A0 980 setb RS_LCD

0434 C2A1 981 clr RW_LCD

0436 F580 982 mov P0,A

0438 00 983 nop

0439 D2A2 984 setb E_LCD

043B 00 985 nop

043C C2A2 986 clr E_LCD

043E 22 987 ret

990 ;****************************************************

991 ;Подпрограмма чтения команд из дисплея

992 ;в подпрограмму передается в качестве параметров: -

993 ;подпрограмма возвращает в качестве парамаетров: А

043F 994 podprod_read_command_LCD:

043F C2A0 995 clr RS_LCD

0441 D2A1 996 setb RW_LCD

0443 7580FF 997 mov P0,#0FFh

0446 00 998 nop

0447 D2A2 999 setb E_LCD

0449 00 1000 nop

044A E580 1001 mov A,P0

044C C2A2 1002 clr E_LCD

044E 22 1003 ret

1005 ;****************************************************

 

A51 MACRO ASSEMBLER MY_KURSOVOY 04/28/2013 18:50:47 PAGE 16

 

1006 ;Подпрограмма записи команд в дисплей

1007 ;в подпрограмму передается в качестве параметров: A

1008 ;подпрограмма возвращает в качестве парамаетров: -

044F 1009 podprod_write_command_LCD:

044F C2A0 1010 clr RS_LCD

0451 C2A1 1011 clr RW_LCD

0453 F580 1012 mov P0,A

0455 00 1013 nop

0456 D2A2 1014 setb E_LCD

0458 00 1015 nop

0459 C2A2 1016 clr E_LCD

045B 22 1017 ret

1019 ;******************************************************************************************

**************************************

045C 55284229 1020 Stroka_U: db "U(B):", 00h

0460 3A00

0462 2A552842 1021 Stroka_U_redaktir: db "*U(B):", 00h

0466 293A00

0469 6628487A 1022 Stroka_f: db "f(Hz):", 00h

046D 293A00

0470 2A662848 1023 Stroka_f_redaktir: db "*f(Hz):", 00h

0474 7A293A00

0478 1025 Start_sin:

0478 02020001 1026 db 002h, 002h, 000h, 001h, 005h, 000h, 001h, 00Ah, 000h, 001h, 010h, 000h, 001h, 017h, 000h

, 001h, 01Fh, 000h, 001h, 029h, 000h, 001h, 034h, 000h, 001h, 040h, 000h, 001h, 04Dh, 000h,

001h, 05Ch, 000h, 001h, 06Ch, 000h, 001h, 07Dh, 000h, 001h, 08Fh, 000h, 001h, 0A3h, 000h, 001h, 0B8h, 000h

047C 0500010A

0480 00011000

0484 01170001

0488 1F000129

048C 00013400

0490 01400001

0494 4D00015C

0498 00016C00

049C 017D0001

04A0 8F0001A3

04A4 0001B800

04A8 01CE0001 1027 db 001h, 0CEh, 000h, 001h, 0E5h, 000h, 001h, 0FDh, 000h, 001h, 016h, 001h, 001h, 031h, 001h

, 001h, 04Ch, 001h, 001h, 069h, 001h, 001h, 087h, 001h, 001h, 0A5h, 001h, 001h, 0C5h, 001h,

001h, 0E6h, 001h, 001h, 008h, 002h, 001h, 02Bh, 002h, 001h, 04Eh, 002h, 001h, 073h, 002h, 001h, 098h, 002h

04AC E50001FD

04B0 00011601

04B4 01310101

04B8 4C010169

04BC 01018701

04C0 01A50101

04C4 C50101E6

04C8 01010802

04CC 012B0201

04D0 4E020173

04D4 02019802

04D8 01BF0201 1028 db 001h, 0BFh, 002h, 001h, 0E6h, 002h, 001h, 00Eh, 003h, 001h, 037h, 003h, 001h, 061h, 003h

, 001h, 08Bh, 003h, 001h, 0B6h, 003h, 001h, 0E2h, 003h, 001h, 00Eh, 004h, 001h, 03Bh, 004h,

001h, 069h, 004h, 001h, 098h, 004h, 001h, 0C6h, 004h, 001h, 0F6h, 004h, 001h, 026h, 005h, 001h, 056h, 005h

04DC E602010E

04E0 03013703

04E4 01610301

04E8 8B0301B6

04EC 0301E203

04F0 010E0401

04F4 3B040169

04F8 04019804

04FC 01C60401

0500 F6040126

 

A51 MACRO ASSEMBLER MY_KURSOVOY 04/28/2013 18:50:47 PAGE 17

 

0504 05015605

0508 01870501 1029 db 001h, 087h, 005h, 001h, 0B8h, 005h, 001h, 0E9h, 005h, 001h, 01Bh, 006h, 001h, 04Dh, 006h

, 001h, 080h, 006h, 001h, 0B2h, 006h, 001h, 0E5h, 006h, 001h, 018h, 007h, 001h, 04Ch, 007h,

001h, 07Fh, 007h, 001h, 0B2h, 007h, 001h, 0E6h, 007h, 001h, 019h, 008h, 001h, 04Dh, 008h, 001h, 080h, 008h

050C B80501E9

0510 05011B06

0514 014D0601

0518 800601B2

051C 0601E506

0520 01180701

0524 4C07017F

0528 0701B207

052C 01E60701

0530 1908014D

0534 08018008

0538 01B30801 1030 db 001h, 0B3h, 008h, 001h, 0E7h, 008h, 001h, 01Ah, 009h, 001h, 04Dh, 009h, 001h, 07Fh, 009h

, 001h, 0B2h, 009h, 001h, 0E4h, 009h, 001h, 016h, 00Ah, 001h, 047h, 00Ah, 001h, 078h, 00Ah,

001h, 0A9h, 00Ah, 001h, 0D9h, 00Ah, 001h, 009h, 00Bh, 001h, 039h, 00Bh, 001h, 067h, 00Bh, 001h, 096h, 00Bh

053C E708011A

0540 09014D09

0544 017F0901

0548 B20901E4

054C 0901160A

0550 01470A01

0554 780A01A9

0558 0A01D90A

055C 01090B01

0560 390B0167

0564 0B01960B

0568 01C40B01 1031 db 001h, 0C4h, 00Bh, 001h, 0F1h, 00Bh, 001h, 01Dh, 00Ch, 001h, 049h, 00Ch, 001h, 074h, 00Ch

, 001h, 09Eh, 00Ch, 001h, 0C8h, 00Ch, 001h, 0F1h, 00Ch, 001h, 019h, 00Dh, 001h, 040h, 00Dh,

001h, 067h, 00Dh, 001h, 08Ch, 00Dh, 001h, 0B1h, 00Dh, 001h, 0D4h, 00Dh, 001h, 0F7h, 00Dh, 001h, 019h, 00Eh

056C F10B011D

0570 0C01490C

0574 01740C01

0578 9E0C01C8

057C 0C01F10C

0580 01190D01

0584 400D0167

0588 0D018C0D

058C 01B10D01

0590 D40D01F7

0594 0D01190E

0598 013A0E01 1032 db 001h, 03Ah, 00Eh, 001h, 05Ah, 00Eh, 001h, 078h, 00Eh, 001h, 096h, 00Eh, 001h, 0B3h, 00Eh

, 001h, 0CEh, 00Eh, 001h, 0E9h, 00Eh, 001h, 002h, 00Fh, 001h, 01Ah, 00Fh, 001h, 031h, 00Fh,

001h, 047h, 00Fh, 001h, 05Ch, 00Fh, 001h, 070h, 00Fh, 001h, 082h, 00Fh, 001h, 093h, 00Fh, 001h, 0A3h, 00Fh

059C 5A0E0178

05A0 0E01960E

05A4 01B30E01

05A8 CE0E01E9

05AC 0E01020F

05B0 011A0F01

05B4 310F0147

05B8 0F015C0F

05BC 01700F01

05C0 820F0193

05C4 0F01A30F

05C8 01B20F01 1033 db 001h, 0B2h, 00Fh, 001h, 0BFh, 00Fh, 001h, 0CBh, 00Fh, 001h, 0D6h, 00Fh, 001h, 0E0h, 00Fh

, 001h, 0E8h, 00Fh, 001h, 0EFh, 00Fh, 001h, 0F5h, 00Fh, 001h, 0FAh, 00Fh, 001h, 0FDh, 00Fh, 001h, 0FFh, 00Fh

05CC BF0F01CB

05D0 0F01D60F

05D4 01E00F01

05D8 E80F01EF

05DC 0F01F50F

05E0 01FA0F01

05E4 FD0F01FF

 

A51 MACRO ASSEMBLER MY_KURSOVOY 04/28/2013 18:50:47 PAGE 18

 

05E8 0F

05E9 01FF0F01 1034 db 001h, 0FFh, 00Fh, 001h, 0FDh, 00Fh, 001h, 0FAh, 00Fh, 001h, 0F5h, 00Fh, 001h, 0EFh, 00Fh

, 001h, 0E8h, 00Fh, 001h, 0E0h, 00Fh, 001h, 0D6h, 00Fh, 001h, 0CBh, 00Fh, 001h, 0BFh, 00Fh,

001h, 0B2h, 00Fh, 001h, 0A3h, 00Fh, 001h, 093h, 00Fh, 001h, 082h, 00Fh, 001h, 070h, 00Fh, 001h, 05Ch, 00Fh

05ED FD0F01FA

05F1 0F01F50F

05F5 01EF0F01

05F9 E80F01E0

05FD 0F01D60F

0601 01CB0F01

0605 BF0F01B2

0609 0F01A30F

060D 01930F01

0611 820F0170

0615 0F015C0F

0619 01470F01 1035 db 001h, 047h, 00Fh, 001h, 031h, 00Fh, 001h, 01Ah, 00Fh, 001h, 002h, 00Fh, 001h, 0E9h, 00Eh

, 001h, 0CEh, 00Eh, 001h, 0B3h, 00Eh, 001h, 096h, 00Eh, 001h, 078h, 00Eh, 001h, 05Ah, 00Eh,

001h, 03Ah, 00Eh, 001h, 019h, 00Eh, 001h, 0F7h, 00Dh, 001h, 0D4h, 00Dh, 001h, 0B1h, 00Dh, 001h, 08Ch, 00Dh

061D 310F011A

0621 0F01020F

0625 01E90E01

0629 CE0E01B3

062D 0E01960E

0631 01780E01

0635 5A0E013A

0639 0E01190E

063D 01F70D01

0641 D40D01B1

0645 0D018C0D

0649 01670D01 1036 db 001h, 067h, 00Dh, 001h, 040h, 00Dh, 001h, 019h, 00Dh, 001h, 0F1h, 00Ch, 001h, 0C8h, 00Ch

, 001h, 09Eh, 00Ch, 001h, 074h, 00Ch, 001h, 049h, 00Ch, 001h, 01Dh, 00Ch, 001h, 0F1h, 00Bh,

001h, 0C4h, 00Bh, 001h, 096h, 00Bh, 001h, 067h, 00Bh, 001h, 039h, 00Bh, 001h, 009h, 00Bh, 001h, 0D9h, 00Ah

064D 400D0119

0651 0D01F10C

0655 01C80C01

0659 9E0C0174

065D 0C01490C

0661 011D0C01

0665 F10B01C4

0669 0B01960B

066D 01670B01

0671 390B0109

0675 0B01D90A

0679 01A90A01 1037 db 001h, 0A9h, 00Ah, 001h, 078h, 00Ah, 001h, 047h, 00Ah, 001h, 016h, 00Ah, 001h, 0E4h, 009h

, 001h, 0B2h, 009h, 001h, 07Fh, 009h, 001h, 04Dh, 009h, 001h, 01Ah, 009h, 001h, 0E7h, 008h,

001h, 0B3h, 008h, 001h, 080h, 008h, 001h, 04Dh, 008h, 001h, 019h, 008h, 001h, 0E6h, 007h, 001h, 0B2h, 007h

067D 780A0147

0681 0A01160A

0685 01E40901

0689 B209017F

068D 09014D09

0691 011A0901

0695 E70801B3

0699 08018008

069D 014D0801

06A1 190801E6

06A5 0701B207

06A9 017F0701 1038 db 001h, 07Fh, 007h, 001h, 04Ch, 007h, 001h, 018h, 007h, 001h, 0E5h, 006h, 001h, 0B2h, 006h

, 001h, 080h, 006h, 001h, 04Dh, 006h, 001h, 01Bh, 006h, 001h, 0E9h, 005h, 001h, 0B8h, 005h,

001h, 087h, 005h, 001h, 056h, 005h, 001h, 026h, 005h, 001h, 0F6h, 004h, 001h, 0C6h, 004h, 001h, 098h, 004h

06AD 4C070118

06B1 0701E506

06B5 01B20601

06B9 8006014D

06BD 06011B06

06C1 01E90501

 

A51 MACRO ASSEMBLER MY_KURSOVOY 04/28/2013 18:50:47 PAGE 19

 

06C5 B8050187

06C9 05015605

06CD 01260501

06D1 F60401C6

06D5 04019804

06D9 01690401 1039 db 001h, 069h, 004h, 001h, 03Bh, 004h, 001h, 00Eh, 004h, 001h, 0E2h, 003h, 001h, 0B6h, 003h

, 001h, 08Bh, 003h, 001h, 061h, 003h, 001h, 037h, 003h, 001h, 00Eh, 003h, 001h, 0E6h, 002h,

001h, 0BFh, 002h, 001h, 098h, 002h, 001h, 073h, 002h, 001h, 04Eh, 002h, 001h, 02Bh, 002h, 001h, 008h, 002h

06DD 3B04010E

06E1 0401E203

06E5 01B60301

06E9 8B030161

06ED 03013703

06F1 010E0301

06F5 E60201BF

06F9 02019802

06FD 01730201

0701 4E02012B

0705 02010802

0709 01E60101 1040 db 001h, 0E6h, 001h, 001h, 0C5h, 001h, 001h, 0A5h, 001h, 001h, 087h, 001h, 001h, 069h, 001h

, 001h, 04Ch, 001h, 001h, 031h, 001h, 001h, 016h, 001h, 001h, 0FDh, 000h, 001h, 0E5h, 000h,

001h, 0CEh, 000h, 001h, 0B8h, 000h, 001h, 0A3h, 000h, 001h, 08Fh, 000h, 001h, 07Dh, 000h, 001h, 06Ch, 000h

070D C50101A5

0711 01018701

0715 01690101

0719 4C010131

071D 01011601

0721 01FD0001

0725 E50001CE

0729 0001B800

072D 01A30001

0731 8F00017D

0735 00016C00

0739 015C0001 1041 db 001h, 05Ch, 000h, 001h, 04Dh, 000h, 001h, 040h, 000h, 001h, 034h, 000h, 001h, 029h, 000h

, 001h, 01Fh, 000h, 001h, 017h, 000h, 001h, 010h, 000h, 001h, 00Ah, 000h, 001h, 005h, 000h

073D 4D000140

0741 00013400

0745 01290001

0749 1F000117

074D 00011000

0751 010A0001

0755 0500

0757 020200 1043 End_sin: db 002h, 002h, 000h

075A 1045 f_5_100:

075A F82F 1046 dw 63535,63868,64106,64285,64424,64535,64626,64702,64766,64821,64868,64910,64947,64979,6500

9,65035,65059,65080,65100,65118,65135,65150,65165,65178,65190,65202,65212,65223,65232,65241

,65249,65257,65265,65272,65279,65285,65291,65297,65302,65308,65313,65318,65322,65327,65331,

65335,65339,65343,65346,65350,65353,65356,65360,65363,65366,65368,65371,65374,65376,65379,6

5381,65383,65386,65388,65390,65392,65394,65396,65398,65400,65402,65403,65405,65407,65408,65

410,65412,65413,65415,65416,65417,65419,65420,65421,65423,65424,65425,65426,65427,65429,654

30,65431,65432,65433,65434,65435

075C F97C

075E FA6A

0760 FB1D

0762 FBA8

0764 FC17

0766 FC72

0768 FCBE

076A FCFE

076C FD35

076E FD64

0770 FD8E

0772 FDB3

0774 FDD3

 

A51 MACRO ASSEMBLER MY_KURSOVOY 04/28/2013 18:50:47 PAGE 20

 

0776 FDF1

0778 FE0B

077A FE23

077C FE38

077E FE4C

0780 FE5E

0782 FE6F

0784 FE7E

0786 FE8D

0788 FE9A

078A FEA6

078C FEB2

078E FEBC

0790 FEC7

0792 FED0

0794 FED9

0796 FEE1

0798 FEE9

079A FEF1

079C FEF8

079E FEFF

07A0 FF05

07A2 FF0B

07A4 FF11

07A6 FF16

07A8 FF1C

07AA FF21

07AC FF26

07AE FF2A

07B0 FF2F

07B2 FF33

07B4 FF37

07B6 FF3B

07B8 FF3F

07BA FF42

07BC FF46

07BE FF49

07C0 FF4C

07C2 FF50

07C4 FF53

07C6 FF56

07C8 FF58

07CA FF5B

07CC FF5E

07CE FF60

07D0 FF63

07D2 FF65

07D4 FF67

07D6 FF6A

07D8 FF6C

07DA FF6E

07DC FF70

07DE FF72

07E0 FF74

07E2 FF76

07E4 FF78

07E6 FF7A

07E8 FF7B

07EA FF7D

07EC FF7F

07EE FF80

07F0 FF82

07F2 FF84

07F4 FF85

07F6 FF87

07F8 FF88

 

A51 MACRO ASSEMBLER MY_KURSOVOY 04/28/2013 18:50:47 PAGE 21

 

07FA FF89

07FC FF8B

07FE FF8C

0800 FF8D

0802 FF8F

0804 FF90

0806 FF91

0808 FF92

080A FF93

080C FF95

080E FF96

0810 FF97

0812 FF98

0814 FF99

0816 FF9A

0818 FF9B

1048 END

 

A51 MACRO ASSEMBLER MY_KURSOVOY 04/28/2013 18:50:47 PAGE 22

 

SYMBOL TABLE LISTING

------ ----- -------

 

 

N A M E T Y P E V A L U E ATTRIBUTES

 

ACC . . . . . . . . . . . . . . . . . . D ADDR 00E0H A

ADDR_TOCHKI . . . . . . . . . . . . . . D ADDR 0008H A

B . . . . . . . . . . . . . . . . . . . D ADDR 00F0H A

BUTTON_0. . . . . . . . . . . . . . . . N NUMB 0081H A

BUTTON_1. . . . . . . . . . . . . . . . N NUMB 0082H A

BUTTON_2. . . . . . . . . . . . . . . . N NUMB 0084H A

BUTTON_3. . . . . . . . . . . . . . . . N NUMB 0088H A

BUTTON_4. . . . . . . . . . . . . . . . N NUMB 0041H A

BUTTON_5. . . . . . . . . . . . . . . . N NUMB 0042H A

BUTTON_6. . . . . . . . . . . . . . . . N NUMB 0044H A

BUTTON_7. . . . . . . . . . . . . . . . N NUMB 0048H A

BUTTON_8. . . . . . . . . . . . . . . . N NUMB 0021H A

BUTTON_9. . . . . . . . . . . . . . . . N NUMB 0022H A

BUTTON_F. . . . . . . . . . . . . . . . N NUMB 0018H A

BUTTON_RABOTA . . . . . . . . . . . . . N NUMB 0012H A

BUTTON_U. . . . . . . . . . . . . . . . N NUMB 0014H A

COD_TOCHKI. . . . . . . . . . . . . . . D ADDR 000BH A

COUNTER_TOCHKA. . . . . . . . . . . . . D ADDR 000AH A

CSL_OUT . . . . . . . . . . . . . . . . B ADDR 00A0H.7 A

CSL_REF . . . . . . . . . . . . . . . . B ADDR 00A0H.3 A

CSM_OUT . . . . . . . . . . . . . . . . B ADDR 00B0H.0 A

CSM_REF . . . . . . . . . . . . . . . . B ADDR 00A0H.4 A

DPH . . . . . . . . . . . . . . . . . . D ADDR 0083H A

DPL . . . . . . . . . . . . . . . . . . D ADDR 0082H A

EA. . . . . . . . . . . . . . . . . . . B ADDR 00A8H.7 A

END_PRINT_LCD . . . . . . . . . . . . . C ADDR 036DH A

END_SIN . . . . . . . . . . . . . . . . C ADDR 0757H A

ET0 . . . . . . . . . . . . . . . . . . B ADDR 00A8H.1 A

ET1 . . . . . . . . . . . . . . . . . . B ADDR 00A8H.3 A

EX0 . . . . . . . . . . . . . . . . . . B ADDR 00A8H.0 A

E_LCD . . . . . . . . . . . . . . . . . B ADDR 00A0H.2 A

F_5_100 . . . . . . . . . . . . . . . . C ADDR 075AH A

F_VALUE . . . . . . . . . . . . . . . . D ADDR 000FH A

INTERRUPT_T0. . . . . . . . . . . . . . C ADDR 01C2H A

INTERRUPT_T0_BUTTON_F . . . . . . . . . C ADDR 01E0H A

INTERRUPT_T0_BUTTON_RABOTA. . . . . . . C ADDR 01EDH A

INTERRUPT_T0_END. . . . . . . . . . . . C ADDR 0215H A

INTERRUPT_T0_VVOD_F . . . . . . . . . . C ADDR 020EH A

INTERRUPT_T0_VVOD_U . . . . . . . . . . C ADDR 0205H A

INTERRUPT_VVOD. . . . . . . . . . . . . C ADDR 019EH A

IT0 . . . . . . . . . . . . . . . . . . B ADDR 0088H.0 A

KODY_KLAVISH_NE_RAVNY . . . . . . . . . C ADDR 0193H A

LDAC_OUT. . . . . . . . . . . . . . . . B ADDR 00B0H.1 A

LDAC_REF. . . . . . . . . . . . . . . . B ADDR 00A0H.5 A

LOOP_ADDR_TOCHKI_NE_RAVNO_END_SIN . . . C ADDR 00B6H A

LOOP_ADDR_TOCHKI_RAVNO_END_SIN. . . . . C ADDR 00C5H A

LOOP_BUSY_FLAG_LCD_SET. . . . . . . . . C ADDR 041AH A

LOOP_COUNTER_TOCHKA_NOT_ZERO. . . . . . C ADDR 00F2H A

LOOP_PODPROG_ANTI_DREBEZG . . . . . . . C ADDR 0181H A

LOOP_PODPROG_ANTI_DREBEZG_END . . . . . C ADDR 0197H A

LOOP_PODPROG_ANTI_DREBEZG_FAIL. . . . . C ADDR 017DH A

LOOP_PODPROG_VVOD_F_CHISLO_MAY_BE_RABOTA C ADDR 02CFH A

LOOP_PODPROG_VVOD_F_CHISLO_MAY_BE_U . . C ADDR 02B8H A

LOOP_PODPROG_VVOD_F_END . . . . . . . . C ADDR 02EFH A

LOOP_PODPROG_VVOD_F_END_VVOD_F. . . . . C ADDR 02EDH A

LOOP_PODPROG_VVOD_F_REGIM . . . . . . . C ADDR 02ACH A

LOOP_PODPROG_VVOD_F_VALUE_CORREKTNO . . C ADDR 02C6H A

LOOP_PODPROG_VVOD_F_VALUE_CORREKTNO_RABOTA C ADDR 02DBH A

LOOP_PODPROG_VVOD_F_VALUE_CORREKTNO_VVOD C ADDR 01BFH A

LOOP_PODPROG_VVOD_U_CHISLO_MAY_BE_F . . C ADDR 024AH A

 

A51 MACRO ASSEMBLER MY_KURSOVOY 04/28/2013 18:50:47 PAGE 23

 

LOOP_PODPROG_VVOD_U_CHISLO_MAY_BE_RABOTA C ADDR 025FH A

LOOP_PODPROG_VVOD_U_END . . . . . . . . C ADDR 0283H A

LOOP_PODPROG_VVOD_U_END_VVOD_U. . . . . C ADDR 027FH A

LOOP_PODPROG_VVOD_U_REGIM . . . . . . . C ADDR 023CH A

LOOP_PODPROG_VVOD_U_VALUE_CORREKTNO . . C ADDR 0256H A

LOOP_PODPROG_VVOD_U_VALUE_CORREKTNO_RABOTA C ADDR 0

 




Поиск по сайту:

©2015-2020 studopedya.ru Все права принадлежат авторам размещенных материалов.