1

我对这个问题有一些想法,主要是我将使用的 PIC 本身没有足够的计时器位来计数到一秒,但是使用预分频器和后分频器,我可以有效地让自己达到 18 位。但是,我需要 23 位,剩下 5 位。我有几个想法,例如在计时器中存储每次用完 18 位的计数,(词汇可能不正确,但我认为可以看出我想说什么)。此外,有人建议使用标志(这些是否像计数器的想法?)。我正在使用 MPLAB X IDE 为芯片编写程序。我还需要执行其中两个程序来闪烁灯,一个有中断,一个没有,尽管现在我只是在处理一个没有中断的程序,这就是我的问题所在。为了快速参考,PIC 上时钟的滴答率为每秒 8,000,000 次。至于端口,寄存器,我不确定我需要使用什么。如果有人可以为简单的事情提供一段示例代码,例如在预分频器和后分频器上使用 1:1 让时钟以较短的间隔开始闪烁灯,那将有很大帮助。我对这种编程很生疏,自从我使用 PIC 以来已经大约至少一年了,更不用说实际用 PIC 程序集编写了(我的结果好坏参半)。

4

1 回答 1

1

用于定时器溢出中断!

在启动 MCPU 时,初始化一个定时器,假设 Timer0(8 位定时器)和内部 TMR0 中断增加另一个计数 ms 的计数器变量TickRoller,而不是计数 ms 并打开/关闭 LED:

TickRoller      res 1                ;Define Interrupt tick 1ms timer
;Set OPTION reg
;{
        movlw   B'00000000'          ;Prescaler is assigned to the Timer0 module
                                     ;Prescaler TMR0 Rate 2
        BANKSEL OPTION_REG
        movwf   OPTION_REG            
;}

;Set INTCON reg and enable interrupts
;{
        bcf     CPSCON0, T0XCS        ;Timer0 clock source is controlled by FOSC/4
        movlw   B'10100000'           ;Enables the Timer0 interrupt
                                      ;Clear TMR0IF
                                      ;Enable global interrupts
        movwf   INTCON                ;Set INTCON register 
;}

之后在地址 0x0004 处写入中断规则,如:

__Interrupt         code    0x0004
;INTERRUPT
;{
;Timer0 interrupt in use, overflow every 512 cycles @ CPU clock 32MHz = 64uS
        bcf INTCON, TMR0IF               ;Reenable timer interrupt
;Tick Roller
;{  
        incf    TickRoller, f           
        btfss   TickRoller, 4       ;TickRoll event every 0.001024s
        retfie                      ;Bit 4 of TickRoller not set so exit from interrupt 
        clrf    TickRoller          ;Reset event counter
;
;       your rutine
;       count up to 1000 and change the LED state every second  
;
        retfie                       ;exit from interrupt         
;}

不要忘记主程序例程!

;Main Program loop
{
MainLoop
        clrwdt                       ;Clear wdt timer
;
;       ... 
;
        goto  MainLoop
}

就这样...

于 2013-10-21T09:13:10.697 回答