Разработка термометра-термостата на интегральном датчике температур DS18B20 и микроконтроллере PIC16F84

  • Вид работы:
    Контрольная работа
  • Предмет:
    Информатика, ВТ, телекоммуникации
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    1,7 Мб
  • Опубликовано:
    2012-11-22
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Разработка термометра-термостата на интегральном датчике температур DS18B20 и микроконтроллере PIC16F84

Оглавление

Техническое задание

Описание цифрового термометра DS18B20

Описание МК PIC16F84

Описание алгоритма работы

Листинг программы

Техническое задание


Необходимо разработать термометр-термостат на интегральном датчике температур DS18B20, и микроконтроллере PIC16F84. Данное устройство предназначено для измерения температуры и вывода ее на дисплей.

Описание цифрового термометра DS18B20

 

DS18B20 - цифровой термометр с программируемым разрешением, от 9 до 12-bit, которое может сохраняться в EEPROM памяти прибора. DS18B20 обменивается данными по 1-Wire шине и при этом может быть как единственным устройством на линии так и работать в группе. Все процессы на шине управляются центральным микропроцессором.

Диапазон измерений от -55°C до +125°C и точностью 0.5°C в диапазоне от -10°C до +85°C. В дополнение, DS18B20 может питаться напряжением линии данных (“parasite power”), при отсутствии внешнего источника напряжения.

Каждый DS18B20 имеет уникальный 64-битный последовательный код, который позволяет, общаться с множеством датчиков DS18B20 установленных на одной шине. Такой принцип позволяет использовать один микропроцессор, чтобы контролировать множество датчиков DS18B20, распределенных по большому участку. Приложения, которые могут извлечь выгоду из этой особенности, включают системы контроля температуры в зданиях, и оборудовании или машинах, а так же контроль и управление температурными процессами.

Рис. 1 показывает блок-схему DS18B20, и описания выводов даются в Таблице 1. 64-битовый ROM запоминает уникальный последовательный код прибора. Оперативная память содержит 2-байтовый температурный регистр, который хранит значение температуры по окончанию температурного преобразования. Два однобайтовых регистра температуры контроля температуры (триггерной схемы TH и TL), и к регистру конфигурации. Регистр конфигурации позволяет пользователю устанавливать разрешающую способность цифрового преобразователя температуры к 9, 10, 11, или 12 битам, это и влияет на время конвертирования температуры. TH, TLи регистры конфигурации энергонезависимы (EEPROM), таким образом они сохранят данные, когда прибор - выключен.B20 использует исключительно 1-Wire протокол - при этом формируется соединение, которое осуществляет коммуникацию на шине, используя всего один управляющий сигнал. Шина должна быть подключена к источнику питания через подтягивающий резистор, так как все устройства связаны с шиной, используют соединение через Z-состояния или вход открытого стока. Используя эту шину микропроцессор (устройство управления) идентифицирует и обращается к датчикам температуры, используя 64-битовый код прибора. Поскольку каждый прибор имеет уникальный код, число приборов, к которым можно обратиться на одной шине, фактически неограниченно.

Другая особенность DS18B20 - способность работать без внешнего питания. Эта возможность предоставляется через подтягивающий резистор. Высокий сигнал шины заряжает внутренний конденсатор (CPP), который питает прибор, когда на шине низкий уровень. Этот метод носит название «Паразитное питание». При этом максимальная измеряемая температура составляет + 100 °C. Для расширения диапазона температур до + 125 °C необходимо использовать внешнее питание.

Рис. 1. Блок-схема DS18B20

Таблица 1


Описание МК PIC16F84 <#"581211.files/image003.gif">

Рис.2. МК PIC16F84

Серия PIC16F84 подходит для широкого спектра приложений от схем высокоскоростного управления автомобильными и электрическими двигателями до экономичных удаленных приемопередатчиков, показывающих приборов и связных процессоров. Наличие ПЗУ позволяет подстраивать параметры в прикладных программах (коды передатчика, скорости двигателя, частоты приемника и т.д.).

Малые размеры корпусов, как для обычного, так и для поверхностного монтажа, делает эту серию микроконтроллеров пригодной для портативных приложений. Низкая цена, экономичность, быстродействие, простота использования и гибкость ввода/вывода делает PIC16F84 привлекательным даже в тех областях, где ранее не применялись микроконтроллеры. Например, таймеры, замена жесткой логики в больших системах, сопроцессоры.

Следует добавить, что встроенный автомат программирования EEPROM кристалла PIC16F84 позволяет легко подстраивать программу и данные под конкретные требования даже после завершения ассемблирования и тестирования. Эта возможность может быть использована как для тиражирования, так и для занесения калибровочных данных уже после окончательного тестирования.

Технические характеристики:

Высокоскоростной RISC процессор

·        только 35 простых команд;

·        все команды выполняются за один цикл(400ns), кроме команд перехода, выполняющихся за два цикла;

·        рабочая частота 0 Гц... 10 МГц (min 400 нс цикл команды);

·        14- битовые команды;

·        8- битовые данные;

·        1024 х 14 электрически перепрограммируемой программной памяти на кристалле (EEPROM);

·        36х 8 регистров общего использования;

·        64 x 8 электрически перепрограммируемой EEPROM памяти для данных;

·        восьмиуровневый аппаратный стек;

·        прямая, косвенная и относительная адресация данных и команд;

·        четыре источника прерывания:

Ø  внешний вход INT,

Ø  переполнение таймера RTCC,

Ø  прерывание при изменении сигналов на линиях порта B,

Ø  по завершению записи данных в память EEPROM.

Периферия и Ввод/Вывод

¨      13 линий ввода-вывода с индивидуальной настройкой;

¨      втекающий/вытекающий ток для управления светодиодами.

·        макс. вытекающий ток - 20 мА.,

·        макс. втекающий ток - 25 мА.,

¨      TMR0: 8 - битный таймер/счетчик RTCC с 8-битным программируемым предварительным делителем.

Специальные свойства

¨      автоматический сброс при включении;

¨      таймер включения при сбросе;

¨      таймер запуска генератора;

¨      Watchdog таймер WDT с собственным встроенным генератором, обеспечивающим повышенную надежность;

¨      EEPROM бит секретности для защиты кода;

¨      экономичный режим SLEEP;

¨      выбираемые пользователем биты для установки режима возбуждения встроенного генератора:

Ø  RC генератор : RC;

Ø  обычный кварцевый резонатор : XT;

Ø  высокочастотный кварцевый резонатор : HS;

Ø  экономичный низкочастотный кристалл : LP;

¨      встроенное устройство программирования EEPROM памяти программ и данных; используются только две ножки.

КМОП технология

¨      экономичная высокоскоростная КМОП EPROM технология;

¨      статический принцип в архитектуре;

¨      широкий диапазон напряжений питания и температур:

·        коммерческий: 2.0... 6.0 В, 0...+70С,

·        промышленный: 2.0... 6.0 В, -40...+70С,

·        автомобильный: 2.0... 6.0 В, 40...+125С;

¨      низкое потребление:

·        2 мА типично для 5В, 4МГц,

·        15 мкА типично для 2В, 32КГц,

·        1 мкА типично для SLEEP режима при 2В.

Типы корпусов и исполнений

Обозначения корпусов для кристаллов PIC16F84. Тип корпуса указывается в Маркировке при заказе микросхем. Корпуса бывают только с 18 Выводами.- Обычный пластмассовый двухрядный корпус- Малогабаритный DIP корпус для монтажа на поверхность

Маркировка при заказе

Обозначение микросхем складывается из следующих полей:

Фирм. номер/Частота генератора/Темпер. диапазон/Корпус/Примеч.

Фирм. номер : PIC16F84 Vdd range 4...6 V,LC84 Vdd range 2...6 V;

Частота генератора:

---> 4 mHz (большинство 4 МГц. приборов работает до 10 МГц.!),

---> 10mHz;

от 0С до +70С,от-40С до +85С,от-40С до +125С;

Корпус обозначается:- обычный пластмассовый DIP,-300 mil SOIC.

Рис. 3. Термометр с выносным датчиком

Описание алгоритма работы


Работа термометра начинается с опрашивания датчика температуры, после чего эта температура выводится на дисплей, и в зависимости от нее и настроек, МК управляет реле.

Рис. 4. Структурная схема термометра

цифровой термометр микроконтроллер

Рис. 5. Функциональная схема термометра

Рис. 6. Принципиальная схема термометра

Рис. 7. Печатная плата термометра

Листинг программы

P=16F84

;Описание встроенных в контроллер ресурсов

#include <P16F84.INC>

__config _XT_OSC & _WDT_OFF & _PWRTE_ON

F0 EQU 0equ 2

;Переменные и константы, используемые в программе

NumL EQU 0x0CEQU 0x0DEQU 0x0EEQU 0x0FEQU 0x10EQU 0x11EQU 0x13EQU 0x14EQU 0x15 EQU 0x16EQU 0x17 ;Три ячейки, содержат семисегментный код для вывода на индикатор

RAZR1 EQU 0x18

RAZR2 EQU 0x19

;В переменной FLAGS каждый бит сигнализирует о:

;0 - нажата кнопка вызова таймера

;1 - нажата кнопка установки таймера

;2 - необходимости обновления в экранном буфере оставшегося времени в таймере

;3 - произошло нажатие кнопки вызова таймера, необходимо подать короткий звуковой сигнал

;4 - закончилась выдержка времени таймера, необходимо подать условный звуковой сигнал

;5 - раз в секунду сигнализирует о необходимости считывания показаний DS1820

;6 - необходимости вывода десятичной точкиEQU 0x1A

J EQU 0x1BEQU 0x1CEQU 0x1DEQU 0x1EEQU 0x1F

T7SEG0 EQU 0x20SEG1 EQU 0x21SEG2 EQU 0x22_IND EQU 0x23

TEMP_READH EQU 0x24_READL EQU 0x25EQU 0x26EQU 0x27EQU 0x28_BYTE EQU 0x29

_N EQU 0x2AEQU 0x2B_BYTE EQU 0x2CEQU 0x2DEQU 0x2E

T_ALARM EQU 0x2F_ALARM EQU 0x30

CONSTANT DATA_PIN=7

;****** Начальная инициализация контроллера и программы *******STATUS, RP0 ;Устанавливаем страницу памяти 1TRISA ;Настраиваем все линии порта А и В на вывод

CLRF TRISB

GOTO BEGIN_PROG

;***** Точка входа в процедуру обработки прерываний от таймера*************INTCON, GIE ;Запрещаем прерыванияBACKUPW ;Сохраняем содержимое рабочего регистра

MOVF STATUS, 0 ;и регистра STATUSBACKUPS

;Программные таймерыTIME0, 1TIME0, 0.81 ;122STATUS, CL22TIME0TIME2, 1MOVF TIME2, 0

SUBLW.2 ;Устанавливаем период измерения температуры равным 1 сек.

BTFSC STATUS, CL26TIME2

BSF FLAGS, 5BTFSS FLAGS, 0 ;Корректировка таймера возможна только при нажатии кнопкиL22 ;вызова таймераFLAGS, 1 ;Если нажата кнопка установки таймера

GOTO L22FLAGS, 2FLAGS, 7T_ALARM, 1

MOVF T_ALARM, 00x7D ;Если достиг 125 градусов, сбрасываем до -55 градусов

BTFSS STATUS, ZL220xC9

MOVWF T_ALARM

;Опрос состояния кнопок управленияBCF PA, 0 ;Флаги, показывающиеFLAGS, 1 ;состояние кнопок.PA, 1 ;Выключаем индикаторыPA, 2

BSF PA, 4PA, 0PORTA

BSF STATUS, RP0 ;Устанавливаем страницу памяти 1TRISB, 5 ;Разряды порта В, подключенные к кнопкам настраиваем на вводTRISB, 6STATUS, RP0 ;Устанавливаем страницу памяти 0PORTB, 6 ;Устанавливаем флаги в зависимости от состояния кнопок

GOTO L23FLAGS, 0.255

MOVWF T_INDDECFSZ T_IND

GOTO L24FLAGS, 0FLAGS, 7SEEPROM

BCF FLAGS, 7BTFSS PORTB, 5FLAGS, 1

BSF STATUS, RP0 ;Устанавливаем страницу памяти 1TRISB, 5 ;Разряды порта В, подключенные к кнопкам настраиваем на выводTRISB, 6STATUS, RP0 ;Устанавливаем страницу памяти 1

;Динамическая индикация содержимого RAZR0, RAZR1, RAZR2.0 ;Отображаем разряд 0I, 0

BTFSS STATUS, ZL2B'10000000'

ANDWF PORTB, 1 ;Очищаем разряды порта, подключенные к индикаторуRAZR0, 0PORTB, 1 ;Выводим отображаемую цифруPA, 0 ;Включаем соответствующий разряд индикатора

MOVF PA, 0PORTAL4

L2 MOVLW.1 ;Отображаем разряд 1I, 0

BTFSS STATUS, ZL3B'10000000'

ANDWF PORTB, 1 ;Очищаем разряды порта, подключенные к индикаторуRAZR1, 0PORTB, 1 ;Выводим отображаемую цифру

BSF PA, 1

BTFSC FLAGS, 6

BCF PA, 4

BTFSS FLAGS, 6PA, 4PA, 0PORTAL4MOVLW B'10000000'PORTB, 1 ;Очищаем разряды порта, подключенные к индикаторуRAZR2, 0PORTB, 1 ;Выводим отображаемую цифруPA, 2PA, 0PORTA

L4 INCF I, 1.3 ;Обнулить счетчик разрядов, если достиг 3

;Завершение обработки прерывания от таймераBCF INTCON, RTIF ;Сброс флага прерывания от таймераBACKUPS, 0STATUSBACKUPW, 0 ;Восстановление рабочего регистраINTCON, GIE ;Разрешение прерываний;Возврат из обработки прерывания

;****** Продолжение начальной инициализации *****************_PROGB'01000011' ;Подключаем определитель к таймеру и устанавливаем коэффициентOPTION_REG ;деления 1:16, сигнал на таймер от внутреннего генератораSTATUS, RP0 ;Устанавливаем страницу памяти 0

CLRF PORTBB'00000111'PA

MOVF PA, 0PORTAI ;Инициализируем используемые в программе

CLRF FLAGS ;переменныеSTART_DSTMR0TEMP_READLTEMP_READHLEEPROM0x02DT_ALARMTIME0TIME2TMR0

MOVLW B'10100000' ;Разрешаем прерывание от переполнения таймера

MOVWF INTCON

BCF FLAGS, 5

BCF FLAGS, 3B'10111111' ;(три тире при старте)

MOVWF RAZR0

MOVWF RAZR1

MOVWF RAZR2START_DS

;Пауза до получения первого достоверного результата измерения температуры

L0 BTFSS FLAGS, 5L0START_DS

BCF FLAGS, 5BTFSS FLAGS, 5

GOTO L00

;****** Основной цикл программы ******

L10 CLRWDTBTFSS FLAGS, 0

GOTO L12 ;Необходимо отображение температурыFLAGS, 2L10FLAGS, 2FLAGS, 6 ;Отключение запятойT_ALARM, 7 ;Вычисление целой частиL70 ;Температура ниже нуляT_ALARM, 0

MOVWF NumLL71MOVLW 0xFFNumLT_ALARM, 0NumL, 1CLRF NumHConvertOnes, 0DS7SEGRAZR0Tens, 0DS7SEGRAZR1Hund, 0DS7SEGRAZR2T_ALARM, 7

BCF RAZR2, 6 ;Включение знака минус при отрицательной температуреL10BCF FLAGS, 2 ;Отображение температуры

BTFSC FLAGS, 3CONV_TFLAGS, 3

BTFSS FLAGS, 5L10

;Передается управление каждую секунду

BCF FLAGS, 5FLAGS, 3READ_TSTART_DS0xFFSTATUS, ZL10B'00000001'RAZR0RAZR1 RAZR2

BCF FLAGS, 3L10 ;Возвращаемся на начало цикла

;********************************************************

;Процедура преобразования десятичной цифры из WREG в код 7-ми сегментного индикатора

DS7SEG ADDWF PCL, 1B'01000000' ;0B'01111001' ;1B'00100100' ;2B'00110000' ;3B'00011001' ;4B'00010010' ;5B'00000010' ;6B'01111000' ;7B'00000000' ;8B'00010000' ;9B'01111111' ;ПробелB'00111111' ;Минус

;********************************************************

;Процедура перевода числа формата HEX16 (переменные NumL, NumH) в формат BSD

;(переменные Thou, Hund, Tens, Ones)swapf NumH,wB'11110000'ThouThou, 10xE2Hund0x32OnesNumH, 00x0FHund, 1Hund, 1Ones, 10xE9TensTens, 1Tens, 1NumL, 00x0FTens, 1Ones, 1Tens, 1Ones, 1Ones, 1Ones, 1NumL, 00x0FOnes, 1Thou, 10x0A: addwf Ones, 1Tens, 13, 0Lb1: addwf Tens, 1Hund, 13, 0Lb2: addwf Hund, 1Thou, 13, 0Lb3: addwf Thou, 13, 0Lb4Thou ;Удаление незначащих нулейFSR3IMOVF F0, 00x0FSTATUS, Z;Разряд не равен 00x0AF0FSR IL54

;Процедура вычисления температуры с точностью до 0.1 по данным полученным от DS18В20

;Входные параметры: TEMP_READH, TEMP_READL, результат помещается в экранный буфер

CONV_T MOVF TEMP_READL, 0NumLTEMP_READH, 0NumHTEMP_READH, 7 ;Вычисление целой части

GOTO L30 ;Температура ниже нуля.4 ;Выделяем целую часть значения температуры делением на.16d

MOVWF ABCF STATUS, CNumH, 1NumL, 1A, 1L61NumL, 0TH

MOVF TEMP_READL, 0 ;Вычисляем десятичную частьB'00001111'L50MOVLW.4 ;Выделяем целую часть значения температуры делением на.16d

MOVWF ABCF STATUS, CNumH, 1NumL, 1A, 1L620xFFTHNumL, 0TH, 10xFFNumHTEMP_READL, 0 ;Вычисляем десятичную частьB'00001111'NumH, 0B'00001111'MOVWF NumLNumH.6AMOVF NumL, 0NumH, 1A, 1L63NumH, 0NumLNumHConvert0x0ATens, 0STATUS, ZTens.5 ;ОкруглениеOnes, 0STATUS, CTens, 1

MOVF Tens, 0TL

;Сравнение температурT_ALARM, 7 ; Проверяем уставкуL72 ;Уставка ниже нуля, значит переходT_ALARM, 0 ;Уставка выше нуляNumL ;Прибавим к NumL значение уставки и.54 ;добавим 54, чтобы не мучиться при сравненииNumL, 1 ;положительной температуры и отрицательной уставки (или наоборот)L73 ;ПереходMOVLW 0xFF ;Появляемся здесь при условии отрицательной уставки

MOVWF NumLT_ALARM, 0NumL, 1

L73 BTFSC TEMP_READH, 7 ; Проверяем считанный код с датчика температурыL74 ;Температура ниже нуляTH, 0 ;Температура выше нуля и опять добавим 54,ноNumH ;не к считанным с датчика данным,.54 ;а к целой части вычисленной температурыNumH, 1L76 ;ПереходMOVF TH,0 ;Появляемся здесь при условии отрицательной температурыNumHPA, 3 ;Проверим, включен ли нагреватель!L2E ;включен, значит сходим, добавим гистерезис и вернемсяNumH, 0 ;Нет не включен значит сравниваем,NumL, 1NumL, 0 ; вычитая из уставки температуру

BTFSC STATUS, CL2A ;Переход

L2B BSF PA, 3 ;если измеренная температура ниже- включение нагревателяPA, 0PORTAL31 ;Выход из подпрограммыA BTFSC T_ALARM, 7 ; Проверяем еще раз уставку, на случай положительной температуры, ноL2C ; отрицательной уставки, чтобы не было проблем при переходе через 0L2B ; соответственно отключаем или включаем нагревательC BCF PA, 3 ;если измеренная температура выше- выключение нагревателяPA, 0PORTAL31 ;Выход из подпрограммыBTFSC PA, 3 ;Появляемся здесь при условии положительной температурыL2D ;Проверим, включен ли нагреватель? Да, сбегаем и добавим;гистерезисNumH, 0 ;Нет не включен, значит сравниваем,NumL, 1NumL, 0STATUS, C ; вычитая из уставки температуру

GOTO L88PA, 3PA, 0PORTA L31

L2D MOVF DT_ALARM, 0 ;Добавим 2 град. гистерезиса, чтобы выключить нагреватель

ADDWF NumL, 1 ;на 2 град.выше

RETURN

L2E MOVF DT_ALARM, 0 ;Вычтем 2 град. гистерезиса, чтобы выключить нагревательNumL, 1 ;на 2 град.выше, при отрицательной температуре.

RETURNBSF PA, 3PA, 0

MOVWF PORTA

;Запись полученного значения температуры в экранный буферBTFSS TEMP_READH, 7L36 ;Температура выше нуля

MOVF TH, 0.19STATUS, C

GOTO L36 ;Температура выше минус 19 градусов

;при температуре меньше -19.9TH, 0 ;Занесение значения температуры в экранный буфер

MOVWF NumLNumHConvertOnes, 0DS7SEGRAZR0Tens, 0DS7SEGRAZR10x0ADS7SEGRAZR2

BCF RAZR2, 6 ;Включение знака минус при отрицательной температуреFLAGS, 6 ;Отключить вывод десятичной точки

RETURNMOVF TH, 0.99

BTFSC STATUS, CL37 ;Температура выше плюс 99 градусовTH, 0 ;Занесение значения температуры в экранный буфер

MOVWF NumLNumHConvertOnes, 0DS7SEGRAZR0Tens, 0DS7SEGRAZR1Hund, 0DS7SEGRAZR2

BCF FLAGS, 6 ;Отключить вывод десятичной точки

;при температуре от -19.9 до 99.9MOVF TL, 0 ;Занесение значения температуры в экранный буфер

MOVWF NumLNumHConvertOnes, 0DS7SEGRAZR0

MOVF TH, 0 ;Занесение значения температуры в экранный буфер

MOVWF NumLNumHConvertOnes, 0DS7SEGRAZR1Tens, 0DS7SEGRAZR2

BTFSC TEMP_READH, 7 ;Включение знака минус при отрицательной температуреRAZR2, 6FLAGS, 6 ;Включить вывод десятичной точки

;Процедура считывает данные об измеренной температуре из DS18В20

READ_T CALL INIT0xCC ;Skip ROMO_BYTEOUT_BYTE0xBE ;Read ScratchpadO_BYTEOUT_BYTE

;Прием данныхIN_BYTETEMP_READL ;0IN_BYTETEMP_READH ;1IN_BYTE ;2IN_BYTE ;3IN_BYTE ;4IN_BYTE ;5IN_BYTE ;6IN_BYTE ;7IN_BYTE ;8

;Процедура выдает команду на старт измерения температуры для датчика DS18В20

START_DSINIT0xCC ;Skip ROMO_BYTEOUT_BYTE0x44 ;Convert TO_BYTEOUT_BYTE0xFF

; The following are common 1-Wire routines used in all applications: CALL PIN_HIPIN_LO.50 ; 500 us delayDELAY_10USECPIN_HI.50 ; 500 usec delayDELAY_10USEC_BYTE: ; returns byte in W.8_NI_BYTE_BYTE_1:PIN_LO ; momentary low on DATA_PINPIN_HIPORTB, W ; 7 usecs later, fetch from DATA_PINTEMPTEMP, DATA_PINSTATUS, C ; its a zeroTEMP, DATA_PINSTATUS, C ; its a oneI_BYTE, F.6 ; now delay 60 usecsDELAY_10USEC_N, FIN_BYTE_1I_BYTE, 0 ; return the result in W_BYTE:.8_N_BYTE_1:O_BYTE, FSTATUS, COUT_0OUT_1_BYTE_2:_N, FOUT_BYTE_1_0: CALL PIN_LO ; bring DATA_PIN low.6 ; for 60 usecsDELAY_10USECPIN_HIOUT_BYTE_2_1: CALL PIN_LO ; momentary lowPIN_HI.6DELAY_10USECOUT_BYTE_2_HI: BCF INTCON, GIESTATUS, RP0TRISB, DATA_PIN ; high impedanceSTATUS, RP0INTCON, GIE_LO: BCF INTCON, GIEPORTB, DATA_PINSTATUS, RP0TRISB, DATA_PIN ; low impedance zeroSTATUS, RP0INTCON, GIE_LONG.250 ; 250 msec delayLOOP1_N_MS:MOVLW.110 ; close to 1.0 msec delay when set to.110LOOP2NOPLOOP2, F ; decrement and leave result in LOOP2INNER ; skip next statement if zeroLOOP1, FOUTTER_10USEC: ; provides a delay equal to W * 10 usecsLOOP1_100USEC_1:LOOP1, F

GOTO DELAY_100USEC_1

;*******************************************************

;Процедура сохраняет значение переменной T_ALARM

;в энергонезависимой памяти данныхMOVLW.50

MOVWF EEADRT_ALARM, 0L21MOVWF EEDATA ;Подпрограмма записи EEROM

BCF INTCON, GIE ;Запрещение всех прерыванийSTATUS, RP0 ;Устанавливаем страницу памяти 1EECON1, WREN ;Разрешаем запись в EEROM0x55 ;Даем набор команд для записи

MOVWF EECON20xAAEECON2

BSF EECON1, WRNOP ;Ожидаем завершения записиEECON1, WRL20EECON1, WREN ;Запрещаем запись в EEROMSTATUS, RP0 ;Устанавливаем страницу памяти 0INTCON, GIE ;Разрешение всех прерыванийEEADR, 1

;Процедура загружает значение переменной T_ALARM

;из энергонезависимой памяти данныхMOVLW.50

MOVWF EEADRRROMT_ALARM

RETURN

;Подпрограмма считывания данных из EEROMBSF STATUS, RP0 ;Устанавливаем страницу памяти 1EECON1, RD ;Команда на чтение EEROMSTATUS, RP0 ;Устанавливаем страницу памяти 0

INCF EEADR, 1

MOVF EEDATA, 0

RETURN

END ;Конец программы.

Похожие работы на - Разработка термометра-термостата на интегральном датчике температур DS18B20 и микроконтроллере PIC16F84

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!