Greetings Richard,
thanks for the help.
The code is still under development...i'm progressing while resolving issues...
Code:;----[18F2580 Hardware Configuration]------------------------------------------- #IF __PROCESSOR__ = "18F2580" #DEFINE MCU_FOUND 1 #CONFIG CONFIG OSC = IRCIO67 ; Internal oscillator block, port function on RA6 and RA7 CONFIG FCMEN = OFF ; Fail-Safe Clock Monitor disabled CONFIG IESO = OFF ; Oscillator Switchover mode disabled CONFIG PWRT = ON ; PWRT enabled CONFIG BOREN = OFF ; Brown-out Reset disabled in hardware and software CONFIG BORV = 3 ; VBOR set to 2.1V CONFIG WDT = OFF ; WDT disabled (control is placed on the SWDTEN bit) CONFIG WDTPS = 512 ; 1:512 CONFIG PBADEN = OFF ; PORTB<4:0> pins are configured as digital I/O on Reset CONFIG LPT1OSC = OFF ; Timer1 configured for higher power operation CONFIG MCLRE = OFF ; RE3 input pin enabled; MCLR disabled CONFIG STVREN = ON ; Stack full/underflow will cause Reset CONFIG LVP = OFF ; Single-Supply ICSP disabled CONFIG BBSIZ = 1024 ; 1K words (2K bytes) boot block CONFIG XINST = OFF ; Instruction set extension and Indexed Addressing mode disabled (Legacy mode) CONFIG DEBUG = OFF ; Background debugger disabled, RB6 and RB7 configured as general purpose I/O pins CONFIG CP0 = OFF ; Block 0 (000800-001FFFh) not code-protected CONFIG CP1 = OFF ; Block 1 (002000-003FFFh) not code-protected CONFIG CP2 = OFF ; Block 2 (004000-005FFFh) not code-protected CONFIG CP3 = OFF ; Block 3 (006000-007FFFh) not code-protected CONFIG CPB = OFF ; Boot block (000000-0007FFh) not code-protected CONFIG CPD = OFF ; Data EEPROM not code-protected CONFIG WRT0 = OFF ; Block 0 (000800-001FFFh) not write-protected CONFIG WRT1 = OFF ; Block 1 (002000-003FFFh) not write-protected CONFIG WRT2 = OFF ; Block 2 (004000-005FFFh) not write-protected CONFIG WRT3 = OFF ; Block 3 (006000-007FFFh) not write-protected CONFIG WRTC = OFF ; Configuration registers (300000-3000FFh) not write-protected CONFIG WRTB = OFF ; Boot block (000000-0007FFh) not write-protected CONFIG WRTD = OFF ; Data EEPROM not write-protected CONFIG EBTR0 = OFF ; Block 0 (000800-001FFFh) not protected from table reads executed in other blocks CONFIG EBTR1 = OFF ; Block 1 (002000-003FFFh) not protected from table reads executed in other blocks CONFIG EBTR2 = OFF ; Block 2 (004000-005FFFh) not protected from table reads executed in other blocks CONFIG EBTR3 = OFF ; Block 3 (006000-007FFFh) not protected from table reads executed in other blocks CONFIG EBTRB = OFF ; Boot block (000000-0007FFh) not protected from table reads executed in other blocks #ENDCONFIG #ENDIF ;----[Verify Configs have been specified for Selected Processor]---------------- ; Note: Only include this routine once, after all #CONFIG blocks #IFNDEF MCU_FOUND #ERROR "No CONFIGs found for [" + __PROCESSOR__ +"]" #ENDIF '***************************************************************************** OSCCON =%01110000 '8MHz INTOSC OSCTUNE=%11000000 'PLLEN enabled DEFINE OSC 32 '***************************************************************************** INCLUDE "ALLDIGITAL.pbp" DEFINE SHOWDIGITAL 1 '***************************************************************************** INCLUDE "DT_INTS-18.bas" ; Base Interrupt System INCLUDE "ReEnterPBP-18.bas" ; Include if using PBP interrupts '***************************************************************************** INCLUDE "modedefs.bas" 'DEFINE DEBUG_REG PORTC 'DEFINE DEBUG_BIT 0 DEFINE DEBUGIN_REG PORTB DEFINE DEBUGIN_BIT 5 DEFINE DEBUG_BAUD 9600 DEFINE DEBUG_MODE 0 ' Set Debug mode: 0 = true, 1 = inverted 'Inverted mode should idle low. 'True mode should idle high. '***************************************************************************** PORTA=%00000000 PORTB=%00000000 PORTC=%00000000 TRISA=%00000000 TRISB=%00100000 TRISC=%00000000 '***************************************************************************** 'PORTS & PINS RED1 var PORTC.1 RED2 var PORTC.2 IC_TX var PORTC.0 'DEBUG OUT RED3 var PORTA.6 RED4 var PORTB.4 RED5 var PORTA.7 RED6 var PORTB.0 GREEN1 var PORTC.7 GREEN2 var PORTB.1 GREEN3 var PORTB.2 GREEN4 var PORTB.3 GREEN5 var PORTC.3 GREEN6 var PORTC.4 GREEN7 var PORTC.5 GREEN8 var PORTC.6 BLUE1 var PORTA.5 BLUE2 var PORTA.4 BLUE3 var PORTA.3 BLUE4 var PORTA.2 BLUE5 var PORTA.1 BLUE6 var PORTA.0 BLUE7 var PORTB.7 BLUE8 var PORTB.6 IC_RX var PORTB.5 'INPUT 'Communication between MCUs (COMM)--------------------- 'PORTB.5 IC5 COMM (use interrupt on change to detect start of communication) PA1 VAR WORD MOOD VAR WORD MOODOLD VAR WORD MOODCAP VAR WORD INTFLAG VAR BYTE MOODCHANGE VAR WORD '***************************************************************************** 'PBP RBC Interrupts '---[INT - interrupt handler]--------------------------------------------------- ASM INT_LIST macro ; IntSource, Label, Type, ResetFlag? INT_Handler RBC_INT, _RBCinterrupts, PBP, yes endm INT_CREATE ; Creates the interrupt processor ENDASM RBIF var INTCON.0 'alias to RBIF bit of INTCON INTCON2.0=1 'HIGH PRIORITY '***************************************************************************** INIT: clear PA1=2000 MOOD=1 MOODCAP=0 INTFLAG=0 MOODCHANGE=0 moodold=mood GOSUB SYNC_ICS pause 1000 GOTO START '----------------------------------------------------------------- SYNC_ICS: debug "Init pulse check...", 13,10 IF IC_RX=1 THEN WHILE IC_RX WEND RETURN ELSE GOTO SYNC_ICS ENDIF RETURN '-------------------------------------------------------- START: pause 400 HIGH RED1 HIGH GREEN1 HIGH BLUE1 pause 400 GOTO RED '----------------------------------------------------------------- RBCinterrupts: @ INT_DISABLE RBC_INT debug "trigger detected...", 13,10 DEBUGIN 2000,JUMPOUT,[WAIT("MCU-"), DEC MOODCAP] debug "debugin passed...", 13,10 IF MOODCAP>0 AND MOODCAP<6 THEN MOOD=MOODCAP ENDIF IF MOOD=MOODOLD THEN MOODCHANGE=0 ELSE MOODCHANGE=1 MOODOLD=MOOD ENDIF RBIF=0 INTFLAG=1 DEBUG "returning...",13,10 @ INT_RETURN '-------------------------------------------------------- JUMPOUT: DEBUG "fail debugin...",13,10 RBIF=0 INTFLAG=0 @ INT_RETURN '-------------------------------------------------------- MOODCHECK: SELECT CASE MOOD CASE 1 GOTO RED CASE 2 GOTO GREEN CASE 3 GOTO BLUE CASE 4 GOTO SHUTDOWN CASE 5 GOTO LIGHT_TEST END SELECT '-------------------------------------------------------- VALIDAT: IF INTFLAG=1 THEN INTFLAG=0 if MOODCHANGE=1 then MOODCHANGE=0 goto MOODCHECK endif return else return ENDIF '----------------------------------------------------------------- LIGHT_TEST: 'INTCON=%11000000 'INTCON.0=0 RBIF=0 'enable interrupt @ INT_ENABLE RBC_INT LOW GREEN1 LOW GREEN2 LOW GREEN3 LOW GREEN4 LOW GREEN5 LOW GREEN6 LOW GREEN7 LOW GREEN8 LOW BLUE1 LOW BLUE2 LOW BLUE3 LOW BLUE4 LOW BLUE5 LOW BLUE6 LOW BLUE7 LOW BLUE8 LOW RED1 LOW RED2 LOW RED3 LOW RED4 LOW RED5 LOW RED6 gosub validat PAUSE PA1 HIGH GREEN1 HIGH GREEN2 HIGH GREEN3 HIGH GREEN4 HIGH GREEN5 HIGH GREEN6 HIGH GREEN7 HIGH GREEN8 HIGH BLUE1 HIGH BLUE2 HIGH BLUE3 HIGH BLUE4 HIGH BLUE5 HIGH BLUE6 HIGH BLUE7 HIGH BLUE8 HIGH RED1 HIGH RED2 HIGH RED3 HIGH RED4 HIGH RED5 HIGH RED6 gosub validat PAUSE PA1 GOTO LIGHT_TEST '----------------------------------------------------------------- RED: 'INTCON=%11000000 'INTCON.0=0 RBIF=0 'enable interrupt @ INT_ENABLE RBC_INT LOW GREEN1 LOW GREEN2 LOW GREEN3 LOW GREEN4 LOW GREEN5 LOW GREEN6 LOW GREEN7 LOW GREEN8 LOW BLUE1 LOW BLUE2 LOW BLUE3 LOW BLUE4 LOW BLUE5 LOW BLUE6 LOW BLUE7 LOW BLUE8 HIGH RED1 HIGH RED2 HIGH RED3 HIGH RED4 HIGH RED5 HIGH RED6 gosub validat GOTO RED '-------------------------------------------------------- SHUTDOWN: 'INTCON=%11000000 'INTCON.0=0 RBIF=0 'enable interrupt @ INT_ENABLE RBC_INT PAUSE 10000 LOW GREEN1 LOW GREEN2 LOW GREEN3 LOW GREEN4 LOW GREEN5 LOW GREEN6 LOW GREEN7 LOW GREEN8 LOW BLUE1 LOW BLUE2 LOW BLUE3 LOW BLUE4 LOW BLUE5 LOW BLUE6 LOW BLUE7 LOW BLUE8 LOW RED1 LOW RED2 LOW RED3 LOW RED4 LOW RED5 LOW RED6 end '-------------------------------------------------------- GREEN: DEBUG "GREEN ON...",13,10 'INTCON=%11000000 'INTCON.0=0 RBIF=0 'enable interrupt @ INT_ENABLE RBC_INT HIGH GREEN1 HIGH GREEN2 HIGH GREEN3 HIGH GREEN4 HIGH GREEN5 HIGH GREEN6 HIGH GREEN7 HIGH GREEN8 LOW BLUE1 LOW BLUE2 LOW BLUE3 LOW BLUE4 LOW BLUE5 LOW BLUE6 LOW BLUE7 LOW BLUE8 LOW RED1 LOW RED2 LOW RED3 LOW RED4 LOW RED5 LOW RED6 gosub validat GOTO GREEN '-------------------------------------------------------- BLUE: DEBUG "BLUE ON...",13,10 'INTCON=%11000000 'INTCON.0=0 RBIF=0 'enable interrupt @ INT_ENABLE RBC_INT LOW GREEN1 LOW GREEN2 LOW GREEN3 LOW GREEN4 LOW GREEN5 LOW GREEN6 LOW GREEN7 LOW GREEN8 HIGH BLUE1 HIGH BLUE2 HIGH BLUE3 HIGH BLUE4 HIGH BLUE5 HIGH BLUE6 HIGH BLUE7 HIGH BLUE8 LOW RED1 LOW RED2 LOW RED3 LOW RED4 LOW RED5 LOW RED6 gosub validat GOTO BLUE '--------------------------------------------------------


Reply With Quote

Bookmarks