Курсовая СЭС. Курсовая работа. Программирование микропроцессорных устройств
Скачать 335 Kb.
|
Министерство образования и науки Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего образования МОСКОВСКИЙ ПОЛИТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ Кафедра «Автоматика и управление» Курсовая работа по дисциплине: «Микропроцессорная техника» на тему: «Программирование микропроцессорных устройств» Выполнил: Богдан Д.А. Группа 173-421 Вариант: №3 Проверил: Чернокозов В. В. 2021 Содержание Министерство образования и науки Российской Федерации 1 Федеральное государственное бюджетное образовательное учреждение 1 высшего образования 1 МОСКОВСКИЙ ПОЛИТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ 1 Кафедра «Автоматика и управление» 1 Курсовая работа 1 по дисциплине: 1 «Микропроцессорная техника» 1 Введение. 3 Алгоритм работы микропроцессорного устройства 4 Разработка принципиальной электрической схемы 6 Разработка управляющей программы 7 Разработка программного обеспечения 9 Заключение 14 Список литературы 15 Приложения 16 Введение.Во время разработки радиомоделей часто приходится сталкиваться с проблемой формирования питания для схемы блока управления. В различных устройствах всегда требуется дополнительное нестандартное питание. Использовать гасящий резистор большой мощности или дополнять батареи питания еще одним элементом - не всегда разумное решение проблемы. На практике для повышающего преобразователя применяются специализированные микросхемы МАХ641-МАХ643, МАХ 1703, и их российские аналоги. Однако такой подход не всегда оправдан, поскольку эти детали редко бывают в продаже. Параметры внутреннего генератора специализированных микросхем заранее заданы, изменить схему и подстроится под нужды нагрузки не так-то просто. Эта проблема особенно остро стоит в синхронизированных системах, которые часто встречаются в многозвенных источниках питания. Кроме того, служебные средства, распознающие происхождение сбоя, ошибки или короткого замыкания, в специализированных микросхемах очень ограничены и неинформативны. По этой причине предлагается разработка повышающего преобразователь на микроконтроллере Tiny 15 [1]. При этом были проверены ресурсы микроконтроллера и принципиальная возможность его применения в преобразовательной технике. Также была определена структура программы и оценено быстродействие заложенного алгоритма для будущих разработок. Применение микроконтроллера позволяет точно и быстро определить причину сбоя источника, предотвращает выход из строя деталей, в случае кратковременного сбоя автоматически выводит источник на необходимый режим. В перспективе возможна реализация индикации напряжения и служебной информации в цифровом виде на более развитом и быстродействующем контроллере. Алгоритм работы микропроцессорного устройстваСхема построена по классическим методам создания повышающих преобразователей [11, 12, 13) Транзисторный ключ преобразователя Q l работает в импульсном режиме, попеременно включаясь и выключаясь (рисунок 1). Рисунок 1. – Принцип действия преобразователя Когда транзистор открыт, ток от источника питания Uп протекает через дроссель L. В дросселе линейно растет ток и накапливается энергия. При этом ток в нагрузку от источника не поступает, поскольку прямое включение диода D I имеет порог включения, который выше падения напряжения на сопротивлении открытого транзистора (транзистор необходимо подбирать с очень маленьким сопротивлением открытого состояния). В этот момент ток в нагрузку поступает только от разряда конденсатора С 1 (в начальный момент ток конденсатора Iс = 0). Когда транзистор закрывается, ЭДС самоиндукции дросселя суммируется с выходным напряжением на конденсаторе С 1 и энергия тока дросселя передается в нагрузку. При номинальном сопротивлении нагрузки излишек энергии передается на заряд емкости С 1. Ток в нагрузке протекает непрерывно. Этот режим называется "режимом непрерывного тока нагрузки". Если нагрузка увеличилась выше нормы (сопротивление упало ниже номинального на величину более 50%), то возникает нехватка энергии заряда дросселя. В этот момент наступает режим прерывистых токов нагрузки, пульсация напряжения увеличивается, и преобразователь уходит от стабилизации напряжения на нагрузке. В начальный момент работы преобразователя напряжение на нагрузке растет ступенчато, постепенно выходя на режим стабилизации выходного напряжения (рис. 1). В режиме стабилизации напряжение на нагрузке имеет небольшую пульсацию, среднее значение равно напряжению стабилизации. Во время увеличения нагрузки пульсация растет, а при уменьшении нагрузки остается неизменной. Для питания схемы применяются два источника тока. Первый источник (батарея 2) состоит из соединенных последовательно батареек типа АА (2 штуки) в выносном батарейном отсеке, а второй (батарея 1) - элемент питания CR2032, установленный непосредственно на плате. Разработка принципиальной электрической схемыСхема устройства приведена на рисунке 2. Рисунок 2 – Принципиальная электрическая схема устройства После включения и выхода на режим стабилизации загорается зеленый светодиод, что свидетельствует о нормальном состоянии питания нагрузки. В моменты коммутации нагрузки, выхода на режим или изменения параметров нагрузки зеленый светодиод гаснет, сообщая о критическом состоянии преобразователя. Как только произошло замыкание или обрыв нагрузки, загорается красный светодиод, который мигает с паузами в 0,16 с. В момент, когда красный светодиод не горит, преобразователь пытается автоматически запустится. Если запуск не произошел в течение 0,16 с, красный светодиод загорается на 6,16 с. Микроконтроллер отключает нагрузку, ток не подается непосредственно от источника через дроссель L. В критических случаях при коротком замыкании предохранитель предотвращает возможность выхода из строя элементов схемы. При напряжении питания 3 В ток потребления микроконтроллера Tiny 15 в активном состоянии составляет около 3 мА. Емкости батареи 1 (CR2032) достаточно для питания микроконтроллера в аварийном режиме. Разработка управляющей программыБлок-схема алгоритма программы представлена на рис. 3. В начале программы указывается вектор прерывания для перехода в необходимую подпрограмму. Далее настраивается ввод-вывод через порт В, а также таймеры Т0 и T1. Микроконтроллеры всегда выполняют функции управления, а функции генерирования импульсов успешно выполняет таймер, работающий в автоматическом режиме. Таймер Т1 устанавливается как вспомогательный элемент программы. За основу широтно-импульсного регулятора выбран таймер TI микроконтроллера, который может формировать импульсы различной длительности. Настройка таймера TI заключается в выборе тактовой частоты и режима широтно-имnульсной модуляции (ШИМ). Тактовая частота микроконтроллера составляет 1,6 МГц, а частота преобразователя -40 кГц. Известно, что микроконтроллер выполняет одну команду за один такт внутреннего генератора [3]. Простое арифметическое деление показывает, что для управления преобразователем можно использовать всего 40 команд. С другой стороны, быстрый отклик на изменение тока нагрузки может вызвать неустойчивое состояние преобразователя с однозвенным LС-фильтром По этой причине обработка данных выполняется в текущем режиме, а полученные данные заносятся в таймер, который формирует ШИМ-напряжение. Напряжение на нагрузке измеряется раз в восемь циклов работы преобразователя. Для работы АЦП необходимо 25 тактов микроконтроллеров. Рисунок 3 – Блок-схема алгоритма Таймер T1 настроен на синхронизацию от тактового генератора микроконтроллера с коэффициентом деления 1/64. Частота импульса задается путем ввода длительности полупериода. При прохождении цикла, состоящего из деления тактовой частоты внутреннего генератора и инвертирования выходного сигнала дважды, формируется период с заданной частотой. Разработка программного обеспеченияВ поддержку своей архитектуры в 1997 г. Atmel выпустила AVR Studio - программный продукт для разработки приложений на основе AVR-микроконтроллеров. AVR Studio представляет собой интегрированную среду разработки IDE (Integrate Development Environment), объединяя в себе большое количество различных инструментов для написания и отладки программ. Продвигая на рынке новую продукцию, Atmel с самого начала попыталась сделать ее максимально открытой для потребителя. AVR Studio не является исключением. Последняя версия IDE, равно как и любая информация по AVR-микроконтроллерам, всегда свободно доступна на сайтах производителя. Минимальный набор разработчика в IDE представлен фирменным ассемблером и симулятором. Однако AVR Studio легко интегрируется со многими программными средствами сторонних производителей. И на сегодняшний день, в частности, в нее включена поддержка постоянно развивающегося компилятора языка Си WinAVR основанного на принципах GNU. Это очень мощный и к тому же бесплатный инструмент, что очень редко встречается у микроконтроллеров уровня AVR. Ассемблер относится к языкам программирования низкого уровня. Его основой является множество команд, уникальное для каждого микропроцессора. Поэтому ассемблер является также и аппаратно-зависимым. Он может использоваться только совместно с архитектурой определенного типа. Каждое семейство микропроцессоров имеет свой собственный вариант этого языка. Каждая инструкция ассемблера представляет собой символическое изображение соответствующей машинной команды со своим кодом операции (КОП). Команды ассемблера имеют удобочитаемый вид и названия, ассоциирующиеся с их действием. Так команда пересылки между двумя РОНами mov Rd,Rr является прототипом 16-разрядного кода операции 0010 11rd dddd rrrr. Битовые поля ddddd и rrrrr в нем определяют адреса регистров приемника и источника соответственно. Например, для пересылки регистра R5 в R22 необходимо записать на ассемблере mov R22,R5 или 0010 1101 0110 0101 на машинном языке. Разница в восприятии очевидна. Каждую команду ассемблера можно логически разделить на две части: мнемонику и операнды. Мнемоника Операнд 1 Операнд 2 mov Rd, Rr Мнемоника является обязательной частью команды и определяет ее функциональное назначение. Операнды представляют собой параметры команды. В качестве операндов могут выступать числовые значения, адреса и смещения относительно адресов. Команды AVR, в зависимости от назначения, могут иметь до двух параметров. Главная задача ассемблера – преобразование исходного текста пользовательской программы в машинный код, пригодный для записи в память программ микроконтроллера. Сам процесс преобразования называют компиляцией, а программу ассемблер – компилятором. Конечным результатом работы компилятора является файл с исполняемым кодом. Если программа использует инициализированные данные, размещенные в энергонезависимой памяти, то в дополнении к этому, будет сгенерирован также файл для EEPROM. Информация, размещенная в этих файлах, используется программатором при программировании FLASH-память программ и/или EEPROM-память данных. Существует большое количество различных форматов выходных файлов, но самый распространенный из них 16-тиричный Intel Hex Format. Файлы такого типа, как правило, имеют два различных расширения: .hex у файлов содержащих коды программ, и .epp у файлов, содержащих данные для записи EEPROM-памяти. В соответствии со своей технологией работы, компилятор создает также объектный файл с расширением .obj. В нем размещена служебная информация для внутреннего пользования (относительные и абсолютные адреса операндов, место расположения объектов в пределах сегмента и т.д.). Объектный файл может быть необходим для различных отладочных средств. Программисту же никогда не приходится вмешиваться в его содержимое. После сборки проекта могут быть сгенерированы также файлы, имеющие расширение .lst (файл листинга), .map и некоторые другие. В первом из них находится полный отчет о проделанной компилятором работе. Во втором приводится перечень всех символьных имен, встретившихся в программе, и их числовых значений. В основе программы заложено использование таймера Tl совместно с альтернативной функцией ОСlА-вывода порта PBl. В режиме ШИМ состояние счетного регистра TCNTI изменяется от О до установленного значения в регистре сравнения OCR 1 В. При совпадении данных счетный регистр ТСNТ! сбрасывается в О. Цикл счета регистра TCNТl повторяется, но при совпадении значения счетного регистра ТСNТ 1 и регистра сравнения ОС R 1 А напряжение на выводе РВ 1 изменяется на противоположное до момента совпадения данных TCNТl и OCRlB. В момент совпадения напряжение на выводе РВ 1 изменяется на противоположное. Таким образом, содержимое регистра OCRl А определяет скважность ШИМ-сигнала (с максимальным углом заполнения единичного состояния от О, 1 до 0,5), а содержимое регистра OCR 1 В - его частоту. Если угол заполнения более 0,5 и менее 0,7 (согласно таблице Расчет параметров повЬающего преобразователя. xls, угол заполнения 0,7 является критическим), таймер Tl переключается на режим инвертиров<ния. В результате таймер Tl отрабатывает угол заполнения нулевого состояния от 0,3 до 0,5. После настройки таймеров программа выполняет алгоритм проверки входного напряжения питания с помощью встроенного АЦП. Для микроконтроллера Tiny 15 во время преобразования АЦП необходимо отработать непрерывно 25 тактов с запретом на прерывание (в представленной программе этот запрет исключен). В реальном времени выполняется подпрограмма обработки преобразования АЦП. Поскольку для получения достоверной информации от источника и от нагрузки необходимо два преобразования АЦП, то один раз за восемь тактов преобразователя выполняется также проверка напряжения источника питания. Проверка осуществляется и в случае аварии в нагрузке. Начальный запуск и выход преобразователя на необходимое напряжение стабилизации реализованы с помощью начальной подпрограммы. При этом проверка АЦП выходного напряжения на нагрузке не происходит - преобразователь выполняет задачу с фиксированным минимальным значением заполнения ШИМ. Далее, после нескольких тактов преобразователя с помощью АЦП проверяется напряжение на нагрузке. По результатам проверки включается зеленый светодиод и устанавливается угол заполнения ШИМ, исходя из табличных значений. Во время стабилизации напряжения на нагрузке, один раз за восемь циклов работы преобразователя проверяется выходное напряжение. По результатам проверки с помощью таблицы формируется угол открытия транзистора ШИМ. При большем напряжении нагрузки угол ШИМ уменьшается, при меньшем - увеличивается. На нагрузку подается постоянное напряжение с заметной пульсацией (см. рис. 8.2). Пульсация напряжения обусловлена работой АЦП, при которой невозможно изменять угол регулирования ШИМ. Этот недостаток можно компенсировать, установив линейный стабилизатор на выходе или дополнительный дроссель. В случае большой пульсации напряжения на нагрузке ниже или выше 50% от нормы преобразователь прекращает ШИМ, программа переходит в подпрограмму Error, загорается красный светодиод. Подпрограмма Error обнуляет вывод управления микроконтроллера PBI транзистором преобразователя и включает таймер ТО на отсчет времени О, 16 с. Если за это время условия нагрузки изменились, микроконтроллер формирует одиночный импульс. По результатам проверки выходного напряжения с помощью АЦП запускается начальная подпрограмма, и весь цикл запуска и стабилизации повторяется заново, или, если напряжение на нагрузке равно нулю, запускается подпрограмма Error. В рассмотренной программе алгоритм проверки и аварийной остановки имеет упрощенную версию, поскольку основан на простой форме реализации. Но даже простой алгоритм предотвращает выход из строя элементов схемы. ЗаключениеВ ходе выполнения проекта решены следующие задачи: Разработан алгоритм работы МП устройства Разработана электрическая схема МП устройства Разработана и отлажена программа МП устройства на Ассемблере. Описан процесса отладки и тестирования программы МП устройства. В приложении приведен исходный текст программы на языке ассемблер. Список литературы1. Зобин Ю, Тамазов А, Микроконтроллеры популярных семейств М: Радио №6-8, 2000. 2. Голубцов М.С. Кириченкова А.В. Микроконтроллеры А VR: от простого к сложному . 2-е издание. М: Солон-Пресс, 2004 с диском. 3. Евстифеев А.В. Микроконтроллеры А VR семейства Tiny и Mega фирмы А TMEL. 2-е издание. М: Додэка-ХХI, 2005. 4. Кравченко А.В. Шар со световым эффектом для елки// Радиоама-тор.-2006.-№ l-C.26. 5. Кравченко А.В. Опыт работы с программатором STK200// Радио- · аматор.-2006.-№4-С36. 6. Шило В.Л. Популярные цифровые микросхемы Справочник. МРБ выпуск 111 1. Челябинск: Металлургия, 1988г. 7. Новые технологиии// Радиоаматор.-2005.-№ 12-С.30. 8. Волович Г.И. Схемотехника аналоговых и аналого-цифровых электронных устройств. М: Додэка-ХХI, 2005. 9. Баранов В.Н. Применение микроконтроллеров А YR: схемы, алгоритмы, программы. М: Додэка-ХХI, 2004. 10. Мелешин В.И. Транзисторная преобразовательная техника. М:Техносфера, 2005. 11. Семенов Б.Ю. Силовая электроника для любителей и профессионалов. М: Солон-Р, 2001. 12. Марти Браун. Источники питания. Расчет и конструирование. Киев МК-Пресс, 2005. 13. Головацкий В.А. Гулякович Г.Н. Мелешин В.И. под редакцией Конева Ю.И. Источники вторичного электропитания. М: Радио и связь 1990г. 14. Варламов Р.Г. Малогабаритные источники тока. М: Радио и связь 1988г. ПриложенияПриложение 1. Исходный текст программы .include "tn15def.inc" ;Программа повышающего стабилизатора. ;Переменные для стабилизатора .DEF tmp7=r20 .DEF tmp8=r21 .DEF Upor=r22 .DEF Unag=r23 ;Переменные для АЦП .DEF Axx=r18 .DEF Ayy=r19 ;Переменные для вычислений .DEF tmp5=r16 .DEF tmp6=r17 .DEF tmp=r25 .DEF tmp2=r26 .DEF tmp3=r27 .DEF tmp4=r28 .DEF tmp9=r24 .DEF tmp10=r29 .DEF Totk=r11 .DEF Tzak=r12 .DEF Tnag=r13 .DEF Tnaz=r14 .DEF tmp11=r15 ;начало сегмента программы .cseg .org 0 ;Вектор прерывания МК tiny15 rjmp RESET nop ;rjmp ЕХТ INT0 прерывание не используется nop ;rjmp EXT_PIN прерывание не используется nop ;rjmp LOW_LEVEL ;прерывание от компаратора nop ;rjmp TIME_1 ;прерывание от таймера Tl rjmp TIME_0 ;прерывание от таймера ТО nop ;rjmp EE_RDY прерывание от таймера nop ;rjmp ANA_COMP прерывание не используется ;начало всей программы с подпрограммами .org 20 Reset: nop ;сброс всех значений временных регистров clr tmp clr tmp2 clr tmp3 clr tmp4 ldi tmp, Low(RAMEND) ;out SPL, tmp ;настройка направления работы линий порта В ldi tmp2, $07 ;входные линии РВ4, РВЗ 100000111 out DDRB,tmp2 ;режим работы таймера ТО с максимальным предварительным ;делением для установки времени включения сигнала ошибки ldi tmp3, $02 out TIMSK,tmp3 ;разрешаем прерывания по ;переполнению от ТО ;настройка таймера Tl для формирования ШИМ ;выбор коэффициента предварит. деления тактовой частоты 1:1 ;автоматический сброс таймера при совпадении, частота ;преобразователя 40 кГц ldi tmp4,$69 ;настройка режима 101101001 ;режим работы таймера Tl на переключение внешнего вывода, ;состояние вывода меняется на противоположное, out TCCR1, tmp4 ;вывод UC1A линия вывода (РВ1) ;общее разрешение прерывания sei ;начало программы, no: nop clr tmp4 clr r10 clr tmp ;Запуск мягкого нарастания напряжения nop mov tmp9, r9 subi tmp9, $69 nop brbs 2, gg rjmp RNE gg:. clr tmp nop ;Мягкий запуск ldi Axx, $00 ldi Ayy, $08 ldi tmp6, $03 tyr: nop dec tmp6 brbs 2, RNE rcall ADC1 cpi tmp5, $56 nop breq error nop rcall SF rjmp tyr RNE: nop clr tmp ldi tmp9, $69 mov r9, tmp9 rjmp SEET nop ;************************************************ ;Стабилизация состояния напряжения нагрузки Stab: nop rcall ADC1 ;проверка питания nop SEET: nop rcall ADC2 ;проверка нагрузки nop rcall SF rjmp Stab ;Запуск ШИМ SF: nop nop ;чтение длительности времени заряда и разряда ;ШИМl ldi tmp4, $69 ;настройка режима #01101001 ;режим работы таймера Tl на переключение внешнего вывода, ;состояние вывода меняется на лротивололожное, неинверсный ;ШИМ, СК/8 out TCCR1, tmp4 ;вывод OClA линия вывода (PBl) mov tmp3, r4 out OCR1B, tmp3 ;регистр OCRlB частота ШИМ ldi tmp9, $02 out TIMSK, tmp9 ;разрешаем прерывания gо ;лерелолнению от Tl ret ; *********************************************** ;Обработка ошибок и неисправностей error: nop ;Перевод светодиодов в индикацию ошибок ;выключение зеленого светодиода ;включение красного светодиода in Upor, portB ldi Unag, $04 or Unag, Upor out portB, tnag rcall ti0 ;пауза в 0,16 С rcall ADCl ;проверка литания cpi r16, $56 breq error rcall ADC2 ;проверка нагрузки cpi r16, $76 breq error ;Все исправно ;включение зеленого светодиода ;выключение красного светодиода in tmp4, portB clr Unag ldi Unag, $01 or Unag, tmp4 out portB, tmp3 rjmp Stab ;запуск стабилизатора ;Определение состояния питающего напряжениия и напряжения ;нагрузки ;Подпрограмма проверка АЦПl напряжения питания стабилизатора ADC1: nop ;сброс всех значений временных регистров clr tmp10 clr tmp clr tmp5 mov r8, tmp6 clr tmp6 cli ; общее запрещение прерывания ;Настройка АЦПl, начало программы ldi tmp10, $83 ; #10000011 ;Внутренний источник опорного напряжения, вход РВ4 out ADMUX, tmp10 ;коммутация входов АЦП ldi tmp, $C8 ;#11000010 ;Включение АЦПl, начать, одиночное преобразование, Кдел=4 out ADCSR, tmp ;запуск АЦП на преобразование ;Сохранение данных АЦПl in tmp5, ADCL in tmp6, ADCH mov r12, tmp5 mov r11, tmp6 ; sei ;разрешение прерываний ;Начало цикла проверки уровня питания ;Проверка на ЗВ clc ;сброс флага переноса cln ;сброс флага знака ;вычитание значения АЦП от набранного значения mov Zl, r11 mov Zh, r12 subi Zl, $01 ;Вычитание старшего байта з в sbci Zh, $E0 ;Вычитание младшего байта З В с заемом brbs 2, gool ;отрицательное, уровень АЦП достигнут ;Проверка на 2,8 В clc ;сброс флага переноса cln ;сброс флага знака ;вычитание значения АЦП от набранного значения mov Zl, r11 mov Zh, r12 subi Zl, $01 ;Вычитание старшего байта 2,8 В sbci Zh, $C0 ;Вычитание младшего байта 2,8 В с заемом brbs 2, goo2 ;отрицательное, уровень АЦП достигнут ;Проверка на 2,5 В clc ;сброс флага переноса cln ;сброс флага знака ;вычитание значения АЦП от набранного значения mov Zl, r11 mov Zh, r12 subi Zl, $01 ;ВьNитание старшего байта 2,5 В sbci Zh, $90 ;Вычитание младшего байта 2,5 В с заемом brbs 2, goo3 ;отрицательное, уровень АЦП достигнут ;Проверка на 2 В clc ;сброс флага переноса cln ;сброс флага знака ;вычитание значения АЦП от набранного значения mov Zl, r11 mov Zh, r12 subi Zl, $01 ;Вычитание старшего байта 2 В sbci Zh, $40 ;Вычитание младшего байта 2 В с заемом brbs 2, goo4 ;отрицательное, уровень АЦП достигнут ;Проверка на 1,8 В clc ;сброс флага переноса cln ;сброс флага знака ;вычитание значения АЦП от набранного значения mov Zl, r11 mov Zh, r12 subi Zl, $01 ;Вычитание старшего байта 1,8 В sbci Zh, $20 ;Вычитание младшего байта 1,8 В с заемом brbs 2, goo5 ;отрицательное, уровень АЦП достигнут ldi r16, $56 ;очень низкий уровень ;Обработка данных питающего напряжения gool: nop ldi zl, Low(S3 <<1) ldi zh, High(S3 << 1) add r30, Ayy adc r31, Axx lpm mov r4, r0 rjmp RNVV goo2: nop ldi zl, Low(S28<<1) ldi zh, High( S28<<1) add r30, Ayy adc r31, Axx lpm mov r4, r0 rjmp RNVV goo3: nop ldi zl, Low(S25<<1) ldi zh, High ( S25<<1) add r30, Ayy adc r31, Axx lpm mov r4, r0 rjmp RNVV goo4: nop ldi zl, Low(S2<<1) ldi zh, High ( S2<<1) add r30, Ayy adc r31, Axx lpm mov r4, r0 rjmp RNVV goo5: nop ldi zl, Low (S18<<1) ldi zh, High ( S18<<1) add r30, Ayy adc r31, Axx lpm mov r4, r0 RNVV: nop mov tmp6, r8 ret ;*********************************************** ;Подпрограмма проверка АЦП2 выходного напряжения на стабилизаторе ADC2: nop ;сброс всех значений временных регистров clr tmp10 clr tmp cli ;общее запрещение прерывания ;Настройка АЦП2, начало программы ldi tmp10, $83 ; #10000000 ;Внутренний источник опорного напряжения, вход РВ5 out ADMUX, tmp10 ;коммутация входов АЦП ldi tmp, $CB ;#11000010 ;Включение АЦП2, начать, одиночное преобразование, Кдел=4 out ADCSR, tmp ;запуск АЦП на преобразование ;Сохранение данных АЦП2 in Axx, ADCL in Ayy, ADCH mov r13, Axx mov r14, Ayy ; sei ;разрешение прерываний ;Начало цикла проверки уровня питания ;Проверка на 5,9 В clc ;сброс флага переноса cln ;сброс флага знака ;вычитание значения АЦП от набранного значения mov Zl, r13 mov Zh, r14 subi Zl, $03 ;Вычитание старшего байта 5,9 В sbci Zh, $B0 ;Вычитание младшего байта 5,9 В с заемом brpl ewe rjmp gaa ;уровень АЦП достигнут ;Проверка на 5,7 В ewe: nop clc ;сброс флага переноса cln ;сброс флага знака ;вычитание значения АЦП от набранного значения mov Zl, r13 mov Zh, r14 subi Zl, $03 ;Вычитание старшего байта 5,7 В sbci Zh, $90 ;Вычитание младшего байта 5,7 В с заемом brpl zwe rjmp gbb ;уровень АЦП достигнут ;Проверка на 5,5 В zwe: nop clc ;сброс флага переноса cln ;сброс флага знака ;вычитание значения АЦП от набранного значения mov Zl, r13 mov Zh, r14 subi Zl, $03 ;Вычитание старшего байта 5,5 В sbci Zh, $70 ;Вычитание младшего байта 5,5 В с заемом brpl xwe rjmp gcc ;уровень АЦП достигнут ;Проверка на 5,4 В xwe: nop clc ;сброс флага переноса cln ;сброс флага знака ;вычитание значения АЦП от набранного значения mov Zl, r13 mov Zh, r14 subi Zl, $03 ;Вычитание старшего байта 5,4 В sbci Zh, $60 ;Вычитание младшего байта 5,4 В с заемом brpl cwe rjmp gdd ;уровень АЦП достигнут ;Проверка на 5,3 В cwe: nop clc ;сброс флага переноса cln ;сброс флага знака ;вычитание значения АЦП ОТ набранного значения mov Zl, r13 mov Zh, r14 subi Zl, $03 ;Вычитание старшего байта 5,3 в sbci Zh, $50 ;Вычитание младшего байта 5,3 в с заемом brpl vwe rjmp gee ;уровень АЦП достигнут ;Проверка на 5,2 В vwe: nop clc ;сброс флага переноса cln ;сброс флага знака ;вычитание значения АЦП от набранного значения mov Zl, r13 mov Zh, r14 subi Zl, $03 ;Вычитание старшего байта 5,2 в sbci Zh, $40 ;Вычитание младшего байта 5,2 в с заемом brpl bwe rjmp gff ;уровень АЦП достигнут ;Проверка на 5,1 В bwe: nop clc ;сброс флага переноса cln ;сброс флага знака ;вычитание значения АЦП от набранного значения mov Zl, r13 mov Zh, r14 subi Zl, $03 ;Вычитание старшего байта 5,1 В sbci Zh, $30 ;Вычитание младшего байта 5,1 В с заемом brpl nwe rjmp gjj ;уровень АЦП достигнут ;Проверка на 5 В nwe: nop clc ;сброс флага переноса cln ;сброс флага знака ;вычитание значения АЦП от набранного значения mov Zl, r13 mov Zh, r14 subi Zl, $03 ;Вычитание старшего байта 5 В sbci Zh, $20 ;Вычитание младшего байта 5 В с заемом ______ brpl mwe rjmp ghh ; уровень АЦП достигнут ;Проверка на 4, 9 в mwe: nop clc ;сброс флага переноса cln ;сброс флага знака ;вычитание значения АЦП ОТ набранного значения mov Zl, r13 mov Zh, r14 subi Zl, $03 ;Вычитание старшего байта 4, 9 в sbci Zh, $10 ;Вычитание младшего байта 4, 9 в с заемом brpl lwe rjmp gii ;уровень АЦП достигнут ;Проверка на 4, 8 в lwe: nop clc ;сброс флага переноса cln ;сброс флага знака ;вычитание значения АЦП от набранного значения mov Zl, r13 mov Zh, r14 subi Zl, $03 ;Вычитание старшего байта 4, В в sbci Zh, $00 ;Вычитание младшего байта 4, В в с заемом brpl kwe rjmp ggg ;уровень АЦП достигнут ;Проверка на 4,7 в kwe: nop clc ;сброс флага переноса cln ;сброс флага знака ;вычитание значения АЦП от набранного значения mov Zl, r13 mov Zh, r14 subi Zl, $02 ;Вычитание старшего байта 4,7 в sbci Zh, $F0 ;Вычитание младшего байта 4,7 в с заемом nop brpl hwe rjmp gkk ;уровень АЦП достигнут ;Проверка на 4,6 в hwe: nop clc ;сброс флага переноса cln ;сброс флага знака ;вычитание значения АЦП от набранного значения mov Zl, r13 mov Zh, r14 subi Zl, $02 ;Вычитание старшего байта 4, 6 в sbci Zh, $E0 ;Вычитание младшего байта 4, 6 в с заемом brpl fwe rjmp gll ;уровень АЦП достигнут ;Проверка на 4, 5 в fwe: nop clc ;сброс флага переноса cln ;сброс флага знака ;вычитание значения АЦП от набранного значения mov Zl, r13 mov Zh, r14 subi Zl, $02 ;Вычитание старшего байта 4, 5 в sbci Zh, $D0 ;Вычитание младшего байта 4,5 в с заемом brpl dwe rjmp gmm ;уровень АЦП достигнут nop ;Проверка на 4, 4 в dwe: nop clc ;сброс флага переноса cln ;сброс флага знака ;вычитание значения АЦП от набранного значения mov Zl, r13 mov Zh, r14 subi Zl, $02 ;Вычитание старшего байта 4, 4 в sbci Zh, $D0 ;Вычитание младшего байта 4, 4 в с заемом brpl awe rjmp gnn ;уровень АЦП достигнут ;Проверка на 4, З в awe: nop clc ;сброс флага переноса cln ;сброс флага знака ;вычитание значения АЦП от набранного значения mov Zl, r13 mov Zh, r14 subi Zl, $02 ;Вычитание старшего байта 4, З в sbci Zh, $B0 ;Вычитание младшего байта 4, З в с заемом brpl twe rjmp goo ;уровень АЦП достигнут ;Проверка на 4, 2 в twe: nop clc ;сброс флага переноса cln ;сброс флага знака ;вычитание значения АЦП от набранного значения mov Zl, r13 mov Zh, r14 subi Zl, $02 ;Вычитание старшего байта 4,2 в sbci Zh, $A0 ;Вычитание младшего байта 4, 2 в с заемом brpl uwe rjmp gpp ;уровень АЦП достигнут ;Проверка на 4, 1 в uwe: nop ldi tmp5, $56;очень низкий уровень rjmp RNWW gaa: nop ldi Axx, $00 ldi Ayy, $10 rjmp RNWW gbb: nop ldi Axx, $00 ldi Ayy, $0F rjmp RNWW gcc: nop ldi Axx, $00 ldi Ayy, $0E rjmp RNWW gdd: nop ldi Axx, $00 ldi Ayy, $00 rjmp RNWW gee: nop ldi Axx, $00 ldi Ayy, $0C rjmp RNWW gff: nop ldi Axx, $00 ldi Ayy, $0B rjmp RNWW gjj: nop ldi Axx, $00 ldi Ayy, $09 rjmp RNWW ghh: nop ldi Axx, $00 ldi Ayy, $09 rjmp RNWW gii: nop ldi Axx, $00 ldi Ayy, $08 rjmp RNWW ggg: nop ldi Axx, $00 ldi Ayy, $07 rjmp RNWW gkk: nop ldi Axx, $00 ldi Ayy, $06 rjmp RNWW gll: nop ldi Axx, $00 ldi Ayy, $05 rjmp RNWW gmm: nop ldi Axx, $00 ldi Ayy, $04 rjmp RNWW gnn: nop ldi Axx, $00 ldi Ayy, $03 rjmp RNWW goo: nop ldi Axx, $00 ldi Ayy, $02 rjmp RNWW gpp: nop ldi Axx, $00 ldi Ayy, $01 nop RNWW: nop ret ;*********************************************** ;Подпрограммы обработки паузы. ;Получение 0,1632 С ti0: nop clr tmp ldi tmp, $6A ;корректировка времени таймера ТО out TCNT0, tmp clr tmp clr tmp10 er: nop inc tmp10 clr tmp4 ldi tmp, $05 out TCCR0, tmp ;запуск ТО, максимальное деление;СК/1024 ve: nop ldi tmp, $FA wdr cp tmp, Unag brge retr rjmp ve nop retr: nop cpi tmp10, $03 brlt er clr tmp out TCCR0, tmp ;останов таймера то ret ;Подпрограмма обработки прерывания от таймера то TIME_0: nop clr Unag ldi Unag, $FA reti ;*********************************************** ; Таблица констант АЦПl .ORG $1CA S18: .db $31, $32, $34, $35, $36, $37, $38, $39 ; .db $3A, $3C, $3D, $3E, $40, $43, $44, $46 ; S2: .db $36, $38, $3A, $3B, $3C, $30, $3E, $40 ; .db $41, $42, $44, $45, $47, $4A, $4C, $4E ; S25: .db $43, $46, $48, $4A, $4B, $4C, $4E, $50 ; .db $51, $53, $55, $56, $58, $5C, $5F, $61 ; S28: .db $4B, $4E, $51, $52, $54, $56, $57, $59 ; .db $5B, ' $5F, $61, $63, $68, $6A, $6D ; S3: .db $51, $54, $57, $58, $5A, $5C, $5E, $5F ; .db $61, $63, $65, $68, $6A, $6F, $72, $74 ; .EXIT |