Предыдущая Следующая

Микроконтроллерный генератор

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 ? | ПРОГРАММАТОР | ПРОЕКТЫ | СТАТЬИ | ССЫЛКИ | КАРТА САЙТА
Hosted by uCoz