Министерствообразования и науки Украины
Харьковскийнациональный университет радиоэлектроники
Кафедра:
Курсовая работа
По курсу: “ Цифровыеустройства и микропроцессоры”.
По теме: “Цифровойтермометр на микропроцессоре AVR — MEGA 128”.
Выполнил: Проверил:
ст. гр. ЛОЭТ – 06-1 Аврунин О.Г
Нестеренко А.А.
Зач.кн. N7211109
Харьков
2009 г.
Техническое задание
Разработать программу для микроконтроллера АVR-Mega128,выполняющую измерение температуры (с помощью датчика температуры TMP-35) врежиме непрерывного преобразования (делитель частоты равен 128) и формирующуюсигналы предупреждения с помощью блока светодиодов, если значение температурывыходит за рамки диапазона 300С
Реферат
Пояснительная записка содержит: 29 страниц текста, 7рисунков, список использованных материалов источников из 6 наименований.
Цель проекта – разработка программного продукта дляизмерения температуры на базе микроконтроллера АVR-Mega128.
В данной работе была разработана программа на баземикроконтроллера АVR-Mega128 для измерения температуры с помощью датчика ТМР-35.Измерения температуры производятся непрерывно. Выход значений за пределыизмерения сопровождается световим сигналом.
Ключевые слова: ДАТЧИК ТЕМПЕРАТУРЫ, МИКРОКОНТРОЛЛЕР, ЖКИ,ЦИФРОВОЙ ТЕРМОМЕТР, АЛГОРИТМ РАБОТЫ.
Содержание
Списокиспользуемых сокращений
Введение
1.Структура микроконтроллера ATMega128
1.1Назначение выводов
1.2Организация памяти и портов ввода/вывода микроконтроллера
2.Синтез структурной схемы
3. Синтезсхемы электрической принципиальной цифрового термометра
4.Разработка алгоритма работы микроконтроллера
Заключение
Списокисточников информации
ПримечаниеА (Текст программы работы микроконтроллера)
Список используемых сокращений
МК – микроконтроллер;
ОЗУ – оперативное запоминающее устройство;
ПЗУ – постоянное запоминающее устройство;
ПЭВМ – персональная электронно-вычислительная машина;
ЖКИ — жидко-кристаллический индикатор;
Д – датчик температуры.
Введение
Микроконтроллеры (МК) являються серцем многих современныхустройств и приборов. Самой главной особенностью МК, с точки зренияконструктора-проектировщика, является то, что с их помощью легче и зачастуюгораздо дешевле реализовать различные схемы [1- ст. 5].
МК может управлять различными устройствами и принимать отних данные при минимуме дополнительных узлов, так как большое числопереферийных схем уже имеется непосредственно на кристалле МК. Это позволяетуменьшить размеры конструкции и снизить потребление от источника питания [1-ст. 6].
AVR — это семейство 8-разрядных RISC-микроконтроллеровфирмы Atmel. Эти МК позволяют решить множество задач встроенных систем. Ониотличаються от других распостраненных в наше время микроконтроллеров большейскоростью работы, большей универсальностью. Кроме того, они очень легкопрограммируються. Их можно перепрограммировать до 1000 раз, причемнепосредственно в собранной схеме [1- ст. 9].
Имеются 3 подсемейства МК AVR:
Tiny AVR- недорогие миниатюрные МК в 8-выводномисполнении;
Classic AVR- основная линия МК с производительностьюотдельных модификаций до 16 MISP, FLASH- памятью программ 2…8 Кб, памятьюданных EEPROM 64...512 байт, оперативной памятью данных SRAM 128…512 байт;
Mega AVR- с производительностью 4…16 MISP для сложныхприложений требующих большого обьема памяти, FLASH- памятью программ до 128 Кб,памятью данных EEPROM 64...512 байт, оперативной памятью данных SRAM 2…4 байт,встроенным 10-разрядным 8-канальным АЦП, аппаратным умножителем 8х8.
Интересной особеннотью семейства МК является то, чтосистема комманд всего семейства совместима при переносе программы со слабого наболее мощный микроконтроллер [1- ст. 11].
1. Структура микроконтроллера ATMega128
В качестве ядра микроконтроллерной системы для измерениятемпературы в диапазоне 30-400С согласно техническому заданию был выбран AVRмикроконтроллера типа ATMega128.
1.1 Назначение выводов
На рис.1.1 изображен корпус и приведено назначениевыводов микроконтроллера. В скобках указана альтернативная функция вывода.
/>
Рис.1.1. Вид корпуса и обозначение выводовмикроконтроллера ATmega128.
Микроконтроллер ATmega128 включает следующиефункциональные блоки: — 8-разрядное арифметическо-логическое устройство ( АЛУ);
— внутреннюю флэш-память программ объемом 128 Кбайт свозможностью внутрисистемного программирования через последовательныйинтерфейс;
— 32 регистра общего назначения;
— внутреннюю EEPROM память данных объемом 4 Кбайт;
— внутреннее ОЗУ данных объемом 4 Кбайт;
— 6 параллельных 8-разрядных портов;
— 4 программируемых таймера-счетчика;
— 10-разрядный 8-канальный АЦП и аналоговый компаратор;
— последовательные интерфейсы UART0, UART0, TWI и SPI;
— блоки прерывания и управления (включая сторожевойтаймер).
Port A (PA7..PA). 8-разрядный двунаправленный порт. Квыводам порта могут быть подключены встроенные нагрузочные резисторы (отдельнок каждому разряду). Выходные буферы обеспечивают ток 20 мА и способность прямоуправлять светодиодным индикатором. При использовании выводов порта в качествевходов и установке внешнего сигнала в низкое состояние, ток будет вытекатьтолько при подключенных встроенных нагрузочных резисторах. Порт А при наличиивнешней памяти данных используется для организации мультиплексируемой шиныадреса/данных.
Port B (PB7..PB0). 8-разрядный двунаправленный порт совстроенными нагрузочными резисторами. Выходные буферы обеспечивают ток 20 мА.При использовании выводов порта в качестве входов и установке внешнего сигналав низкое состояние, ток будет вытекать только при подключенных встроенныхнагрузочных резисторах. Порт В используется также при реализации специальныхфункций.
Port C (PC7..PC0). Порт С является 8-разрядным выходнымпортом. Выходные буферы обеспечивают ток 20 мА. Порт C при наличии внешнейпамяти данных используется для организации шины адреса.
Port D (PD7..PD0). 8-разрядный двунаправленный порт совстроенными нагрузочными резисторами. Выходные буферы обеспечивают ток 20 мА.При использовании выводов порта в качестве входов и установке внешнего сигналав низкое состояние, ток будет вытекать только при подключенных встроенныхнагрузочных резисторах. Порт D используется также при реализации специальныхфункций.
Port Е (PЕ7..PЕ0). 8-разрядный двунаправленный порт совстроенными нагрузочными резисторами. Выходные буферы обеспечивают ток 20 мА.При использовании выводов порта в качестве входов и установке внешнего сигналав низкое состояние, вытекающий через них ток обеспечивается только приподключенных встроенных нагрузочных резисторах. Порт E используется также приреализации специальных функций.
Port F (PF7..PF0). 8-разрядный входной порт. Входы портаиспользуются также как аналоговые входы аналого-цифрового преобразователя.
#RESET. Вход сброса. Для выполнения сброса необходимоудерживать низкий уровень на входе более 50 нс.
XTAL1, XTAL2. Вход и выход инвертирующего усилителягенератора тактовой частоты.
TOSC1, TOSC2. Вход и выход инвертирующего усилителягенератора таймера/счетчика.
#WR, #RD. Стробы записи и чтения внешней памяти данных.
ALE. Строб разрешения фиксации адреса внешней памяти.Строб ALE используется для фиксации младшего байта адреса с выводов AD0-AD7 взащелке адреса в течение первого цикла обращения. В течение второго циклаобращения выводы AD0-AD7 используются для передачи данных.
AVCC. Напряжение питания аналого-цифровогопреобразователя. Вывод подсоединяется к VCC через низкочастотный фильтр.
AREF. Вход опорного напряжения для аналого-цифровогопреобразователя. На этот вывод подается напряжение в диапазоне между AGND иAVCC.
AGND. Это вывод должен быть подсоединен к отдельнойаналоговой земле, если она есть на плате. В ином случае вывод подсоединяется кобщей земле.
#PEN. Вывод разрешения программирования черезпоследовательный интерфейс. При удержании сигнала на этом выводе на низкомуровне после включения питания, прибор переходит в режим программирования попоследовательному каналу.
VСС, GND. Напряжение питания и земля [2-ст.7].
1.2 Организация памяти и портов ввода/выводамикроконтроллера
Микроконтроллеры AVR имеют раздельные пространства адресовпамяти программ и данных (гарвардская архитектура). Организация памяти МКATMega128 показана на рис. 1.2.
/>
Рис.1.2. Организация памяти микроконтроллера ATmega128
Высокие характеристики семейства AVR обеспечиваютсяследующими особенностями архитектуры:
• В качестве памяти программ используется внутренняяфлэш-память. Она организована в виде массива 16-разрядных ячеек и можетзагружаться программатором, либо через порт SPI;
• 16-разрядные память программ и шина команд вместе содноуровневым конвейером позволяют выполнить большинство инструкций за одинтакт синхрогенератора (50 нс при частоте FOSC=20 МГц);
• память данных имеет 8-разрядную организацию. Младшие 32адреса пространства занимают регистры общего назначения, далее следуют 64адреса регистров ввода-вывода, затем внутреннее ОЗУ данных объемом до 4096ячеек. Возможно применение внешнего ОЗУ данных объемом до 60 Кбайт;
• внутренняя энергонезависимая память типа EEPROM объемомдо 4 Кбайт представляет собой самостоятельную матрицу, обращение к которойосуществляется через специальные регистры ввода-вывода.
/>
Рис.1.3. Регистры общего назначения микроконтроллераATmega128
Как видно из рис. 1.2 и 1.3, 32 регистра общегоназначения (РОН) включены в сквозное адресное пространство ОЗУ данных изанимают младшие адреса. Хотя физически регистры выделены из памяти данных,такая организация обеспечивает гибкость в работе. Регистры общего назначенияпрямо связаны с АЛУ. Каждый из регистров способен работать как аккумулятор.Большинство команд выполняются за один такт, при этом из регистров файла могутбыть выбраны два операнда, выполнена операция и результат возвращен врегистровый файл. Старшие шесть регистров могут использоваться как три16-разрядных регистра, и выполнять роль, например, указателей при косвеннойадресации.
Следующие 64 адреса за регистрами общего назначениязанимают регистры ввода-вывода (регистры управления/состояния и данных). В этойобласти сгруппированы все регистры данных, управления и статуса внутреннихпрограммируемых блоков ввода-вывода. При использовании команд IN и OUTиспользуются адреса ввода-вывода с $00 по $3F. Но к регистрам ввода-выводаможно обращаться и как к ячейкам внутреннего ОЗУ. При этом к непосредственномуадресу ввода-вывода прибавляется $20. Адрес регистра как ячейки ОЗУ приводитсядалее в круглых скобках. Регистры ввода-вывода с $00 ($20) по $1F ($3F) имеютпрограммно доступные биты. Обращение к ним осуществляется командами SBI и CBI,а проверка состояния – командами SBIS и SBIC [2-ст.9].
2. Синтез структурной схемы
Структурная схема для цифрового термометра приведена нарисунке 2.1.
/>
Рисунок 2.1 – структурная схема цифрового термометра
На рисунке 2.1 показано:
ЖКИ – жидко-кристаллический индикатор;
МК – микроконтроллер;
Д– цифровой датчик температуры;
RS232С – последовательный интерфейс.
Микроконтроллер выполняет две основные функции:
производит опрос датчика температуры и сохраняет в ОЗУзначения температуры, полученные от датчика в каждом цикле опроса температуры;
по требованию компьютера, микроконтроллер отсылает вкомпьютер значения температуры из ОЗУ от датчика температуры.
Измеренная температура не только сохраняется, но ивыводится на жидкокристаллический экран (ЖКИ). Графические возможности экранапозволяют отображать не только цифровые значения температуры, но и отображатьизменения температуры во времени в виде графиков. Также микроконтроллер можетсохранять не одно значение температуры, а несколько (до 20 значений).
Если значение температуры выходит за диапазон 30-400С, томикроконтроллер формирует предупреждающий сигнал с помощью светодиодов.
Кнопка производит сброс, если измеренные значениятемпературы выходят за значения 30-400С.
При необходимости измеренные значения температуры можноввести на экран компьютер с помощью последовательного интерфейса RS232С.
3. Синтез схемы электрической принципиальной цифровоготермометра
В данном проекте разработан цифровой термометр сиспользованием микроконтроллера AVR ATMEGA128. Схема устройства представлена начертеже ЛОЕТ.06-1.09Э3. Перечень элементов –ЛОЕТ.06-1.09 ПЭ3.
Описание схемы устройства
Прибор осуществляет измерения путём заряда конденсаторадо уровня примерно равного VCC, последующего разряда его через опорный резисторс одновременным подсчётом внутренних тактов до того момента, пока на входе CINне появится лог. «0». Далее конденсатор снова заряжается до значения, близкогок VCC и разряжается через термистор, при этом также подсчитываются тактовыеимпульсы. Неизвестное сопротивление резистора вычисляется как отношение числатактов при разряде конденсатора термистором к числу тактов при разряде черезопорный резистор и последующим домножением на известное значение сопротивленияопорного резистора. Программа вычисляет сопротивле-ние термистора, переводитэто значение в температуру, переводит её в градусы Цельсия и отображаетзначение на ЖКИ.
К выводам 50,51 МК подключен датчик температуры ТМР 35,представленная на рисунке 3.1
/>
Рисунок 3.1- Микросхема TMP35
ТМР35 обеспечивает выходное напряжение, линейноизменяющееся пропорционально температуре по шкале Цельсия. TMP35 не требует внешнейкалибровки обеспечивая типичную точность +/-10C при +250C и +/-20C в диапазоне -400C к +1250C. Низкое выходное сопротивление TMP35 и линейность выводногонапряжения и отсутствие необходимости точной калибровки упрощает его подключениек электрической схеме терморегулятора, Аналого-цифровым преобразователя.Устройства питается по двухпроводной линии от источника напряжением от 2.7 V к5.5 V. Питающий ток имеет величину значительно ниже 50мка, обеспечивая оченьнизкий саморазогрев — меньше чем 0.10C в невозмущенной атмосфере. Кроме того,заложена функция отключения обеспечивающая снижение питающего тока до величиныменьше чем 0.5мка. TMP35 работает при температуре от 100C до 1250C [3]. Резисторы R12 и R13 ограничивают ток, проходящий через датчик.
К выводам 14 и 15 (PB4, PB5) микроконтроллера с помощьюограничиваю-щих резисторов R2 ÷ R4 подсоединяется выводами CLK и DI ЖКИ,выполненный на микросхеме НТ1611. Через ограничивающие резисторы R6, R6 квыводу VDD подводится напряжение питания от источника.
Жидкокристаллический индикатор показан на рисунке 3.2
/>
Рисунок 3.2- Микросхема НТ1611
Если измеренные значения температуры выходят за заданныепределы, то загораютя светодиоды VD1, VD2. R9,R10 ограничивают ток, проходящийчерез светодиоды.
К выводым 2, 3 (РЕ0, РЕ1) микроконтроллера присоединяетсямикросхема MAX232C, которая позволяет производить обмен информацией скомпьютером через последовательный интерфейс RS232C. Для этого задействованывыводы T1IN, T1OUT, R1IN, R1OUT. В соответствии с описанием микросхемы квыводам C1+, C1- и C2+, C2- подключаются конденсаторы С3, С4 емкостью 0,1 мкФ.Такие же конденсаторы С1, С2 для создания необходимых уровней питанияподключаются к ножке 2 (Vs+) и к шине питания; к ножке 6 (Vs-) и к земле [1].Устройство можно подключить к компьютеру с помощью разъема XР1.
Условное графическое обозначение микросхемы MAX232Cпоказан на рисунке 3.3.
/>
Рисунок 3.3 – УГО ADM202_SO16
Микросхема ADM202_SO16 позволяет осуществлять связь поинтерфейсу RS232C одновременно с двумя устройствами.
Для формирования правильного импульса сброса в моментвключения питания к выводу (RESET) микроконтроллера подключена RC-цепочка (R11,C9).Эта цепь используется для задержки запуска микроконтроллера при включениипитания, что нужно для его правильного запуска, а также для ручного перезапускамикроконтроллера нажатием на кнопку SВ1. Цепь сброса по включению питанияобеспечивает запрет включения процессора до тех пор, пока напряжение питания недостигнет безопасного уровня. После того, как напряжение питания достигнетуровня включения, процессор не включается до тех пор, пока встроенный таймер необработает несколько периодов сторожевого таймера. Внешний сброс обрабатываетсяпо низкому уровню на выходе RESET. Вывод должен удерживаться в низкомсостоянии, по крайней мере, два периода тактовой частоты. После снятия сигнала0 с вывода RESET через некоторое время микроконтороллер запускается. Крометого, для информирования пользователя о рабочем режиме подключается светодиодVD3. Этот светодиод мигает зеленым цветом, когда производится чтение значений температурыиз датчика. В остальное время светодиод не горит. Так как чтение значенийтемпературы происходит непрерывно, кроме случаев прерывания вызванных для связис компьютером, то светодиод мигает с периодом 0,8 мс. И перестает мигать вмомент обмена информацией с компъютером [1].
К выводам 23 (XTA/L1) и 24 (XTA/L1) МК подсоединяетсякварцевый резонатор ZQ1 с частотой 14 МГц. Для облегчения запуска тактовогогенератора необходимо подключение двух конденсаторов С7 и С8.
Устройство получает питание от аккумулятора напряжением 5В через сглаживающий С-фильтр, состоящий из конденсаторов С5и С6 и стабилизаторанапряжения. К вспомогательным устройствам относятся автоматический выключатель QF1и индикатор включения – светодиод VD5. Резистор R7 ограничивает ток черезсветодиод. Стабилизатор напряжения включается между выходом выпрямителя инагрузкой. Он выполнен на микросхеме DD3 типа КР142ЕН5А.
В качестве резисторов были выбраны резисторы МЛТ. Этометаллопленочные резисторы, которые содержат резистивный элемент в виде оченьтонкой металлической пленки, осажденной на основание из керамики, стекла,слоистого пластика, ситалла или другого изоляционного материала.Металлопленочные резисторы характеризуются высокой стабильностью параметров,слабой зависимостью сопротивления от частоты и напряжения и высокойнадежностью. Недостатком некоторых металлопленочных резисторов являетсяпониженная надежность при повышенной номинальной мощности, особенно приимпульсной нагрузке. ТКС резисторов типов МЛТ не превышает 0,02% °С. Уровеньшумов резисторов группы А не более 1 мкВ/В, группы Б – не более 5 мкВ/В.
Конденсаторы С6 — типа К53 — 4 – электролитический,оксиднополупроводниковый. Конденсаторы С1…С5, С9, С10 типа КМ-6– этокерамические монолитные конденсаторы, широко применяется в разнообразныхконтурах и цепях радиоаппаратуры УКВ и КВ в качестве блокировочных, переходныхи т.д.
Конденсаторы С7,C8 типа КЛС – конденсаторы керамческиелитые секционные. Это конденсаторы постоянной емкости, общего назначения, которыепредназначены для работы в цепях постоянного, переменного и импульсного тока.
Программирование МК осуществляется через разъем XP2.
4. Разработка алгоритма работы микроконтроллера
Программа работы микроконтроллера заключается вследующем:
при нажатии кнопки RESET (SB1) производится непрерывный(циклический) опрос датчика и сохранение полученных значений температуры в ОЗУ.
непрерывлый вывод полученных значений температуры на ЖКИиндикатор (цифровое отображение информации на экране)
формирование сигнала предупреждения с помощью блокасветодиодов в случае выхода значения температуры за пределы 300С
Алгоритм программы приведен на рисунке 4.1.
Первым действием в программе производятся начальныеустановки микроконтроллера. В них устанавливается указатель стека на последнююячейку ОЗУ, исходное состояние каналов связи с датчиками температуры и UART,скорость обмена по UART, разрешаются прерывания от таймера/счетчика0 и от UART,переписывается количество и индивидуальные адреса датчиков температуры изEEPROM в ОЗУ, в регистры записываются необходимые константы.
Когда начальные установки завершены, начинается частьпрограммы, которая производит опрос датчика температуры. Она будет циклическиповторятся, пока подводится питание к микроконтроллеру или пока не возникнетзапрос на прерывание. Опрос датчика температуры начинается с сигнала сброса налинии (блок 2 рисунок 4.1) Затем следует команда игнорирования адреса датчикатемпературы SKIP ROM [CCh].
Команда начала измерения температуры CONVERT T [44h](блок 4, рисунок 4.1) разрешает преобразование значений температуры в цифровойвид для датчика.
/>
Рисунок 4.1 – Алгоритм работы микроконтроллера
Аналого-цифровое преобразование значений температурызанимает время от 750 мс до 800 мс. Поэтому, чтобы получить правильное значениетемпературы, необходимо выждать паузу 800 мс (блок 5, рисунок 4.1). Паузавыдерживается с помощью таймера/счетчика 0. Во время паузы можно совершать другиедействия (например, произвести обмен данными с компьютером или вывестирезультаты на ЖКИ).
После паузы производится опрос датчика. Опрос датчиканачинается с сигнала сброса на линии связи с датчиком (блок 6, рисунок 4.1).После сигнала сброса и ответного сигнала от датчика следует команда MATCH ROM[55h]. Эта команда сообщает датчику, что после неё на линии связи будетвыставлен индивидуальный 64-х битовый адрес датчика. После того, как адресвыставлен на линии, датчик температуры сравнивает выставленный адрес со своимсобственным адресом, и, после этого к работе с микроконтроллером датчик готов.
В блоке 7 производится чтение значения температуры изапись его в соответствующие ячейки ОЗУ.
В блоке 8 производится ветвление программы: если измеренноезначение температуры не выходит за пределы 300С
Если необходимо продолжать измерять температуру (блок11), то переходят к блоку 4, если нет, то тогда происходит завершениепрограммы.
Программа работы микроконтроллера для измерениятемпературы приведена в приложении А.
Заключение
В данном курсовом проекте был разработан цифровойтермометр, позволяющий снимать температуру датчиком температуры ТМР35,обрабатывать полученную информацию и выводить результат измерений в цифровомвиде на экран ЖК индикатора. Также с помощью последовательного интерфейсавозможна их передача на экран персонального компьютера для получения исохранения неограниченного количество этих значений, проведения статистическогоанализа и слежение за изменением температуры во времени для разных этапов измерения.
В ходе проектирования были разработаны структурная ипринципиальная электрическая схемы, алгоритм работ и текст программы длямикроконтроллерной системы.
Таким образом, разработанный цифровой термометр являетсякомпактным, переносным устройством, дающим точную информацию о температуре, чтопозволяет расширить возможности измерений.
Список источников информации
1.Голубцов М.С., Кириченкова А.В. Микроконтроллеры AVR: от простого к сложному.Изд.2-е, испр. И доп. – М.: СОЛОН- Пресс, 2006. 304с.- (Серия «Биб-лиотекаинженера»).
2. КитаевЮ.В. Основы программирования микроконтроллеров AT MEGA128 и 68HC908. Учебноепособие: СПб: СпбГУ ИТМО, 2007, 107с.
УДК681.32
3. LowVoltage Temperature Sensors. TMP35/TMP36/TMP37
4. pdfserv.maxim-ic.com/arpdf/DS18S20.pdf.
Датчики для измерения температуры.
5.Температурные измерения. Справочник./ Геращенко О.А. Гордов А.Н., Еремина А.К.,и др.; отрв. Ред. Геращенко О.А.; АН УССР Ин-т проблем энергосбережения. –Киев: Наук. думка, 1989г. 704 с.
6. www.chip-dip.ru/product0/61922.aspx
Кнопки тактовые.
Приложение А
Текст программы
; Системные определения для 320 STK/EVK
TOOL SET 0; 0 = STK/EVK ОЗУ
; 1 = Симулятор
; 2 = Встроенное ПЗУ
STACK EQU 003DEH; Указатель стека
RAM_ORIG EQU 00200H; Начальный адрес памяти ОЗУ
ROM_ORIG EQU 0C100H; Начальный адрес памяти ПЗУ
IF TOOL = 0
I_VECTORS EQU 003FFH; Вектора прерываний в ОЗУ
MAIN EQU RAM_ORIG+20H; Стартовый адрес программы в ОЗУ
BTLOAD EQU 035H; Прерывания раз в 0,5 сек.
ELSEIF TOOL = 1
I_VECTORS EQU 0FFFFH; Вектора прерываний в ПЗУ
MAIN EQU ROM_ORIG; Стартовый адрес программы в ПЗУ
BTLOAD EQU 011H; Частые прерывания (не 1 сек)
ELSE
I_VECTORS EQU 0FFFFH; Вектора прерываний в ПЗУ
MAIN EQU ROM_ORIG; Стартовый адрес программы в ПЗУ
BTLOAD EQU 035H; Прерывания раз в 0,5 сек.
.ENDIF
; Определения для АЦП на базе модуля TIMER PORT
TPCTL EQU 04BH; Рег.управ.модулем TIMER PORT (04BH)
TPSSEL0 EQU 040H; Источник тактирования:0=CMP,
;1=ACLK (Бит 6 в TPCTL)
ENB EQU 020; Контроль сигнала EN1 в TPCNT1
;1(+ENA=1)=CMP (Бит 5 в TPCTL)
ENA EQU 010H; Контроль сигнала EN1 в TPCNT1
;1(+ENB=1)=CMP (Бит 4 в TPCTL)
EN1 EQU 008H; Сигнал ENABLE в TPCNT1 только
; для чтения (Бит 3 в TPCTL)
RC2F EQU 004H; Флаг перепол.TPCNT2(Бит2в TPCTL)
EN1FG EQU 001H; Флаг EN1 (Бит 0 в TPCTL)
TPIE EQU 004H; Разреш.прерыв.от TIMER(Бит3вIE2)
TPCNT1 EQU 04CH; Младший байт счётчика
TPCNT2 EQU 04DH; Старший байт счётчика
TP EQU 04EH; Регистр данных TP(0–5=Выход TP,
;6=CPON,7=B16=2x8 Бит или1x16Бит
B16 EQU 080H; Раздел.тайм-ы(0)или один16-бит(1)
CPO EQU 040H; Компаратор выкл (0) / вкл (1)
TPDMAX EQU 002H; бит вых.TPD.MAX(2=Бит1=TPD.1)
TPE EQU 04FH; Рег.разреш.выходов 0–5=биты разреш
.TPD (6–7=ист.тактир.TPCNT2)
MSTACK EQU 03D2H ;1-е слово стека результата
PRESET EQU 0E8H; Предустановка TPCNT2 для заряда С
; счёт останавливается при
; переполнении TPCNT2, значение
; рассчитано на постоянную врем.6RC
; Определения управляющих регистров
IE1 EQU 0H; Регистр разрешения прерываний 1
IE2 EQU 01H; Регистр разрешения прерываний 2
P01IE EQU 08H; Разрешение прерываний отP0.1в IE1
BTIE EQU 080H; Разреш.прерыв.от BASIC TIMER в IE2
IFG1 EQU 02H; Регистр флагов прерываний 1
IFG2 EQU 03H; Регистр флагов прерываний 2
LCDCTL EQU 030H; Регистр управления ЖКИ
LCDM1 EQU 031H; Первая ячейка памяти ЖКИ
BTCTL EQU 040H; Регистр управления BASIC TIMER
BTCNT1 EQU 0046H; Счётчик 1 BASIC TIMER
BTCNT2 EQU 0047H; Счётчик 2 BASIC TIMER
WDTCTL EQU 0120H; Регистр управления WATCHDOG
WDTHOLD EQU 080H; Маска останова WATCHDOG
WDT_KEY EQU 05A00H; Ключ доступа к WATCHDOG
WDT_STOP EQU 05A80H ;WATCHDOG маска + ключ
GIE SET 8H; Общее разрешение прерываний
CPUOFF SET 10H; Бит выключения CPU
OSCOFF SET 20H; Бит выключения генератора
SCG0 SET 40H; Контр.сист.тактирования, бит0
SCG1 SET 80H; Контр.сист.тактирования, бит1
LPM0 SET CPUOFF; Биты установки режима LPM0
LPM1 SET SCG0+CPUOFF; Биты установки режима LPM1
LPM2 SET SCG1+CPUOFF; Биты установки режима LPM2
LPM3 SET SCG1+SCG0+CPUOFF; Биты установки режима LPM3
LPM4 SET OSCOFF+CPUOFF; Биты установки режима LPM4
; Служебные регистры для вычисления сопротивления датчика
MLTPLR_HW EQU R5
TEN_K EQU R6
BITTEST EQU R7
MRESLT_HW EQU R8
MRESLT_LW EQU R9
LPCNTR EQU R10
RESULT EQU R11
; Начало программы
SECT ”MAIN”,MAIN
RESET MOV #STACK,SP; Инициализация указателя стека
; Конфигурация периферии
SETUP
SETUPINT MOV.B #P01IE,&IE1; Разреш.P0.1/UART для S232
MOV.B #BTIE+TPIE,&IE2; Разреш.прерыв.от B.TIMER,&TMR.PORT
CLR.B &IFG1; Очистить все флаги прерываний
CLR.B &IFG2
EINT; Разрешить прерывания
SETUPWDT MOV #WDT_STOP,&WDTCTL; Остановить WATCHDOGTIMER
SETUPLCD MOV.B #0FFH,&LCDCTL; ЖКИ STK, все сегменты,4MUX
SETUPBT MOV.B #BTLOAD,&BTCTL; Загруз.част.прерыв вBASIC TIMER
CLR.B &BTCNT1; Очистить счётчик BT 1
CLR.B &BTCNT2; Очистить счётчик BT 2
CLEARLCD MOV #15,R6; Очистить 15 ячеек памяти ЖКИ
CLEAR1 MOV.B #0,LCDM1–1(R6); записав туда «0»
DEC R6; Вся памяти ЖКИ очищена?
JNZ CLEAR1; нет, чистим дальше
; Начало основной программы
BEGIN BIS #LPM3,SR; Установить SR-биты для LPM3
; Подпрограмма измерения с запрещёнными прерываниями.TP.2–.5 не
; используются поэтому переписаны. Используются толькоTPD.0 & 1.
; Начальная инициализация: Указатель стека = 0, Начало сTPD.1
;16–битный таймер, тактирование от MCLK, CIN разрешаетсчёт MEASURE PUSH.B #TPDMAX; Сохранить в стеке для послед.использ.
CLR R8; Указатель для стека результата
MEASLOP MOV.B #(TPSSEL0*3)+ENA,&TPCTL
;TPCNT1 CLK=MCLK, EN1=1
; Конденсатор С заряжается на протяжении t>5нс.Используютсявыходы N–1
MOV.B #B16+TPDMAX–1,&TPD; один16-бит.счёт, выбор вых. заряда
MOV.B #TPDMAX–1,&TPE; Разрешить выходы заряда
MOV.B #PRESET,&TPCNT2; Загрузить время заряда
BIS #CPUOFF,SR; Режим понижен.потребления
MOV.B @SP,&TPE; Разрешить только текущий датчик
CLR.B &TPCNT2
; Запрет.все прерыв.для обеспеч.непрерыв.работы тайм.иразряд конден.
DINT; Запрет прерываний
CLR.B &TPCNT1; Очистить младший байт таймера
BIC.B @SP,&TPD; Переключить все датчики в «0»
MOV.B #(TPSSEL0*3)+ENA+ENB,&TPCTL;TPCNT1 CLK=MCLK,
; разрешить вход CIN
EINT; Разрешить прерывания, общий старт
BIS #CPUOFF,SR; Режим пониженного потребления
; EN=0: Завершение преобразования: 2X8 бит результата вMSTACK
; Сохранить результат в стеке
MOV.B &TPCNT2,MSTACK+1(R8)
; Сохранить старший байт результата
L$301 INCD R8; Инкремент адреса
RRA.B @SP; Следующий выход TPD.X
JNC MEASLOP; Если C=1 – завершение
INCD SP; Убрать старший TPD из стека
; Вычисление сопротивления датчика
; Подпрограмма беззнакового умножения:MSTACK X TEN_KMRESLT_HW/MRESLT_LW
; Использованы рег.MSTACK,TEN_K,MLTPLR_HW,MRESLT_LW,MRESLT_HW, BITTEST
; Подпрограмма беззнакового умножения с накоплением
;(MSTACK X TEN_K) + MRESLT_HW|MRESLT_LW –>MRESLT_HW|MRESLT_LW
CALC_RES
MOV #10000,TEN_K; Загрузить 10,000 десятичное в TEN_K
MPYU CLR MRESLT_LW; 0? LSBS результата
CLR MRESLT_HW; 0? MSBS результата
MACU CLR MLTPLR_HW; 0? MSBS множителя
MOV #1,BITTEST; Регистр проверки бит
L$002 BIT BITTEST,MSTACK; Проверить текущий бит
JZ L$01; Если «0» ничего не делать
ADD TEN_K,MRESLT_LW; Если «1»добавить множитель к резул
ADDC MLTPLR_HW,MRESLT_HW
L$01 RLA TEN_K; Множитель X 2
RLC MLTPLR_HW
RLA BITTEST; Проверить следующий бит
JNC L$002; Если бит в CARRY: завершить
; Подпрограмма беззнакового деления 32–бита на 16-бит
; Использованы регистры (MSTACK+2),MRESLT_LW,RESULT,LPCNTR, MRESLT_HW
; MRESLT_HW MRESLT_LW / (MSTACK+2) RESULT Остаток вMRESLT_HW
; По выходу: CARRY = 0: OK CARRY = 1: Частное > 16 Бит
DIVIDE CLR RESULT; Очистить RESULT
MOV #17,LPCNTR; Инициализация счётчика
DIV1 CMP MSTACK+2,MRESLT_HW
JLO DIV2
SUB MSTACK+2,MRESLT_HW
DIV2 RLC RESULT
JC RES_2_F; Ошибка: RESULT > 16 Бит
DEC LPCNTR; Декремент счётчика
JZ DIV3; 0: выход без ошибки
RLA MRESLT_LW
RLC MRESLT_HW
JNC DIV1
SUB MSTACK+2,MRESLT_HW
SETC
JMP DIV2
DIV3 CLRC; Ошибки нет, C = 0
; Перевод сопротивления датчика в градусы Цельсия дляотображения RES_2_F
CLR R12; Указат.на значение в табл.R
MOV #064H,R13; Поместить мин.темп.-1 в индик
JMP FIRST_CMP; При первом сравн.1 не добав.
CHECK_R INCD R12 ;INC указат.на знач.в таб.cопрот.
DADD #1,R13; Десятичный инкремент счётчика
FIRST_CMP CMP RESIS_TAB(R12),RESULT
; Сравнить табличное значение с вычисленным сопротивлением
JNC CHECK_R; Переход, если R датч.
; по адресу указателя
; Отобразить ”С” и знак «°» на ЖКИ
DISPLAY MOV.B #A+E+F+D,LCDM1+1 ;”С”? дисплейная памятьЖК
MOV.B #A+B+F+D,LCDM1+2 ;” °” (знак градуса)
; Отобразить значение, хранящееся в R13 в формате BCD наЖКИ
MOV R13,R12; Копир.число в виде BCD в R12
MOV #LCDM1+4,R14; Младшая цифра в памяти ЖКИ; R14
BIC #0FFF0H,R13; Погасить всё, кроме младшей цифры
MOV.B LCD_TAB(R13),0(R14); Отпр.мл.цифру в ЖКИ
MOV R12,R13; Восстановить значение в R13
RRA R13; 4 сдвига
RRA R13
RRA R13
RRA R13
BIC #0FFF0H,R13; Погасить всё, кроме млад.цифры
MOV.B LCD_TAB(R13),1(R14); Отправить старшую цифру в ЖКИ
JMP BEGIN; Переход к началу программы
; ЖКИ модуля STK
LCD_TYPE
A EQU01H
B EQU02H
C EQU10H
D EQU04H
E EQU80H
F EQU20H
G EQU08H
H EQU40H
LCD_TAB BYTE A+B+C+D+E+F; Отображает”0”
.BYTE B+C; Отображает”1”
.BYTE A+B+D+E+G; Отображает”2”
.BYTE A+B+C+D+G; Отображает”3”
.BYTE B+C+F+G; Отображает”4”
.BYTE A+C+D+F+G; Отображает”5”
.BYTE A+C+D+E+F+G; Отображает”6”
.BYTE A+B+C; Отображает”7”
.BYTE A+B+C+D+E+F+G; Отображает”8”
.BYTE A+B+C+D+F+G; Отображает”9”
; Табл.сопротив.30–40 °C. Значения = KОмыX1000–в 3децимальных цифры
.EVEN; Выравнивание по чётному адресу
RESIS_TAB
.WORD 12953 ;300C
.WORD 12666
.WORD 12378
.WORD 12090
.WORD 11858
.WORD 11626
.WORD 11393
.WORD 11161
.WORD 10929
.WORD 10353 ;400C
; Вектора прерываний
.EVEN; Выравнивание по чётному адресу
.SECT ”INT_VECT”,I_VECTORS–31
.WORD RESET; PORT0, Биты 2… 7
.WORD BTINT; BASIC TIMER
.WORD RESET; Нет источника
.WORD RESET; Нет источника
.WORD RESET; Нет источника
.WORD TPINT; TIMER PORT
.WORD RESET; Нет источника
.WORD RESET; Нет источника
.WORD RESET; Нет источника
.WORD RESET; Нет источника
.WORD RESET; WATCHDOG/TIMER, Режим таймера
.WORD RESET; Нет источника
.WORD RESET; UART
.WORD RESET; P0.0
.WORD RESET; NMI, Сбой генератора
.WORD RESET; POR, Внеш. Reset, WATCHDOG
.END