Главная страница
Навигация по странице:

  • МОСКОВСКИЙ ПОЛИТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ Кафедра «Автоматика и управление» Курсовая работа по дисциплине

  • Курсовая СЭС. Курсовая работа. Программирование микропроцессорных устройств


    Скачать 335 Kb.
    НазваниеПрограммирование микропроцессорных устройств
    АнкорКурсовая СЭС
    Дата26.11.2021
    Размер335 Kb.
    Формат файлаdoc
    Имя файлаКурсовая работа.doc
    ТипКурсовая
    #283214


    Министерство образования и науки Российской Федерации
    Федеральное государственное бюджетное образовательное учреждение

    высшего образования
    МОСКОВСКИЙ ПОЛИТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
    Кафедра «Автоматика и управление»

    Курсовая работа

    по дисциплине:

    «Микропроцессорная техника»

    на тему: «Программирование микропроцессорных устройств»

    Выполнил: Богдан Д.А.

    Группа 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. Разработан алгоритм работы МП устройства

    2. Разработана электрическая схема МП устройства

    3. Разработана и отлажена программа МП устройства на Ассемблере.

    4. Описан процесса отладки и тестирования программы МП устройства.

    В приложении приведен исходный текст программы на языке ассемблер.

    Список литературы



    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






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