|
TIMER 2
|
|
| tolyan249 |
Дата: Пн, 29.09.2025, 15:44 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
217
Замечания:
±
На сайте с 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
|
|
|
|
| xvovanx |
Дата: Пн, 29.09.2025, 21:11 | Сообщение # 2 |
Группа:
Модераторы
Ранг:
Помогаю всем
Сообщений:
363
Замечания:
±
На сайте с 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
Замечания:
±
На сайте с 11.10.2007
Статус:
Offline
|
1 у меня уже используется.
если знаешь,помоги.
|
|
|
|
| xvovanx |
Дата: Вт, 30.09.2025, 20:27 | Сообщение # 4 |
Группа:
Модераторы
Ранг:
Помогаю всем
Сообщений:
363
Замечания:
±
На сайте с 02.05.2013
Статус:
Offline
|
Я все на одном таймере всегда делаю - и часы и тайминги и все остальное. В системе умного дома там куча всего с таймерами и временами, порядка 50 временных переменных, и одним спокойно обошелся. В прерываниях делаешь генератор и приращение переменных, в теле программы орудуешь с ним как надо.
Сообщение отредактировал
xvovanx - Вт, 30.09.2025, 20:29
|
|
|
|
| tolyan249 |
Дата: Ср, 01.10.2025, 08:01 | Сообщение # 5 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
217
Замечания:
±
На сайте с 11.10.2007
Статус:
Offline
|
Можно пример .? Спасибо.
если знаешь,помоги.
|
|
|
|
| xvovanx |
Дата: Ср, 01.10.2025, 22:11 | Сообщение # 6 |
Группа:
Модераторы
Ранг:
Помогаю всем
Сообщений:
363
Замечания:
±
На сайте с 02.05.2013
Статус:
Offline
|
Всю прогу конечно не выложу (порядка 15000 строк), вот куски из программы для понимания. В прерывании делаем часики, можно добавить еще разных таймеров на определенное время (в моем случае на 5 сек). В основной программе делаем переменные времени для управления вкл/выкл разных устройств и эти переменные сверяем в текущими часами.
|
|
|
|