Главная страница

Экзамен микропроцессоры. Примерэкззадачи (2). Разработка принципиальной схемы и программного обеспечения


Скачать 159.21 Kb.
НазваниеРазработка принципиальной схемы и программного обеспечения
АнкорЭкзамен микропроцессоры
Дата16.03.2023
Размер159.21 Kb.
Формат файлаdocx
Имя файлаПримерэкззадачи (2).docx
ТипДокументы
#995585

РАЗРАБОТКА ПРИНЦИПИАЛЬНОЙ СХЕМЫ И

ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

К порту D подключены кнопки и блок-контакты контакторов. Кнопка «пуск» SB1 подключена к выводам внешнего прерывания PD0 (INT0), кнопка «стоп» SB2 к выводу внешнего прерывания PD1 (INT1). К выводам PD4-PD6 подключены блок-контакты контакторов КМ1-КМ3. Силовые контакты контактора КМ1 подключают статор асинхронного двигателя с фазным ротором к сети переменного тока. Силовые контакты контактора КМ2 шунтируют пусковую ступень в роторной цепи. Силовые контакты контактора КМ3 отключают статор двигателя от сети переменного тока и подают в две фазы статора постоянный ток. К порту В подключены катушки промежуточных реле (к PB0-KL1, к PB1-KL2, к PB2-KL3. Соответствующие блок-контакты промежуточных реле KL1-KL3 управляют включением катушек контакторов КМ1-КМ3.

Сигнал с датчика скорости подается на вывод PF0 встроенного нулевого канала АЦП. Внешние прерывания INT0, INT1 срабатывают по спадающему фронту сигнала.

16-разрядный таймер Т1 работает в режиме СТС по каналу А. Прерывание от таймера возникает через время, определяемое по формуле:



где СLK – коэффициент делителя частоты,

х – число, записанное в регистр сравнения канала А ОСR1A,

тактовая частота кварцевого генератора,

.

Для заданной аппаратной выдержки в 0.5 секунд число х рассчитывается по формуле:



Выбираем коэффициент делителя частоты таким образом, чтобы число х было меньше и по возможности ближе к 65535. Для такого условия подходит СLK=64.



Временная диаграмма работы таймера Т1 в режиме СТС А представлена на рисунке.



В данной задаче содержимое счетного регистра TCNT1 увеличивается каждый 64 период тактовой частоты.

В данной задаче содержимое счетного регистра TCNT1 увеличивается каждый 64 период тактовой частоты.

Когда содержимое счетного регистра TCNT1 совпадет с содержимым регистра сравнения OCR1A (15625), установится флаг совпадения A от таймера Т1 OCF1A. После чего содержимое счетного регистра обнуляется.

Определим значения битов регистров управления.

Формат регистра разрешения внешних прерываний EIMSK представлен на рисунке 1.

EIMSK

Бит

7

6

5

4

3

2

1

0







INT7

INT6

INT5

INT4

INT3

INT2

INT1

INT0




Рисунок 1 – Формат регистра EIMSK


Таблица 1 – Описание битов регистра EIMSK

INT7

Бит разрешения внешнего прерывания INT7

INT6

Бит разрешения внешнего прерывания INT6

INT5

Бит разрешения внешнего прерывания INT5

INT4

Бит разрешения внешнего прерывания INT4

INT3

Бит разрешения внешнего прерывания INT3

INT2

Бит разрешения внешнего прерывания INT2

INT1

Бит разрешения внешнего прерывания INT1

INT0

Бит разрешения внешнего прерывания INT0


В соответствии с представленным в таблице 1 описанием, устанавливаем следующие биты EIMSK.


INT7

INT6

INT5

INT4

INT3

INT2

INT1

INT0

0

0

0

0

0

0

1

1



















Разрешение прерывания INT1

Разрешение прерывания INT0


Значения битов регистра EICRА задают условия возникновения внешний прерываний INT3-INT0 (рисунок 2). Комбинация битов ISCn1ISCn0 10 означает, что прерывание возникает по спадающему фронту.

EICRA

Бит

7

6

5

4

3

2

1

0




ICS31

ICS30

ICS21

ICS20

ICS11

ICS10

ICS01

ICS00


Рисунок 2– Формат регистра EICRА


Таблица 2 – Описание битов регистра EICRА

ISC31

Биты выбора условия генерации внешнего прерывания INT3

ISC30

ISC21

Биты выбора условия генерации внешнего прерывания INT2

ISC20

ISC11

Биты выбора условия генерации внешнего прерывания INT1

ISC10

ISC01

Биты выбора условия генерации внешнего прерывания INT0

ISC00


Соответственно значения битов регистра EICRA определим следующим образом.
EICRA

Бит

7

6

5

4

3

2

1

0




ICS31

ICS30

ICS21

ICS20

ICS11

ICS10

ICS01

ICS00




0

0

0

0

1

0

1

0


В регистре TIMSK необходимо разрешить прерывание от таймера 1 по совпадению A, то есть установить в единицу бит OCIE1A.


Бит

7

6

5

4

3

2

1

0




OCIE2

TOIE2

TICIE1

OCIE1A

OCIE1B

TOIE1

OCIE0

TOIE0




0

0

0

1

0

0

0

0


Для выбора режима работы таймера 1 СТС A при CLK=64 в регистры управления TCCR1A, TCCR1B запишем следующие значения.

TCCR1A

Бит

7

6

5

4

3

2

1

0







COM1A1

COM1A0

COM1B1

COM1В0

COM1С1

COM1С0

WGM11

WGM10

Начальное значение

0

0

0

0

0

0

0

0






TCCR1B

Бит

7

6

5

4

3

2

1

0




ICNC1

ICES1

-

WGM13

WGM12

CS12

CS11

CS10




0

0

0

0

1

0

1

1













режим СТС

CLK=64


Управление внутренним АЦП осуществляется с помощью регистра управления и состояния АЦП ADCSRA (ADCSR для AVR STUDIO 4) и регистр управления мультиплексором АЦП ADMUX. Форматы этих регистров представлены в таблицах 3 и 5 соответственно.
Таблица 3 – Формат регистра ADCSRA

Бит

7

6

5

4

3

2

1

0




ADEN

ADSC

ADFR

ADIF

ADIE

ADPS2

ADPS1

ADPS0




1

1

0

0

0

1

0

1


ADEN – включение АЦП. (1 – включено, 0 – выключено);

ADSC – запуск преобразования (1 – начать преобразование);

ADFR – выбор режима работы АЦП ( 0 – одиночное, 1 – непрерывное преобразование);

ADIF – флаг прерывания от компаратора (устанавливается в 1 по завершению преобразования);

ADIE – разрешает прерывания от компаратора;

ADPS2 – ADPS0 – выбор коэффициента деления тактовой частоты, согласно таблице 4.
Таблица 4 – Выбор коэффициента деления тактовой частоты

ADPS2

ADPS1

ADPS0

Коэффициент деления

0

0

0

2

0

0

1

2

0

1

0

4

0

1

1

8

1

0

0

16

1

0

1

32

1

1

0

64

1

1

1

128


Таблица 5 – Формат регистра ADMUX для ADC0

Бит

7

6

5

4

3

2

1

0




REFS1

REFS0

ADLAR

MUX4

MUX3

MUX2

MUX1

MUX0




0

1

1

0

0

0

0

0

REFS1 и REFS0 – определяют источник опорного напряжения согласно таблице 6;

ADLAR – выравнивание результата преобразования (1 – влево, 0 – вправо);

MUX4 – MUX0 – определяют входной канал согласно таблице 7.
Таблица 6 – Выбор источника опорного напряжения

REFS1

REFS0

Источник опорного напряжения

0

0

Внешний источник, подключенный к выводу AREF. Внутренний источник отключен.

0

1

Напряжение питания AVcc

1

0

Зарезервировано

1

1

Внутренний источник напряжением 2,56 В


Таблица 7 – Выбор канала АЦП

MUX4

MUX3

MUX2

MUX1

MUX0

Несимметричный вход

0

0

0

0

0

ADC0

0

0

0

0

1

ADC1

0

0

0

1

0

ADC2

0

0

0

1

1

ADC3

0

0

1

0

0

ADC4

0

0

1

0

1

ADC5

0

0

1

1

0

ADC6

0

0

1

1

1

ADC7



Программа представлена в таблице 8.
Таблица 8 – Программа для ATmega128L

 

Мнемокод

Название команд

 

.include "m128def.inc"

 

 

.def temp=r16;

 

 

.def vds=r17;

 

 

.equ KM1b=pd4;

Блок-контакт контактора КМ1

 

.equ KM2b=pd5;

Блок-контакт контактора КМ2

;( пусковая ступень)

 

.equ KM3b=pd6;

;Блок-контакт контактора КМ3 ;(контактор динамического ;торможения)

 

.equ KL1=0b00000001;

Включение KL1

 

.equ KL2=0b00000011;

Включение KL1, KL2

 

.equ KL3=0b00000100;

Включение KL3

 

.cseg

 

 

.org $0000




 

rjmp start;




 

.org $0002;

Адрес вектора прерывания от INT0 (кнопки «пуск»)

 

rjmp INT0_P;




 

.org $0004;

 Адрес вектора прерывания от INT1 (кнопки «стоп»)

 

rjmp INT1_S;




 

.org $0018;

 Адрес вектора прерывания от Т1 по ;совпадению канала А


Продолжение таблицы 8

 

rjmp OC1A_T;







reti




start:

ldi temp, low (RAMEND);

Инициализация стека

 

out spl, temp;

 

 

ldi temp, high (RAMEND);

 

 

out sph, temp;

 

 

ldi temp, $FF;

Настройка портов B на вывод




out DDRB, temp;

 




out PORTD, temp;







sts PORTF, temp;




 

ldi temp, $00;

Настройка портов D и F на ввод

 

out DDRD, temp;

 

 

sts DDRF, temp;

 

 

ldi temp, 0b00001010;

Настройка прерываний от внешних источников

 

sts EICRA, temp;

INT0, INT1 по спадающему фронту

 

ldi temp, 0b00000011;

Разрешить прерывание от внешних

 

out EIMSK, temp;

источников INT0, INT1

 

ldi temp, high(62500);

загрузка в регистр сравнения канала А

 

out OCR1AH, temp;

Т1 числа,

 

ldi temp, low(62500);

 соответствующего выдержки времени

 

out OCR1AL, temp;

в 0,5 с

 

ldi temp, 0b00010000;

Разрешить прерывание от Т1 по

 

out TIMSK, temp;

совпадению канал А




sei;

Разрешить все прерывания

M1:

sbic PIND, KM1b;

Проверка включения контактора КМ1

 

rjmp M1;

 

 

ldi r19, KL2;




 

ldi temp, 0b00001011;

Т1 в режиме СТС канал А CLK/64

 

out TCCR1B, temp;

 

M2:

sbic PIND, KM2b;

Проверка включения контактора КМ2

 

rjmp M2;

 


Окончание таблицы 8




ldi temp,0;

остановить таймер




out TCCR1B, temp;




M4:

sbic PIND, KM3b;

Проверка включения контактора КМ3

 

rjmp M4

 

M7:

ldi temp, 0b01100000;

Настройка АЦП (выравнивание влево,

 

out ADMUX, temp;

вход PF0, Uоп=Uпит)

 

ldi temp, 0b11000101;

Запуск АЦП (kдел=32)

 

out ADCSRA, temp;

 

M6:

sbis ADCSRA, ADIF;

Проверка окончания работы АЦП

 

rjmp M6;

 




sbi ADCSRA, ADIF;

сброс флага ADIF

 

in vds, ADCH;

Запись результата преобразования ;АЦП с ДС в регистр данных

 

cpi vds, $00;

Сравнение с 0

 

brne M7;

Если результат ≠ 0, то переход на М7

 

ldi temp, $00;

Отключение всех промежуточных реле

 

out PORTB, temp;

 

M8:

sbis PIND, KM3b;

Проверка отключения КМ3

 

rjmp M8

 

 

rjmp M1

 

 

 

 

INT0_P:

ldi temp, KL1;

Включение КL1

 

out PORTB, temp;

 

 

reti

 

OC1A_T:

out PORTB, r19;

Включение КL1, KL2




reti

 

INT1_S:

ldi temp, KL3;

Включение КL3

 

out PORTB, temp;

 

 

reti

 



 Для AVR Studio 4

.include "m128def.inc"  

  .def temp=r16;  

  .defvds=r17;  

  .equKM1b=pd4; Блок-контакт контактора КМ1

  .equ KM2b=pd5; Блок-контакт контактора КМ2

;( пусковая ступень)

  .equ KM3b=pd6; ;Блок-контакт контактора КМ3 ;(контактор динамического ;торможения)

  .equ KL1=0b00000001; Включение KL1

  .equ KL2=0b00000011; Включение KL1, KL2

  .equ KL3=0b00000100; Включение KL3

  .cseg  

  .org $0000

  rjmp start;

  .org $0002;Адрес вектора прерывания от INT0 (кнопки «пуск»)

  rjmp INT0_P;

  .org $0004; Адрес вектора прерывания от INT1 (кнопки «стоп»)

  rjmp INT1_S;

  .org $0018;  Адрес вектора прерывания от Т1 по

; совпадению канала А

  rjmpOC1A_T;

reti

start: ldi temp, low (RAMEND); Инициализация стека

  out spl, temp;  

  ldi temp, high (RAMEND);  

  out sph, temp;  

  ldi temp, $FF; Настройка портов B на вывод

out DDRB, temp;  

out PORTD, temp;

stsPORTF, temp;

  ldi temp, $00; Настройка портов D и F на ввод

  out DDRD, temp;  

  sts DDRF, temp;  

  ldi temp, 0b00001010; Настройка прерываний от внешних ;источников

  sts EICRA, temp; INT0, INT1 по спадающему фронту

  ldi temp, 0b00000011; Разрешить прерывание от внешних ;источников

  out EIMSK, temp; INT0, INT1

  ldi temp, high(62500); загрузка в регистр сравнения канала А

  out OCR1AH, temp; Т1 числа,

  ldi temp, low(62500);  соответствующего выдержки времени

  out OCR1AL, temp; в 0,5 с

  ldi temp, 0b00010000; Разрешить прерывание от Т1 по

  out TIMSK, temp; совпадению канал А

sei; Разрешить все прерывания

M1: sbic PIND, KM1b; Проверка включения контактора КМ1

  rjmp M1;  

  ldi r19, KL2;

  ldi temp, 0b00001011; Т1 в режиме СТС канал А CLK/64

  out TCCR1B, temp;  

M2: sbic PIND, KM2b; Проверка включения контактора КМ2

  rjmp M2;  

  ldi temp,0; остановить таймер

out TCCR1B, temp;

M4: sbic PIND, KM3b; Проверка включения контактора КМ3

  rjmp M4

M7: ldi temp, 0b01100000; Настройка АЦП (выравнивание влево,

  out ADMUX, temp; вход PF0, Uоп=Uпит)

  ldi temp, 0b11000101; Запуск АЦП (kдел=32)

  outADCSR, temp;  

M6: sbisADCSR, ADIF; Проверка окончания работы АЦП

  rjmp M6;

sbiADCSR, ADIF; сброс флагаADIF 

  in vds, ADCH; Запись результата преобразования

;АЦП с ДС в регистр данных

  cpi vds, $00; Сравнение с 0

  brne M7; Если результат ≠ 0, то переход на М7

  ldi temp, $00; Отключение всех промежуточных реле

  out PORTB, temp;  

M8: sbis PIND, KM3b; Проверка отключения КМ3

  rjmp M8  

  rjmp M1  

   

INT0_P: ldi temp, KL1; Включение КL1

  out PORTB, temp;  

  reti  

OC1A_T: out PORTB, r19; Включение КL1, KL2

reti  

INT1_S: ldi temp, KL3; Включение КL3

  out PORTB, temp;  

  reti  
После компиляции программы увидим сообщение.


Из сообщения следует, что машинный код программы занимает 84 слова (168 байт).


написать администратору сайта