Streamlined code even more:
Code:
#CONFIG
__config _CONFIG1, _FEXTOSC_OFF & _RSTOSC_HFINT32 & _CLKOUTEN_OFF & _CSWEN_OFF & _FCMEN_ON
__config _CONFIG2, _MCLRE_ON & _PWRTE_OFF & _LPBOREN_OFF & _BOREN_ON & _BORV_LO & _ZCD_OFF & _PPS1WAY_OFF & _STVREN_ON & _DEBUG_OFF
__config _CONFIG3, _WDTCPS_WDTCPS_11 & _WDTE_OFF & _WDTCWS_WDTCWS_7 & _WDTCCS_LFINTOSC
__config _CONFIG4, _WRT_OFF & _SCANE_available & _LVP_OFF
__config _CONFIG5, _CP_OFF & _CPD_OFF
#ENDCONFIG
DEFINE OSC 32
define CCP1_REG 0 ' Must clear unused CCP pins or else unpredictable results
DEFINE CCP1_BIT 0
define CCP2_REG 0
DEFINE CCP2_BIT 0
DEFINE CCP3_REG PORTB
DEFINE CCP3_BIT 5
define CCP4_REG 0
DEFINE CCP4_BIT 0
define CCP5_REG 0
DEFINE CCP5_BIT 0
ANSELA = %00000000
ANSELB = %00000000
ANSELC = %00000000
ANSELD = %00000000
ANSELE = %00000000
TRISA = %00000000
TRISB = %00000000
TRISC = %00000000
TRISD = %00000000
TRISE = %00001000
PinSCL2 VAR PortB.1
PinSDA2 VAR PortB.2
HPWM 3, 8, 1953
addr var byte : addr = %01000000 ' $40
IOCONAreg var byte
IOCONBreg var byte
IODIRAreg var byte
IODIRBreg var byte
OLATAreg var byte
OLATBreg var byte
IOCONdat var byte
IODIRdat var byte
OLATdat var byte
IOCONdat = %00110000
' bit 7 0 = The registers associated with each port are separated into different banks.
' bit 6 0 = The INT pins are not connected. INTA is associated with PORTA and INTB is associated with PORTB
' bit 5 1 = Sequential operation disabled, address pointer does not increment.
' bit 4 1 = Slew rate disabled
' bit 3 0 = Disables the MCP23S17 address pins.
' bit 2 0 = Active driver output (INTPOL bit sets the polarity.)
' bit 1 0 = Active-low
' bit 0 Unimplemented: Read as ‘0’
if IOCONdat.7 = 0 then ' Bank=0
IOCONAreg = $0A
IOCONBreg = $0B
IODIRAreg = $00
IODIRBreg = $01
OLATAreg = $14
OLATBreg = $15
else ' Bank=1
IOCONAreg = $05
IOCONBreg = $15
IODIRAreg = $00
IODIRBreg = $10
OLATAreg = $0A
OLATBreg = $1A
endif
IODIRdat = %00000000 'set GPIO all output
I2CWRITE PinSDA2,PinSCL2,addr,IOCONAreg,[IOCONdat]
I2CWRITE PinSDA2,PinSCL2,addr,IODIRAreg,[IODIRdat]
I2CWRITE PinSDA2,PinSCL2,addr,IOCONBreg,[IOCONdat]
I2CWRITE PinSDA2,PinSCL2,addr,IODIRBreg,[IODIRdat]
LOOOP:
OLATdat = %00000000 ' LEDs ON
I2CWRITE PinSDA2,PinSCL2,addr,OLATAreg,[OLATdat]
I2CWRITE PinSDA2,PinSCL2,addr,OLATBreg,[OLATdat]
pause 200
OLATdat = %11111111 ' LEDs OFF
I2CWRITE PinSDA2,PinSCL2,addr,OLATAreg,[OLATdat]
I2CWRITE PinSDA2,PinSCL2,addr,OLATBreg,[OLATdat]
pause 200
GOTO LOOOP
end
No longer need to mess with comments to change BANK setting. I just flip bit in IOCONdat and IF takes care of the rest.
Quadruple checked everything, still no blinky blink.
Bookmarks