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

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 ; вычитая из уставки температуру

Перейти на страницу: 1 2 3 4

Прочтите также:

Обзор оборудования ОАО Связьтранснефть для проведения конференц-совещаний
видеоконференция оптический рефлектометр телекоммуникационный Роль телекоммуникационных систем связи и передачи данных в современном мире нельзя переоценить. Телекоммуникационные систе ...

Разработка уровнемера для электропроводящих сред
Развитие микропроцессорной техники привело к построению на основе микроконтроллеров различных устройств промышленной и бытовой техники. Широкая номенклатура изделий обеспечивае ...

Разработка схемы электронного коммутатора
Широкое внедрение цифровой техники в отрасли связи связано с появлением интегральных микросхем. Цифровые устройства, собранные на дискретных транзисторах и диодах, имели значительные габ ...

Основные разделы

2020 © Все права защищены! >> www.techeducator.ru