1

我有一个PIC18F87J11设备,我应该创建:
1)应该每 100 毫秒触发一次的高优先级 ISR
2)应该每 10 毫秒触发一次的低优先级 ISR

我有关于配置预分频器的基本知识,例如 Timer0,它是

movlw b'00000010'
movwf T0CON

如手册页所述,这应该将 Timer0 配置为 16 位计数器,预分频器 1:8(设备手册页 179)。问题是,当我想要 100 毫秒的间隔时,我不知道如何确定正确的预分频器设置。任何帮助表示赞赏。

编辑:
好的,现在我意识到我对自己在做什么的想法可能比我想象的要少。我在手册中找不到相关信息(我确定它在那里)。我需要将Timer0设置为 100ms,将Timer1设置为 10ms。

4

1 回答 1

1

这是 TMR0 的 ISR 高优先级启动规则。

在您的 MCPU 启动代码的最开始,您必须定义...

;Init TMR0 as 8 bit timer, overflow every 1024 CPU cycles if TMRxPrescaler4 is set
;{
TMRxPrescaler2      equ 0
TMRxPrescaler4      equ 1
TMRxPrescaler8      equ 2
TMRxPrescaler16     equ 3
TMRxPrescaler32     equ 4
TMRxPrescaler64     equ 5
TMRxPrescaler128    equ 6
TMRxPrescaler256    equ 7

    movlw   (1<<TMR0ON) + (1<<T08BIT) + TMRxPrescaler4
    movwf   T0CON
    bsf INTCON, TMR0IE       ;enable TMR0 overflow interrupt 
;};

在 MCPU 启动后不要忘记打开中断...

    bsf     INTCON, GIE

ISR 规则:

ISR
    bcf INTCON, TMR0IF              ;demask TMR0 overflow interrupt
;your ISR code
    retfie  1

在 ISR rutune 计数中,TMR0 溢出的数量,对于 10MHz CPU 时钟:10000000 / 4 / 1024 = 2441.4 溢出一秒。

我建议您只使用一个 ISR 规则来处理这两个事件。

于 2011-11-21T12:24:02.257 回答