4.2 Описание хода разработки программного обеспечения
Опишем ход реализации программы (Приложение В). [47, 48, 49]
Проверка синтаксиса и отладка программы осуществлялось с помощью программы фирмы Keil Software mVision v.2.04b.
Перед началом указывается адрес начала программы.
org 000h
ljmp BEGIN
Далее перечисляются необходимые переменные.
N_GLASS:DB6H;количество стаканчиков
N_MOTOR_COUNT:DB2H;количество оборотов ротора мотора
N_STEP:DB8H;шагом одного оборота ротора мотора
STEPS:DB90H, 10H, 30H, 20H, 60H, 40, 0C0H, 80H;шаги
TH_MOTOR:DB;задержка перед следующим шагом
TL_MOTOR:DB;задержка перед следующим шагом
TH_PUMP:DB;время работы мотора
TL_PUMP:DB;время работы мотора
TH_LED:DB;задержка смены состояния светодиода
TL_LED:DB;задержка смены состояния светодиода
TH_PAUSE:DB;задержка для паузы
TL_PAUSE:DB;задержка для паузы
В начале программы осуществляем настройку таймера/счетчика:
MOVP0, #0H;на выводы порта P0 - логический ноль
MOVTMOD, #01H;настройка таймера
Указывает что, таймер/счетчик будет работать в 1 режиме, то есть в этом режиме таймерный регистр имеет разрядность 16 бит. При переходе из состояния "все единицы" в состояние "все нули" устанавливается флаг прерывания от таймера TF0.
Далее начинается работа аппарата:
MOV R0, #0H;R0 - количество заполненных стаканчиков; обнуляем
NEXT_GLASS:
JNBP3.7, LED_WINK;если сигнала нет - воды недостаточно, мигает светодиод
Обнуляется регистр R0, в котором будет храниться количество уже заполненных стаканчиков. Снимается сигнал с порта P3.7, на котором стоит датчик уровня воды, и если оказалось что уровень нулевой, что означает отсутствие необходимого количества воды, осуществляем переход на процедуру, которая заставляет мигать индикатор уровня воды.
START:
CLRP1.2;светит светодиод
MOVDPTR, #N_GLASS;загружаем адрес ячейки с количеством стаканчиков
CLR A;очищаем аккумулятор
MOVC A,@A+DPTR;в аккумуляторе количество стаканчиков
SUBB A, R0;контрольное вычитание
JZEXIT;если все стаканчики заполнены на выход
Снимаем сигнал с порта Р1.2, тем самым заставляем светить датчик уровня воды. Далее осуществляем проверку на наличие пустых стаканчиков, для этого делаем пробное вычитание, если все стаканчики заполнены, заканчиваем работу аппарата.
Осуществляем поворот ротора двигателя за счет подачи сигналов на порт. Осуществляем это через цикл. После каждой итерации делаем небольшую задержку, для этого заполняем регистры TH0 и TL0, и вызываем процедуру таймера.
MOTOR:
MOVDPTR, #N_MOTOR_COUNT;загружаем адрес ячейки с количеством оборотов ротора мотора
CLR A;очищаем аккумулятор
MOVC A,@A+DPTR;в аккумуляторе количество оборотов ротора мотора
MOVR1, A;сохраняем это число в R1
NEXT_ROUND:
MOVDPTR, #N_STEP;загружаем адрес ячейки с количеством шагов
CLR A;очищаем аккумулятор
MOVC A,@A+DPTR;в аккумуляторе количество шагов
MOVR2, A;сохраняем это число в R2
MOVDPTR, #STEPS;загружаем адрес ячейки с последовательностью шагов
NEXT_STEP:
MOVR6, DPH;сохраняем адрес в регистрах R6 и R7, они пригодятся позже
MOVR7, DPL
CLR A;очищаем аккумулятор
MOVC A,@A+DPTR;в аккумуляторе очередной шаг
MOVP1, A;вывод в очередного шага в порт P1
MOVDPTR, #TH_MOTOR;загружаем адрес ячейки с временем задержки
CLR A;очищаем аккумулятор
MOVC A,@A+DPTR;в аккумуляторе время задержки
MOVTH0, A;загружаем время задержки в TH0
MOVDPTR, #TL_MOTOR;загружаем адрес ячейки с временем задержки
CLR A;очищаем аккумулятор
MOVC A,@A+DPTR;в аккумуляторе время задержки
MOVTL0, A;загружаем время задержки в TH0
CALLTIMER;вызов процедуры опроса таймера
MOVDPH, R6;выгружаем из R6 и R7 адрес ячейки текущего шага
MOVDPL, R7
INCDPTR;получение адреса ячейки следующего шага
DECR2;декремент количества шагов
MOVA, R2;пересылка в аккумулятор для контроля
JNZNEXT_STEP;если не все шаги пройдены - продолжаем
DECR1;декремент количества поворотов ротора
MOVA, R1;пересылка в аккумулятор для контроля
JNZNEXT_ROUND;если не все обороты сделаны - продолжаем
MOVP1, #0H;закончили работу с двигателем
Запуск насоса осуществляется с помощью подачи сигнала логического нуля на порт Р1.3, выдерживается необходимая пауза с помощью процедуры таймера и сигнал с порта снимается.
PUMP:
SETBP1.3;включение насоса
MOVDPTR, #TH_PUMP;загружаем адрес ячейки с временем работы насоса
CLR A;очищаем аккумулятор
MOVC A,@A+DPTR;в аккумуляторе время работы насосы
MOVTH0, A;загружаем время в TH0
MOVDPTR, #TL_PUMP;загружаем адрес ячейки с временем работы насоса
CLR A;очищаем аккумулятор
MOVC A,@A+DPTR;в аккумуляторе время работы насосы
MOVTL0, A;загружаем время в TL0
CALLTIMER;вызов процедуры опроса таймера
CLRP1.3;выключить насос
Происходит учёт заполненного стаканчика, регистр R0 инкрементируется. Выжидается небольшая пауза с помощью процедуры таймера и происходит переход на следующую итерацию заполнения следующего стаканчика.
INCR0;инкремент количества заполненных стаканчиков
MOVDPTR, #TH_PAUSE;загружаем адрес ячейки с временем паузы
CLR A;очищаем аккумулятор
MOVC A,@A+DPTR;в аккумуляторе время паузы
MOVTH0, A;загружаем время паузы в TH0
MOVDPTR, #TL_PAUSE;загружаем адрес ячейки с временем паузы
CLR A;очищаем аккумулятор
MOVC A,@A+DPTR;в аккумуляторе время паузы
MOVTL0, A;загружаем время паузы в TL0
CALLTIMER;вызов процедуры опроса таймера
JMPNEXT_GLASS;переходим к заполнению следующего стаканчика
Функция таймера производит запуск установкой бита TR0. Далее опрашивает бит переполнения TF0, и если это бит устанавливается, работа таймера завершается.
TIMER:;процедура опроса таймера
SETBTR0;запускаем таймер
TIMER_STEP:
JBTF0, TIMER_STEP;ждем переполнения таймера
CLRTR0;выключаем таймер
RET;выход из процедуры
Процедура мигания светодиода, отвечающего за уровень воды. Заключается в выполнении включения или выключения светодиода через некоторые промежутки времени.
LED_WINK:;процедура мигания светодиода
JNBP1.2, SET_WINK;если светодиод - выключен, включим
SETBP1.2;выключить светодиод
JMPWAIT_WINK;обеспечим задержку смены состояния
SET_WINK:
CLRP1.2;включим светодиод
WAIT_WINK:
MOVDPTR, #TH_LED;загружаем адрес ячейки с временем задержки
CLR A;очищаем аккумулятор
MOVC A,@A+DPTR;в аккумуляторе время задержки
MOVTH0, A;загружаем время задержки в TH0
MOVDPTR, #TL_LED;загружаем адрес ячейки с временем задержки
CLR A;очищаем аккумулятор
MOVC A,@A+DPTR;в аккумуляторе время задержки
MOVTL0, A;загружаем время задержки в TL0
CALLTIMER;вызов процедуры опроса таймера
JMPLED_WINK;переход на следующий цикл
Заключение
При проектировании аппарата по розливу воды в стаканчики, созданном на основе микроконтроллера Atmel AT89C1051, с использованием насоса 2013 и шагового мотора FL28STH32-0956A, мы научились создавать полноценные устройства, организовывать их работу.
Работой микроконтроллера управляет микропрограмма, реализующая логику аппарата. Создавая программное обеспечение, мы получили опыт программирования на языках низкого уровня.
Несомненно, выполнение данного курсового проекта привело к пониманию функционирования микроконтроллеров и способов реализации логики разнообразных устройств.
Список использованных источников
1. Масааки И. Гемба кайдзен: Путь к снижению затрат и повышению качества/ пер. с англ. – М.: Альпина Бизнес Букс, 2005
2. Массааки И. Кайдзен: путь к успеху японских компаний/ Пер. с англ. – М.: Альпина Бизнес Букс, 2004
3. Хэрри М., Шредер Р. 6 SIGMA. Концепция идеального менеджмента. – М. : «Эксмо», 2003
4. Ньюэлл Ф. Почему не работают системы CRM. Как добиться успеха, позволив клиентам управлять отношениями с вашей компанией. – М.: Добрая книга, 2004
5. Митник Кевин. Искусство обмана. – М.: Компания АйТи, 2004
6. Голдрад Элияху, Кокс Джефф. Цель: процесс непрерывного совершенствования. – Мн. «Попурри», 2004
7. Делл Майкл. От Dell без посредников: стратегии, которые совершили революцию в компьютерной индустрии – М. 2004
8. http://chinasuppliers.alibaba.com
9. http://www.made-in-china.com
10. http://www.commlinx.com.au
11. http://www.discovercircuits.com
12. http://www.directindustry.com
13. http://electroprivod.ru
14. http://www.cs.uiowa.edu
15. http://www.anaheimautomation.com
16. http://stepmotor.ru
17. http://www.commlinx.com.au
18. http://www.caopump.com
19. http://www.legoeducationstore.com
20. http://www.allproducts.com.tw
21. http://radio-spravochnik.by.ru/
22. http://www.futurlec.com/
23. http://www.st.com
24. http://www.keil.com
25. http://www.cpu-world.com
26. http://microcontroller.com
27. http://www.infineon.com
28. http://www.ti.com
29. http://www.atmel.com
30. http://www.maxim-ic.com
31. П. Хоровиц, У. Хилл. Искусство схемотехники: в 2-х томах./Перевод с англ. под ред. М. В. Гальперина. – М.: Мир, 1986
32. Т. Мотоока, Х. Хорикоси, М. Сакаути, Х. Танака, Х. Танака, Т. Сайто. Компьютеры на СБИС. В двух книгах./Перевод с японского под ред. В. М. Кисельникова. – М.:Мир, 1988
33. Г.И.Пухальский,Т.Я.Новосельцева.- Цифровые устройства: Учебное пособие для втузов.- СПб.: Политехник, 1996 г.
34. http://www.engineering-sample.com/
35. http://cxem.net
36. http://kazus.ru
37. http://www.techlib.com
38. http://www.uoguelph.ca
39. http://www.fujitsu.com
40. http://www.usdigital.com
41. http://www.ledtronics.com
Приложения
Приложение А
Функциональная схема аппарата
Приложение Б
Блок-схема алгоритма
Приложение В
Программа
NAME PROGRAM
org 000h
ljmp BEGIN
N_GLASS:DB6H;количество стаканчиков
N_MOTOR_COUNT:DB2H;количество оборотов ротора мотора
N_STEP:DB8H;шагом одного оборота ротора мотора
STEPS:DB90H, 10H, 30H, 20H, 60H, 40, 0C0H, 80H;шаги
TH_MOTOR:DB;задержка перед следующим шагом
TL_MOTOR:DB;задержка перед следующим шагом
TH_PUMP:DB;время работы мотора
TL_PUMP:DB;время работы мотора
TH_LED:DB;задержка смены состояния светодиода
TL_LED:DB;задержка смены состояния светодиода
TH_PAUSE:DB;задержка для паузы
TL_PAUSE:DB;задержка для паузы
LED_WINK:;процедура мигания светодиода
JNBP1.2, SET_WINK;если светодиод - выключен, включим
SETBP1.2;выключить светодиод
JMPWAIT_WINK;обеспечим задержку смены состояния
SET_WINK:
CLRP1.2;включим светодиод
WAIT_WINK:
MOVDPTR, #TH_LED;загружаем адрес ячейки с временем задержки
CLR A;очищаем аккумулятор
MOVC A,@A+DPTR;в аккумуляторе время задержки
MOVTH0, A;загружаем время задержки в TH0
MOVDPTR, #TL_LED;загружаем адрес ячейки с временем задержки
CLR A;очищаем аккумулятор
MOVC A,@A+DPTR;в аккумуляторе время задержки
MOVTL0, A;загружаем время задержки в TL0
CALLTIMER;вызов процедуры опроса таймера
JMPLED_WINK;переход на следующий цикл
TIMER:;процедура опроса таймера
SETBTR0;запускаем таймер
TIMER_STEP:
JBTF0, TIMER_STEP;ждем переполнения таймера
CLRTR0;выключаем таймер
RET;выход из процедуры
BEGIN:
MOVP0, #0H;на выводы порта P0 - логический ноль
MOVTMOD, #01H;настройка таймера
MOV R0, #0H;R0 - количество заполненных стаканчиков; обнуляем
NEXT_GLASS:
JNBP3.7, LED_WINK;если сигнала нет - воды недостаточно, мигает светодиод
START:
CLRP1.2;светит светодиод
MOVDPTR, #N_GLASS;загружаем адрес ячейки с количеством стаканчиков
CLR A;очищаем аккумулятор
MOVC A,@A+DPTR;в аккумуляторе количество стаканчиков
SUBB A, R0;контрольное вычитание
JZEXIT;если все стаканчики заполнены на выход
MOTOR:
MOVDPTR, #N_MOTOR_COUNT;загружаем адрес ячейки с количеством оборотов ротора мотора
CLR A;очищаем аккумулятор
MOVC A,@A+DPTR;в аккумуляторе количество оборотов ротора мотора
MOVR1, A;сохраняем это число в R1
NEXT_ROUND:
MOVDPTR, #N_STEP;загружаем адрес ячейки с количеством шагов
CLR A;очищаем аккумулятор
MOVC A,@A+DPTR;в аккумуляторе количество шагов
MOVR2, A;сохраняем это число в R2
MOVDPTR, #STEPS;загружаем адрес ячейки с последовательностью шагов
NEXT_STEP:
MOVR6, DPH;сохраняем адрес в регистрах R6 и R7, они пригодятся позже
MOVR7, DPL
CLR A;очищаем аккумулятор
MOVC A,@A+DPTR;в аккумуляторе очередной шаг
MOVP1, A;вывод в очередного шага в порт P1
MOVDPTR, #TH_MOTOR;загружаем адрес ячейки с временем задержки
CLR A;очищаем аккумулятор
MOVC A,@A+DPTR;в аккумуляторе время задержки
MOVTH0, A;загружаем время задержки в TH0
MOVDPTR, #TL_MOTOR;загружаем адрес ячейки с временем задержки
CLR A;очищаем аккумулятор
MOVC A,@A+DPTR;в аккумуляторе время задержки
MOVTL0, A;загружаем время задержки в TH0
CALLTIMER;вызов процедуры опроса таймера
MOVDPH, R6;выгружаем из R6 и R7 адрес ячейки текущего шага
MOVDPL, R7
INCDPTR;получение адреса ячейки следующего шага
DECR2;декремент количества шагов
MOVA, R2;пересылка в аккумулятор для контроля
JNZNEXT_STEP;если не все шаги пройдены - продолжаем
DECR1;декремент количества поворотов ротора
MOVA, R1;пересылка в аккумулятор для контроля
JNZNEXT_ROUND;если не все обороты сделаны - продолжаем
MOVP1, #0H;закончили работу с двигателем
PUMP:
SETBP1.3;включение насоса
MOVDPTR, #TH_PUMP;загружаем адрес ячейки с временем работы насоса
CLR A;очищаем аккумулятор
MOVC A,@A+DPTR;в аккумуляторе время работы насосы
MOVTH0, A;загружаем время в TH0
MOVDPTR, #TL_PUMP;загружаем адрес ячейки с временем работы насоса
CLR A;очищаем аккумулятор
MOVC A,@A+DPTR;в аккумуляторе время работы насосы
MOVTL0, A;загружаем время в TL0
CALLTIMER;вызов процедуры опроса таймера
CLRP1.3;выключить насос
INCR0;инкремент количества заполненных стаканчиков
MOVDPTR, #TH_PAUSE;загружаем адрес ячейки с временем паузы
CLR A;очищаем аккумулятор
MOVC A,@A+DPTR;в аккумуляторе время паузы
MOVTH0, A;загружаем время паузы в TH0
MOVDPTR, #TL_PAUSE;загружаем адрес ячейки с временем паузы
CLR A;очищаем аккумулятор
MOVC A,@A+DPTR;в аккумуляторе время паузы
MOVTL0, A;загружаем время паузы в TL0
CALLTIMER;вызов процедуры опроса таймера
JMPNEXT_GLASS;переходим к заполнению следующего стаканчика
EXIT:
END
... со 100 до 138°С остается неизменным. При дальнейшем повышении температуры (до 143°С) уровень аминокислот падает, что связано с усилением реакции меланоидинообразования. 2. ТЕХНОЛОГИЧЕСКАЯ ЧАСТЬ 2.1 Описание технологии производства пива «Рецептура №1», «Рецептура №2» и «Рецептура №3» В технологической схеме производства пива можно выделить несколько этапов (приложение 1): подготовка воды ...
... микробиологическую безопасность воды, а с другой - повышает остаточное содержание кислорода в бутилированной воде и заметно улучшает её органолептические характеристики - вкус и запах. 2.3.6 Внутренний контроль качества 8 июля 2009 г. собственная лаборатория Компании Чистая вода подтвердила высокий профессиональный уровень, пройдя очередную аттестацию в сертифицирующем органе - ФГУ " ...
... (фондов) 718532 3.Оборотный капитал (оборотные средства) 23307 (материальные затраты на производство 775 литров воды) Итого инвестиций 741839 Предприятие ЗАО «Королевская вода» для реализации инвестиционного проекта по внедрению нового вида продукции берёт кредит в банке в размере 740000 рублей. Процент по кредиту – 23%. Расчёт заработной платы персонала предприятия Расчёт ...
... сбыта; личных продаж; продажи (корпоративному) ассоциированному покупателю (например, страховым Компаниям); организации деловых встреч, соглашений прямой маркетинг 3. Разработка программы продвижения нового вида продукции на ЗАО "Королевская вода" 3.1 Оценка рынка, конкурентов и потребителей Сегодня рынок питьевой воды является одним из самых быстрорастущих потребительских рынков ...
0 комментариев