Thanks sougata, yes I believe you have understood what it is I'm trying to do. I'll be away for most of the day today so I'll have time to absorb what you are suggesting. No need to sell the farm out from under ("the fat headed commercial guy") for now. A nudge in the right direction is all I was looking for.
Thank you for your help so far! Here is the whole code (although very much incomplete) if you think it will help.
Code:'**************************************************************** '* Name : * '* Author : * '* Notice : * '* : * '* Date : 2/17/2006 * '* Version : 1.0 * '* Notes : Uses Darryl Taylor interrupt routines * '* : * '**************************************************************** DEFINE LOADER_USED 1 'Only required if bootloader used to program PIC define OSC 4 INCLUDE "modedefs.bas" INCLUDE "DT_INTS-14.bas" ' Base Interrupt System INCLUDE "ReEnterPBP.bas" ' Include if using PBP interrupts ' ** Setup the ADCIN Defines ** Define ADC_BITS 10 ' Set resolution of conversion Define ADC_CLOCK 2 ' Set clock source (x/FOSC or FRC) Define ADC_SAMPLEUS 50 ' Set sampling time (in uS) ' OPTION_REG.7 = 0 'ADCON1 = 7 ' PORTA digital PORTA = %00000000 'Set all pins to 0 TRISA = %00111111 'Set PORTA RA0-RA5 to input PORTB = %00000000 'Set all pins to 0 (off) TRISB = %01110000 'Set PORTB inputs/output PORTC = %00000000 'Set all outputs to 0 (off) TRISC = %00000000 'Set PORTC to all output ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ' Alias pins ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: LED1 VAR PORTB.0 'LED1 simulating "alarm" LED2 VAR PORTB.1 'LED2 simulating main heater on LED3 VAR PORTB.2 'LED3 simulating Q/T heater on thelcd var PORTB.3 button1 VAR PORTB.4 button2 VAR PORTB.5 button3 VAR PORTB.6 buzzer var PORTB.7 'sonalert alarm heartbeat var PORTC.5 ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ' Define Variables ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: display var byte temp1 VAR byte temp2 VAR byte setpoint1 var byte setpoint2 var byte main_lowtmp var byte main_hightmp var byte qt_lowtmp var byte qt_hightmp var byte sample1 VAR byte sample2 VAR byte AD_Raw Var Word ' 16-bit result of A/D conversion AD_Result Var Word ' Quantasized ADC result Bit_Cnt Var Byte ' General purpose loop Chr Var Byte ' Degrees sign build variable Quanta Con 1250 Alarm var byte looplength var byte trouble var byte ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ' ** Define LCD Constants ** ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: I Con 254 ' Control Byte Clr Con 1 ' Clear the display Line1 Con 128 ' Point to beginning of line 1 Line2 Con 194 ' Point to beginning of line 2 Line3 Con 148 ' Point to beginning of line 3 Line4 Con 212 ' Point to beginning of line 4 Baud con 84 Cgram Con 64 ' Point to Cgram in the LCD '((((((((((((((((((((((((((((((((((((((())))))))))))))))))))))))))))))))))))))) ' Clear LCD and pause to start '((((((((((((((((((((((((((((((((((((((())))))))))))))))))))))))))))))))))))))) Pause 5000 Serout2 thelcd,Baud,[I,clr] Pause 1000 Serout2 thelcd,Baud,[I,clr] Pause 1000 Serout2 thelcd,Baud,[I,clr,I,128," START"] Pause 1500 temp1 = 0 temp2 = 0 display = 0 setpoint1 = 79 setpoint2 = 79 main_lowtmp = setpoint1 - 2 main_hightmp = setpoint1 + 2 qt_lowtmp = setpoint2 - 2 qt_hightmp = setpoint2 + 2 looplength = 16 trouble = 0 '((((((((((((((((((((((((((((((((((((((())))))))))))))))))))))))))))))))))))))) ' build the degree symbol '((((((((((((((((((((((((((((((((((((((())))))))))))))))))))))))))))))))))))))) For Bit_Cnt =0 to 7 ' Lookup Bit_Cnt,[%00000110,%00001001,%00001001,%00000110,0,0,0,0],Chr Serout2 thelcd,84,[$fe,96+Bit_Cnt,Chr,1]' Output the bit patterns to the LCD's CGRAM Next '((((((((((((((((((((((((((((((((((((((())))))))))))))))))))))))))))))))))))))) ' set-up A/D channels '((((((((((((((((((((((((((((((((((((((())))))))))))))))))))))))))))))))))))))) ADCON1= %10001110 ' Configure for AN0 and AN1 as analog input ' With right justified result '((((((((((((((((((((((((((((((((((((((())))))))))))))))))))))))))))))))))))))) ' Interrupt handler '((((((((((((((((((((((((((((((((((((((())))))))))))))))))))))))))))))))))))))) ASM INT_LIST macro ; IntSource, Label, Type, ResetFlag? INT_Handler TMR1_INT, _ToggleLED1, PBP, yes endm INT_CREATE ; Creates the interrupt processor ENDASM T1CON = $31 ; Prescaler = 8, TMR1ON @ INT_ENABLE TMR1_INT ; enable Timer 1 interrupts '((((((((((((((((((((((((((((((((((((((())))))))))))))))))))))))))))))))))))))) ' Main program loop - updates the LCD and siteplayer with the time 'and status of temperatures and pumps '((((((((((((((((((((((((((((((((((((((())))))))))))))))))))))))))))))))))))))) mainloop: GoSub showonlcd 'GoSub read_switches goto mainloop '---[INT - interrupt handler]--------------------------------------------------- ToggleLED1: TOGGLE heartbeat display = display + 1 @ INT_RETURN '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'read Temp sensors for high/low temp alarm and display on LCD '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' showonlcd: select case display Case 1 display = display + 1 gosub read_maintemp INTCON.7 = 0 Serout2 thelcd,Baud, [I,clr] Serout2 thelcd,Baud, [I,130,"MAIN TANK TEMP"] Serout2 thelcd,Baud, [I,196,#(AD_Result/100),".",#(AD_Result//100),4," ","C"] AD_Result = 0 INTCON.7 = 1 low buzzer case 6 display = display + 1 gosub read_qttemp INTCON.7 = 0 Serout2 thelcd,Baud, [I,clr] Serout2 thelcd,Baud, [I,130,"Q/T TANK TEMP"] Serout2 thelcd,Baud, [I,196,#(AD_Result/100),".",#(AD_Result//100),4," ","C"] AD_Result = 0 INTCON.7 = 1 'display = 0 Case 11 display = display + 1 select case trouble CASE 0 'display = display + 1 INTCON.7 = 0 Serout2 thelcd,Baud, [I,clr] Serout2 thelcd,Baud, [I,128," SYSTEM"] Serout2 thelcd,Baud, [I,196,"NORMAL"] INTCON.7 = 1 end select end select if display = looplength then display = 0 RETURN goto mainloop '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'read CT sensors for pump motors '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' read_switches: RETURN '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'misc alarms and things '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' sonalert: high buzzer goto mainloop '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'misc alarms and things ...LM335 temp sensors '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' read_maintemp: ADCIN 0,AD_Raw ' Place the conversion of channel0 into AD_RAW AD_Result=((AD_Raw*10)-5594) */ Quanta 'Quantasize the result return ' go back to where it came from read_qttemp: ADCIN 1,AD_Raw ' Place the conversion of channel1 into AD_RAW AD_Result=((AD_Raw*10)-5594) */ Quanta 'Quantasize the result return ' go back to where it came from goto mainloop Serout2 thelcd,Baud, [I,clr] Serout2 thelcd,Baud, [I,128,"PROGRAM STOPPED"] end





Bookmarks