Разработать систему сбора данных на базе МК АТ90S2313, страница 2

- устанавливается флаг разрешения прерываний по переполнению 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