assembly 如何使用PIC12F675定时器1中断?

cgvd09ve  于 2023-04-30  发布在  其他
关注(0)|答案(2)|浏览(166)

这段代码有什么问题?0004上的中断永远不会执行!我尝试更改T1CON的所有位,但没有结果

; TODO INSERT CONFIG CODE HERE USING CONFIG BITS GENERATOR
#include "p12f675.inc"

; CONFIG
; __config 0x31F1
 __CONFIG _FOSC_XT & _WDTE_OFF & _PWRTE_OFF & _MCLRE_ON & _BOREN_ON & _CP_OFF & _CPD_OFF

D1 equ h'20'  ;delay variabile
D2 equ h'21' 
D3 equ h'22' 
 
RES_VECT  CODE    0x0000            ; processor reset vector
    GOTO    START                   ; go to beginning of program

INT_VECT  CODE    0x0004    
 ; TODO ADD INTERRUPTS HERE IF USED
  ;vine de 10 ori/sec
  ;contor 10 ori:
  movlw d'61' ; ar fi (256-61)*256= cca 50 ms > apoi prescaler 2 => 100 ms
  movwf TMR1L  ;numara 61...255
  clrf TMR1H   ;numara 0...255
  bcf PIR1,0  ;clear timer1 interupt flag/ ca sa porneasca
  nop
  retfie

MAIN_PROG CODE                      ; let linker place main program
START
  ; init timer interupt:
  bsf STATUS, RP0  ;banc 1
  bsf PIE1,0  ;enable timer 1 interupt
  bcf STATUS, RP0   ; banc 0
  movlw d'61' ; ar fi (256-61)*256= cca 50 ms > apoi prescaler 2 => 100 ms
  movwf TMR1L  ;numara 61...255
  clrf TMR1H   ;numara 0...255
  movlw b'00010101' ;prescaler 2, timer1 enabled
  movwf T1CON
  movlw b'10000000' ;enable timer-overflow interrupt. trebe?!
  movwf INTCON  
  bcf PIR1,0  ;clear timer1 interupt flag/ ca sa porneasca
  
loop  
    movlw d'10'
    movwf D1
    GOTO loop                          ; loop forever

    END
m0rkklqb

m0rkklqb1#

简短地说:要启用定时器1中断,必须设置以下位:

  • 定时器1中断使能位(PIE1<0>)
  • PEIE位(INTCON<6>)
  • GIE位(INTCON<7>)。
k2arahey

k2arahey2#

这是因为你的代码少了一个小步骤。让我来解释一下正确设置定时器1中断所需的步骤。
这里是一个图片,显示了内部电路的所有中断 * PIC 12 F675 。x1c 0d1x现在,如果你有一点数字电子学知识,看看 Timer 1 中断是如何通过CPU中断连接的。特别要注意 AND 门,因为它们的作用就像打开/关闭开关,可以连接/启用或断开/禁用一个电路。更不用说,所有这些路径都是以这样的方式组织的,以便我们可以通过设置或清除相应的位在软件中控制它们。
话虽如此,现在让我们关注逻辑电路中 * 定时器1
的激活路径。此路径由3个主要逻辑块组成,每个逻辑块必须启用,以便将中断信号传输到CPU:

  • 控制 * 定时器1* 中断的第一个 AND 门有两个输入,分别为TMR1IFTMR1IETMR1IF在发生溢出时由内部电路设置,因此您只能清除它。TMR1IE完全由软件控制,因此我们首先设置/启用TMR1IE位。
  • 控制整个*外围中断*电路的下一个 AND 门具有来自外围中断的输入,我们无法控制它,另一个输入称为PEIE,我们可以完全控制它。因此,我们还需要设置/使能它,以便允许中断信号通过它并到达全局中断控制 AND 门输入。
  • 下一站,正如你所猜的,是全局中断控制 AND 门,它有2个输入。一个来自整个中断控制逻辑,另一个是GIE,我们必须在最后一步设置/启用它。

在这里,我们完成了 Timer 1 中断信号通路,这样每当出现溢出时它就会中断CPU。继续并按照上面给出的步骤操作,您将使 * 定时器1* 中断正常工作。

相关问题