Code:
@ __config _INTOSC_OSC_NOCLKOUT & _WDT_OFF & _MCLRE_ON & _LVP_OFF & _CP_OFF
clear
DEFINE OSC 4
TRISB = %00001000
CMCON = 7 ; Disable comparator
OPTION_REG = 0
SWSTAT var byte
Dat VAR byte
I var byte
I2CAddr Var word
I2CDevice var byte
D1 var PORTA.2 ; Cartrige white wire
D2 VAR PORTA.3 ; Cartrage blue wire
Activate var PORTB.2 ; select between reset=1 normal=0
GO VAR PORTB.3 ; Start switch
OK VAR PORTB.4 ; Green LED
NOTOK var PORTB.5 ; Red LED
activate = 0 ; Normal operation
ok = 0 ; Green LED off
notok = 0 ; Red LED off
goto swstatus
Start:
;--------make sure reset is needed-----------
activate = 1 ; get ready to reset
swstat = 0 ; reset switch debounce
pause 50 ; give time or relay contact
i2cdevice = $A1
i2caddr = 3
i2cread d1,d2,i2cdevice,i2caddr.lowbyte,[dat]
pause 10
if dat > 5 then
for I = 1 to dat
ok=1: pause 500:ok = 0:pause 500
next
activate = 0 ;------Resume normal operation
goto SwStatus
else
ok = 1: pause 3000: ok = 0 ; Green LED on for 3 seconds
pause 5000
I2CAddr = $0
I2CDevice = $A0
i2cwrite d1,d2,i2cdevice,i2caddr.lowbyte,[$01]:i2caddr = i2caddr + 1:pause 10
i2cwrite d1,d2,i2cdevice,i2caddr.lowbyte,[$01]:i2caddr = i2caddr + 1:pause 10
i2cwrite d1,d2,i2cdevice,i2caddr.lowbyte,[$01]:i2caddr = i2caddr + 1:pause 10
i2cwrite d1,d2,i2cdevice,i2caddr.lowbyte,[$3c]:i2caddr = i2caddr + 1:pause 10
i2cwrite d1,d2,i2cdevice,i2caddr.lowbyte,[$3c]:i2caddr = i2caddr + 1:pause 10
i2cwrite d1,d2,i2cdevice,i2caddr.lowbyte,[$3c]:i2caddr = i2caddr + 1:pause 10
i2cwrite d1,d2,i2cdevice,i2caddr.lowbyte,[$3c]:i2caddr = i2caddr + 1:pause 10
i2cwrite d1,d2,i2cdevice,i2caddr.lowbyte,[$3c]:i2caddr = i2caddr + 1:pause 10
i2cwrite d1,d2,i2cdevice,i2caddr.lowbyte,[$3c]:i2caddr = i2caddr + 1:pause 10
i2cwrite d1,d2,i2cdevice,i2caddr.lowbyte,[$08]:i2caddr = i2caddr + 1:pause 10
i2cwrite d1,d2,i2cdevice,i2caddr.lowbyte,[$08]:i2caddr = i2caddr + 1:pause 10
i2cwrite d1,d2,i2cdevice,i2caddr.lowbyte,[$08]:i2caddr = i2caddr + 1:pause 10
i2cwrite d1,d2,i2cdevice,i2caddr.lowbyte,[$21]:i2caddr = i2caddr + 1:pause 10
i2cwrite d1,d2,i2cdevice,i2caddr.lowbyte,[$21]:i2caddr = i2caddr + 1:pause 10
i2cwrite d1,d2,i2cdevice,i2caddr.lowbyte,[$21]:i2caddr = i2caddr + 1:pause 10
i2cwrite d1,d2,i2cdevice,i2caddr.lowbyte,[$ff]:pause 10
;---------------------make sure data was written-------------------------
i2cdevice = $A1
i2caddr = 4
i2cread d1,d2,i2cdevice,i2caddr.lowbyte,[dat]
pause 10
activate = 0 ;------Resume normal operation
if dat = $3c then ;------all is good, flash green LED
for I = 1 to 10
toggle ok
pause 500
next
ok = 0
else ;------Something wrong, flash red LED
for I = 1 to 10
toggle notok
pause 500
next
notok = 0
endif
endif
SwStatus:
if go = 0 then debounce
swstat = 0
goto SWstatus
debounce:
swstat = swstat + 1
pause 10
if swstat = 150 then start
goto swstatus
END
Thank you for your help.
Bookmarks