Har förstås läst databladet men tänkte bara kolla så jag inte missuppfattat något:
INTCON.RBIF "RB Port change Interrupt Flag bit" är väl den som blir hög när t.ex KBI0 ändrats? INTCON.INT0IF är väl bara för INTx-pinnarna?
Kod:
Kod: Markera allt
sub procedure init
'Encoder 1
SetBit(TRISB, 4) ' Ingång PORTB.4 (Encoder 1A)
SetBit(TRISC, 0) ' Ingång PORTC.0 (Encoder 1B)
ClearBit(PORTB, 4) ' Rensa PORTB.4 (Encoder 1A)
ClearBit(PORTC, 0) ' Rensa PORTC.0 (Encoder 1B)
'Initiera interrupt
INTCON.GIE = 1 ' Global interrupt enable.
INTCON.PEIE = 1 ' Enable yttre interrupt.
INTCON.TMR0IE = 0 ' Disable TMR0 overflow interrupt.
INTCON.INT0IE = 0 ' Disable INT0 external interrupt.
INTCON.RBIE = 1 ' Enable RB-port change interrupt.
INTCON.TMR0IF = 0 ' TMR register did not overflow.
INTCON.INT0IF = 0 ' INT0 external interrupt did not occur.
INTCON.RBIF = 0 ' None of the RB7:RB4 pins have changed state.
INTCON2.RBPU = 1 ' All PORTB pull-ups are disabled
INTCON2.INTEDG0 = 1 ' External interrupt (Interrupt0) on rising edge
INTCON2.INTEDG1 = 1 ' External interrupt (Interrupt1) on rising edge
INTCON2.INTEDG2 = 1 ' External interrupt (Interrupt2) on rising edge
INTCON2.TMR0IP = 0 ' TMR0 Overflow Interrupt = Low priority
INTCON2.RBIP = 0 ' Port Change Interrupt = Low priority
INTCON3.INT2IP = 0 ' INT2IP - External interrupt, låg prioritet
INTCON3.INT1IP = 0 ' External interrupt, låg prioritet
INTCON3.INT2IE = 0 ' Disable INT2 external interrupt
INTCON3.INT1IE = 0 ' Disable INT1 external interrupt
INTCON3.INT2IF = 0 ' INT2 external interrupt did not occur
INTCON3.INT1IF = 0 ' INT1 external interrupt did not occur
PIR1 = $00
PIR2 = $00
PIE1.PSPIE = 0 ' PSPIE - Parallell slave port read/write disabled
PIE1.ADIE = 0 ' Disable A/D interrupt
PIE1.RCIE = 0 ' Disable USART interrupt (Receive)
PIE1.TXIE = 0 ' Disable USART interrupt (Transmit)
PIE1.SSPIE = 0 ' Disable Master synchronous serial port interrupt
PIE1.CCP1IE = 0 ' Disable CCP1 interrupt
PIE1.TMR2IE = 0 ' Disable TMR2 to PR match interrupt
PIE1.TMR1IE = 0 ' Disable TMR1 overflow interrupt
PIE2 = $00
IPR1 = %10000000
IPR2 = $00
RCON.IPEN = 0 ' Disable priority levels on interrupts
end sub
sub procedure interrupt
if TestBit(INTCON, RBIF) = 1 then
tmp1 = PORTB.4
tmp2 = PORTB.5
ClearBit(INTCON, RBIF)
'Tänd LED1
PORTB.2 = 1
end if
end sub
Det som ska hända i detta test-case är att lysdioden på PORTB.2 ska tändas när man får ett interrupt på någon av KBIx-pinnarna. På dessa sitter bara knappar som ett test för att skicka en hög eller låg signal till KBI0 (PORTB.4) och KBI1 (PORTB.5)
Vad kan vara fel?
