Микропроцессорные системы
Обработка информации, поступающей с дискретных датчиков. Реализация с использованием команд условных переходов и битовых операций. Управление технологическим параметром в заданных пределах. Алгоритм гибкого управления объектом. Таблица портов и адресов.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 13.01.2015 |
Размер файла | 5,5 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru
Размещено на http://www.allbest.ru
МИНОБР НАУКИ РОССИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ
УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
Отчет по курсовой работе
по дисциплине
«Микропроцессорные системы»
Вариант 15
Выполнил: студент гр. 9306
Шемякин А.В.
Проверил:Петров Г.А.
2013
Оглавление
1. Структурная схема микроконтроллерной системы управления
2. Схема подключения МК
3. Оценки характеристик разработанной МКС
4. Обработка информации, поступающей с дискретных датчиков
4.1 Реализация с использованием команд условных переходов
4.2 Реализация с использованием команд битовых операций
4.3 Реализация табличным способом
4.4 Результаты оценки времени
5. Обработка информации, поступающей с аналоговых датчиков
6. Управление пуском - остановом электродвигателя
7. Управление технологическим параметром в заданных пределах
8. Обработка запроса прерываний
9. Алгоритм гибкого управления объектом
10. Таблица портов и адресов
11. Временная оценка
12. Исходный текст программы
1. Структурная схема микроконтроллерной системы управления
Размещено на http://www.allbest.ru
Размещено на http://www.allbest.ru
Рисунок 1. Структурная схема МКС
МКС принимает множество информационных сигналов об объекте управления: цифровых {X} и аналоговых {U} от соответственно цифровых (ДД) и аналоговых датчиков {АД}, вырабатывает множество управляющих сигналов {Y} в соответствии с законом управления и выводит их в исполнительные механизмы (ИМ). Закон управления реализуется микроконтроллером на основе сигналов {X} и {U} от ОУ и информации с пульта управления (ПУ). МК содержит основные модули, обеспечивающие выполнение программ управления объектом, хранение данных, а также периферийные модули для подключения датчиков и исполнительных механизмов.
С помощью ПУ оператор получает возможность управлять работой МКС: запускать и останавливать ее, загружать в контроллер значения некоторых установок (констант), выводить на индикаторы информацию о состоянии объекта и т.п.
С помощью последовательного канала связи (ПсК) МК может передавать обработанную информацию персональному компьютеру (ПК) более высокого уровня по запросу от него.
2. Схема подключения МК
Рисунок 2. Схема подключения МК
L1, L2 - датчики уровня воды.
Дн - датчик напряжения
ДД:
X1, X2, X3, X4 - входы с дискретных датчиков.
АД: информация дискретная алгоритм
U1, U2, - входы с аналоговых датчиков.
T1, T2, T3 - входы с датчиков температуры
ПУ включает в себя:
1. Матрицу кнопок, включающую: числовую шестнадцатеричную панель для ввода К, кнопку Ввод для занесения введенного K в память, кнопки Пуска и Остановки электродвигателя, тумблер Останова.
Схема расположения кнопок:
Рисунок 3. Схема кнопок
В не нажатом состоянии кнопки подтянуты к питанию.
Для ввода К необходимо ввести две тетрады (ввод осуществляется нажатием на соответствующую клавишу, при этом старшая тетрада заменяется на младшую, а выбранное значение заносится в младшую), после чего нажать на клавишу “Ввод”.
При нажатии на “Пуск двиг”, осуществляется запуск электродвигателя, при нажатии на “Ост. двиг” - его остановка.
При переключения тумблера в состояние “Ост.” осуществляется приостановка работы МК. В режиме остановки МК перестает обрабатывать информацию с датчиков, при этом сохраняется возможность ввода К с ПУ, и возможность работы с терминалом. Обратное переключение возвращает систему в нормальный режим работы.
2. Кнопку “Сброса”, заведенную на вход Reset МК. При нажатии
на вход Reset подается логическая единица.
3. Зуммер.
Внешний сдвиговый регистр:
Используется для вывода необходимого количества управляющих сигналов в условиях нехватки выводов МК.
Вход D регистра используется для передачи бит.
По положительному фронту входа Sh осуществляется сдвиг регистра на один разряд и занесение в младший логического состояния на входе D.
По положительному фронту на входе St состояние разрядов внутри регистра передается на внешние выводы.
Т.к. вывод на сдвиговый регистр занимает довольно длительное время (~50 мкс) к его выходам не заведены сигналы требующие малого времени переключения (так Y2, Y6 подключены к выводам МК, т.к. на них необходимо выдавать импульсы длительностью 20 мкс и 30 мкс соответственно). Состояние регистра отображается в памяти МК, и при изменении состояние сначала изменяется значение в памяти, а затем осуществляется вывод в регистр.
Терминал:
Через терминал можно осуществляться вывод информации о состоянии системы (K; Q; Tmin, Tmax, Tsr; x1, x2, x3, x4; L1, L2), а также ввод новых значений констант (K; Q; Tmin, Tmax).
3. Оценки характеристик разработанной МКС
а) максимального времени реализации одного цикла управления (от пуска системы до окончания однократной реализации заданного алгоритма ). Время реализации определяется симулятором микроконтроллера автоматически при выполнении программы.
б) емкости памяти данных и памяти программ (в байтах), необходимые для реализации разработанных программ, оценивается студентом самостоятельно.
Для реализации разработанной программы необходимо: 26 байт памяти данных + память для стека, и 1867 байт памяти программ.
4. Обработка информации, поступающей с дискретных датчиков
МКС опрашивает двоичные датчики Х1, …, Хn и вычисляет логическую (булеву) функцию Y1= f(Х1, …, Хn) в соответствии с вариантом задания. При единичном значении функции МКС вырабатывает в исполнительный механизм (ИМ) выходной сигнал Y1 = 1 заданной длительности t1. Это означает, что через t1 после выдачи единичного сигнала Y1 необходимо выработать нулевое значение сигнала Y1. Логическую функцию требуется реализовать тремя вариантами и сделать выбор при оформлении проекта в пользу самого экономичного:
с использованием команд условных переходов;
с использованием команд битовых операций;
табличным способом.
Номер варианта |
Функция y1 = f(x1, …, xn) |
Время t1, мкс. |
|
15 |
/x1/x2x3 x4 |
60 |
Таблица истинности функции:
X4 |
X3 |
X2 |
X1 |
Y |
|
0 |
0 |
0 |
0 |
0 |
|
0 |
0 |
0 |
1 |
0 |
|
0 |
0 |
1 |
0 |
0 |
|
0 |
0 |
1 |
1 |
0 |
|
0 |
1 |
0 |
0 |
1 |
|
0 |
1 |
0 |
1 |
0 |
|
0 |
1 |
1 |
0 |
0 |
|
0 |
1 |
1 |
1 |
0 |
|
1 |
0 |
0 |
0 |
1 |
|
1 |
0 |
0 |
1 |
1 |
|
1 |
0 |
1 |
0 |
1 |
|
1 |
0 |
1 |
1 |
1 |
|
1 |
1 |
0 |
0 |
1 |
|
1 |
1 |
0 |
1 |
1 |
|
1 |
1 |
1 |
0 |
1 |
|
1 |
1 |
1 |
1 |
1 |
4.1 Реализация с использованием команд условных переходов
Алгоритм реализации:
исунок 4.
Код на ASM:
$mod812
PortX data 20h
PortY data 21h
mov A, PortX
mov TMOD, #00000001B
mov TL0, #11000100B
mov TH0, #00000000
rlc A
jc m_set
rlc A
jnc m_clr
rlc A
jc m_clr
rlc A
jc m_clr
m_set:
setb PortY.0
jmp m_next
SETB TCON.4
m_clr:
clr PortY.0
m_next:
end
Рисунок 5.
4.2 Реализация с использованием команд битовых операций
Алгоритм реализации:
Рисунок 6.
Код на ASM:
$mod812
PortX data 20h
PortY data 21h
mov TMOD, #00000001B
mov TL0, #11000100B
mov TH0, #00000000
mov C, PortX.6
anl C, /PortX.4
anl C, /PortX.5
orl C, PortX.7
jnc m_clr
m_set:
setb PortY.0
SETB TCON.4
jmp m_next
m_clr:
clr PortY.0
m_next:
end
Рисунок 7.
4.3 Реализация табличным способом
Алгоритм реализации:
Рисунок 8.
Код на ASM:
$mod812
jmp Start
PortX data 20h
PortY data 21h
Y_Value:
db 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1
mov R0, #30h
mov A, #00h
mov TMOD, #00000001B
mov TL0, #11000100B
mov TH0, #00000000B
movA, PortX
swapA
anlA, #0fh
addA, #40h
movR1, A
cjne@R1, #01h, m_clr
m_set:
setb PortY.0
jmp m_next
SETB TCON.4
m_clr:
clr PortY.0
m_next:
end
Рисунок 9.
4.4 Результаты оценки времени
Время измерялось от начала запуска программы до Breakpoint установленного на последней команде.
Способ с использованием команд условных переходов: 321 мкс
Способ с использованием команд битовых операций : 383 мкс
Табличный способ : 334 мкс
Таким образом самый экономичный с точки зрении времени выполнения способ с использованием команд условных переходов.
5. Обработка информации, поступающей с аналоговых датчиков
Сигналы с аналоговых датчиков U1 и U2 преобразуются в цифровую форму в АЦП в 8-разрядные коды, представляющие целые числа без знака и поступают на обработку в МП контроллера. Величина K - 8-разрядный код, поступающий в контроллер с клавиатуры пульта управления.
Полученное значение функции Nu = f(Nu1, Nu2, K) сравнивается с константой Q, хранящейся в РПД и в зависимости от результатов сравнения МКС вырабатывает двоичные управляющие воздействия y2 или y3 длительностью t2 или t3 соответственно.
Номер варианта |
Функция Nu = f(Nu1, Nu2, K) |
Время t2, мкс. |
Время t3, мкс. |
|
15 |
min(Nu1; Nu2+K) |
20 |
140 |
Алгоритм реализации:
Рисунок 10.
Код на ASM:
$mod812
Start:
movADCCON2, #10h
callAdc_Wait
movNu1, A; Значение с первого датчика
movADCCON2, #11h
callAdc_Wait
movNu2, A; Значение со второго датчика
; Реализация функции min (Nu1, Nu2 + K)
clrC
addA, K
movR0, A
subbA, Nu1
jca_Nu1
movA, R0; Nu2 + K < Nu1
jmpa_Next
a_Nu1:
clr C
mov A, Nu1; Nu1 < Nu2 + K
a_Next:
; Сравнение min значения с Q
subbA, Q
jca_Q
; Q < min
setbY3
; Запуск таймера
movTH0, #11101100b
movTL0, #01110100b
setbTCON.4
jmpa_Exit
a_Q:
; Q > min
setb Y2
call wait_20us
clrY2
wait_20us:
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
jmp Start
a_Exit:
end
Временная оценка: 182мкс
Рисунок 11.
6. Управление пуском - остановом электродвигателя
В МКС необходимо реализовать управление, контроль напряжения силовой сети и выдачу сигнала для включения или выключения двигателя.
Рисунок 12. Схема управления функцией пускателя электропривода
Алгоритм реализации:
Рисунок 13.
Код на ASM:
$mod812
jnbM_usensor, m_Stop ; Нет питания-> остановка
jnbM_stop_key_press,m_Stop ; Нажата кнопка остановки-> остановка
jbM_start_key_press,m_Exit ; Кнопка пуска отпущена -> состояние
не изменяется
; Запуск двигателя
setbM_control
jmpm_Exit
m_Stop:
; Остановка двигателя
clrM_control
end
Рисунок 14.
Временная оценка: 56мкс
7. Управление технологическим параметром в заданных пределах
Необходимо обеспечить поддержание значения параметра, температуры среды в заданных пределах (Тmin - Тmax).
Обработка данных заключается в следующем. Введенные с m датчиков значения параметров (m=3) запоминаются в виде массива в ячейках области ввода памяти данных контроллера. Далее требуется вычислить среднее значение температуры: Tср = ?Ti/m , где m - количество параметров температур Ti. После определения Tср необходимо ее сравнить с Tmin и Tmax и сформировать на линиях выбранного выходного порта контроллера соответствующие УС, например Y4 и Y5, поступающие в ИМ «Охладитель среды» и «Нагреватель среды» соответственно, подключенные к данным линиям выходного порта.
Алгоритм реализации:
Рисунок 15.
Код на ASM:
$mod812
movADCCON2, #12h
callAdc_Wait
mov(Tm+0), A; Значение температуры с первого датчика
movADCCON2, #13h
callAdc_Wait
mov(Tm+1), A; Значение температуры со второго датчика
movADCCON2, #14h
callAdc_Wait
mov(Tm+2), A; Значение температуры с третьего датчика
; Инициализация регистров используемых в цикле
movR0, #03h
movR1, #Tm
movR2, #00h
; Цикл обработки массива из 3 элементов (нахождение среднего арифметического)
t_Loop:
movA, @R1
movB, #03h
divAB
addA, R2
movR2, A
incR1
djnzR0, t_Loop
movTsr, A; Занесение полученного значения в память
; Сравнение средней температуры с граничными значениями
clrC
subbA, Tmin
jct_Low; Температура ниже нормы
clrC
movA, Tsr
subbA, Tmax
jnct_Hi; Температура выше нормы
clrY4; Выключили охладитель
clrY5; Выключили нагреватель
jmpt_Exit
t_Low:
clrY4; Выключили охладитель
setbY5; Включили нагреватель
jmpt_Exit
t_Hi:
setbY4; Включили охладитель
clrY5; Выключили нагреватель
t_Exit:
end
Рисунок 16.
Временная оценка: 238мкс
8. Обработка запроса прерываний
МПС обрабатывает запросы прерывания двух приоритетных уровней.
Запрос на прерывание по сигналу отказа источника питания. Прерывания работы МПС при отказе источника питания имеют высший приоритет. МПС при этом вырабатывает выходной сигнал Y6 установки объекта управления в исходное состояние. Сигнал Y6 представляет собой два прямоугольных импульса длительностью 30 мкс, следующие с интервалом в 30 мкс. После выполнения указанных действий требуется контроллер перевести в ждущий режим. Ждущий режим моделируется бесконечным циклом, выход из которого возможен только при нажатии кнопки “Сброс”, подключенной ко входу Reset МК.
Запрос на прерывание по сигналу аварийного датчика. Прерывания от сигнала аварийного датчика включают на пульте управления аварийную сигнализацию (звуковая 500 Гц) и обеспечивают выдачу в область связи с ПК сигналов дискретных датчиков x1, …, x4, среднего значения Тср (задача 1.5), значения констант K и Q, значение датчиков L1, L2 (см. 1.7). После выполнения указанных действий требуется контроллер перевести в ждущий режим.
Алгоритм реализации:
Прерывание по сигналу отказа источника питания:
1. Импульсы длительностью 30 мкс реализуются программным образом.
3. Переход в ждущий режим.
Прерывание по сигналу аварийного датчика:
1. Запускается таймер управляющий звуковой сигнализацией
(прерывания таймера более приоритетные чем прерывание по сигналу аварийного датчика).
2. Осуществляется передача в последовательный канал связи информации о состоянии системы.
3. Переход в ждущий режим.
Код на ASM:
$mod812
int_Ext0:
; Прерывание по сигналу отказа источника питания
setb Y6
mov R7, #14
pause_set0:
djnz R7, pause_set0
clr Y6
mov R7, #14
pause_clr:
djnz R7, pause_clr
setb Y6
mov R7, #14
pause_set1:
djnz R7, pause_set1
clr Y6
jmp Wait_Regim
int_Timer0:
pushAcc
pushPSW
clrTCON.4
callSend_Port_Value
clrFBusyPort
popPSW
popAcc
reti
int_Ext1:
setbET2
setbPT2
setbTR2
movRCAP2H, #0f8h
movRCAP2L, #030h
movTH2,#0f8h
movTL2,#030h
clrDSR
iE1_Wait:
jbDTR, iE1_Wait
callShowe_Info
setbDSR
jmp wait_regim
int_Timer1:
pushAcc
pushPSW
jnbPump1, it1_next0
; 1 насос работает
movA, (PTime1+3)
addA, #01h
mov(PTime1+3), A
jncit1_next0
movA, (PTime1+2)
addA, #01h
mov(PTime1+2), A
jncit1_next0
movA, (PTime1+1)
addA, #01h
mov(PTime1+1), A
jncit1_next0
movA, (PTime1+0)
addA, #01h
mov(PTime1+0), A
it1_next0:
jnbPump2, it1_next1
; 2 насос работает
movA, (PTime2+3)
addA, #01h
mov(PTime2+3), A
jncit1_next1
movA, (PTime2+2)
addA, #01h
mov(PTime2+2), A
jncit1_next1
movA, (PTime2+1)
addA, #01h
mov(PTime2+1), A
jncit1_next1
movA, (PTime2+0)
addA, #01h
mov(PTime2+0), A
it1_next1:
popPSW
popAcc
reti
int_Timer2:
pushAcc
pushPSW
clrTF2
cplBuzzer
movPort, Port_tmp
callSend_Port_Value
popPSW
popAcc
reti
wait_regim:
jmp wait_regim
end
Рисунок 17.
Временная оценка: 129мкс
9. Алгоритм гибкого управления объектом
Данный алгоритм должен обеспечить закон гибкого управления по состоянию объекта. Требуется разработать алгоритм и программу управления насосной станцией осушительной системы, состоящей из двух насосных агрегатов Р1 и Р2 и двух датчиков контроля уровня воды. Насосы работают по следующему закону управления объектом:
датчик L1 - при L1=0 насосы не включаются, а при L1=1 включается насос, имеющий меньшее количество наработанных часов;
датчик L2 - данный датчик срабатывает при дальнейшем повышении уровня воды, при L2=1 включается второй насос и начинают работать уже оба насоса. При L2=0, т.е. понижении уровня воды, один из насосов выключается и продолжает работать насос с меньшим количеством наработанных часов, т.е. требуется обеспечить подсчет и сравнение времени работы насосов. Когда уровень воды понизится и L1=0, то последний работающий насос также выключается.
Время работы насосов подсчитывается с помощью таймера. Таймер установлен на максимально длительное время. По прерываниИ для работающего насоса на единицу увеличивается наработанное время.
Алгоритм реализации:
Рисунок 18.
Пример кода на ASM:
$mod812
jbPump1, n_Proverka
jbPump2, n_P2
; Насосы отключены
jnbL2, n_State0
setbPump1
setbPump2
jmpn_Exit
n_State0:
jnbL1, n_Exit
; Выбор насоса для включения
movA, (PTime1+3)
cjneA, (PTime2+3), n_select0
movA, (PTime1+2)
cjneA, (PTime2+2), n_select0
movA, (PTime1+1)
cjneA, (PTime2+1), n_select0
movA, (PTime1+0)
cjneA, (PTime2+0), n_select0
n_select0:
jcn_onP10
setbPump2; 2 насос отработал меньше -> включение
jmpn_Exit
n_onP10:
setbPump1; 1 насос отработал меньше -> включение
jmpn_Exit
n_Proverka:
jnbPump2, n_P1
; Работают оба насоса
jbL1,n_State1
clrPump1
clrPump2
jmpn_Exit
n_State1:
jbL2, n_Exit
; Выбор насоса для отключения
movA, (PTime1+3)
cjneA, (PTime2+3), n_select1
movA, (PTime1+2)
cjneA, (PTime2+2), n_select1
movA, (PTime1+1)
cjneA, (PTime2+1), n_select1
movA, (PTime1+0)
cjneA, (PTime2+0), n_select1
n_select1:
jcn_onP11
clrPump1; 1 насос отработал больше -> выключение
jmpn_Exit
n_onP11:
clrPump2; 2 насос отработал меньше -> выключение
jmpn_Exit
n_P1:
; Работает 1 насос
jbL1, n_State2
clrPump1
jmpn_Exit
n_State2:
jnbL2, n_Exit
setbPump2
jmpn_Exit
n_P2:
; Работает 2 насос
jbL1, n_State3
clrPump2
jmpn_Exit
n_State3:
jnbL2, n_Exit
setbPump1
jmpn_Exit
n_Exit:
end
Рисунок 19.
Временная оценка: 327мкс
10. Таблица портов и адресов
Порт/адрес |
Функция |
|
P0.0 |
key_line_1 |
|
P0.1 |
key_line_2 |
|
P0.2 |
key_line_3 |
|
P0.3 |
key_line_4 |
|
P0.4 |
X1 |
|
P0.5 |
X2 |
|
P0.6 |
X3 |
|
P0.7 |
X4 |
|
P1.0 |
U1 |
|
P1.1 |
U2 |
|
P1.2 |
T1 |
|
P1.3 |
T2 |
|
P1.4 |
T3 |
|
P1.5 |
L1 |
|
P1.6 |
L2 |
|
P1.7 |
u_motor_sensor |
|
P2.0 |
key_column_1 |
|
P2.1 |
key_column_2 |
|
P2.2 |
key_column_3 |
|
P2.3 |
key_column_4 |
|
P2.4 |
key_column_5 |
|
P2.5 |
Out_data |
|
P2.6 |
Out_sh |
|
P2.7 |
Out_st |
|
P3.0 |
- |
|
P3.1 |
- |
|
P3.2 |
INT0 |
|
P3.3 |
INT1 |
|
P3.4 |
DSR |
|
P3.5 |
DTR |
|
P3.6 |
Y6 |
|
P3.7 |
Y2 |
|
0x20 |
key_old |
|
0x21 |
key_old |
|
0x22 |
key_old |
|
0x23 |
key_old |
|
0x24 |
K_tmp |
|
0x25 |
Port |
|
0x26 |
Port_tmp |
|
0x27 |
Flags |
|
0x30 |
K |
|
0x31 |
Q |
|
0x32 |
Tmin |
|
0x33 |
Tmax |
|
0x34 |
Tm (массив) |
|
0x35 |
Tm |
|
0x36 |
Tm |
|
0x37 |
Tsr |
|
0x38 |
Nu1 |
|
0x39 |
Nu2 |
|
0x40 |
PTime1 - 4 байта |
|
0x44 |
Ptime2 - 4 байта |
11. Временная оценка
Время выполнения отдельных частей кода
Подпрограмма |
Время |
|
Подготовка, инициализация |
27 мкс |
|
Чтение клавиатуры |
45 мкс |
|
Выполнение символа с клавиатуры |
8 мкс |
|
Запуск АЦП |
41 мкс |
|
Обработка датчиков ДД |
18 мкс |
|
Обработка аналоговых датчиков |
33 мкс |
|
Управление двигателем |
14 мкс |
|
Обработка значений температуры |
39 мкс |
|
Всего |
225 мкс |
12. Исходный текст программы
$mod812
;============ Распределение портов ============
; P0.0 - key_line_1
; P0.1 - key_line_2
; P0.2 - key_line_3
; P0.3 - key_line_4
key_linedataP0
; P0.4 - X1
X1bitP0.4
; P0.5 - X2
X2bitP0.5
; P0.6 - X3
X3bitP0.6
; P0.7 - X4
X4bitP0.7
; P1.0 - U1 (Analog in)
; P1.1 - U2 (Analog in)
; P1.2 - T1 (Analog in)
; P1.3 - T2 (Analog in)
; P1.4 - T3 (Analog in)
; P1.5 - L1
L1bitP1.5
; P1.6 - L2
L2bitP1.6
; P1.7 - u_motor_sensor
M_usensorbitP1.7
; P2.0 - key_column_1
; P2.1 - key_column_2
; P2.2 - key_column_3
; P2.3 - key_column_4
; P2.4 - key_column_5
key_portdataP2
; P2.5 - Out_data
Out_databitP2.5
; P2.6 - Out_sh
Out_shbitP2.6
; P2.7 - Out_st
Out_stbitP2.7
; P3.0 -
; P3.1 -
; P3.2 - INT0
; P3.3 - INT1
; P3.4 - DSR
DSRbitP3.4
; P3.5 - DTR
DTRbitP3.5
; P3.6 - Y6
Y6bitP3.6
; P3.7 - Y2
Y2bitP3.7
;======== Распределение адресов памяти ========
key_olddata20h ; Занимает адреса 20h-23h
M_start_key_pressbit22h.3
M_stop_key_pressbit22h.4
stop_key_pressbit23h.4
K_tmpdata24h
Portdata25h
Port_tmpdata26h
Y1bitPort_tmp.0
Y3bitPort_tmp.1
Y4bitPort_tmp.2
Y5bitPort_tmp.3
BuzzerbitPort_tmp.4
Pump1bitPort_tmp.5
Pump2bitPort_tmp.6
M_controlbit Port_tmp.7
Flagsdata27h
FBusyPortbitFlags.0
; Технологические константы и переменные
Kdata30h
Qdata31h
Tmindata32h
Tmaxdata33h
Tmdata34h; Массив из 3-х элементов (адреса 34h-36h)
Tsrdata37h
Nu1data38h
Nu2data39h
PTime1data40h; Занимает 4 байта (40h - 43h)
PTime2data44h; Занимает 4 байта (44h - 47h)
jmp Init
;======== Вектора обработка прерываний ========
org 03h
jmp int_Ext0
org 0bh
jmp int_Timer0
org 13h
jmp int_Ext1
org 1bh
jmp int_Timer1
org 2bh
jmp int_Timer2
org 50h
;========== Начальная инициализация ===========
Init:
; Setup stack pointer
mov SP, #0c0h
; Init Pins
movkey_line, #0ffh; P0
movkey_port, #1fh; P2
movP1, #00h
movP3,#00h
; Enable Interrupt
movIE,#8fh
; Init Ext0, Ext1
setbPX0
movTCON, #05h
; Init ADC
movADCCON1, #44h ;#7ch
; Init Timer
movTMOD, #11h
setbTCON.6
; Init Uart
setbREN
setbDSR
setbDTR
Main:
============Обработка информации с дискретных датчиков==============
mov A, P0
rlc A
jc d_Set
rlc A
jnc d_Clr
rlc A
jc d_Clr
rlc A
jc d_Clr
d_Set:
setb Y1
movPort, Port_tmp
callSend_Port_Value
clrY1
movPort, Port_tmp
; Запуск таймера
movTH0, #11000100B
movTL0, #00000001B
setbTCON.4
setbFBusyPort
jmp d_Exit
d_Clr:
clrY1
d_Exit:
===============Обработка информации с аналоговых датчиков===============
movADCCON2, #10h
callAdc_Wait
movNu1, A; Значение с первого датчика
movADCCON2, #11h
callAdc_Wait
movNu2, A; Значение со второго датчика
; Реализация функции min (Nu1, Nu2 + K)
clrC
addA, K
movR0, A
subbA, Nu1
jca_Nu1
movA, R0; Nu2 + K < Nu1
jmpa_Next
a_Nu1:
clr C
mov A, Nu1; Nu1 < Nu2 + K
a_Next:
; Сравнение min значения с Q
subbA, Q
jca_Q
; Q < min
setbY3
; Запуск таймера
movTH0, #11101100b
movTL0, #01110100b
setbTCON.4
jmpa_Exit
a_Q:
; Q > min
setb Y2
call wait_20us
clrY2
wait_20us:
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
a_Exit:
=======Управление технологическим параметром в заданных пределах==============
movADCCON2, #12h
callAdc_Wait
mov(Tm+0), A; Значение температуры с первого датчика
movADCCON2, #13h
callAdc_Wait
mov(Tm+1), A; Значение температуры со второго датчика
movADCCON2, #14h
callAdc_Wait
mov(Tm+2), A; Значение температуры с третьего датчика
; Инициализация регистров используемых в цикле
movR0, #03h
movR1, #Tm
movR2, #00h
; Цикл обработки массива из 3 элементов (нахождение среднего арифметического)
t_Loop:
movA, @R1
movB, #03h
divAB
addA, R2
movR2, A
incR1
djnzR0, t_Loop
movTsr, A; Занесение полученного значения в память
; Сравнение средней температуры с граничными значениями
clrC
subbA, Tmin
jct_Low; Температура ниже нормы
clrC
movA, Tsr
subbA, Tmax
jnct_Hi; Температура выше нормы
clrY4; Выключили охладитель
clrY5; Выключили нагреватель
jmpt_Exit
t_Low:
clrY4; Выключили охладитель
setbY5; Включили нагреватель
jmpt_Exit
t_Hi:
setbY4; Включили охладитель
clrY5; Выключили нагреватель
t_Exit:
===========Управление пуском - остановом электродвигателя===============
jnbM_usensor, m_Stop ; Нет питания-> остановка
jnbM_stop_key_press,m_Stop ; Нажата кнопка остановки-> остановка
jbM_start_key_press,m_Exit ; Кнопка пуска отпущена -> состояние
не изменяется
; Запуск двигателя
setbM_control
jmpm_Exit
m_Stop:
; Остановка двигателя
clrM_control
m_Exit:
===============Алгоритм гибкого управления объектом====================
jbPump1, n_Proverka
jbPump2, n_P2
; Насосы отключены
jnbL2, n_State0
setbPump1
setbPump2
jmpn_Exit
n_State0:
jnbL1, n_Exit
; Выбор насоса для включения
movA, (PTime1+3)
cjneA, (PTime2+3), n_select0
movA, (PTime1+2)
cjneA, (PTime2+2), n_select0
movA, (PTime1+1)
cjneA, (PTime2+1), n_select0
movA, (PTime1+0)
cjneA, (PTime2+0), n_select0
n_select0:
jcn_onP10
setbPump2; 2 насос отработал меньше -> включение
jmpn_Exit
n_onP10:
setbPump1; 1 насос отработал меньше -> включение
jmpn_Exit
n_Proverka:
jnbPump2, n_P1
; Работают оба насоса
jbL1,n_State1
clrPump1
clrPump2
jmpn_Exit
n_State1:
jbL2, n_Exit
; Выбор насоса для отключения
movA, (PTime1+3)
cjneA, (PTime2+3), n_select1
movA, (PTime1+2)
cjneA, (PTime2+2), n_select1
movA, (PTime1+1)
cjneA, (PTime2+1), n_select1
movA, (PTime1+0)
cjneA, (PTime2+0), n_select1
n_select1:
jcn_onP11
clrPump1; 1 насос отработал больше -> выключение
jmpn_Exit
n_onP11:
clrPump2; 2 насос отработал меньше -> выключение
jmpn_Exit
n_P1:
; Работает 1 насос
jbL1, n_State2
clrPump1
jmpn_Exit
n_State2:
jnbL2, n_Exit
setbPump2
jmpn_Exit
n_P2:
; Работает 2 насос
jbL1, n_State3
clrPump2
jmpn_Exit
n_State3:
jnbL2, n_Exit
setbPump1
jmpn_Exit
n_Exit:
;========================= Отправка порта =========================
movPort, Port_tmp
jbFBusyPort, p_Exit
callSend_Port_Value
p_Exit:
;========================= Цикл остановки =========================
l_wait:
callUart_Process
callKey_Process; Опрос/Обработка клавиатуры
jnb stop_key_press, l_wait
jmp Main
; Ожидание получения значения с АЦП
Adc_Wait:
m_Adc:
movA, ADCCON3
rlc A
jcm_Adc
movA, ADCDATAH
anlA, #0fh
movR0, A
movA, ADCDATAL
anlA, #0f0h
orlA, R0
swapA
ret
; Отсылка значения порта на сдвиговый регистр
Send_Port_Value:
movA, Port
rrcA
movOut_data, C
setbOut_sh
rrcA
clrOut_sh
movOut_data, C
setbOut_sh
rrcA
clrOut_sh
movOut_data, C
setbOut_sh
rrcA
clrOut_sh
movOut_data, C
setbOut_sh
rrcA
clrOut_sh
movOut_data, C
setbOut_sh
rrcA
clrOut_sh
movOut_data, C
setbOut_sh
rrcA
clrOut_sh
movOut_data, C
setbOut_sh
rrcA
clrOut_sh
movOut_data, C
setbOut_sh
clrOut_sh
setbOut_st
nop
clrOut_st
ret
; Режим ожидания
Wait_Regim:
jmp Wait_Regim
===================Обработчики прерываний============================
int_Ext0:
; Прерывание по сигналу отказа источника питания
setb Y6
mov R7, #14
pause_set0:
djnz R7, pause_set0
clr Y6
mov R7, #14
pause_clr:
djnz R7, pause_clr
setb Y6
mov R7, #14
pause_set1:
djnz R7, pause_set1
clr Y6
jmp Wait_Regim
int_Timer0:
pushAcc
pushPSW
clrTCON.4
callSend_Port_Value
clrFBusyPort
popPSW
popAcc
reti
int_Ext1:
setbET2
setbPT2
setbTR2
movRCAP2H, #0f8h
movRCAP2L, #030h
movTH2,#0f8h
movTL2,#030h
clrDSR
iE1_Wait:
jbDTR, iE1_Wait
callShowe_Info
setbDSR
jmp wait_regim
int_Timer1:
pushAcc
pushPSW
jnbPump1, it1_next0
; 1 насос работает
movA, (PTime1+3)
addA, #01h
mov(PTime1+3), A
jncit1_next0
movA, (PTime1+2)
addA, #01h
mov(PTime1+2), A
jncit1_next0
movA, (PTime1+1)
addA, #01h
mov(PTime1+1), A
jncit1_next0
movA, (PTime1+0)
addA, #01h
mov(PTime1+0), A
it1_next0:
jnbPump2, it1_next1
; 2 насос работает
movA, (PTime2+3)
addA, #01h
mov(PTime2+3), A
jncit1_next1
movA, (PTime2+2)
addA, #01h
mov(PTime2+2), A
jncit1_next1
movA, (PTime2+1)
addA, #01h
mov(PTime2+1), A
jncit1_next1
movA, (PTime2+0)
addA, #01h
mov(PTime2+0), A
it1_next1:
popPSW
popAcc
reti
int_Timer2:
pushAcc
pushPSW
clrTF2
cplBuzzer
movPort, Port_tmp
callSend_Port_Value
popPSW
popAcc
reti
=====================Функция опроса/обработки клавиатуры==================
Key_Process:
mov A, K_tmp
; Опрос/Обработка 1 линии
xrlkey_line, #01h
movB, key_port
jbB.0, not_k1
jnb(key_old+0).0, not_k1
; Нажата клавиша 1
swapA
anlA, #0f0h
orlA, #01h
not_k1:
jbB.1, not_k2
jnb(key_old+0).1, not_k2
; Нажата клавиша 2
swapA
anlA, #0f0h
orlA, #02h
not_k2:
jbB.2, not_k3
jnb(key_old+0).2, not_k3
; Нажата клавиша 3
swapA
anlA, #0f0h
orlA, #03h
not_k3:
jbB.3, not_kC
jnb(key_old+0).3, not_kC
; Нажата клавиша C
swapA
anlA, #0f0h
orlA, #0ch
not_kC:
jbB.4, not_kD
jnb(key_old+0).4, not_kD
; Нажата клавиша D
swapA
anlA, #0f0h
orlA, #0dh
not_kD:
movkey_old+0, B
; Опрос/Обработка 2 линии
xrlkey_line, #03h
movB, key_port
jbB.0, not_k4
jnb(key_old+1).0, not_k4
; Нажата клавиша 4
swapA
anlA, #0f0h
orlA, #04h
not_k4:
jbB.1, not_k5
jnb(key_old+1).1, not_k5
; Нажата клавиша 5
swapA
anlA, #0f0h
orlA, #05h
not_k5:
jbB.2, not_k6
jnb(key_old+1).2, not_k6
; Нажата клавиша 6
swapA
anlA, #0f0h
orlA, #06h
not_k6:
jbB.3, not_kE
jnb(key_old+1).3, not_kE
; Нажата клавиша E
swapA
anlA, #0f0h
orlA, #0eh
not_kE:
jbB.4, not_kF
jnb(key_old+1).4, not_kF
; Нажата клавиша F
swapA
anlA, #0f0h
orlA, #0Fh
not_kF:
movkey_old+1, B
; Опрос/Обработка 3 линии
xrlkey_line, #06h
movB, key_port
jbB.0, not_k7
jnb(key_old+2).0, not_k7
; Нажата клавиша 7
swapA
anlA, #0f0h
orlA, #07h
not_k7:
jbB.1, not_k8
jnb(key_old+2).1, not_k8
; Нажата клавиша 8
swapA
anlA, #0f0h
orlA, #08h
not_k8:
jbB.2, not_k9
jnb(key_old+2).2, not_k9
; Нажата клавиша 9
swapA
anlA, #0f0h
orlA, #09h
not_k9:
movkey_old+2, B
; Опрос/Обработка 4 линии
xrlkey_line, #0ch
movB, key_port
jbB.0, not_kA
jnb(key_old+3).0, not_kA
; Нажата клавиша A
swapA
anlA, #0f0h
orlA, #0ah
not_kA:
jbB.1, not_k0
jnb(key_old+3).1, not_k0
; Нажата клавиша 0
swapA
anlA, #0f0h
orlA, #00h
not_k0:
jbB.2, not_kB
jnb(key_old+3).2, not_kB
; Нажата клавиша B
swapA
anlA, #0f0h
orlA, #0bh
not_kB:
jbB.3, not_kI
jnb(key_old+3).3, not_kI
; Нажата клавиша I
movK, A
not_kI:
movkey_old+3, B
xrlkey_line, #08h
mov K_tmp, A
ret
end
Размещено на Allbest.ru
Подобные документы
Выбор и краткое описание исполнительного оборудования и датчиков. Схема подключения оборудования к Koyo d0-06dd1 и расчет стоимости системы. Создание таблицы символов и разработка программы на языке релейной логики. Создание человеко-машинного интерфейса.
контрольная работа [1,7 M], добавлен 10.08.2014Изучение вопросов, связанных с проектированием и эксплуатацией автоматизированных систем управления технологическими объектами. Разработка оптимального управления технологическим объектом управления - парогенератором. Выбор закона регулирования.
курсовая работа [5,2 M], добавлен 18.01.2015Характеристика автоматической системы управления технологическим процессом жидких и газообразных сред, необходимость и методика ее реконструкции. Техническое описание средств измерений АСУ ЖГС и системы обработки информации, их совершенствование.
дипломная работа [1,3 M], добавлен 11.03.2011Структура микропроцессорной системы, алгоритм ее управления и передачи сигналов. Карта распределения адресов. Разработка электрической принципиальной схемы и выбор элементной базы. Расчет потребляемого тока, блока питания, программного обеспечения.
курсовая работа [5,1 M], добавлен 22.01.2014Технологическая схема системы. Структурно-функциональная модель обработки сообщений системой управления технологическим процессом. Поток сообщений в общем виде. Моделирование в среде GPSS и в среде C#, их результаты. Алгоритм имитационного моделирования.
курсовая работа [1,3 M], добавлен 14.12.2012Алгоритм решения функциональной задачи. Выбор системы команд специализированной ЭВМ. Форматы команд и операндов. Содержательные графы микропрограмм операций АЛУ. Разработка объединенной микропрограммы работы АЛУ. Закодированные алгоритмы микропрограмм.
курсовая работа [265,5 K], добавлен 17.11.2010Способы дискретной коррекции систем управления. Порядок расчета корректирующего звена для дискретной системы. Особенность методов непосредственного, последовательного и параллельного программирования. Реализация дискретных передаточных функций.
реферат [69,2 K], добавлен 27.08.2009Основные методы и уровни дистанционного управления манипуляционными роботами. Разработка программного обеспечения системы терминального управления техническим объектом. Численное моделирование и анализ исполнительной системы робота манипулятора.
дипломная работа [1,2 M], добавлен 09.06.2009Разработка устройства сопряжения с объектом управления, в состав которого входят датчик, усилитель, АЦП последовательного приближения, ОЗУ, ЦАП, устройство управления. Предусмотрены ручной и автоматический режимы записи и считывания информации из ОЗУ.
курсовая работа [633,2 K], добавлен 01.12.2011Разработка принципиальной схемы, выбор управляющего микроконтроллера. Общий алгоритм работы программы. Блок анализа и реализации команд, принятых от персонального компьютера. Описание используемых интерфейсов. Формат данных RS-232C, листинг программы.
курсовая работа [1,2 M], добавлен 26.12.2012