Я программирую PIC18F67K22 и настроил его на использование внутреннего RC-генератора 16X4 МГц с включенной PLL.
TIMER0
переполненииИтак, как настроить TIMER0
прерывание каждую секунду?
Это TIMER0
16-битный таймер, поэтому для прерывания каждую секунду вам нужно установить:
Предварительный делитель @ 16
Предварительная загрузка TMR0 @ 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.
Игнасио Васкес-Абрамс
шайль корат
Коннор Вульф