Моделирование микропроцессорной системы
Для проверки работоспособности микропроцессорной системы в программе 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
Поиск по сайту: