Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Символические имена битов управления в регистре 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; перейти если разность (С1-х1) отрицательная 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; Просмотров: 163; Нарушение авторского права страницы