Юрий Ревич - Занимательная микроэлектроника
- Название:Занимательная микроэлектроника
- Автор:
- Жанр:
- Издательство:БХВ-Петербург
- Год:2007
- Город:Санкт-Петербург
- ISBN:978-5-9775-0080-7
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Юрий Ревич - Занимательная микроэлектроника краткое содержание
Для широкого круга радиолюбителей
Занимательная микроэлектроника - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
Арифметические и логические команды приведены в табл. П4.1.
Команды операций с битами приведены в табл. П4.2.
1Команды SBIи CBIдействительны для PBB по первым 32 адресам (0…31)
В операциях сравнения с регистрами производятся те же действия, что и в соответствующих арифметических и логических операциях, однако результат никуда не помещается (и, соответственно, операнды не портятся), лишь устанавливаются соответствующие флаги ( Cи Z) в регистре флагов SREG. Значением этих флагов в дальнейшем определяется работа тех команд условного перехода, которые употребляются в паре с командами сравнения (исключение составляет опущенная здесь и редко употребляемая команда CPSE, которая содержит сравнение и переход «в одном флаконе»). Описание команд сравнения приведено в табл. П4.3.
Команды передачи управления делятся, с одной стороны, на команды безусловного перехода и похожие на них команды вызова подпрограмм (последние от первых отличаются тем, что явно размещают в стеке содержимое счетчика команд для последующего возврата из подпрограммы), с другой стороны, — на команды условного перехода, т. е. нарушения последовательности выполнения операторов по какому-то условию. Большинство таких команд оперируют с адресом в памяти (К) оператора, на который производится переход. В тексте ассемблерных программ абсолютные или относительные числа, обозначающие адрес, в команды передачи управления не подставляются, вместо них указывают метки, которые затем компилятор интерпретирует, как абсолютный адрес. Команды, начинающиеся с буквы «В» (от Branch— «ветка») предполагают предварительный вызов одной из команд сравнения. Описание команд передачи управления приведено в табл. П4.4—П4.5.
Команды безусловного перехода и вызова подпрограмм
1 Для устройств с максимально возможным объемом памяти программ до 64 К слов (128 кбайт).
Команды условного перехода
1 Значение 2 — если следующая команда занимает одно слово (два байта) и 3 — если следующая команда занимает два слова (четыре байта).
2 Команды SBICи SBISдействительны только для РВВ по первым 32 адресам (0..31).
В табл. П4.6 приведено описание команд переноса данных.
В табл. П4.7 приведены команды управления системой.
Приложение 5
Тексты программ
Далее приведены полные тексты микропрограмм для конструкций, разбираемых в книге. Каждая программа подробно описана в указанных далее главах. Для воспроизведения сканируйте исходный текст с помощью Fine Reader, проверьте и сохраните в виде текстового файла с расширением asm. После этого программу можно компилировать и загружать в память контроллера, как описано в главе 13 .
Описание схемы и программы часов см. главу 14 . Программа (листинг П5.1) занимает в памяти МК 298 слов (596 байт).
Листинг П5.1
;============== Программа часов
;AT90S2313 4 МГц
.include "2313def.inc"
;==== Управление сегментами ====
.equ segA = 5; PD5 (pin 9)
.equ segB = 6; PD6 (pin 11)
.equ segC = 2; PB2 (pin 14)
.equ segD = 4; PB4 (pin 16)
.equ segE = 5; PB5 (pin 17)
.equ segF = 6; PB6 (pin 18)
.equ segG = 7; PB7 (pin 19)
;==== Управление разрядами ====
.еqu em = 0; PD0 (pin2)
.equ dm = 1; PD1 (pin 3)
.equ eh = 2; PD2 (pin 6)
.equ dh = 4; PD4 (pin 8)
;==== Рабочие переменные ====
.def POS = r16 ;отсчет разрядов для динамической индикации
.def sek = r17 ;число секунд
.def temp = r18 ;рабочая переменная
.def emin = r19 ;число единиц минут
.def dmin = r20 ;число десятков минут
.def ehh = r21 ;число единиц часов
.def dhh = r22 ;число десятков часов
.def set_up = r23;отсчет разрядов при установке
.def count = r24 ;счетчик для мигания
.def Flag = r25 ;флаги режимов
;в регистре Flag: если бит0=1, то идет установка часов
;если бит1=1, то внешнее напряжение пропало
;======== Прерывания =========
rjmp RESET ;процедура Reset
reti
rjmp INTT1 ;прерывание INTI по нажатию Кн1
reti
rjmp TIM1 ;прерывание Timer1 по сравнению CompareA (счет времени)
reti
rjmp TIM0 ;прерывание Timer0 по переполнению (управл. разрядами)
reti
reti
reti
rjmp ACOMPI ;прерывание аналогового компаратора
;===== Программа =====
;===== прерывание по нажатию кнопки Кн1 ====
INTT1:
sbrc Flag,1 ;если бит1=1 напряжения нет
rjmp END_SET ;какая установка — на выход
clr temp
out GIMSK,temp ;запрещаем INTI
sbr Flag,1 ;устанавливаем бит 0 флага — идет установка
inc set_up ;отсчет, какой разряд устанавливаем
clr count ;очищаем счетчик мигания
cpi set_up,5 ;если счетчик разрядов
brne END_SET ;еще не больше 4, то на выход
clr set_up ;если больше, то обнуляем счетчик
ldi sek,59 ;и устанавливаем число секунд = 59
cbr Flag,1 ;сбрасываем бит 0 флага — конец установки
END_SET:
reti ;конец прерывания INT1
;===== прерывание Timerl — ход часов ====
TIM1:
sbrc Flag,1 ;если бит1=1 напряжения нет
rjmp mtime ;сразу посылаем на счет времени
sbrs Flag,0 ;если бит0=1 идет установка
rjmp mtime ;иначе сразу на счет времени
ldi temp, 0b10000000 ;на всякий случай
out GIFR,temp ;очищаем прерывание INT1
cpi count,0 ;если счетчик =0
breq CONT_1 ;то на продолжение
ldi temp,1< ;иначе разрешаем прерывание INT1
out GIMSK,temp
CONT_1: ;установка
inc count ;увеличиваем счетчик мигания на 1
cpi set__up,1 ;если первый разряд, устанавливаем его
brne mm1 ;иначе на следующий
sbis PinB,0 ;если Кн2 нажата
inc emin ;увеличиваем число единиц минут на 1
cpi emin,10 ;если число единиц минут еще не равно 10
brne END_TIM1 ;то на выход из процедуры
clr emin ;если =10, то обнуляем
rjmp END_TIM1 ;на выход
mm1: cpi set_up,2 ;если второй разряд, устанавливаем его
brne mm2 ;иначе на следующий
sbis PinB,0 ;если Кн2 нажата
inc dmin ;увеличиваем число десятков минут на 1
cpi dmin,6 ;если число десятков минут еще не равно 6
brne END_TIM1 ;то на выход из процедуры
clr dmin ;если =6, то обнуляем
rjmp END_TIM1 ;на выход
mm2: cpi set_up,3 ;если третий разряд, устанавливаем его
Читать дальшеИнтервал:
Закладка: