PIC: как настроить timer0 на прерывание каждые 1 секунду?

Я программирую PIC18F67K22 и настроил его на использование внутреннего RC-генератора 16X4 МГц с включенной PLL.

  • Прерывание высокого уровня при TIMER0переполнении
  • Я использую компилятор MCC18.

Итак, как настроить TIMER0прерывание каждую секунду?

Задайте период чуть больше 1 с, затем используйте CTC, чтобы настроить его на 1 с.
Я не понимаю, что вы говорите. Пожалуйста, не могли бы вы объяснить вкратце??
Вы вообще понимаете, как работают модули таймера?

Ответы (1)

Это TIMER016-битный таймер, поэтому для прерывания каждую секунду вам нужно установить:

  • Предварительный делитель @ 16

  • Предварительная загрузка TMR0 @ 3036

Уравнение:

Т "=" ( 4 Ф о с с ) п р е с с ( р е с о л ты т я о н п р е л о а г )

Где:

  • T = период = 1 с
  • Fosc = частота генератора = 4 МГц
  • Presc = Предварительный делитель = 16
  • Разрешение = 2 · 16 = 65535
  • Предварительная загрузка = 3036

Образец кода:

// Timer0 Registers:16-Bit Mode; Prescaler=1:16; TMRH Preset=$BD; 
//                  TMRL Preset=$DC; Freq=1,00Hz; Period=1,00 s
T0CON.TMR0ON = 1;  // Timer0 On/Off Control bit: 1=Enables Timer0 / 0=Stops Timer0
T0CON.T08BIT = 0;  // Timer0 8-bit/16-bit Control bit: 1=8-bit timer/counter / 0=16-bit timer/counter
T0CON.T0CS   = 0;  // TMR0 Clock Source Select bit: 0=Internal Clock (CLKO) / 1=Transition on T0CKI pin
T0CON.T0SE   = 0;  // TMR0 Source Edge Select bit: 0=low/high / 1=high/low
T0CON.PSA    = 0;  // Prescaler Assignment bit: 0=Prescaler is assigned; 1=NOT assigned/bypassed
T0CON.T0PS2  = 0;  // bits 2-0  PS2:PS0: Prescaler Select bits
T0CON.T0PS1  = 1;
T0CON.T0PS0  = 1;
TMR0H = $BD;        // preset for Timer0 MSB register
TMR0L = $DC;        // preset for Timer0 LSB register
Просто хотел сообщить вам, что анонимный пользователь оставил комментарий относительно настройки T0CON.PSA = 0вместо T0CON.PSA = 1. Они попытались отредактировать ваш ответ вместо того, чтобы опубликовать комментарий, чтобы привлечь ваше внимание к проблеме, что было отклонено. Их комментарий был следующим, если вы не можете получить доступ к ссылке выше:PSA must be zero for the prescaler to be considered. This code functions improperly when this bit is set to 1.