I simplified things somewhat to try to isolate my error, but I'm not finding it.
After the UART interrupt is used, the INT2 interrupt will not send it's data until AFTER the NEXT uart interrupt!! I'm lost.
Code:'====================== 'PORT SETUPS '====================== ASM ;PORT A CLRF PORTA MOVLW 07h MOVWF ADCON1 ;A/D'S OFF MOVWF 07h MOVWF CMCON ;COMPARATORS OFF MOVLW 00000000b ;PIN DIRECTION PORT A MOVWF TRISA ;PORT B CLRF PORTB MOVLW 0Fh MOVWF ADCON1 ;A/D'S OFF MOVLW 11000111b ;PIN DIRECTION PORT B MOVWF TRISB ;PORT C CLRF PORTC MOVLW 10011000b ;PIN DIRECTION PORT C MOVWF TRISC ENDASM '====================== 'SET REGISTERS '====================== INTCON2.7=0 'PORT B PULLUPS ON (0=ON) INTCON2.6=0 'INT0 TRIGGERS ON FALLING EDGE INTCON2.5=0 'INT1 TRIGGERS ON FALLING EDGE INTCON2.4=0 'INT2 TRIGGERS ON FALLING EDGE '====================== 'DEFINES '====================== DEFINE OSC 20 DEFINE HSER_RCSTA 90h 'Enable serial port & continuous receive DEFINE HSER_TXSTA 24h 'Enable transmit, BRGH = 1 DEFINE HSER_CLROERR 1 'Clear overflow automatically DEFINE HSER_SPBRG 8 '9600 Baud @ 20MHz, -0.03% SPBRGH = 2 BAUDCON.3 = 1 'Enable 16 bit baudrate generator 'DEBUG PORT (Group Controller) DEFINE DEBUG_REG PORTC 'DEBUG PIN IS IN PORT C DEFINE DEBUGIN_REG PORTC 'DEBUGIN PIN IS IN PORT C DEFINE DEBUG_BIT 5 'DEBUG TRANSMIT PORT C5 DEFINE DEBUGIN_BIT 4 'DEBUG RECEIVE PORT C4 DEFINE DEBUG_BAUD 57600 '57600 BAUD TO GC DEFINE DEBUG_MODE 0 'INVERTED OUTPUT (COMPENSATE FOR MAX232) 'INCLUDE FILES FOR DT INTERRUPTS INCLUDE "DT_INTS-18.bas" INCLUDE "ReEnterPBP-18.bas" '====================== 'CONSTANTS '====================== MODE CON 6 'SERIN2/SEROUT2 TO USE 38400 BAUD '====================== 'VARIABLES '====================== TP1 VAR PORTA.0 'TP1 (GC SIDE) TP2 VAR PORTA.1 'TP2 (GC SIDE) TP3 VAR PORTA.2 'TP3 (READER SIDE) LED VAR PORTA.3 'ACTIVITY LED ITP0 VAR PORTA.5 'INTERNAL TEST POINT 0 DAV VAR PORTA.6 'DAV (INT) FLAG TO GC DATA0 VAR PORTB.0 'WIEGAND INPUT DATA1 VAR PORTB.1 'WIEGAND INPUT EXTINT VAR PORTB.2 'TERMINAL STRIP INTERRUPT LEDR VAR PORTB.3 'RED LED LEDG VAR PORTB.4 'GRN LED BUZZ VAR PORTB.5 'BUZZER ITP1 VAR PORTC.0 'INTERNAL TEST POINT 1 ITP2 VAR PORTC.1 'INTERNAL TEST POINT 2 DIAGIN VAR PORTC.2 'DIAG IN DIAGOUT VAR PORTC.3 'DIAG OUT FLAG VAR BIT X VAR BYTE Y VAR BYTE Z VAR BYTE TAG VAR BYTE[11] CLEAR 'INITIALIZE INTERRUPTS ASM INT_LIST MACRO ;IntSource,Label,Type,ResetFlag? INT_Handler RX_INT, _RDRINT,PBP,yes INT_Handler INT2_INT, _EXTTS,PBP,yes ENDM INT_CREATE ;CREATES THE INTERRUPT PROCESSOR ENDASM 'ENABLE INTERRUPTS @ INT_ENABLE RX_INT ;UART INTERRUPT @ INT_ENABLE INT2_INT ;EXT INT 2 '====================== MAIN: '====================== FOR X=1 TO 1000 PAUSEUS 100 NEXT X GOTO MAIN '====================== RDRINT: 'TAG READER INTERRUPT! '====================== HSERIN [STR TAG\9\$03] SEROUT2 DIAGOUT,MODE,[STR TAG,10,13] 'SEND DATA TO DIAG PORT FOR Z=0 TO 10 TAG[Z]=$00 NEXT Z @ INT_RETURN '====================== EXTTS: '====================== SEROUT2 DIAGOUT,MODE,["00995031",10,13] @ INT_RETURN



Dave! You nailed it. I don't know how you remember/find all these links!!

Bookmarks