- •1. Введение.
- •2. Области применения микроконтроллеров.
- •3. Основные характеристики микроконтроллера кр1816ве48.
- •4. Память микроконтроллера.
- •5. Организация ввода/вывода информации.
- •6. Управление микроконтроллером.
- •7. Система команд мк48.
- •8. Мк-система с внешней памятью программ.
- •9. Основные принципы разработки программ для мк48.
- •10. Постановка задачи.
- •11. Аппаратные средства.
- •12. Программные средства.
- •13. Транслятор с языка asm-48.
- •14. Имитатор.
- •15. Тестирование.
- •16. Заключение.
16. Заключение.
Представляемый комплекс аппаратных и программных средств успешно прошёл все процедуры тестирования. Хочется также отметить удачную запись программатором кодов программы в ПЗУ.
К сожалению, данный аппаратно-программый комплекс ещё ни разу не использовался автором для выполнения реальной задачи по созданию устройств управления на базе МК48. Однако удачное прохождение всех тестовых испытаний не заставляет усомниться в работоспособности системы: написанные и отлаженные тестовые программы, прошитые в ПЗУ, готовы к работе на однокристальном микроконтроллере КР1816ВЕ48.
Приложение 1. Команды языка ASM-48
Mov a,r0 mov a,r1 mov a,r2 mov a,r3 mov a,r4 mov a,r5 mov a,r6 mov a,r7 mov a,@r0 mov a,@r1 mov r0,a mov r1,a mov r2,a mov r3,a mov r4,a mov r5,a mov r6,a mov r7,a mov @r0,a mov @r1,a mov a,psw mov a,t mov t,a movx a,@r0 movx a,@r1 movx @r0,a movx @r1,a movp a,@a movp3 a,@a xch a,r0 xch a,r1 |
xch a,r2 xch a,r3 xch a,r4 xch a,r5 xch a,r6 xch a,r7 xch a,@r0 xch a,@r1 xchd a,@r0 xchd a,@r1 in a,p1 in a,p2 ins a,bus outl p1,a outl p2,a outl bus,a movd a,p4 movd a,p5 movd a,p6 movd a,p7 movd p4,a movd p5,a movd p6,a movd p7,a add a,r0 add a,r1 add a,r2 add a,r3 add a,r4 add a,r5 add a,r6 |
add a,r7 add a,@r0 add a,@r1 addc a,r0 addc a,r1 addc a,r2 addc a,r3 addc a,r4 addc a,r5 addc a,r6 addc a,r7 addc a,@r0 addc a,@r1 da a inc a inc r0 inc r1 inc r2 inc r3 inc r4 inc r5 inc r6 inc r7 inc @r0 inc @r1 dec a dec r0 dec r1 dec r2 dec r3 dec r4 |
Dec r5 Dec r6 Dec r7 Anl a,r0 Anl a,r1 anl a,r2 anl a,r3 anl a,r4 anl a,r5 anl a,r6 anl a,r7 anl a,@r0 anl a,@r1 orl a,r0 orl a,r1 orl a,r2 orl a,r3 orl a,r4 orl a,r5 orl a,r6 orl a,r7 orl a,@r0 orl a,@r1 xrl a,r0 xrl a,r1 xrl a,r2 xrl a,r3 xrl a,r4 xrl a,r5 xrl a,r6 xrl a,r7 |
xrl a,@r0 xrl a,@r1 clr a cpl a swap a rl a rlc a rr a rrc a anld p4,a anld p5,a anld p6,a anld p7,a orld p4,a orld p5,a orld p6,a orld p7,a clr c clr f0 clr f1 cpl c cpl f0 cpl f1 retr ret stop tcnt strt t strt cnt en tcnti dis tcnti en i |
dis i sel rb0 sel rb1 sel mb0 sel mb1 ent0 clc nop mov a,#d mov r0,#d mov r1,#d mov r2,#d mov r3,#d mov r4,#d mov r5,#d mov r6,#d mov r7,#d mov @r0,#d mov @r1,#d add a,#d addc a,#d anl a,#d orl a,#d xrl a,#d anl p1,#d anl p2,#d anl bus,#d orl p1,#d orl p2,#d orl bus,#d djnz r0 djnz r1 |
djnz r2 djnz r3 djnz r4 djnz r5 djnz r6 djnz r7 jc jnc jz jnz jt0 jnt0 jt1 jnt1 jf0 jf1 jtf jni jb0 jb1 jb2 jb3 jb4 jb5 jb6 jb7 call jmp jmpp @a |
Приложение 2. Пример исходного текста на языке ASM-48
000h jmp START ; Запуск программы
003h dis TCNTI ; Каждую секунду прерывание от секундомера (К176ИЕ5)
; Запрет прерывания от внутреннего таймера
; для того, чтобы не возникали вложенные прерывания!
004h jmp ADD_TIMER ; Переход к процедуре
007h dis I ; Прерывание от таймера - для динамической индикации
; Запрет внешнего прерывания от секундомера
mov R0,#38h ; Сохранение регистров и аккумулятора
mov @R0,A
sel RB1 ;
; Выбор первого банка регистров
mov A,#TIMER_PER ; Загрузка в таймер
mov T,A ; начального значения счёта
mov A,#0FFh ; Бланкирование (гашение
outl BUS,A ; всех индикаторов)
dec R2 ; Декремент счётчика знакомест
jс START_R2 ; Переход, если перенос (отрицательное значение)
RET_R2:
mov A,#COD_SIMV ; Загрузка начального адреса РПД, где лежат цифры индикации
add A,R2 ; Продвижение к нужной цифре
mov R0,A ; Загрузка адреса РПД в R0
mov A,@R0 ; Вытаскивание цифры индикации из РПД
mov R3,A ; Цифра индикации храниться в R3
mov A,#COD_7SIGM ; Загрузка начального номера в таблице перекодировки
add A,R3 ; Коррекция адреса по цифре индикации (R3)
movp3 A,@A ; Загрузка перекодированного символа
outl P1,A ; Вывод байта индикации на порт P1 (7-ми сегментный код R2)
; Реализация бегущего нуля
mov A,R2 ; Начальное значение цикла по R4
mov R4,A ; (равно номеру знакоместа)+1
add R4 ; Для специфичного цикла
mov A,7Fh ; Начальный нуль на старшем бите (01111111)
; Это для специфичного цикла - у него происходит один
; сдвиг влево даже если R4=1 (т.е. R4=0)
FOR_R4:
rl A ; Циклический сдвиг аккумулятора влево
djnz R4,EXIT_R4 ; Декремент счётчика цикла и повтор, если не нуль
anl A,R7 ; Логическое И того, что надо индицировать, и регистра маскировки
; Это для того, чтобы можно было погасить любое знакоместо
outl BUS,A ; Вывод на порт BUS байта с одним нулём (выбор знакоместа)
; С этого момента светиться одно знакоместо индикатора
sel RB0 ; Восстановление нулевого банка регистров
en I ; Разрешение прерывания от секундомера
mov R0,#38h ; Восстановление регистров и аккумулятора
mov A,@R0
retr ; Выход из подпрограммы индикации
; с восстановлением ССП