Hello everyone !

First time poster.......have only worked with PIC's for a few years. So go easy on me. LOL

16F88
PBP 2.60c
PORTB.3 (wired to a LED)
PORTA.0 (wired to one side of a bi-color led)
PORTA.1 (wired to one side of a bi-color led)


now I can write a simple routine to turn portb.3 on and off with no problems.

But if I have it in my code it turns on for a split second and then back off. I added the bi-color led everywhere I have portb.3 to debug and the bi-color led works as I intended portb.3 to work.

NewTest.bas

Kinda stumped ! Any help would be appreciated.......


Thanks,

David Polakiewicz Jr

Code:
DEFINE OSC 20

OSCCON = %01011100
TRISA = %11101100
TRISB = %11010111
CCP1CON = %00000000         'DISABLE THE CCP1 ON PORTB.3
ANSEL = %00001100           'MAKES A2 AND A3 ANALOG
ADCON0 = %10000001           'SET ANALOG CLOCK SOURCE
ADCON1 = %11000000           'RIGHT JUSTIFY THE 10BIT RESULTS
OPTION_REG.7 = 0   'CLEAR THE PORTB PULL-UP RESISTORS
DEFINE ADC_BITS 10      'SET ADC TO 10BIT
DEFINE ADC_SAMPLEUS 50      'SET SAMPLE TIME
'ANALOG CHANNEL VARIABLES
TRIMPOT1  VAR WORD 'ANALOG TRIMPOT #1
TRIMPOT2  VAR WORD  'ANALOG TRIMPOT #2
'OUTPUT TIME VARIABLES
RAWRANDOM VAR WORD  'RAW RANDOM 16 BIT NUMBER
ONTIME    VAR WORD  'CONVERTED ON TIME
OFFTIME   VAR WORD  'CONVERTED OFF TIME
ONCOUNT   VAR WORD  'ON COUNT
ONTOTAL   VAR WORD  'TOTAL ON TIME LEFT
OFFTOTAL  VAR WORD  'TOTAL OFF TIME LEFT
TIMELEFTRESULT  VAR WORD    'TIME LEFT RESULT
OFFLEFTRESULT   VAR WORD    'OFF TIME LEFT RESULT
'COUNT VARIABLES
A   VAR WORD    'ON TIME COUNT VARIABLE (COUNTS SECONDS)
B   VAR WORD    'OFF TIME COUNT VARIABLE (COUNTS SECONDS)
C   VAR WORD    'OFF TIME COUNT VARIABLE (COUNTS SECONDS)
'HOLDING BITS
ONREMAINDER     VAR BIT     'ON FOR REMAINDER OF HR
 
HIGH    PORTA.1
LOW     PORTA.0
HIGH    PORTB.3
    PAUSE 2000
LOW     PORTA.1
HIGH    PORTA.0
LOW     PORTB.3
 
:RESETVARIABLES
    serout PORTB.5,6,["*****VARIABLES RESET*****",13]
ONTOTAL = 60        'PRESET WITH 60 SECONDS
OFFTOTAL = 3540     'PRESET WITH 59 MIN (60 SEC ARE USED FOR ON TIME)
A = 0
B = 0
C = 0   
:BEGIN
:OFFCALC
RANDOM  RAWRANDOM               'GET RANDOM 16 BIT
OFFTIME = RAWRANDOM / 218       'CONVERT TO A 0-300 SECOND NUMBER 
TIMELEFTRESULT = OFFTOTAL - OFFTIME 'CALC THE TIME LEFT AFTER NEW RANDOM OFF 
    serout PORTB.5,6,["ON TOTAL=",#ONTOTAL,13]
    serout PORTB.5,6,["OFF TOTAL=",#OFFTOTAL,13]
    serout PORTB.5,6,["OFFTIME=",#OFFTIME,13]
    serout PORTB.5,6,["TIME LEFT RESULT=",#TIMELEFTRESULT,13]
    serout PORTB.5,6,["______________________________",13]
    
IF (TIMELEFTRESULT > 3540) | (TIMELEFTRESULT < ontOTAL) then  'CHECK TO SEE IF THE ONTIME ID GREATER THAN THE TIMELEFT RESULT
    OFFLEFTRESULT = OFFTOTAL - ONTOTAL 'IF IT IS THEN SUBTRACT THE ON TOTAL FROM THE OFF TOTAL
 
        high    PORTB.3     'TURN ON THE OUTPUT FOR ONTIME REMAINDER
            
HIGH    PORTA.1
LOW     PORTA.0
        FOR a = 0 TO ONTOTAL
            PAUSE   1000
                            serout PORTB.5,6,["1"]
        NEXT a
        LOW     PORTB.3
LOW     PORTA.1
HIGH    PORTA.0        
        for B = 0 TO OFFTOTAL   'TURN OFF OUTPUT FOR THE OFF REMAINDER
            PAUSE   10
                            serout PORTB.5,6,["2"]
        NEXT B
            serout PORTB.5,6,[,13]
    GOTO RESETVARIABLES
ENDIF
HIGH    PORTB.3     'TURN ON THE OUTPUT
HIGH    PORTA.1
LOW     PORTA.0
            serout PORTB.5,6,["ON NORMAL XXXXXX",13]
    PAUSE   1000    '1 SECOND ON TIME
LOW     PORTB.3
LOW     PORTA.1
HIGH    PORTA.0
            serout PORTB.5,6,["OFF NORMAL OOOOOO",13]
    FOR C = 0 TO OFFTIME
            serout PORTB.5,6,["."]
        PAUSE 10
    NEXT C
            serout PORTB.5,6,[".",13]
    C = 0
      
    
ONTOTAL = ONTOTAL - 1
OFFTOTAL = OFFTOTAL - OFFTIME
     
:ONTIMECHECK
 
 
 
 
goto BEGIN