Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: demanik, ivan_fd  
TIMER 2
tolyan249 Дата: Пн, 29.09.2025, 15:44  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 217
Репутация: 0   ±
Замечания:   ±
На сайте с 11.10.2007

Статус: Offline

Здравствуйте .
Мне нужно использовать TMR2 для секундных интервалов ,как сделать не нашёл тут.
Нашёл  это,  а как это использовать не знаю.

'                                                             
'-------------------------- Опции компилятора --------------------------------
                                                                   
Declare  SHOW_SYSTEM_VARIABLES = OFF   ' При симуляции в Proteus не показывать внутренние переменные
Declare  FSR_CONTEXT_SAVE = OFF   ' Не заботиться о сохранении содержимого регистра FSR
Declare  Reminders = OFF    ' Выключить напоминания компилятора 
Declare  Warnings = OFF   ' Выключить предупреждения компилятора 
Declare  Optimiser_Level 0    ' Выключить оптимизацию программы 
Declare  Bootloader = OFF  ' Выключить загрузчик 
                                                                   
;-------------------------- Общие настройки------------------------------------
                                                                   
Device = 16F877A   ' Используемый микроконтроллер
Xtal = 4   ' Частота осциллятора  4 МГц
                                                                   
'-------------------------- Настройки портов ---------------------------------
                                                                   
PortB_Pullups = OFF   ' Выключить подтягивающие резисторы на PORTB
Declare  All_Digital = OFF ' Каждый порт выполняет свою функцию по умолчанию
                                                                   
'-------------------------- Регистры специального назначения-------------------
                                                                   
'-------------------------- INTCON --------------------------------------------
                                                                   
Symbol RBIF = INTCON.0 ' Флаг внешнего прерывания по PORTB.4-PORTB.7
Symbol INTF = INTCON.1 ' Флаг внешнего прерывания по PORTB.0(INT)
Symbol T0IF = INTCON.2 ' Флаг переполнения TMR0
Symbol RBIE = INTCON.3 ' Бит разрешения прерывания по PORTB.4-PORTB.7
Symbol INTE = INTCON.4 ' Бит разрешения прерывания по PORTB.0(INT) 
Symbol T0IE = INTCON.5 ' Бит разрешения прерывания по переполнению TMR0
Symbol PEIE = INTCON.6 ' Бит разрешения прерывания от периферийных устройств
Symbol GIE = INTCON.7  ' Бит глобального разрешения прерываний
                                                                   
'-------------------------- T2CON ---------------------------------------------------
                                                                   
Symbol T2CKPS0 = T2CON.0     ' Выбор коэффициента деления предделителя TMR2
Symbol T2CKPS1 = T2CON.1     ' Выбор источника тактового сигнала для TMR2
Symbol TMR2ON = T2CON.2      ' Включение TMR2
Symbol TOUTPS0 = T2CON.3    ' Выбор коэффициента деления постделителя TMR2
Symbol TOUTPS1 = T2CON.4     ' Выбор коэффициента деления постделителя TMR2
Symbol TOUTPS2 = T2CON.5    ' Выбор коэффициента деления постделителя TMR2
Symbol TOUTPS3 = T2CON.6    ' Выбор коэффициента деления постделителя TMR2
                                                                   
'-------------------------- Начало -------------------------------------------
                                                                   
'-------------------------- Настройка TMR2 для прерываний --------------------
T2CON = %01111010
PR2 = $FF   ' Значение регистра PR2
                                                                   
GIE = 1    ' Разрешение глобального прерывания
                                                                   
On_Interrupt GoTo  Int_Label
GoTo  MainProgram
                                                                   
'-------------------------- Прерывания--------------------------
                                                                   
Int_Label:
Context Save                   '                                  
                                                                   
Context Restore                ' Возврат из обработчика прерывания
                                                                   
'-------------------------- Главная программа -------------------------
                                                                   
MainProgram:
                                                                   
                                                                   
                                                                   
GoTo  MainProgram   ' Возврат на начало основной программы


если знаешь,помоги.
Сообщение отредактировал tolyan249 - Пн, 29.09.2025, 15:54
ЯНДЕКС Дата: 29.09.2025
xvovanx Дата: Пн, 29.09.2025, 21:11  |                                                                                                                Сообщение # 2
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 363
Репутация: 65   ±
Замечания:   ±
На сайте с 02.05.2013

Статус: Offline

А чего 2-ой таймер, а не 1-ый используете? Я всегда 1-ый использую, на 2-ой даже примера рабочего нет. Второй таймер задействован для внутренних процедур как звук, ССР(PWM), I2C/SPI, поэтому с ним всегда головная боль.
Сообщение отредактировал xvovanx - Пн, 29.09.2025, 21:18
tolyan249 Дата: Вт, 30.09.2025, 06:20  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 217
Репутация: 0   ±
Замечания:   ±
На сайте с 11.10.2007

Статус: Offline

1 у меня уже используется.

если знаешь,помоги.
xvovanx Дата: Вт, 30.09.2025, 20:27  |                                                                                                                Сообщение # 4
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 363
Репутация: 65   ±
Замечания:   ±
На сайте с 02.05.2013

Статус: Offline

Я все на одном таймере всегда делаю - и часы и тайминги и все остальное. В системе умного дома там куча всего с таймерами и временами, порядка 50 временных переменных, и одним спокойно обошелся. В прерываниях делаешь генератор и приращение переменных, в теле программы орудуешь с ним как надо.
Сообщение отредактировал xvovanx - Вт, 30.09.2025, 20:29
tolyan249 Дата: Ср, 01.10.2025, 08:01  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 217
Репутация: 0   ±
Замечания:   ±
На сайте с 11.10.2007

Статус: Offline

Можно пример .?
Спасибо.


если знаешь,помоги.
xvovanx Дата: Ср, 01.10.2025, 22:11  |                                                                                                                Сообщение # 6
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 363
Репутация: 65   ±
Замечания:   ±
На сайте с 02.05.2013

Статус: Offline

Всю прогу конечно не выложу (порядка 15000 строк), вот куски из программы для понимания. В прерывании делаем часики, можно добавить еще разных таймеров на определенное время (в моем случае на 5 сек). В основной программе делаем переменные времени для управления вкл/выкл разных устройств и эти переменные сверяем в текущими часами.
Прикрепления: 3295671.jpg (53.0 Kb) · 9327670.jpg (21.9 Kb) · 2617594.jpg (15.7 Kb) · 3999983.jpg (19.0 Kb) · 1385512.jpg (12.1 Kb) · 0711990.jpg (85.9 Kb)
  • Страница 1 из 1
  • 1
Поиск: