TEMPTEST.BAS Functional description and comments

Anthony Wesley
9th November 2005

Here is a description of the temptest.bas program.


init: pause 1000
      serout 7,N2400,(254,1)
      serout 6,N2400,("START",10,13)
Serial line 7 connects to the LCD, and line 6 connects to the host PC. We send a "clear screen" signal to the LCD by writing byte value 254, and a "START" signal out to the host PC. The 10,13 on the end are carriage-return and linefeed.


main: pause 300
      serout 7,N2400,(254,128,"A")
      serout 6,N2400,("A")
      readtemp12 3,w0
      gosub print12
      readtemp12 2,w0
      serout 7,N2400,("B")
      serout 6,N2400,("B")
      gosub print12
      serout 7,N2400,(254,192,"C")
      serout 6,N2400,("C")
      readtemp12 1,w0
      gosub print12
      readtemp12 0,w0
      serout 7,N2400,("D")
      serout 6,N2400,("D")
      gosub print12
      serout 6,N2400,(13,10)
      goto main

This is the main loop. We read the 4 temp sensors in turn by calling the builtin "readtemp12" command, and then write the data to the serial line (line 7) and also display it on the LCD (line 6) by calling print12. This loop runs about 3 times per second.

The LCD ends up displaying something like this:

	A 21.12  B 21.06
	C 22.25  D 22.62

print12:
      if w0 > 32767 then neg
      serout 7,N2400,(" ")
      serout 6,N2400,(" ")
      goto cvt
neg:  serout 7,N2400,("-")
      serout 6,N2400,("-")
      let w0 = 65535 - w0
      let w0 = w0 + 1
cvt:  let b1 = b1 * 16
      let b13 = b0 / 16
      let b1 = b1 + b13
      if b1 > 9 then nopad 
      serout 7,N2400,(" ")
      serout 6,N2400,(" ")
nopad:
      serout 7,N2400,(#b1,".")
      serout 6,N2400,(#b1,".")
      let b0 = b0 % 16
      branch b0,(p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15)

This is a routine to print the temperature on the LCD (line 6) and also sends it to the host PC (line 7). Because the temp is read in steps of 0.065 degrees there are only 16 possible fractional values. I just work out which one we want and then jump to a print statement that prints it. This code also handles negative temperatures.


p0:   serout 7,N2400,("00")
      serout 6,N2400,("00")
      goto px
p1:   serout 7,N2400,("06")
      serout 6,N2400,("06")
      goto px
p2:   serout 7,N2400,("12")
      serout 6,N2400,("12")
      goto px
p3:   serout 7,N2400,("19")
      serout 6,N2400,("19")
      goto px
p4:   serout 7,N2400,("25")
      serout 6,N2400,("25")
      goto px
p5:   serout 7,N2400,("31")
      serout 6,N2400,("31")
      goto px
p6:   serout 7,N2400,("37")
      serout 6,N2400,("37")
      goto px
p7:   serout 7,N2400,("44")
      serout 6,N2400,("44")
      goto px
p8:   serout 7,N2400,("50")
      serout 6,N2400,("50")
      goto px
p9:   serout 7,N2400,("56")
      serout 6,N2400,("56")
      goto px
p10:  serout 7,N2400,("62")
      serout 6,N2400,("62")
      goto px
p11:  serout 7,N2400,("69")
      serout 6,N2400,("69")
      goto px
p12:  serout 7,N2400,("75")
      serout 6,N2400,("75")
      goto px
p13:  serout 7,N2400,("81")
      serout 6,N2400,("81")
      goto px
p14:  serout 7,N2400,("87")
      serout 6,N2400,("87")
      goto px
p15:  serout 7,N2400,("94")
      serout 6,N2400,("94")
px:   serout 7,N2400,(" ")
      serout 6,N2400,(" ")
      return