русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

CNTMR0 Программа прерывания от переполнения счетчикаTMR0


Дата добавления: 2015-08-31; просмотров: 1379; Нарушение авторских прав


Само название "прерывания от переполнения TMR0" указывает на то, что уход в прерывания происходит после того, как содержимое TMR0 изменится с .255 на 0. Естественно, для того чтобы это имело место быть, TMR0 нужно "запустить в работу", что, в самом распространенном случае (TMR0 считает внешний такт), предполагает:

- настройку вывода RA4/TOCKI на работу "на вход";

- выбор внешнего такта с вывода RA4/TOCKI – TOCS (Option<5>);

- выбор активного перепада, производящего приращение содержимого TMR0 – TOSE (Option<4>). В большинстве случаев, выбор активного перепада не имеет особого, практического значения и обычно в бите TOSE регистра Option выставляется 0 (активный перепад - от 0 к 1);

- выбор способа включения предделителя. Если предделитель не нужен, то он подключается на выход WDT - бит PSA (Option<3>) устанавливается. В этом случае, речь идет о "чистом" TMR0 с коэффициентом счета Ксч.=256. Если требуется больший чем 256 коэффициент счета, то перед TMR0 нужно включить предделитель с заданным Ксч. бит PSAcбрасывается. КонкретныйКсч. предделителя выставляется в битах PS0, PS1, PS2 (Option<2…0>) и зависит от задумки программы.

- в начале исполнения программы нужно разрешить прерывания по переполнению TMR0: установить биты GIE (Option<7>) и TOCS (Option<5>).

Указанное выше есть не что иное, как подготовительные операции основной программы, которые должны выполняться первыми (по метке START).

 

 

TMR +5В

RA0 Vdd RA1 PICVss RA2 16F84ARB0 RA3 RB1 RA4 RB2 Mclr RB3 RB4 RB5 X1 RB6 X2 RB7   Vdd


BQ1 R1

 

 


R2

 


VD1 R3

Signal Generator

 

 


ZQ1

 


C1 C2

 

 


Рис. 7.10. Принципиальная схема устройства c использованием прерываний от таймера



Программа CNTMR0 позволяет показать механизм работы прерываний: факт возвращения рабочей точки программы (после обработки прерывания) именно в то место основной программы, с которого она ушла в текущее прерывание по переполнению TMR0.

После включения питания программа, через проверку состояния кнопки "TMR" (BTFSC PORTA,1), закольцовывается (GOTO START) и будет там пока не произойдет нажатие кнопки "TMR”.

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

; CNT_TMR0 - Прерыввания от переполнения счетчика TMR0

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

; пьезоизлучатель подключен к RА2

; регистры хранения W и STATUS----------

W_TEMP EQU 4FH

STAT_TEMP EQU 4EH

CNT0 EQU 0CH ; Счетчик времени полупериода

CNT1 EQU 0BH ; Счетчик периодов импульсного сигнала

;---------------------------------------------------------

GOTO START

;-------------------------------------------------

;ПОДПРОГРАММЫ

;-------------------------------------------------

;подпрограмма обработки прерывания------

ORG 0x0004

;сохранение значений W и STATUS----------

MOVWF W_TEMP ; Копирование W в регистр W_TEMP.

SWAPF STATUS,W ; Смена полубайтов регистра STATUS

MOVWF STAT_TEMP ; Копирование W в регистр STAT_TEMP.

BCFPORTA,3 ; выключить светодиод

; число периодов импульсного сигнала------

MOVLW .10

MOVWFCNT1

; Формирование импульса на выводе RA2----

LOOP

BSF PORTA,2 ; Установить RA2.

CALL DELAY

; Формирование паузы на выводе RA2 ------

BCF PORTA,2 ; сбросить RA2.

CALL DELAY

; Переход на новый цикл программы.

DECFSZCNT1,F ; формирование сигнала закончено?

GOTOLOOP ; нет, продолжить

RETURN ; да, завершить

; сброс флага прерываний-----------------------

BCFINTCON,T0IF

; восстановление значений W и STATUS---

SWAPFSTAT_TEMP,W ; Обмен полубайтами. Результат сохраняется в W.

MOVWF STATUS ; Копирование содержимого W в регистр Status.

SWAPF W_TEMP,F ; Обмен полубайтами.

SWAPFW_TEMP,W ; Обмен полубайтами. Результат сохраняется в W.

RETFIE

;Подпрограмма задержки-----------------------

DELAY

MOVLW .24

MOVWF CNT0 ; копировать .24 из W в регистр CNT0

PAUZE

NOP

DECFSZ CNT0,F ; Декремент содержимого регистра CNT0

GOTO PAUZE ; и цикл пока CNT0 не = 0

RETURN ; CNT0 = 0, вернуться в подпрограмму

;================================

; ОСНОВНАЯ ПРОГРАММА-

;================================

START

; инициализация порта В------------------

BSFSTATUS,RP0

CLRF TRISB

MOVLW B’10011’

MOVWF TRISA

; настройкатаймера------------------------

; прерывания от внешнего генератора

BSF OPTION_REG,T0CS

; предделитель отключен------------------

BSFOPTION_REG,PSA

BCFSTATUS,RP0

; oжидание нажатия кнопки-------------

L00K: BTFSSPORTA,1

GOTOL00K

; разрешение прерываний от переполнения счетчика

BSFINTCON.T0IE;

BSFINTCON.GIE

BSFPORTA,3 ; включить светодиод

GOTOSTART

; конец всем командам---------------------

END

 

Шапка программы
Основная программа
Настройка портов
Настройка таймера
TMR0 нажата?
Разрешение прерываний
ПП прерываний
Загрузка числа повторов времени звука CNT_0
Формирование импульса
ПП Delay
Формирование паузы
ПП Delay  

 

 


нет

Включить светодиод
CNT_0=0?

 

 


кнопка отжата

Выход из прерывания
TMR0=1?

 


Рис. 7.11. Алгоритм программы прерывания от переполнения TMR0

На вход RA4/TOCKI подаются импульсы с выхода генератора сигналов (Tools>Signal Generator) частотой 400 Гц. После нажатия на кнопку "TMR" счетчик TMR0 начинает считать импульсы Signal Generator, что видно в основном окне PIC Simulator IDE по зажиганию светодиода, подключенного к RА1. Свечение светодиода будет продолжаться до тех пор, пока не произойдет переполнение TMR0 и ухода в прерывание. В качестве программы обработки прерывания используется программа зукового генератора Multi. Действие программы видно на экране осциллографа, подключенного к выводу RА2, количеством периодов = 10 (время "горения" равно времени "гашения" - по 0,2 сек.).

Таким образом, по осциллографу можно визуально проконтролировать время исполнения подпрограммы прерывания.

В момент ухода в прерывание программа вышла из основной программы, и после обработки прерывания, вернется по стеку в то место основной программы, из которого она ушла в прерывание. Работа в основной программе продолжится далее, после чего программа зациклится командой GOTO START и будет там "крутиться" в ожидании следующего прерывания, при пассивности моргалки".

Прерывания от переполнения таймераTMR0

Есть еще одна разновидность работы TMR0: на его вход (или предделителя, если он подключен ко входу TMR0) подаются импульсы внутреннего тактового генератора CLKOUT (бит TOCS регистра OPTION сброшен). В этом случае, если предделитель не подключен, приращение содержимого TMR0 будет происходить в каждом машинном цикле, а если подключен, то реже (зависит от выставленного коэффициента счета предделителя).

Этот режим используется для формирования калиброванных временных отрезков в электронных часах, календарях, будильниках, и т.п. Для получения задержки 1 сек при тактовой частоте 4 МГц (время выполнения команды 4Т=1 мкс) необходимо обеспечить с помощью трех делителей коэффициент деления 64х125х125=1 000 000.

ПРОГРАММА: ПРЕРЫВАНИЯ ОТ ПЕРЕПОЛНЕНИЯ ТАЙМЕРА TMR0

В основной программе выполняется настройка порта В на выход (CLRFTRISB) и запуск таймера от внутреннего генератора (BCF OPTION_REG,T0CS). Предделитель не подключаенко входу таймера (BSF OPTION_REG,PSA). После инициализации МК и таймера разрешаются прерывания (), в порту В устанавливается константа .255 и программа входит в зону прерываний.

;=============================================

; TIMER0 - Прерывания от переполнения таймера TMR0

;-=============================================

; регистры хранения W и STATUS----------

W_TEMP EQU 4FH

STAT_TEMP EQU 4EH

;---------------------------------------------------------

GOTO START

; вектор прерываний------------------------------

ORG 0x0004

;сохранение значений W и STATUS----------

MOVWF W_TEMP ; Копирование W в регистр W_TEMP.

SWAPF STATUS,W ; Смена полубайтов регистра STATUS

MOVWF STAT_TEMP ; Копирование W в регистр STAT_TEMP.

;подпрограмма обработки прерываний------

MOVLW 01

SUBWFPORTB,W

MOVWFPORTB;

RETURN

; сброс флага прерываний-----------------------

BCFINTCON,T0IF

; восстановление значений W и STATUS---

SWAPFSTAT_TEMP,W ; Обмен полубайтами. Результат сохраняется в W.

MOVWF STATUS ; Копирование содержимого W в регистр Status.

SWAPF W_TEMP,F ; Обмен полубайтами.

SWAPFW_TEMP,W ; Обмен полубайтами. Результат сохраняется в W.

RETFIE

; Основная программа---------------------

START

; инициализация порта В------------------

BSFSTATUS,RP0

CLRFTRISB

; настройка таймера-----------------

; прерывания от внутреннего генератора

BCF OPTION_REG,T0CS

; предделитель отключен-----------

BSF OPTION_REG,PSA

; разрешение прерываний по переполнению таймера

BSF INTCON.T0IE;

BSF INTCON.GIE

BCFSTATUS,RP0

; установка 255 в порт В-------------

MOVLW 0FFH

MOVWF PORTB

; зона прерываний--------------------

L00K:

NOP

GOTOL00K

; конец всем командам

END

EEPROM ДАННЫХ

В состав МК РIС16F84А входит ПЗУ EEPROM данных — электрически программируемое ПЗУ, которое имеет восьмиразрядную организацию и предназначено для хранения значений переменных программы при выключенном питании. Обычно числа из EEPROM после старта программы переносят в обычные ячейкам памяти данных. Управляет процессом записи/считывания регистры EECON1 и EECON2.



<== предыдущая лекция | следующая лекция ==>
ОРГАНИЗАЦИЯ ПРЕРЫВАНИЙ | Pис.7.12


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.318 сек.