私はINT1割り込みを使用して矩形パルスを生成しようとしています。 timer0割り込みを使用してパルス長を設定しています。私はこのプログラムでソフトウェアのポーリング方法 を使用しています。 PB1を押すと、PORTDに矩形のパルスが生成されます。 しかし、私がPB1を押すと、INT1IF割り込みフラグは決して設定されません。pic 18F452外部割り込みが機能しません。
は、ここに私のコード
#include <p18f452.inc>
config OSC = HS
config BOR = OFF, WDT = OFF, LVP = OFF
org 0x0000
goto start
#define count d'1234'
DAC_A:
movwf PORTD ;send WREG value in PORTD
bcf PORTA,5 ; clear RA5 for DAC output
bcf PORTA,4 ; make a low puls at DAC WR pin
bsf PORTA,4 ; set back to high
return
init:
;------------------
;I/O config
;------------------
movlw b'11001111'
movwf TRISA ;4 and 5 bit of PORTA as output
movlw b'00000000'
movwf TRISD ;all the bits of PORTD as output
;------------------
;TMR0 config
;------------------
clrf T0CON
bsf T0CON,1 ;TMR0, pre-scaler 8
bsf T0CON,7 ;TMR0, start
;------------------
;INT0 interrupt config
;------------------
bsf INTCON3,3 ;INT1, Enable
bcf RCON,7 ;Interrupt priority disable
bsf INTCON,7 ;global enterrupt enable
bsf INTCON,6 ;peripheral enterrupt enable
;------------------
;other config
;------------------
return
;------------------------------------------------------------
start:
call init ; initialisation code
again:
bcf INTCON3,0 ;clear INT1IF
poll_PB1:
btfss INTCON3,0 ;check INT1IF, if set skip
bra poll_PB1
bcf INTCON3,0 ;clear INT1IF
movlw h'FF'
call DAC_A
movlw high(-count)
movwf TMR0H ;load TMR0H
movlw low(-count)
movwf TMR0L ;load TMR0L
bcf INTCON,2 ;clear TMR0IF
poll_TMR0:
btfss INTCON,2 ;check timeout
bra poll_TMR0
movlw h'00'
call DAC_A
movlw high(-count)
movwf TMR0H ;load TMR0H
movlw low(-count)
movwf TMR0L ;load TMR0L
bcf INTCON,2 ;clear TMR0IF
poll_TMR00:
btfss INTCON,2 ;check timeout
bra poll_TMR00
bra again ;loop again
END
ありがとうございます。いい答えだ。 –