Электроэнергетический факультет
Кафедра промышленной электроники и
информационно-измерительной техники
КУРСОВОЙ ПРОЕКТ
по дисциплине «Электроника и микропроцессорная техника»
Терморегулятор термостата
Пояснительная записка
Терморегулятор термостата
Рабочий диапазон температур 40-120 °С;
Задатчик – кнопка «+10»;
Заданное значение температуры Т на цифровой индикатор;
Допускаемое отклонение Т от заданного значения ±5 0С;
Закон регулирования – дискретный;
Данный курсовой проект содержит разработку и описание на языке ассемблер функциональных узлов секундомера.
Программа микроконтроллера была написана и отлаживалась с помощью прикладной программы MPLAB IDE.
Проект содержит 32 страницы, 5 рисунков, 4 таблицы и 2 приложения.
1 Функциональная спецификация и системные требования
Терморегулятор – устройство для автоматического поддержания температуры на заданном уровне. В соответствии с требованиями задания терморегулятор будет отображать заданную температуру на восьмиразрядном линейном индикаторе . Терморегулятор позволяет изменять значение заданной температуры с помощью кнопки «+10°С»
При включении терморегулятор будет отображать заданную температуру на индикаторе, принимать и обрабатывать сигнал с датчика температуры, сравнивать значение температуры с датчика и заданное, результат сравнения выводить на семисегментный цифровой индикатор и выводить сигнал управление на нагрузку. Последовательным нажатием на кнопку «+10°С» можно изменять значение заданной температуры.
Таким образом основные функции МПУ:
а) задание температуры и ее отображение на цифровом индикаторе;
б) прием и обработка сигнала с датчика температуры, сравнение значений температуры с датчика и заданной;
в) вывод сигнала управления (дискретного) на нагрузку.
Для выполнения функции отображения заданной температуры МПУ должно управлять работой линейного индикатора. Для выполнения функций изменения значения температуры и приема и обработки сигнала с датчика температуры, сравнения значений температуры с датчика и заданной, МПУ должен обслуживать органы управления (кнопку «+ 10 0С») и аппаратные модули (модуль 10-разрядного АЦП).
Взаимодействие МПУ с индикаторами и органами управления представлено на рисунке 1.
Рисунок 1 – Взаимодействие МПУ с индикаторами, органами управления, входным и выходным сигналами
2 Системно-алгоритмическое проектирование
Как и разработка любого электронного устройства, разработка МПУ начинается с разработки структурной или функциональной схемы. Терморегулятор должен содержать датчик температуры, устройства индикации и позволять задавать значение температуры.
Для задачи температуры будем использовать кнопку «+10°С».
Следующий блок – устройство индикации. Выберем в качестве устройства отображения заданной температуры цифровой индикатор.
В учебно-отладочном стенде для управления семисегментными индикаторами применен специализированный контроллер MC14489BP. Контроллер MC14489BP принимает от МК в последовательном двоичном коде символы, выполняет преобразование в семисегментный код и управляет работой индикаторов. Таким образом, структура учебно-отладочного стенда предопределяет способ управления семисегментными индикаторами: блок индикации будет состоять из контроллера MC14489BP и собственно индикаторов. Структурная схема терморегулятора приведена на рисунке 2.
Рисунок 2 – Структурная схема терморегулятора
В соответствии с принятыми решениями МК должен выполнять большинство основных функций МПУ, включая:
а) введение значения заданной температуры с помощью одной кнопки;
б) вывод заданной температуры (Тз) на цифровой индикатор;
в) ввод температуры с датчика (Тд);
г) сравнение Тд с Тз;
Теперь необходимо решить, какие функции будут выполняться аппаратно периферийными модулями МК, а какие функции будут выполняться программой. Функция «в» реализуется аппаратно встроенным в МК модулем 10-разрядного АЦП. Для функций «а», «б», «г» подойдет программная реализация.
Значения температуры с датчика (Тд) будут имитироваться с помощью потенциометра. Задатчиком температуры является кнопка «+10°С».
Температура выводится на цифровой индикатор. Если температура с датчика Т>Тз+50С, то кнопку нужно нажать, если Т>Тз-50С – кнопку нужно отжать.
3 Разработка аппаратных средств
В задании на курсовой проект тип микроконтроллера задан. Поэтому задача разработки аппаратных средств сводится к разработке принципиальной электрической схемы МПУ и настройке встроенных периферийных модулей МК. Жесткое требование задания, которое касается реализации прототипа МПУ на учебно-отладочном стенде, делает задачу разработки принципиальной схемы тривиальной. Практически все проектные решения уже приняты разработчиками учебно-отладочного стенда и не могут быть пересмотрены. Поэтому разработка принципиальной схемы МПУ сводится к дублированию схемы учебно-отладочного стенда с возможным удалением из нее неиспользуемых элементов и связей.
Выберем из имеющихся в учебно-отладочном стенде элементов и узлов необходимые для данной задачи. Кроме МК и элементов цепей питания потребуются:
- кнопка (RB1 – «+ 10°С»);
- элементы, обеспечивающие работу цифровых индикаторов;
- встроенный модуль АЦП.
Полученная принципиальная схема МПУ приведена в приложении В.
Данные от МК к контроллеру MC14489BP должны передаваться через синхронный последовательный интерфейс, включающий три линии:
- Data_in – данные;
- Clk - синхроимпульсы;
- CS – выборка кристалла.
В соответствии со схемой МПУ сигналы Data_in и Clk должны формироваться на линиях 1 и 0 порта PORTE, сигнал CS на линии 3 порта PORTB. Поэтому эти линии портов необходимо настроить на вывод. Для настройки модуля PORTE воспользуемся таблицей 1. Настройка линий на ввод-вывод определяется содержимым управляющего регистра TRISE. Так как линии порта PORTE могут использоваться, как аналоговые входы, то следует также выполнить их настройку для работы в режиме цифровых линий. Настройка выполняется разрядами PCFG3-PCFG0 регистра ADCON1.
Таблица 1 – Регистры и биты, связанные с работой PORTE
Адрес |
Имя |
Бит 7 |
Бит 6 |
Бит 5 |
Бит 4 |
Бит 3 |
Бит 2 |
Бит 1 |
Бит 0 |
09h |
PORTE |
- |
- |
- |
- |
- |
RE2 |
RE1 |
RE0 |
89h |
TRISE |
IBF |
OBF |
IBOV |
PSPMODE |
- |
Рег. напр. данных PORTE |
||
9Fh |
ADCON1 |
ADFM |
- |
- |
- |
PCFG3 |
PCFG2 |
PCFG1 |
PCFG0 |
Сформируем константы для загрузки в управляющие регистры:
- INIT_PE = b'00000100' (линии RE1, RE0 на вывод);
- INIT_AD1 = b' 10001110' (включены линии PORTE, результат АЦП вправо).
Так как к линиям порта PORTB также подключены кнопка, то настройку
режимов работы этого порта выполним позже.
Диаграммы сигналов CS, CLK, а также форматы слова конфигурации для MC14489BP и слов данных приведены на рисунке 3. Слово конфигурации длиной один байт определяет:
- режим потребляемой мощности (C0);
- режимы декодирования разрядов (С1 – С7). Определим управляющее слово для отображения температуры, в нормальном режиме потребляемой мощности. Для отображения символов нам будут нужны лишь три разряда индикатора, остальной требуется держать в погашенном состоянии, что реализуем выбором режима специального декодирования (разряды С6, С7). С у четом изложенного, имеем INIT_MC14489=b'01011111'.
Рисунок 3 – Диаграммы сигналов
В соответствии с электрической схемой МПУ кнопка «+ 10°С» подключена к линии 1 порта PORTB. Обозначим соответствующий разряд порта RB1. Активному (нажатому) состоянию кнопки соответствует низкий потенциал на линии порта PORTB. Пассивному (отжатому) состоянию кнопки соответствует высокий потенциал, который обеспечивается встроенными подтягивающими резисторами. Включаются подтягивающие резисторы установкой разряда –RBPU=0 в регистре OPTION_REG. Для настройки модуля PORTB воспользуемся таблицей 2. Настройка линий определяется содержимым управляющего регистра TRISB.
Таблица 2 – Регистры и биты, связанные с работой PORTB
Адрес |
Имя |
Бит 7 |
Бит 6 |
Бит 5 |
Бит 4 |
Бит 3 |
Бит 2 |
Бит 1 |
Бит 0 |
06h, 106h |
PORTB |
RB7 |
RB6 |
RB5 |
RB4 |
RB3 |
RB2 |
RB1 |
RB0 |
86h, 186h |
TRISB |
Регистр направления данных PORTB |
|||||||
81h, 181h |
OPTION_REG |
-RBPU |
INTEDG |
T0CS |
T0SE |
PSA |
PS2 |
PS1 |
PS0 |
Сформируем константы для загрузки в управляющие регистры:
- INIT_PB = b'11110111' (линии 3 - вывод, остальные ввод);
- INIT_OPT = b'01000000' (включить подтягивающие резисторы).
В качестве нагрузки будем использовать светодиод, который в
соответствии с электрической схемой МПУ, подключен к нулевой линии порта PORTС. В качестве отображения температуры используем цифровой индикатора , подключенный к порту PORTD. Для настройки модуля PORTD воспользуемся таблицей 3. Настройка линий определяется содержимым управляющего регистра TRISD.
Таблица 3 – Регистры и биты, связанные с работой PORTD
Адрес |
Имя |
Бит 7 |
Бит 6 |
Бит 5 |
Бит 4 |
Бит 3 |
Бит 2 |
Бит 1 |
Бит 0 |
08h |
PORTD |
RD7 |
RD6 |
RD5 |
RD4 |
RD3 |
RD2 |
RD1 |
RD0 |
88h |
TRISD |
Регистр направления данных PORTD |
|||||||
89h |
TRISE |
IBF |
OBF |
IBOV |
PSPMODE |
- |
Рег. напр. данных PORTE |
Сформируем константу для загрузки в управляющий регистр:
- INIT_PD = b'00000000' (все линии порта на вывод).
Для порта PORTС:
Init_PC = b'11000100' (линия 5 - вывод)
Кроме трех портов в проекте используется встроенный модуль 10-разрядного АЦП. Для работы с модулем АЦП в микроконтроллере используется 4 регистра:
INIT_OPTION EQU b'01000111' ;настройка TMR0
INIT_INTCON EQU b'11000000' ;настройка прерывания
INIT_T1CON EQU b'00110001' ;настройка TMR1 00110001
INIT_ADCON1 EQU b'00001110' ;настройка линий RE2-RE0
Для настройки модуля АЦП воспользуемся таблицей 4 и таблицей 5. Настройка работы определяется содержимым управляющих регистров ADCON0 и ADCON1.
Таблица 4 – Регистры и биты, связанные с работой модуля АЦП
4 Разработка программы для МПУ
Программа должна выполнять запуск модуля АЦП, получать результаты преобразования, обрабатывать, сравнивать полученные результаты – значение температуры с датчика с заданным значением температуры, сравнивать значения температур; по результатам сравнения формировать выходной дискретный сигнал.
После включения и конфигурации АЦП выбирается рабочий аналоговый канал. Будем руководствоваться рекомендованной последовательностью действий для работы с АЦП:
1) настроить и включить модуль АЦП;
2) начать аналого-цифровое преобразование;
3) ожидать окончания преобразования;
4) считать результат преобразования из регистров.
Основная программа должна содержать бесконечный цикл, в теле которо го будут реализованы функции:
- инициализация;
- вывод заданной температуры на цифровой индикатор;
- опрос кнопки;
- сравнение значений температуры с датчика и заданной температуры;
Представим принятые решения в виде схемы представленной на рисунке 4
Рисунок 4 – Схема программы
Алгоритмизацию и программирование отдельных функций можно выполнять совместно. Но сначала необходимо выбрать язык программирования. Языки программирования низкого уровня в настоящее время называются ассемблерами. Основу ассемблера составляют машинные команды процессора в мнемоническом представлении. Кроме машинных команд современные языки ассемблера, как правило, включат директивы, определяющие ход трансляции, а также средства создания макрофункций. Рассмотрим вариант программирования на языке ассемблера.
Сначала получим детализированный алгоритм подпрограммы сравнения заданной и текущей .
Для начала необходимо организовать вычисление значений Тз -50С и Тз +50С и организовать непосредственно сравнение значений температуры с датчика и заданной :
btfsc ADCON0,GO ;
goto Wait ;
movf ADRESH,w ;
movwf Tdat
btfss PORTD,0
goto X1
movlw -.5
addwf Tdat,W
subwf Tzad,W
btfss STATUS,C
bcf PORTD,0
goto Main
X1
movlw .5
addwf Tdat,W
subwf Tzad,W
btfsc STATUS,C
bsf PORTD,0
goto Main
Теперь перейдем к формированию исходного текста программы. Текст программы должен начинаться с директивы установки адреса сброса 0x000. Чтобы использовать средства внутрисхемной отладки, следующей командой должна быть nop. Так как тексты всех подпрограмм принято размещать до ссылок на них в основной программе, то следующей должна быть команда перехода на начало программы. Необходимо выполнить инициализацию всех используемых встроенных модулей МК, контроллера MC14489 и ячеек памяти.. Для вывода информации используем подпрограмму, которую назовем Display.
Так как МПУ должен однократно реагировать на нажатие кнопки, то переход на начало цикла возможен только после отпускания кнопки. Поэтому опрос кнопки должен выполняться дважды: сначала анализ на нажатое состояние, а затем анализ на отжатое состояние.
Ниже приводится текст основы программы, полученной с учетом принятых решений.
ORG 0x000 ;вектор сброса
nop
goto Begin ;переход на начало программы
;Здесь будут находиться все подпрограммы
;операторы инициализации модулей МК
;операторы инициализации MC14489
;операторы инициализации ячеек памяти
Основной цикл
Tek40 movlw .40;
movwf Tzad;
Main
btfsc RB1;
goto X2 ;
movlw .10 ;если кнопка нажата, то проверка Tdat>120
addwf Tzad,f;
movlw -.130;
addwf Tzad,w;
btfss STATUS,C;
goto $+3
movlw .40;
movwf Tzad;
call D15ms;
Release
call D15ms;
btfss RB1;
goto Release ;кнопка не отжата
call D15ms;
X2 movf Tzad,w ;
movwf L_byte
clrf H_byte;
call B2_BCD;
call Display;
bsf ADCON0,GO
Wait
btfsc ADCON0,GO ;
goto Wait ;
movf ADRESH,w ;
movwf Tdat
btfss PORTD,0
goto X1
movlw -.5
addwf Tdat,W
subwf Tzad,W
btfss STATUS,C
bcf PORTD,0
goto Main
X1
movlw .5
addwf Tdat,W
subwf Tzad,W
btfsc STATUS,C
bsf PORTD,0
goto Main
end
Информация, выводимая в контроллер индикаторов, должна быть представлена в последовательном коде. Информационное слово, изображенное на рисунке 5, состоит из 24 разрядов, из них младшие 20 разрядов (D0 – D19) содержат пять тетрад кода отображаемых символов, разряды D20 – D22 управляют сегментами h (точка), разряд D23 – управляет яркостью свечения сегментов. Формирование информационного слова было рассмотрено выше.
Рисунок 5 – Информационное слово
Так как данные должны передаваться в последовательном коде, необходим буфер данных IndVal, используемый как сдвигающий регистр, и счетчик разрядов CntInd. Тогда вывод одного байта можно свести к загрузке буфера IndVal, инициализации счетчика CntInd и последовательности сдвигов буфера влево, пока CntInd ≠ 0. После сдвига выводимый разряд байта будет находиться в разряде STATUS<C>. При этом каждый сдвиг должен сопровождаться формированием фронта синхроимпульса Clk. При условии, что байт находится в аккумуляторе w, алгоритм вывода можно представить в виде подпрограммы Send8:
Send8 bcf Clk
movwf IndVal
movlw 8
movwf CntInd
sendloop bcf Data_in
rlf IndVal,1
btfsc STATUS,C
bsf Data_in
nop
bsf Clk
nop
bcf Clk
decfsz CntInd,1
goto sendloop
return
Процесс вывода информации можно представить, как вывод восьмиразрядного слова при выборе контроллера MC14489 (CS=0):
Display bcf Cs
movf znak,w
call Send8
movlw b ’ 00000000’
bsf Cs
return
Все механические кнопки имеют одно негативное свойство, известное как “дребезг контактов”, которое обусловлено колебаниями упругих контактов при их замыкании и размыкании. Длительность колебаний составляет всего несколько миллисекунд. При этом вместо “чистого” прямоугольного импульса получается искаженный импульс или пачка импульсов. Идеальный и реальный сигналы, формируемые при нажатии и отпускании кнопки, представлены на рисунке 6.
Рисунок 6 - Идеальный и реальный сигналы
Известны аппаратные средства подавления «дребезга контактов» (с помощью RS-триггеров, одновибраторов или интегрирующих RC цепочек, устанавливаемых перед триггерами Шмитта). В устройствах на базе МК обычно используют программные способы подавления «дребезга контактов». Простейший из них основан на ограничении минимальных интервалов времени между последовательными операциями чтения порта ввода. Для надежного считывания состояний кнопки величина этих интервалов не должна быть меньше 15 – 30 мс.
Реализовать подпрограмму задержки можно с использованием таймера TMR0 или программно. Выберем второй вариант, и в этом случае временную задержку обычно формируют с помощью программного счетчика, например, вычитающего:
D15ms
movlw .30;
movwf Temp2;
call D500us;
decfsz Temp2,f;
goto $ -2 ;
return;
D500us
movlw .151;
movwf Temp1;
decfsz Temp1,f;
goto $ -1;
return
Для преобразования двоичного кода в десятичный и последующего вывода значения температуры на цифровой индикатор используем подпрограмму B2_BCD
B2_BCD
bcf STATUS,0;
movlw .16;
movwf count;
clrf R0;
clrf R1;
clrf R2;
loop16
rlf L_byte;
rlf H_byte;
rlf R2;
rlf R1;
rlf R0;
decfsz count;
goto adjDEC;
retlw 0;
adjDEC
movlw R2;
movwf FSR;
call adjBCD;
movlw R1;
movwf FSR;
call adjBCD;
movlw R0;
movwf FSR;
call adjBCD;
goto loop16;
adjBCD
movlw 3;
addwf 0,w;
movwf temp;
btfsc temp,3;
movwf 0;
movlw 30;
addwf 0,w;
movwf temp;
btfsc temp,7;
movwf 0;
retlw 0;
return
Теперь, когда определены все используемые ресурсы МК, можно приступить к программированию операторов инициализации. При программировании операторов инициализации модулей МК необходимо помнить, что все ячейки статической памяти данных МК размещаются в четырех банках. При обращении к регистрам специальных функций следует учитывать, в каком банке они размещаются. С учетом этого операторы инициализации модулей МК:
Begin bsf STATUS,RP0 ;банк1
bcf STATUS,IRP
bcf STATUS,RP1
movlw INIT_PORTA
movwf TRISA^80h
movlw INIT_PORTB
movwf TRISB^80h
movlw INIT_PORTD
movwf TRISD^80h
movlw INIT_PORTE
movwf TRISE^80h
movlw INIT_OPTION
movwf OPTION_REG^80h
movlw INIT_ADCON1
movwf ADCON1^80h
bcf STATUS,RP0 ;банк0
movlw INIT_T1CON
movwf T1CON
movlw b'01000001' ;Fosc/8, канал AN0, разрешить A/D
movwf ADCON0
Операторы инициализации контроллера MC14489:
bcf Cs
movlw b' 01011111'
call Send8
bsf Cs
return
Операторы инициализации ячеек памяти:
Clrf R2 ;сброс индикаторов
Clrf R0
Clrf Tdat
В полученном исходном тексте программы на языке ассемблера использованы символические имена ячеек памяти, их отдельных разрядов, констант. Для успешной трансляции программы необходимо описать эти имена, используя директивы ассемблера.
Cblock 0x20 ;
temp;
Cell ;
coun ;
Tzad ;
Tdat ;
Temp1 ;
Temp2 ;
R2 ;
R1;
R0;
L_byte ;
H_byte;
IndVal;
CntInd;
endc
Опишем константы:
INIT_PORTA EQU b'11111111' ;все ввод
INIT_PORTB EQU b'11010111' ;биты3,5-вывод
INIT_PORTD EQU b'11111110' ; все ввод
INIT_PORTE EQU b'00000000' ;все вывод
INIT_OPTION EQU b'01000111' ;настройка TMR0
INIT_INTCON EQU b'11000000' ;настройка прерывания
INIT_T1CON EQU b'00110001' ;настройка TMR1 00110001
INIT_ADCON1 EQU b'00001110' ;настройка линий RE2-RE0
Опишем битовые переменные:
#define RB1 PORTB,1; сигнал MC14489
#define Cs PORTB,3
#define Clk PORTE,0
#define Data_in PORTE,1
5 Автономная отладка программы
Отладка программ микропроцессорной системы проводится, как правило, на тех же ЭВМ, на которых велась разработка программ, и на том же языке программирования, на котором написаны отлаживаемые программы, и может быть начата на ЭВМ даже при отсутствии аппаратуры МПС. При этом в системном программном обеспечении ЭВМ должны находиться программы (интерпретаторы или эмуляторы), моделирующие функции отсутствующих аппаратных средств.
Проверка корректности программ, то есть проверка соответствия их внешним спецификациям, осуществляется тестированием. Программы проверяются на функционирование с различными исходными данными. Результаты функционирования программ сравниваются с эталонными значениями.
Отладка программ подразделяется на следующие этапы: планирование отладки; составление тестов и задания на отладку; исполнение программ; информирование о результатах исполнения программ по заданным исходным данным; анализ результатов, обнаружение ошибок и локализация неисправностей.
В нашем случае, как для разработки программы, так и для автономной ее отладки использовался специализированный пакет программ MPLAB IDE фирмы Microchip.
Для более быстрого выполнения процесса отладки необходимо закомментировать команды вызова подпрограмм D15ms, Display и B2_BCD, а затем перекомпилировать программу.
Основной цикл программы целесообразно отлаживать в режиме анимации (быстрый пошаговый режим). Для имитации нажатия кнопки RB1 будем использовать асинхронный стимул (Debugger> Stimulus>New Workbook >Asynch). При этом в окне Watch будем наблюдать за изменением ячеек Tzad. При последовательном нажатии на кнопку RB1 значение температуры будет увеличиваться на десять градусов цельсия. После того, как заданная температура достигнет 120 0С, при последующем нажатии на кнопку значению Tzad должно быть присвоено 40 0С.
Отладку подпрограммы сравнения проводим в режиме прогона до точки останова. Подпрограмма Display обеспечивает формирование на линиях RE1, RE0, RB3 значений сигналов, необходимых для передачи информации. Поэтому объективный контроль работы этой подпрограммы должен выполняться путем проверки корректности формируемых последовательностей наборов этих сигналов. При выполнении автономной отладки для этой цели целесообразно использовать инструмент системы MPLAB IDE – логический анализатор.
После того, как убедились в правильности выполнения программы в режиме автономной отладки, перешли к комплексной отладке проекта.
6 Комплексная отладка микропроцессорной системы
Как правило, МПУ являются системами реального времени, то есть корректность их функционирования зависит от времени выполнения программы и скорости работы аппаратуры. Поэтому программа считается отлаженной после того, как будет выполнена проверка правильности ее функционирования на аппаратуре МПУ в реальных условиях.
При комплексной отладке наряду с детерминированным используется статистическое тестирование, при котором МПС проверяется при изменении исходных переменных в соответствии со статистическими законами работы источников информации. Полнота контроля работоспособности проектируемой системы возрастает за счет расширения диапазона возможных сочетаний переменных и соответствующих им логических маршрутов обработки информации.
Существуют пять основных приемов комплексной отладки микропроцессорной системы:
- останов функционирования системы при возникновении определенного события;
- чтение (изменение) содержимого памяти или регистров системы;
- пошаговое отслеживание поведения системы;
- отслеживание поведения системы в реальном времени;
- временное согласование программ.
В данном проекте использован четвертый прием комплексной отладки.
Оперируя кнопкой «+10°С», необходимо убедиться в возможности установки допустимых значений температуры и невозможности недопустимых значений. Если значение заданной температуры равно 120 °С, то при последующем нажатии на кнопку «+10 °С» температура должна быть равна 40°С, и при последующих нажатиях также должна прибавлять +10 °С, пока снова не дойдет до 120°С .
Также мы должны следить за работой подпрограммы сравнения Tzad и Ttek. Допустимое отклонение температуры от Tzad - «±5°С». Если температура стала ниже Tzad на 5°С, тогда светодиод загорается (это соответствует нажатию кнопки), если же температура стала выше Tzad на 5°С, тогда светодиод гаснет (это соответствует отжатию кнопки).
Список использованных источников
- Хлуденёв А.В. Разработка и отладка устройств на микроконтроллерах: Методические указания. - Оренбург: ОГУ, 2008. – 47 с.
Приложение А
(обязательное)
Схема электрическая принципиальная
Приложение Б
(обязательное)
Исходный текст программы
;*******************************************************************
; Терморегулятор термостата
;*******************************************************************
LIST p=16F877 ; определение процессора
#include "p16f877.inc" ;
;*******************************************************************
; Структура данных
;*******************************************************************
;---------------------- Переменные --------------------------
Cblock 0x20 ;
temp ;
Cell ;
count ;
Tzad ;
Tdat ;
Temp1 ;
Temp2 ;
R2 ;
R1 ;
R0 ;
L_byte ;
H_byte ;
IndVal ;
CntInd ;
endc
;---------------Константы----------------------------
INIT_PORTA EQU b'11111111' ;все ввод
INIT_PORTB EQU b'11010111' ;биты3,5-вывод
INIT_PORTD EQU b'11111110' ; все ввод
INIT_PORTE EQU b'00000000' ;все вывод
INIT_OPTION EQU b'01000111' ;настройка TMR0
INIT_INTCON EQU b'11000000' ;настройка прерывания
INIT_T1CON EQU b'00110001' ;настройка TMR1 00110001
INIT_ADCON1 EQU b'00001110' ;настройка линий RE2-RE0
;---------------Битовые переменные---------------------------
#define RB1 PORTB,1; сигнал MC14489
#define Cs PORTB,3
#define Clk PORTE,0
#define Data_in PORTE,1
;------------------------------------------------------------
ORG 0x000 ;вектор сброса
nop
goto Begin ;переход в начало программы
;--------------------подпрограмма инициализации MC14489----------
Control_MC14489; операторы инициализации МС14489
bcf Cs; линию сбрасываем в ноль
movlw b'00010001'; операторы загрузки числа 1
call Send8;
bsf Cs;
return
;----------------------подпрограмма отображ. 7сегм. символов-----------
Display
bcf Cs;
movf R0,0;
call Send8;
movf R1,0;
call Send8;
movf R2,0;
call Send8;
bsf Cs;
return
;--------------подпрограмма отображ текущ. символа (W)
Send8
bcf Clk;
movwf IndVal;
movlw 8;
movwf CntInd;
sendloop
bcf Data_in ;
rlf IndVal,1;
btfsc STATUS,C;
bsf Data_in;
nop;
bsf Clk;
nop;
bcf Clk;
decfsz CntInd,1;
goto sendloop;
return
;------------------- Подпрограмма задержки 15 ms ---------------------
D15ms
movlw .30;
movwf Temp2;
call D500us;
decfsz Temp2,f;
goto $ -2 ;
return;
;--------------------Подпрограмма задержки 500 мкс--------------------
D500us
movlw .151;
movwf Temp1;
decfsz Temp1,f;
goto $ -1;
return
;--------------------подпрограмма B2_BCD---------------------------------
B2_BCD
bcf STATUS,0;
movlw .16;
movwf count;
clrf R0;
clrf R1;
clrf R2;
loop16
rlf L_byte;
rlf H_byte;
rlf R2;
rlf R1;
rlf R0;
decfsz count;
goto adjDEC;
retlw 0;
adjDEC
movlw R2;
movwf FSR;
call adjBCD;
movlw R1;
movwf FSR;
call adjBCD;
movlw R0;
movwf FSR;
call adjBCD;
goto loop16;
adjBCD
movlw 3;
addwf 0,w;
movwf temp;
btfsc temp,3;
movwf 0;
movlw 30;
addwf 0,w;
movwf temp;
btfsc temp,7;
movwf 0;
retlw 0;
return
;------------Инициализация модулей МК---------------------------
Begin bsf STATUS,RP0 ;банк1
bcf STATUS,IRP
bcf STATUS,RP1
movlw INIT_PORTA
movwf TRISA^80h
movlw INIT_PORTB
movwf TRISB^80h
movlw INIT_PORTD
movwf TRISD^80h
movlw INIT_PORTE
movwf TRISE^80h
movlw INIT_OPTION
movwf OPTION_REG^80h
movlw INIT_ADCON1
movwf ADCON1^80h
bcf STATUS,RP0 ;банк0
movlw INIT_T1CON
movwf T1CON
movlw b'01000001' ;Fosc/8, канал AN0, разрешить A/D
movwf ADCON0
;------------Инициализация ячеек памяти----------------
call Control_MC14489
Clrf R2 ;сброс индикаторов
Clrf R0
Clrf Tdat
;------------основной цикл--------------------------------
Tek40 movlw .40;
movwf Tzad;
Main
btfsc RB1;
goto X2 ;
movlw .10 ;если кнопка нажата, то проверка Tdat>120
addwf Tzad,f;
movlw -.130;
addwf Tzad,w;
btfss STATUS,C;
goto $+3
movlw .40;
movwf Tzad;
call D15ms;
Release
call D15ms;
btfss RB1;
goto Release ;кнопка не отжата
call D15ms;
X2 movf Tzad,w ;
movwf L_byte
clrf H_byte;
call B2_BCD;
call Display;
bsf ADCON0,GO
Wait
btfsc ADCON0,GO ;
goto Wait ;
movf ADRESH,w ;
movwf Tdat
btfss PORTD,0
goto X1
movlw -.5
addwf Tdat,W
subwf Tzad,W
btfss STATUS,C
bcf PORTD,0
goto Main
X1
movlw .5
addwf Tdat,W
subwf Tzad,W
btfsc STATUS,C
bsf PORTD,0
goto Main
end
Скачать: