Code:
' SOURCE CODE Version A4 – PIC18F26k80
' 4 Mhz
DEFINE OSC 4 'tells compiler clock speed
OSCCON = 011010 'tells pic clock speed
DEFINE ADC_BITS 12 'tells software / hardware to setup the ADC
DEFINE ADC_CLOCK 3
DEFINE ADC_SAMPLEUS 50
ADCON2.7 = 1
ten con 10
DEFINE HSER2_RCSTA 90h
define HSER2_TXSTA 20h
Define HSER2_BAUD 2400
define HSER2_SPBRG 25
define HSER2_SPBRGH 0
define HSER2_CLROERR 1
TRISC.1 = 0 'led pin 9 - yellow
TRISC.7 = 1
TRISB.4 = 0 'pin 22 heater 1
TRISA = 255 'set pins as analog inputs
a1 VAR Word: a2 VAR Word: a3 Var word: a4 var word: a5 var word: a6 var word: a7 var word: a8 var word: a9 var word: a10 var word
b1 VAR Word: b2 VAR Word: b3 Var word: b4 var word: b5 var word: b6 var word: b7 var word: b8 var word: b9 var word: b10 var word
af var word: bf var word
mVT var word: mVS var word
ET var word: ES var word
rx var word: i var word: j var long: k var word: d0 var long: d1 var long: d2 var word: d3 var word: d4 var word: d5 var word: d6 var word
sernum var long: calcon var long: senres var long
dat var word[10]
High PORTB.4 ' Pin 22 - heater
High PORTC.1 ' Pin 9 yellow LED
pause 1000
'HSerOUT ["Ready ", 13, 10]
HSERIN 1000, mainloop, [rx]
if rx = 120 then
HSerOUT [" Ca Mode Activated", 13, 10, 10,10,10,10]
RCSTA.4 = 0
RCSTA.4 = 1
RCSTA.4 = 0
RCSTA.4 = 1
goto menue
endif
pause 5000
senres = 0
calcon = 0
sernum = 0
read 40, long sernum
read 20, long calcon
read 0, long senres
hserout[" Sen Res = ",dec senres,10,13]
hserout[" CalCon = ",dec calcon,10,13]
hserout[" Ser # = ",dec sernum,10,13]
mainloop:
toggle PORTC.1 'Pin 9 yellow LED
pause 499
ADCIN 3,b10 'Read sensor on pin 3 ADC3
b1=b2: b2=b3: b3=b4: b4=b5: b5=b6: b6=b7: b7=b8: b8=b9: b9=b10
bf=(b10+b9+b8+b7+b6+b5+b4+b3+b2+b1)/10 'avarage
mVS = (bf/4095)*5 'convert to PPM
ES = mVS
Pause 500
'sample #, raw temperture, temp degrees C, on time, offtime, sensor, boxcar sensor, PPM
HSerOUT [dec sernum, " ", dec ET, " ", dec ES, 13, 10]
pause 1000
GoTo mainloop
menue:
pause 1000
HSerOUT [" Send C for calabrate or R to read back, D when done.", 13, 10]
HSERIN [rx]
i = 0
if rx = 82 then
HSerOUT [" Read", 13,10]
pause 1000
senres = 0
calcon = 0
sernum = 0
read 40, long sernum
read 20, long calcon
read 0, long senres
HSerOUT [" Serial # =", dec sernum, " Calibration Number =", dec calcon, " Sensor resistance =", dec senres, 13,10]
hserout [" :)", 13,10]
elseif rx = 68 then
HSerOUT [" Done", 13,10]
pause 1000
goto mainloop
elseif rx = 67 then
HSerOUT [" Calibralte ", 13,10,10,10]
HSerOUT [" Send Resistance: (Like 999999, Max Vaue)",13,10]
d5 = 0: d4 = 0: d3 = 0: d2 = 0: d1 = 0: d0 = 0
for i = 0 to 10 step 1
HSERIN [rx]
HSerOUT [rx]
dat[i] = rx
if rx = 13 then
j = 0
if i = 6 then
'hserout[" 6 ",10]
d0 = dat[0]: d1 = dat[1]: d2 = dat[2]: d3 = dat[3]: d4 = dat[4]: d5 = dat[5]
d0 = (d0-48)*100000
d1 = (d1-48)*10000
d2 = (d2-48)*1000
d3 = (d3-48)*100
d4 = (d4-48)*10
d5 = (d5-48)
j = d0+d1+d2+d3+d4+d5
elseif i = 5 then
'hserout[" 5 ",10]
d0 = dat[0]: d1 = dat[1]: d2 = dat[2]: d3 = dat[3]: d4 = dat[4]
d0 = (d0-48)*10000
d1 = (d1-48)*1000
d2 = (d2-48)*100
d3 = (d3-48)*10
d4 = (d4-48)
j = d0+d1+d2+d3+d4
elseif i = 4 then
'hserout[" 4 ",10]
d0 = dat[0]: d1 = dat[1]: d2 = dat[2]: d3 = dat[3]
d0 = (d0-48)*1000
d1 = (d1-48)*100
d2 = (d2-48)*10
d3 = (d3-48)
j = d0+d1+d2+d3
elseif i = 3 then
'hserout[" 3 ",10]
d0 = dat[0]: d1 = dat[1]: d2 = dat[2]
d0 = (d0-48)*100
d1 = (d1-48)*10
d2 = (d2-48)
j = d0+d1+d2
elseif i = 2 then
'hserout[" 2 ",10]
d0 = dat[0]: d1 = dat[1]
d0 = (d0-48)*10
d1 = d1-48
j = d0+d1
elseif i = 1 then
'hserout[" 1 ",10]
d0 = dat[0]
j = d0-48
endif
i = 11
hserout[" j = ",dec j,10,13]
senres = j
write 0, long senres
write 0, long senres
endif
next i
pause 1500
HSerOUT [" Send Ca con: (Ex 9999.99, Max Value)"]
d5 = 0: d4 = 0: d3 = 0: d2 = 0: d1 = 0: d0 = 0
for i = 0 to 10 step 1
HSERIN [rx]
HSerOUT [rx]
dat[i] = rx
if rx = 13 then
j = 0
if i = 6 then
'hserout[" 6 ",10]
d0 = dat[0]: d1 = dat[1]: d2 = dat[2]: d3 = dat[3]: d4 = dat[4]: d5 = dat[5]
d0 = (d0-48)*100000
d1 = (d1-48)*10000
d2 = (d2-48)*1000
d3 = (d3-48)*100
d4 = (d4-48)*10
d5 = (d5-48)
j = d0'+d1+d2+d3+d4+d5
elseif i = 5 then
' hserout[" 5 ",10]
d0 = dat[0]: d1 = dat[1]: d2 = dat[2]: d3 = dat[3]: d4 = dat[4]
d0 = (d0-48)*10000
d1 = (d1-48)*1000
d2 = (d2-48)*100
d3 = (d3-48)*10
d4 = (d4-48)
j = d0+d1+d2+d3+d4
elseif i = 4 then
'hserout[" 4 ",10]
d0 = dat[0]: d1 = dat[1]: d2 = dat[2]: d3 = dat[3]
d0 = (d0-48)*1000
d1 = (d1-48)*100
d2 = (d2-48)*10
d3 = (d3-48)
j = d0+d1+d2+d3
elseif i = 3 then
'hserout[" 3 ",10]
d0 = dat[0]: d1 = dat[1]: d2 = dat[2]
d0 = (d0-48)*100
d1 = (d1-48)*10
d2 = (d2-48)
j = d0+d1+d2
elseif i = 2 then
'hserout[" 2 ",10]
d0 = dat[0]: d1 = dat[1]
d0 = (d0-48)*10
d1 = d1-48
j = d0+d1
elseif i = 1 then
'hserout[" 1 ",10]
d0 = dat[0]
j = d0-48
endif
i = 11
hserout[" j = ",dec j,10,13]
senres = j
j = 0
write 20, long senres
write 20, long senres
endif
next i
pause 1500
HSerOUT [" Send serial number: (Ex 123456)"]
d5 = 0: d4 = 0: d3 = 0: d2 = 0: d1 = 0: d0 = 0
for i = 0 to 10 step 1
HSERIN [rx]
HSerOUT [rx]
dat[i] = rx
if rx = 13 then
j = 0
if i = 6 then
'hserout[" 6 ",10]
d0 = dat[0]: d1 = dat[1]: d2 = dat[2]: d3 = dat[3]: d4 = dat[4]: d5 = dat[5]
d0 = (d0-48)*100000
d1 = (d1-48)*10000
d2 = (d2-48)*1000
d3 = (d3-48)*100
d4 = (d4-48)*10
d5 = (d5-48)
j = d0+d1+d2+d3+d4+d5
elseif i = 5 then
'hserout[" 5 ",10]
d0 = dat[0]: d1 = dat[1]: d2 = dat[2]: d3 = dat[3]: d4 = dat[4]
d0 = (d0-48)*10000
d1 = (d1-48)*1000
d2 = (d2-48)*100
d3 = (d3-48)*10
d4 = (d4-48)
j = d0+d1+d2+d3+d4
elseif i = 4 then
' hserout[" 4 ",10]
d0 = dat[0]: d1 = dat[1]: d2 = dat[2]: d3 = dat[3]
d0 = (d0-48)*1000
d1 = (d1-48)*100
d2 = (d2-48)*10
d3 = (d3-48)
j = d0+d1+d2+d3
elseif i = 3 then
'hserout[" 3 ",10]
d0 = dat[0]: d1 = dat[1]: d2 = dat[2]
d0 = (d0-48)*100
d1 = (d1-48)*10
d2 = (d2-48)
j = d0+d1+d2
elseif i = 2 then
'hserout[" 2 ",10]
d0 = dat[0]: d1 = dat[1]
d0 = (d0-48)*10
d1 = d1-48
j = d0+d1
elseif i = 1 then
'hserout[" 1 ",10]
d0 = dat[0]
j = d0-48
endif
i = 11
hserout[" j = ",dec j,10,13]
sernum = j
j = 0
write 40, long sernum
write 40, long sernum
read 40, long j
hserout[" j = ",dec j,10,13]
endif
next i
pause 3000
HSerOUT [" Done!", 13,10,10,10]
else
HSerOUT [" Not Valid", 13,10]
pause 1000
endif
goto menue
Bookmarks