-
Программа
.device ATmega64
.include "m64def.inc"
;переопределения регистров и бит
.def temp =r16
.def out_data =r17
.def deley =r18
.def rab =r23
.def adw0 =r4
.def adw1 =r5
.equ kdel1 =256 ; коэф. деления таймера Т0
.equ kdel2 =103 ; коэф. деления таймера Т1
.equ baud =233 ; задаем скорость обмена 2400 для частоты кварца 9МГц
.equ seg =PORTC
.equ TxD =PD1
;*****таблица векторов прерываний***********************************
.CSEG
.org $0000 ;начальный адpес пpогpаммы
rjmp Start ;пеpеход к основной части пpогpаммы
.org $0026
reti ;Регистр данных USART0 пуст
.org $0028
reti ;USART0, передача завершена
;***** Основная программа******************************************
Start:
ldi temp, High(RAMEND) ;инициализация стека
out SPH, temp ;
ldi temp, Low(RAMEND) ;
out SPL, temp ;
;настройка выходных линий разрядов и их выключение
ldi temp, 1<<TxD
out DDRD, temp ; настройка порта D на вывод
;устанавливаем скорость обмена
clr temp
sts UBRR0H,temp
ldi temp,Baud
out UBRR0L,temp
;Разрешение работы приемника и передатчика
ldi temp,(1<<RXEN0)|(1<<TXEN0)
out UCSR0B,temp
; Установка формата посылки: 8 бит данных, 1стоп-бита
ldi temp, (1<<UCSZ01)|(1<<UCSZ00)
sts UCSR0C,temp
clr out_data ;очистка регистра
sei ;разрешение всех прерываний
;Инициализация таймера Т1
ldi temp,0x05 ;установка коэффициента предварительного
out TCCR1B,temp ;делителя 1024 таймера Т1
;программа измерения
Haupt
ldi rab,0b10010000 ;
out MCUCR,rab ; «спящий режим» АЦП
sleep
in adw0,ADCL ;младший разряд байта результата АЦП
in adw1,ADCH ; старший разряд байта результата АЦП
out UDR,UCSRA ;передача данных через UART
rcall wait1 ;вызов подпрограммы задержки на 2с
rjmp Haupt
;Подпрограмма задержки
wait1:
push temp ;сохранение содержимого регистра temp
ldi temp,0 ;запись 0 в temp
out TCNT1H, temp ;запись 0 в старший регистр таймера T1
out TCNT1L, temp ; запись 0 в младший регистр таймера T1
ldi deley,0 ; запись 0 в deley
out TCNT0, deley ; запись 0 в регистр таймера T0
wt1:
in temp,TCTN1L ;чтение младшей части счетного регистра Т1
cpi temp,low(kdel2) ;сравнение с числом 67h
brlo wt1 ;переход если temp меньше чем kdel2
in temp,TCTN1H ; чтение старшей части счетного регистра Т1
cpi temp, high(kdel2) ; сравнение с числом 00h
brlo wt1 ; переход если temp меньше чем kdel2
wt2:
in deley,TCTN0 ; чтение счетного регистра Т0
cpi temp, kdel1 ; сравнение с числом 256
brlo wt2 ; переход если deley меньше чем kdel1
pop temp ;восстановление значения регистра temp
ret ;выход из подпрограммы
.EXIT
Заключение
В соответствии с техническим заданием был разработан измерительный комплекс температуры на базе микроконтроллера фирмы Atmel Mega8 с тактовой частотой 9МГц. Измерение освещенности происходит каждые 2 с. Измеренная информация по интерфейсу UART передается в ПК со скоростью 2400 бит/с. Для реализации данного измерительного прибора была написана программа на языке Ассемблер.
Список литературы
1. Трамперт В. Измерение, управлениеи регулирование с помощью AVR-микроконтроллеров.: Пер. с нем. – К.: «МК-Пресс», 2006. – 208с.
2. Белов А.В. Самоучитель разработчика устройств на микроконтроллерах AVR. – СПб.: Наука и техника, 2008. – 544с.
3. Как превратить компьютер в измерительный комплекс. Пер. с фр./ П.Гёлль. – М.: «ДМК», 1999. – 144с.