- устанавливается флаг разрешения прерываний по переполнению T/C0;
- настраивается порт PORTD для RS 485.
с помощью регистра PORTD (00000100 разрешаем работу 8 битного передатчика)
- устанавливается частота UART на 9600 бод с помощью регистра UBRR (значение 25 в данном случае);
- устанавливаем глобальный флаг разрешения прерываний;
При получение прерывания от T/С 0 вызывается подпрограмма time
- уменьшает значения счетчика указывающего конец периода;
- считывает данные из ячейки, на которую указывает регистр Z;
- увеличивает Z на единицу;
- записывает в регистр передачи данных UDR ранее считанные данные;
- проверяет, достигнут ли конец периода, если достигнут, то устанавливает регистр-указатель Z на начало массива значений синуса;
- увеличивает значения счетчика T/C0, чтобы достичь нужной частоты срабатывания таймера;
Вся программа выполняется в вечном цикле за счет команды rjmp PC.
6. Принципиальная схема
7. Исходный код программы.
.INCLUDE "C:\Program Files\Atmel\AVR Studio\Appnotes\2313def.inc"
.DSEG
.DEF count = r17 ;Инициализация переменной-счетчика
;Таблица векторов прерывания
.cseg
.org $000
rjmp reset
.org $006
rjmp time ;установка вектора прерывания по переполнению таймера 0
.org $00b
reset:
ldi r25,0x60 ;установка стека
out spl,r25
ldi count, 20 ;загрузка в счетчик количества отсчетов
;Загрузка адреса превого отсчета
ldi ZH,HIGH(Sin*2)
ldi ZL,LOW(Sin*2)
;устанавливаем дилитель равный 8
ldi r16,2
out TCCR0,r16
;разрешение прерывания по переполнению Т0
ldi r16,2
out TIMSK,r16
; устнавливаем число тактов на 230
ldi r18, 230
out TCNT0, r18
;Установка порта D: бит 2 для RS 485
ldi r16, 0b00000100
out DDRD, r16 ;Port D: бит 2 для RS 485
;установка kbaud на скорость передачи данных 9600 бод
ldi r16,25 ;
out UBRR,r16
sei
rjmp main
main:
rjmp PC
time:
;Декремент счетчика и отправка отсчена на выход, с переходом на следующий адрес отсчетов
dec count
lpm
adiw ZL,1
out UDR,r0
cpi count, 0x0 ; проверяем не прошел ли полный период
brne endtick
;устанавливаем указатель в начало массива
ldi count, 20
ldi ZH,HIGH(Sin*2)
ldi ZL,LOW(Sin*2)
endtick:
;если счетчик обнулился- увеличиваем таймер счетчик на 230 для получения нужной частоты
ldi r16, 230
in r2 , TCNT0
add r2 , r16
out TCNT0, r2
reti
Sin: .DB 0, 39, 75, 103, 121, 127, 121, 103, 75, 39, 0, -39, -75, -103, -121, -127, -121, -103, -75, -39
8. Заключение.
В данном курсовом проекте была разработана система сбора данных основанная на микроконтроллере AT 90S2313 фирмы Atmel.
Для этого было написано программное обеспечение для контроллера на языке Assembler, формирующее на выходе контроллера дискретный синусоидальный сигнал с частотой отсчетов 1КГц.
Для обмена информации с другими элементами системы было предусмотрено создание интерфейса передачи данных RS-485 на базе микросхемы MAX1480B фирмы Maxim Dallas Semiconductor Inc.
Список использованных ресурсов:
1. Электронный учебник Голубцов М.С.-“Микроконтроллеры AVR: от простого к сложному”.
2. http://www.gaw.ru
3. http://atmel.ru
4. http://www.telesys.ru/projects/proj062/index.shtml
5. http://www.maxim-ic.com
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.