КУРСОВОЙ ПРОЕКТ - Терморегулятор термостата

0

 

Электроэнергетический факультет

Кафедра промышленной электроники и

информационно-измерительной техники

 

 

 

 

 

 

 

КУРСОВОЙ ПРОЕКТ

по дисциплине «Электроника и микропроцессорная техника»

Терморегулятор термостата

Пояснительная записка

 

 

 

Терморегулятор термостата

 

Рабочий диапазон температур 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°С, тогда светодиод гаснет (это соответствует отжатию кнопки).

 

 

Список использованных источников

 

  1. Хлуденёв А.В. Разработка и отладка устройств на микроконтроллерах: Методические указания. - Оренбург: ОГУ, 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

 

 

 Скачать: Kurs.doc

 

 

Категория: Курсовые / Электроника курсовые

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.