Микроконтроллерный генератор
187
Рис. 8.8. График, соответствующий табл. 8.1
После опроса таблицы происходит передача данных. К сожалению, проверить правильность передачи данных в ЦАП невозможно, поскольку микросхема DAC7512 не содержит средств подтверждения корректного получения данных (по четности или по количеству единиц). Поэтому для подстраховки данные передаются дважды.
Программа на ассемблере представлена в листинге 8.1, а шестна-дцатеричный код — в листинге 8.2. Соответствующие файлы gene. asm и gene. hex находятся на прилагаемом к книге компакт-диске в папке Программы - Генератор. Листинг 8.1. Программа управления генератором
.include "C:\Program Files\Atmel\AVR Studio\Appnotes\tnl5def. inc"
;Автор: Кразченко А.З.
;Дата": 2 з". 03.2008
.•Версия: 1.0.4
;Имя файла: gene.asm
.■Микроконтроллер: ATtinyl5
,-Тактозая частота: 1 . бмГц
;Питание: нестабилкзирозанное 4,5 3
. list
Регистровые переменные .def adr = rO ; Рабочий регистр младший .def trrp3 = rl6 ; Рабочий регистр .def М = г17 ; Рабочий регистр
.def Y = г18 ; Рабочий регистр
188
Глава 8
Листинг 8 1 Продолжение
def |
X |
= |
rl9 |
Рабочий |
регистр |
|
def |
trap |
= |
r20 |
Рабочий |
регистр |
|
def |
tmpl |
= |
r21 |
Рабочий |
регистр |
|
def |
tmp2 |
= |
r22 |
Рабочий |
регистр |
|
def |
si |
= |
r23 |
Рабочий |
регистр |
старший |
def |
il |
- |
r24 |
Рабочий |
регистр |
старший |
def |
s |
= |
r25 |
Рабочий |
регистр |
младший |
def |
i |
- |
r26 |
Рабочий |
регистр |
младший |
def |
pir |
= |
r27 |
Рабочий |
регистр |
младший |
. cseg . org О
rjmp RESET
nop ;rjmp EXT_INT0 - прерывание не используется
nop ;rjmp EXT_PIN - прерывание не используется
nop ;rjmp TIME_OVF0 - прерывание от таймера
nop ;rjmp EE_RDY - прерывание от таймера
nop ;rjmp ANA_COMP - прерывание не используется
.org 20
;настройка порта В RESET: nop
clr tmp
out DDRB, tmp
out PORTB, tmp ;обнулить порт В clr tmp
ldi trap, ;РВ0,РВ1,РВ2-выходы
out DDRB, tmp .•Начало программы ;сброс всех значений
clr si
clr il
clr s
clr i
clr adr
;Начало цикла nStart: nop
sbi PORTB, 2
nop
.•Превышает 10800?
mov tmpl, il mov tmp2, i
els ;сброс флага знака
subi tmp2, ;проверяем младший байт
brlt eee ;если меньше, то проверять не надо
Микроконтроллерный генератор
189
;сброс флага знака
;проверяем старший байт
;если меньше, то проверять не надо
:удлиняем переход
Листинг 8.1. Продолжение
els
subi tmpl, 52А brlt eee .nop
rjmp ss eee: nop
rjmp kk ;Да, превышает 10800 ss: nop
clr i
clr il
rcall adcn
nop
;формирование времени задержки
rcall zaderl ; подпрограмма формирования задерэкки1
rjmp gg kk: nop
rcall zader ;подпрограмма формирования задержки
;формирование опроса адреса gg: пор
;i- двухбайтное число clz
;сброс i в ноль ;сброс il в ноль .•подпрограмма опроса АЦП
rty:
rtu: ;опрос
i г. с |
i |
;увеличение младшего байта |
cpi |
i, SFF |
|
brne |
rty |
;проверка переполнения мл. байта |
clr |
i |
|
inc |
il |
.•увеличение старшего байта |
nop |
||
clz |
||
inc |
s |
.•увеличение младшего байта |
cpi |
s, SFF |
|
brne |
rtu |
;проверка переполнения мл. байта |
ctlr |
s |
|
inc |
si |
;увеличение старшего байта |
nop |
||
адреса |
||
rcall |
opros |
;подпрограмма опроса таблицы |
nop |
||
clr |
tmp |
|
out |
PORTB, tmp |
|
rcall |
zader |
|
nop |
||
sbi |
PORTB, 2 |
|
sbi |
PORTB, 1 |
|
rcall |
zader |
|
mov |
tmp2, r4 |
190
НА ГЛАВНУЮ | | ЧТО ТАКОЕ PIC ? | | ПРОГРАММАТОР | | ПРОЕКТЫ | | СТАТЬИ | | ССЫЛКИ | | КАРТА САЙТА |