Программа контроллера устройства
Содержание
1.
Аппаратная часть
.
Выбор компонентов
.
Принципиальная электрическая схема
.
Алгоритм функционирования программы
.
Описание программы
.
Листинг
Литература
1. Аппаратная часть
Описание.
Необходимо определить перечень устройств и
элементов, которые будут входить в аппаратную часть. Схематичное изображение
необходимых компонентов приведено на рисунке 1.
Рисунок 1
Выберем и проанализируем компоненты, из которых
будет состоять принципиальная схема.
. Выбор
компонентов
а) Выбираем микроконтроллер AT89C51RC2 фирмы
Atmel.
Микроконтроллер семейства АТ89 фирмы Atmel
представляет собой восьмиразрядную однокристальную микроЭВМ с системой команд
MCS-51 фирмы Intel. Микроконтроллеры изготавливаются по КМОП (CMOS) технологии.
Технические данные AT89C51RC2:
Память
программ (Flash)………………………………….……….32 Кб
Внутрисхемное
программирование………………...…………….SPI
ОЗУ…………………………………………………………………128
байт
Таймер-счетчик…………………………………………………....3
Напряжение
питания………………………………………………2,7-5,5 В
Максимальная
тактовая частота…………………………………..60 МГц
Источников
прерывания сигнала…………………………….…....6
Дополнительно:
встроенный аналоговый компаратор
Предельные допустимые параметры:
Рабочая
температура ...............................................................
-40°C +85°C
Напряжение
на любом выводе относительно земли ............. -1.0В +7.0В
Максимальное
напряжение питания ....................................... 6.6В
Выходной
ток (лог 0)
..................................................................25.0 мА
б) Для индикации используем ЖК-индикатор LM020L.
Это 16-разрядный однострочный индикатор с
контроллером HD44780.
Предельные допустимые параметры LM020L:
Рабочая
температура ............................................................... 0°C
+50°C
Температура
хранения ............................................................ -20°C
+60°C
Максимальное
напряжение питания .......................................7.0В
в) Для автоматического управления стробовыми
импульсами записи индикатора, используем логический элемент 2И-НЕ 74LS26
Предельные допустимые параметры 74LS26:
Рабочая
температура ...............................................................
-55°C +125°C
Максимальное
напряжение питания ....................................... 5.5В
Для определении заданной частоты записываем
значение (1/f)*100, что соответствует 100 периодам выбранной частоты в
микросекундах. Так же делаем поправку на время выполнения команд. Для
процессора с частотой 12 МГц время одного машинного цикла составляет 2мкс.
Следовательно групп будут соответствовать
следующие значения:
-я группа - 1007 мкс;
-я группа - 916 мкс;
-я группа - 840 мкс;
- группа - 776 мкс;
. Схема
электрическая принципиальная
На рисунке 2 приведена принципиальная схема,
подходящая для решения поставленной задачи и использующая выбранные компоненты
Рисунок 2
Программа контроллера устройства
. Алгоритм
функционирования программы
Разрабатываемая система позволяет разбраковать
микросхемы по частоте в диапазоне 100…130 кГц по четырем группам:
..110 - группа 1;
..120 - группа 2;
…130 - группа 3;
Выход за пределы - брак (группа 4);
Алгоритм функционирования программы приведен на
рисунке 3.
Рисунок 3
контроллер устройство программа
Более подробной алгоритм функционирования
программы приведен на рисунке 4.
Рисунок 4.
В соответствии с этим алгоритмом была
разработана программа, обеспечивающая выполнение микроконтроллером заданной
функции.
5. Описание
программы
По адресу в ПЗУ 00h размещаем команду перехода
на метку init (т.е. инициализация дисплея и начало программы).
Bh- адрес подпрограммы обработки прерывания от
таймера при его переполнении, то есть от появления флага TF.
Присвоим символьные имена используемым портам
МК. Управляющие входы LCD-дисплея соединены с первыми портами:
RS bit P1.0bit P1.1
Так же присвоим символьные имена внутренним
регистрам LCD-дисплея, в дальнейшем будем обращаться к ним как к внешней ОЗУ:
CMD equ
00000000bequ00000001bequ00000010b
Вызываем подпрограмму настройки режимов
таймеров и настройки дисплея. Настраиваем специальный регистр управления
таймерами TMOD tmod, #01010001b;16-битные таймеры Т0 и Т1 и включение счётчика
от внешних сигналов.EA; все прерывания разрешены ET1; разрешено прерывание от таймера
1.
Производим настройку индикатора. Запишем в
аккумулятор и впоследствии в командный регистр LCD команду x040h. Эта команда
устанавливает 8-битную шину обмена данных LCD с МК, символьную матрицу 5х8
точек и одну используемую строку дисплея.
mov A,#040h LSDSetup.
Запишем в аккумулятор и впоследствии в командный
регистр LCD команду x0Fh. Эта команда непосредственно включает дисплей,
выбирает тип курсора. Вызываем подпрограмму, которая передает эту настройку в
LCD:
mov A,#0Fh LSDSetup.
Запишем в аккумулятор и впоследствии в командный
регистр LCD команду x06h. Эта команда включает автоинкремент позиции и сдвиг
курсора вправо. Вызываем подпрограмму, которая передает эту настройку в LCD:
mov A,#06hLSDSetup.
Переходим на метку StartP2.0; Устанавливаем
единичное значение стробового порта.
Опустошаем регистры таймеров и сбрасываем флаги
переполнения
mov
TH0,#0TL0,#0TH1,#0TL1,#0DPTR,#0000htr0tr1tf0tf1
Ждём нажатия кнопки:
jb
p1.2,$;
Записываем в регистры счётчика число «-100»
mov TH1, # 0FFhTL1, #9bh
Далее включаем таймер и счётчик
setb TR1TR0
Метка gr и условный переход не позволяют
программе пройти дальше, пока не установлен флаг F0. Этот флаг устанавливается
после однократной обработки прерывания.
gr:
jb F0,gotovo1gr
По переполнению
счётчика (т.е. после отсчета 100 импульсов) выставится флаг TF1, и программа
перейдёт по адресу обработки прерывания. По данному адресу размещена команда
перехода на метку check.
Выключаем таймер и счётчик
clr TR0TR1
В регистрах таймера TH0 и TL0 хранится значение
времени 100 импульсов.
Пересылаем значение из регистров таймера в DPTR
mov dpl, TL0dph, TH0
Хранящееся в DPTR число необходимо проверить и
отнести в определенную группу в соответствии с условием курсовой работы.
В регистры R1 и R2 записываем значение
(1/f)*100, что соответствует 100 периодам выбранной частоты в микросекундах.
Так же делаем поправку на время выполнения команд. Для процессора с частотой 12
МГц время одного машинного цикла составляет 2мкс.
Переносим младший бит DPTR в аккумулятор, вычитаем
из числа, записанного в R1, значение зафиксированного времени 100 импульсов,
предварительно сбросив флаг переноса:
mov R1, # low(776)R0, # high
(776)CA, DPLA, R1
Если после выполнения вычитания установится флаг
переноса. В этом случае, сработает условный переход «jc», который переведет
программу на метку Perenos 7700. Если же флаг переноса не установится, что
говорит о том, что данное число больше, то сработает условный переход «jnc»,
который переведет программу по метке neperenos 7700.
При переходе по метке Perenos 7700 записываем в
аккумулятор старший бит DPTR, и уменьшаем аккумулятор на 1 и переходим на метку
gruppa7700 где из старшего байта записанного в R0 вычитаем число, хранящееся в
аккумуляторе. Если флаг переноса не установится, это значит, что наше число
больше 776. Переходим на метку sravn8300, где продолжим сравнивать получено
значение. Если же флаг переноса установился, это значит, что наше число меньше
776, что соответствует группе «брак». Переходим на метку брак.
jc perenos7700neperenos7700:A, DPH
dec A gruppa7700:A,
DPHgruppa7700:CA, R0sravn8300
jc brak
Посредством условных переходов попадает на метку
brak, и увеличивает значение регистра R7 на единицу, а так же выводит код
группы в параллельном инверсном коде.
Brak:R7
Для вывода кода групп используем выводы P2.1 и
P2.2. Группе «Брак» будет соответствовать код «11»:
setb P2.1P2.2
Запишем в аккумулятор и впоследствии в командный
регистр LCD команду x01h. Эта команда очищает дисплей. Вызываем подпрограмму,
которая передает эту настройку в LCD:
mov A,#01hLSDSetup.
после чего перейдем на индикацию:indic
Аналогичным образом сравниваем число полученное
в DPTR, с пороговыми значениями периодов остальных групп. Такие же действия
будут происходить при переходе программы на метки gruppa3, gruppa2 и gruppa1.
Различия составляют лишь коды групп и регистры, отвечающие за каждую группу:
gruppa3:R6
Для третьей группы будет установлен код «01»:
setb P2.1P2.2indic
gruppa2:R5
Для группы 2 код «10»:
setb P2.1P2.2indic
gruppa1:R4
Группе 1 будет соответствовать код «00»:
clr P2.1P2.2indic
Теперь приступим к индикации.
indic:
mov
A,#31h
call
symbol
Запишем в аккумулятор код символа «:»и вызовем
подпрограмму индикации:
mov A,#3Ahsymbol
Запишем в аккумулятор число микросхем,
относящихся к первой группе, добавляем старшую тетраду и вызовем подпрограмму
индикации:
mov A,R4A,#30hsymbol
Выведем на индикацию пробел:
mov A,# 00hsymbol
Повторяем тоже самое для группы 2, 3 и группы
«Брак»:
mov A,#32hsymbol
mov
A,#3AhsymbolA,R5A,#30hsymbolA,#00hsymbolA,#33hsymbolA,#3AhsymbolA,R6A,#30hsymbol
mov A,#00hsymbol
A,#34hsymbolA,#3Ahsymbol
mov A,R7A,#30h
symbol
По окончании обработки прерывания выставляется
флаг F0.
setb F0
Теперь, так как флаг F0 установлен, перейдем на
метку gotovo.
gotovo:F0
Сбрасываем флаги и очищаем регистры таймера и
счётчика
clr TF0TF1TH0,#0TL0,#0TH1,#0TL1,#0
Сбрасываем порт P2.0, вызываем подпрограмму
задержки и снова устанавливаем порт P2.0, чем формируем отрицательный строб.
clr P2.0twosecdelayP2.0
Ожидаем, пока не будет отжата кнопка. В
противном случае, контроллер не начнет выполнять программу сначала. Когда
кнопка отжата, процесс зацикливается.
jnb P1.2,$start
Рассмотрим используемые подпрограммы.
. Подпрограмма передачи команды в LCD-дисплей.
В R0 помещаем адрес внутреннего командного
регистра LCD. Затем на линиях RS и RW устанавливаем низкие потенциалы, что
соответствует командному режиму LCD. И, затем, используя команду записи во
внешнее ОЗУ, передаем команду из аккумулятора во внутренний командный регистр.
При этом автоматически генерируется импульс на выходе WR микроконтроллера, что
по вышеуказанной схеме соединения соответствует подаче стробового импульса E на
LCD-индикатор. Т.к. LCD-дисплеи сравнительно медленные, после подачи команды,
перейдем на метку ожидания занятости LCD.
LSDSetup:R0,#CMDRSRW@R0,ABusy
2. Подпрограмма индикации символа на
LCD-дисплее.
В R0 помещаем адрес внутреннего регистра данных
LCD. Затем на линии RS устанавливаем высокий потенциал, а на линии RW - низкий,
что соответствует режиму индикации LCD. И, затем, используя команду записи во
внешнее ОЗУ, передаем данные из аккумулятора во внутренний регистр данных LCD.
При этом автоматически генерируется импульс на выходе WR микроконтроллера, что
по вышеуказанной схеме соединения соответствует подаче стробового импульса E на
LCD-индикатор. Т.к. LCD-дисплеи сравнительно медленные, после передачи данных,
перейдем на метку ожидания занятости LCD.
Symbol:R0,#DATRSRW@R0,ABusy
3. Метка ожидания «занятости» LCD дисплея.
В R1 помещаем адрес busy-регистра LCD. Затем на
линии RW устанавливаем высокий потенциал, а на линии RS - низкий, что
соответствует флаговому режиму занятости LCD. И, затем, используя команду
чтения из внешнего ОЗУ, передаем данные из busy-регистра LCD в аккумулятор. При
этом автоматически генерируется импульс на выходе RD микроконтроллера, что по
вышеуказанной схеме соединения соответствует подаче стробового импульса E на
LCD-индикатор. LCD обозначает свою занятость, наличием старшего бита в
busy-регистре, поэтому подпрограмма зациклена командой “jb” так, что выход из
неё возможен только, когда исчезнет старший бит в busy-регистре в аккумуляторе,
что соответствует окончанию выполнения операции LCD-дисплеем.
Busy:R0,#BUSRSRWA,@R0ACC.7,Busy
ret
6. Подпрограмма, реализующая задержку.
Задержку реализуем, основываясь на том свойстве
МК, что выполнение им операций занимает определенное время.
В таймер загружаем числа, соответствующие
заданной задержке. И ждем, пока таймер отсчитает заданное время.
twosecdelay:TH0,#high(-2000)TL0,#low(-2000)TR0TF0,$TR0
TF0
ret
end
. Листинг
программы
A51 MACRO ASSEMBLER KURS 05/15/2014
19:45:29 PAGE 1ASSEMBLER A51 V8.02bMODULE PLACED IN kurs.OBJINVOKED BY:
C:\Keil\C51\BIN\A51.EXE kurs.a51 SET(SMALL) DEBUG EPOBJ LINE SOURCE
1 org 00h
802E 2 jmp init
B 3 org 1Bh
B 805B 4 jmp check
0000 6 CMD equ 00000000b
0001 7 DAT equ 00000001b
0002 8 BUS equ 00000010b
D 7C00 9 mov R4, #00h
0090 10 RS bit P1.0
0091 11 RW bit P1.1
12 org 30h
13 init:
758951 14 mov tmod, #01010001b
D2AF 15 setb EA
D2AB 16 setb ET1
7440 18 mov A, #040h
3197 19 call LSDsetup
B 740F 20 mov A, #0Fh
D 3197 21 call LSDsetup
F 7406 22 mov A, #06h
3197 23 call LSDsetup
25 start:
D2A0 26 setb P2.0
C28D 28 clr TF0
C28F 29 clr TF1
758C00 30 mov TH0, #0
C 758A00 31 mov TL0, #0
F 758D00 32 mov TH1, #0
758B00 33 mov TL1, #0
900000 34 mov DPTR, #0000h
2092FD 35 jb P1.2, $
B C28C 37 clr tr0
D C28E 38 clr tr1
F C28D 39 clr tf0
C28F 40 clr tf1
C290 42 clr RS
C291 43 clr RW
758DFF 44 mov TH1, #0FFh
A 758B9B 45 mov TL1, #9bh
D D28E 52 setb TR1
F D28C 53 setb TR0
20D502 54 gr:jb F0, gotovo1
80FB 55 jmp gr
57 gotovo1:
215D 58 jmp gotovoMACRO
ASSEMBLER KURS 05/15/2014 19:45:29 PAGE 2
60 check:
C28C 61 clr TR0
A C28E 62 clr TR1
C 858A82 64 mov dpl, TL0
F 858C83 65 mov dph, TH0
67 sravn7700:
790A 68 mov R1, # low(778)
7803 69 mov R0, # high(778)
C3 70 clr C
E582 71 mov A, DPL
99 72 subb A, R1
A 4002 73 jc perenos7700
C 5005 74 jnc neperenos7700
E 75 perenos7700:
E E583 76 mov A, DPH
14 77 dec A
8004 78 jmp gruppa7700
79 neperenos7700:
E583 80 mov A, DPH
8000 81 jmp gruppa7700
82 gruppa7700:
C3 83 clr C
98 84 subb A, R0
500D 85 jnc sravn8300
B 4000 86 jc brak
D 89 brak:
D 0F 91 inc R7
E D2A1 92 setb P2.1
A0 D2A2 93 setb P2.2
A2 7401 95 mov A, #01h
A4 3197 96 call LSDsetup
A6 8072 97 jmp indic
A8 99 sravn8300:
A8 7948 100 mov R1, # low(840)
AA 7803 101 mov R0, # high(840)
AC C3 102 clr C
AD E582 103 mov A, DPL
AF 99 104 subb A, R1
B0 4002 105 jc perenos8300
B2 5005 106 jnc neperenos8300
B4 107 perenos8300:
B4 E583 108 mov A, DPH
B6 14 109 dec A
B7 8004 110 jmp gruppa8300
B9 111 neperenos8300:
B9 E583 112 mov A, DPH
BB 8000 113 jmp gruppa8300
BD 114 gruppa8300:
BD C3 115 clr C
BE 98 116 subb A, R0
BF 4002 117 jc gruppa3
C1 500B 119 jnc sravn9100
C3 121 gruppa3:
C3 0E 123 inc R6
C4 C2A1 124 clr P2.1
MACRO ASSEMBLER KURS 05/15/2014
19:45:29 PAGE 3
C6 D2A2 125 setb P2.2
C8 7401 127 mov A, #1
CA 3197 128 call LSDsetup
CC 804C 129 jmp indic
CE 131 sravn9100:
CE 7994 132 mov R1, # low(916)
D0 7803 133 mov R0, # high(916)
D2 C3 134 clr C
D3 E582 135 mov A, DPL
D5 99 136 subb A, R1
D6 4002 137 jc perenos9100
D8 5005 138 jnc neperenos9100
DA 139 perenos9100:
DA E583 140 mov A, DPH
DC 14 141 dec A
DD 8004 142 jmp gruppa9100
DF 143 neperenos9100:
DF E583 144 mov A, DPH
E1 8000 145 jmp gruppa9100
E3 146 gruppa9100:
E3 C3 147 clr C
E4 98 148 subb A, R0
E5 4002 149 jc gruppa2
E7 500B 150 jnc sravn10000
E9 151 gruppa2:
E9 0D 154 inc R5
EA D2A1 155 setb P2.1
EC C2A2 156 clr P2.2
EE 7401 158 mov A,#1
F0 3197 159 call LSDsetup
F2 8026 160 jmp indic
F4 162 sravn10000:
F4 79EF 163 mov R1, # low(1007)
F6 7803 164 mov R0, # high (1007)
F8 C3 165 clr C
F9 E582 166 mov A, DPL
FB 99 167 subb A, R1
FC 4002 168 jc perenos10000
FE 5005 169 jnc neperenos10000
170 perenos10000:
E583 171 mov A, DPH
14 172 dec A
8004 173 jmp gruppa10000
174 neperenos10000:
E583 175 mov A, DPH
8000 176 jmp gruppa10000
177 gruppa10000:
C3 178 clr C
A 98 179 subb A, R0
B 4002 180 jc gruppa1
D 508E 181 jnc brak
F 182 gruppa1:
010F 0C 184 inc R4
C2A1 185 clr P2.1
C2A2 186 clr P2.2
3197 188 call LSDsetup
8000 189 jmp indic
A 190 indic:
A 7431 191 mov A,#31h
C 31A0 192 call symbol
E 743A 195 mov A,#3Ah
31A0 196 call symbol
EC 199 mov A,R4
2430 200 add A,#30h
31A0 201 call symbol
202
7400 204 mov A,#00h
31A0 205 call symbol
B 7432 208 mov A,#32h
D 31A0 209 call symbol
F 743A 212 mov A,#3Ah
31A0 213 call symbol
ED 216 mov A,R5
2430 218 add A,#30h
31A0 219 call symbol
7400 221 mov A,#00h
A 31A0 222 call symbol
C 7433 224 mov A,#33h
E 31A0 225 call symbol
743A 228 mov A,#3Ah
31A0 229 call symbol
EE 231 mov A,R6
2430 233 add A,#30h
31A0 234 call symbol
7400 236 mov A,#00h
B 31A0 237 call symbol
D 7434 239 mov A,#34h
F 31A0 240 call symbol
743A 242 mov A,#3Ah
31A0 243 call symbol
EF 246 mov A,R7
2430 248 add A,#30h
31A0 249 call symbol
A D2D5 251 setb F0
C 32 252 reti
D 254 gotovo:
D C2D5 255 clr F0
F C28D 257 clr TF0
C28F 258 clr TF1
758C00 259 mov TH0,#0
758A00 260 mov TL0,#0
758D00 261 mov TH1,#0
C 758B00 262 mov TL1,#0
F 900000 263 mov DPTR,#0000h
C2A0 264 clr P2.0
31B4 265 call twosecdelay
D2A0 266 setb P2.0
C28D 267 clr TF0
A C28F 268 clr TF1
C 758C00 269 mov TH0,#0
F 758A00 270 mov TL0,#0
758D00 271 mov TH1,#0
758B00 272 mov TL1,#0
900000 273 mov DPTR,#0000h
B C2A0 274 clr P2.0
D 31B4 275 call twosecdelay
F D2A0 276 setb P2.0
3092FD 277 jnb P1.2,$
020043 278 ljmp start
280 LSDsetup:
7800 281 mov R0,#CMD
C290 282 clr RS
B C291 283 clr RW
D F2 284 movx @R0,A
E 8009 285 jmp Busy
A0 287 symbol:
A0 7801 288 mov R0, #DAT
A2 D290 289 setb RS
A4 C291 290 clr RW
A6 F2 291 movx @R0, A
A7 8000 292 jmp Busy
A9 294 Busy:
A9 7802 295 mov R0, #BUS
AB C290 296 clr RS
AD D291 297 setb RW
AF E2 298 movx A,@R0
B0 20E7F6 299 jb ACC.7,Busy
B3 22 300 ret
B4 302 twosecdelay:
B4 758CF8 303 mov
TH0,#high(-2000)
B7 758A30 304 mov TL0,#low(-2000)
BA D28C 305 setb TR0
BC 308DFD 306 jnb TF0,$
BF C28C 307 clr TR0
C1 C28D 308 clr TF0
C3 22 309 ret
end
A51 MACRO ASSEMBLER KURS 05/15/2014
19:45:29 PAGE 6
SYMBOL TABLE LISTING
----- ----- -------A M E T Y P E
V A L U E ATTRIBUTES. . . . . . . . D ADDR 00E0H A . . . . . . . C ADDR 009DH A
. . . . . . . . N NUMB 0002H A . . . . . . . C ADDR 01A9H A . . . . . . . C
ADDR 0078H A . . . . . . . . N NUMB 0000H A . . . . . . . . N NUMB 0001H A . .
. . . . . . D ADDR 0083H A . . . . . . . . D ADDR 0082H A . . . . . . . . B
ADDR 00A8H.7 A . . . . . . . . B ADDR 00A8H.3 A . . . . . . . . B ADDR 00D0H.5
A . . . . . . C ADDR 015DH A . . . . . . C ADDR 0076H A . . . . . . . . C ADDR
0071H A . . . . . . C ADDR 010FH A . . . . C ADDR 0109H A . . . . . . C ADDR
00E9H A . . . . . . C ADDR 00C3H A . . . . C ADDR 0097H A . . . . C ADDR 00BDH
A . . . . C ADDR 00E3H A . . . . . . . C ADDR 011AH A . . . . . . . C ADDR
0030H A . . . . . C ADDR 0197H A . . C ADDR 0105H A . . . C ADDR 0093H A . . .
C ADDR 00B9H A . . . C ADDR 00DFH A . . . . . . . . D ADDR 0090H A . . . . . .
. . D ADDR 00A0H A . . . C ADDR 0100H A . . . . C ADDR 008EH A . . . . C ADDR
00B4H A . . . . C ADDR 00DAH A . . . . . . . . B ADDR 0090H.0 A . . . . . . . .
B ADDR 0090H.1 A . . . . C ADDR 00F4H A . . . . . C ADDR 0082H A . . . . . C
ADDR 00A8H A . . . . . C ADDR 00CEH A . . . . . . . C ADDR 0043H A . . . . . .
C ADDR 01A0H A . . . . . . . . B ADDR 0088H.5 A . . . . . . . . B ADDR 0088H.7
A . . . . . . . . D ADDR 008CH A . . . . . . . . D ADDR 008DH A . . . . . . . .
D ADDR 008AH A . . . . . . . . D ADDR 008BH A . . . . . . . D ADDR 0089H A . .
. . . . . . B ADDR 0088H.4 A . . . . . . . . B ADDR 0088H.6 A . . . . C ADDR
01B4H A BANK(S) USED: 0 COMPLETE. 0 WARNING(S), 0 ERROR(S)
.4 Hex файл
:02000000802E50
:04001B00805B7C008A
:10003000758951D2AFD2AB7438317E740F317E7472
:1000400006317ED2A0C28DC28F758C00758A007574
:100050008D00758B009000002092FDC28CC28EC274
:100060008DC28FC290C291758DFF758B9BD28ED23F
:100070008C20D50280FB215DC28CC28E858A828550
:100080008C8379087803C3E5829940025005E583A3
:10009000148004E5838000C398500D40000FD2A166
:1000A000D2A27401317E807279487803C3E58299C7
:1000B00040025005E583148004E5838000C3984026
:1000C00002500B0EC2A1D2A27401317E804C7994F1
:1000D0007803C3E5829940025005E583148004E566
:1000E000838000C3984002500B0DD2A1C2A27401BC
:1000F000317E802679EF7803C3E58299400250056E
:10010000E583148004E5838000C3984002508E0C80
:10011000C2A1C2A27401317E800074313187743A69
:100120003187EC2430318774003187743231877421
:100130003A3187ED24303187740031877433318749
:0B014000743A3187EE243031877400E0
:10014B00318774343187743A3187EF24303187D259
:10015B00D532C2D5C28DC28F758C00758A00758D54
:10016B0000758B00900000C2A0319BD2A03092FD95
:10017B000200437800C290C291F280097801D290BC
:10018B00C291F280007802C290D291E220E7F6226F
:10019B00758CF8758A30D28C308DFDC28CC28D2255
:00000001FF
Моделирование
Для проверки работоспособности микропроцессорной
системы в среде Proteus 8 Professional была разработана модель (Рисунок 5).
Рисунок 5
Литература
Фрунзе
А.В. Микроконтроллеры? Это же просто! Т.1. -- М.: ООО "ИД СКИМЕН",
2002, -- 336 с., ил.
Белов
А.В. Самоучитель по микропроцессорной технике. -- СПб.: Наука и Техника, 2003.
-- 224 с.: ил