Code:
*****
SSPCON.5 = 0 ; Disable SSP Module
TXSTA.5 = 0 ; Disable AUSART Tx
RCSTA.7 = 0 ; Disable Serial Port
OSCCON = %01111110 'Internal RC w/ I/Os
INTCON=0
PIE1 = 0
'PIE2 = 0
PIR1 = 0 'off
CMCON= 7
CVRCON= 0 'Vref Off
CCP1CON= 0
T1CON= 0
'T2CON = %00000100
'*****************************************************************************
'DEFINEs
'*****************************************************************************
@ DEVICE INTRC_OSC
@ DEVICE MCLR_OFF
@ DEVICE PROTECT_OFF
DEFINE osc 4
@ DEVICE CPD_OFF
@ DEVICE LVP_OFF
@ DEVICE BOD_OFF
@ DEVICE PWRT_OFF
@ DEVICE WDT_OFF
'*****************************************************************************
'ADC
DEFINE ADC_BITS 10 ' Set number of bits in result ( 8 or 10 bits )
DEFINE ADC_CLOCK 3 ' Set clock source (3=rc)
DEFINE ADC_SAMPLEUS 50 ' Set sampling time in uS
'*****************************************************************************
'ADC parameters
ADCON1 =%10000000 'right justify
ANSEL =%00000101
ADCON0 =%11000001
'*****************************************************************************
INCLUDE "modedefs.bas"
'settings for serial comm
DEFINE debug_reg PORTA
DEFINE debug_bit 1
DEFINE debug_baud 9600
DEFINE debug_mode 1
'*****************************************************************************
'I/O's
PORTA=0
PORTB=0
TRISA=%00100101
TRISB=%00000011
'*****************************************************************************
'PINS
temp var PORTA.0
out var PORTA.1
volt var PORTA.2
a3 var PORTA.3
A4 var PORTA.4
but1 var PORTA.5
led2 var PORTA.6
led1 var PORTA.7
but2 var PORTB.0
but3 var PORTB.1
SCL var PORTB.2
SDA var PORTB.3
green var PORTB.4
red var PORTB.5
led4 var PORTB.6
led3 var PORTB.7
*****************************************************************************
' variables
va var word
va2 var word
tempe var word
volte var word
mem var byte
p1a var word
p1b var word
p2a var word
p2b var word
p3a var word
p3b var word
p4a var word
p4b var word
state var byte
st var word
ed var word
ADDR var word
m1 var byte
m2 var byte
m3 var byte
m4 var byte
slot var bit
w var byte
CTW VAR BYTE
km var byte
ra var word
set1 VAR BYTE
set2 VAR BYTE
rm var byte
x var byte
CLEAR
'*****************************************************************************
mem=1
state=1
p1a=$10
p1b=$1070
p2a=$1080
p2b=$2140
p3a=$2160
p3b=$3220
p4a=$3230
p4b=$4290
'*****************************************************************************
start:
high out
debug $0D, $0A
PAUSE 50
CTW=$A0
'*****************************************************************************
debug "start menu",13,10
startmenu:
I2CREAD SDA,SCL,CTW,1,[m1]
I2CREAD SDA,SCL,CTW,2,[m2]
I2CREAD SDA,SCL,CTW,3,[m3]
I2CREAD SDA,SCL,CTW,4,[m4]
if (mem=1) and (m1=0) then
led1=1
led2=0
led3=0
led4=0
slot=0
endif
if (mem=1) and (m1<>0) then
pause 300
toggle led1
led2=0
led3=0
led4=0
slot=1
endif
if (mem=2) and (m2=0) then
led1=0
led2=1
led3=0
led4=0
slot=0
endif
if (mem=2) and (m2<>0) then
led1=0
pause 300
toggle led2
led3=0
led4=0
slot=1
endif
if (mem=3) and (m3=0) then
led1=0
led2=0
led3=1
led4=0
slot=0
endif
if (mem=3) and (m3<>0) then
led1=0
pause 300
led2=0
toggle led3
led4=0
slot=1
endif
if (mem=4) and (m4=0) then
led1=0
led2=0
led3=0
led4=1
slot=0
endif
if (mem=4) and (m4<>0) then
led1=0
pause 300
led2=0
led3=0
toggle led4
slot=1
endif
if state=1 then
green=0
red=1
endif
if state=2 then
green=1
red=0
endif
if state=3 then
green=1
red=1
endif
if (but1=1) and (state=1) then
gosub readmenu
endif
if (but1=1) and (state=2) then
gosub recordmenu
endif
if (but1=1) and (state=3) then
gosub erasemenu
endif
if but3=1 then
gosub memorymenu
endif
if but2=1 then
gosub statemenu
endif
goto startmenu
'*****************
recordmenu:
debug "Record Menu",13,10
if slot=1 then
goto warningmenu
endif
if mem=1 then
st=p1a
ed=p1b
endif
if mem=2 then
st=p2a
ed=p2b
endif
if mem=3 then
st=p3a
ed=p3b
endif
if mem=4 then
st=p4a
ed=p4b
endif
'******************
recordmem:
debug "2s pause before start recording",13,10
PAUSE 2000
FOR ADDR= st TO ed
for w = 0 to 15
ADCIN temp, va
va2=va + (temp>>4)
NEXT
va = (va2 */ 5000 ) >> 2
va=va/10
toggle red
pause 824
debug " Saved value: ", dec va2," - ", dec va," In position ", dec ADDR, 13,10
debug " VA2 = ", dec va2,13,10
I2CWRITE SDA,SCL,CTW,ADDR,[VA.highbyte]
pause 10
ADDR=ADDR+1
I2CWRITE SDA,SCL,CTW,ADDR,[VA.lowbyte]
pause 10
ADDR=ADDR+1
I2CWRITE SDA,SCL,CTW,mem,[addr]
if but1=1 then 'stop recording
pause 600
goto startmenu
endif
toggle led1
toggle led4
NEXT
red=1
return
'******************
erasemenu:
'*****************
eraseblock:
debug "erasing block",dec mem,13,10
red=0
I2Cread SDA,SCL,CTW,mem,[x]
debug "before in position ",dec mem," - ",dec x,13,10
I2CWRITE SDA,SCL,CTW,mem,[0]
pause 500
red=1
return
'******************
memorymenu:
if mem < 4 then
mem=mem+1
else
mem=1
endif
debug DEC mem,13,10
pause 300
return
'******************
statemenu:
if state < 3 then
state=state+1
else
state=1
endif
debug "state change - ", DEC state,13,10
pause 300
return
'******************
end
Bookmarks