Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Символические имена битов управления в регистре SPCR



 

SPIE - бит разрешения прерывания SPI, 0 запрещает прерывания.

SPE - бит разрешения работы; при 0 запрещены любые операции в SP1,

1 разрешает работу интерфейса.

DORD - при 1 первым передается младший бит слова данных,

при 0 -старший бит.

MSTR - при 1 определяется режим SPI-master, при 0 - режим SPI-slave.

 Младшие 4 бита SPCR определяют параметры тактового сигнала

SCK:

CPOL - определяет пассивный уровень сигнала SCK в перерывах передачи данных, т.е. при 0 тактовый сигнал в пассивном состоянии интерфейса тоже нулевой.

СРНА - при 0 запись данных должна производиться каждым первым фронтом сигнала SCK после пассивного уровня, при 1 - каждым вторым фронтом сигнала после пассивного уровня.

SPR1 и SPR0 задают частоту сигнала SCK; коэффициент деления такто­вой частоты микроконтроллера для интерфейса определяется этими битами следующим образом:

00 - коэффициент деления 4,

01- коэффициент деления 16,

10 - коэффициент деления 64,

11 - коэффициент деления 128.

В регистре SPSR используется только 2 старших бита. SPIF (бит 7) - флаг прерывания, WCOL (бит 6) - флаг коллизии. SPIF устанавливается в 1 после каждого цикла передачи данных или после отмены режима SPI-master сигналом SS и вызывает вектор прерывания SPI_STC (адрес вектора $00а), если бит SPIE=1 (разрешение прерывания в SPCR) и установлен флаг глобального прерывания I в регистре состояния SREG". Флаг прерывания очищается автоматически при вызове вектора прерывания SPI_STC либо одновременно с очисткой флага WCOL. Флаг коллизии устанавливается в случае чтения регистра SPDR в период передачи данных в SPI (некорректное чтение данных) и автоматически очищается одновременно с флагом SPIF после чтения регистра SPSR и последующего обращения к регистру SPDR.

Если биты в регистре управления SPCR для выбора необходимого режима заданы, запись байта данных в регистр SPDR контроллера в режиме SPI-master приводит к началу рабочего цикла интерфейса. SPI-master (рис.4) передает на MOSI данные, с входа MISO может записывать данные от SPI-slave и на выходе SCK формирует 8 импульсов, управляющих передачей байта данных. Под управлением этих же сигналов SCK SPI-slave (рис. 16) принимает данные с входа MOSI и может передавать из своего регистра SPDR данные на выход MISO.

После завершения рабочего цикла обмена данными контроллер, работающий в любом режиме, устанавливает флаг прерывания для вызова вектора прерывания SPI_STC. Подпрограмма обработки этого вектора должна выполнять операции доступа к регистрам SPI для реализации необходимых функций интерфейса. Например, чтение из SPDR поступивших в предыдущем цикле данных и запись в него новых данных для передачи в следующем цикле. К контроллеру SPI-master для обмена данными вместо второго контроллера может быть подключен и обычный регистр сдвига разрядности, соответствующей формату данных.

Таким образом, интерфейс SPI обеспечивает за один рабочий цикл и передачу байта данных из SPDR на выход, и запись в этот же регистр нового байта данных, поступивших на вход. Запуск рабочего цикла производится записью в SPI-master очередного байта данных в регистр SPDR.

 


Прикладная программа микроконтроллерного регулятора.

Программирование микроконтроллера начинается с внесения в ППЗУ при помощи программатора табулированных значений функции , при помощи которых определяем знак нелинейного воздействия.

Словесный алгоритм функционирования микроконтроллерного регулятора:

1. Инициализация и настройка МК на ввод сигналов x1 и x2.

Порт B на вывод.

2. Измеряем текущее значение x2

3. Проверяем условие

4. Измеряем значение x1

5. Если условие в пункте 3 ложно, переходим к пункту 8,

6. Проверяем условие .

7. Если оно истинно, то подаём на выход линейное управляющее воздействие и переходим к пункту 2

8. Считываем  и сравниваем с x1

9. Если , то подаём на вывод нелинейное управляющее воздействие, иначе подаём его же, но с отрицательным знаком.

10.  Переход к пункту 2.

 

Листинг программы:

NOLIST

. INCLUDE " 8535 def. inc "

LIST

CSEG

. org $000

rjmp reset; прерывание по reset

. org $00 e

rjmp adc 0; прерывание по завершению преобразования АЦП

. ORG$011

 

Reset: ldi r16, low(RAMEND)

Out SPL, r16

Ldi r16, high(RAMEND)

out SPH, r 16; определить в указателе стека адрес RAMEND l di r 16, 0 b 11111110

out admux, r 16; преобразовывать сигнал с первого выхода мультиплексора РА1

out DDRA, r 16 ; определить все биты порта A на ввод

Ldi r 16, 0 b 11111110

out portA, r16; определить пассивный высокий уровень сигнала для всех битов порта А

ser r16; установить все биты $ff в регистр r16

out DDR B, r16 ; порт B на вывод

 

Ldi r16, 0b11001110

 out adcsr, r16; инициализация АЦП

ldi r16, 0b00000110 ; инициализация записи в ППЗУ

Out EECR, r16

 ldi r16, 0b00000000 ; инициализация чтения из ППЗУ

Out EECR, r16

sei ; флаг глобального разрешения прерываний

Main:

Nop

rjmp main

 

adc 0:; подпрограмма обработки прерываний АЦП

inc r20

Cpi r20, 1

Brne adc1

in r17, ADCL; занести младший байт кода результата преобразования АЦП в регистр r17

  in r 18, ADCH; занести старший байт кода результата преобразования АЦП в регистр r18

Ldi r 16, 0 b 00000001

 out admux, r16 ; преобразовывать сигнал с первого выхода мультиплексора РА0 x1

 sbi adcsr, ADSC; запустить АЦП для однократного преобразования

  reti

adc1:

 clr r20

i n r21, ADCL ; занести младший байт кода результата преобразования АЦП в регистр r21

  in r22, ADCH; занести старший байт кода результата преобразования АЦП в регистр r22

Ldi r23, 0b10110011

ldi r24, 0b01101011; занести С1

Ldi r27, 0 b 00000110

ldi r 28, 0b11010101; занести С2

cpi r 28, r 18; сравнить C2 и x2

brne u 1; перейти если разность (C2-x2) отрицательная

Cpi r 27, r 17

Brne u 1

 

cpi r 22, r 24 ; сравнить С1 и x1

brne u 1; перейти если разность (С11) отрицательная

Cpi r 21, r 23

Brne u 1

 

ldi r16, 0b0000001; загрузить U2 линейная зависимость

Out PORTB, r16

Reti

u1:

Lsl r17

Rol r18

Out EEARL, r17

Out EEARH, r18

Sbi EECR, EERE

rcall pausa ; задержка для нормального чтения из ППЗУ

In r11, EEDR

Cpi r22, r11

Brne otrsign

Ldi r31, 1

Clr r30

Add r17, r31

Adc r18, r30

Out EEARL, r17

Out EEARH, r18

Sbi EECR, EERE

rcall pausa; задержка для нормального чтения из ППЗУ

 

in r11, EEDR

Cpi r21, r10

Brne otrsign

 ldi r16, 0b0000010; загрузить U1 нелинейная зависимость

Out PORTB, r 16

 sbi adcsr, ADSC ; запустить АЦП для однократного преобразования

Ret i

otr sign:

ldi r16, 0b0000100 ; загрузить U1 с обратным знаком нелинейная зависимость

Out portB, r 16

 sbi adcsr, ADSC ; запустить АЦП для однократного преобразования

Ret i

 ; подпрограмма задержки для нормального чтения из ППЗУ

Pausa:

  inc r29

 cpi r29, r39

 brne pausa

 clr r29

 reti


ВЫБОР ЭЛЕМЕНТНОЙ БАЗЫ.


Поделиться:



Последнее изменение этой страницы: 2019-10-24; Просмотров: 151; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.037 с.)
Главная | Случайная страница | Обратная связь