Continue to Site

Welcome to our site!

Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

  • Welcome to our site! Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

HLVD is not right???

MrDEB

Well-Known Member
My code for everything else works but the HLVD section fails to detect LOW BATTERY
BEEN HACKING AT THIS FOR ABOUT A WEEK
HELP!!!
Code:
{
*****************************************************************************
*  Name    : UNTITLED.BAS                                                   *
*  Author  : [select VIEW...EDITOR OPTIONS]                                 *
*  Notice  : Copyright (c) 2025 [select VIEW...EDITOR OPTIONS]              *
*          : All Rights Reserved                                            *
*  Date    : 3/31/2025                                                      *
*  Version : 1.0                                                            *
*  Notes   :                                                                *
*          :                                                                *
*****************************************************************************
}
{
*****************************************************************************
*  Name    : UNTITLED.BAS                                                   *
*  Author  : [select VIEW...EDITOR OPTIONS]                                 *
*  Notice  : Copyright (c) 2016 [select VIEW...EDITOR OPTIONS]              *
*          : All Rights Reserved                                            *
*  Date    : 11/19/2016                                                     *
*  Version : 1.0                                                            *
* Notes   :  portC=matrix cathodes
            portD=matrix anodes                                                             *
*        :  portA=player leds
           portB = player switches using pullips                                                           *
*****************************************************************************
}


//xxxxxxxxxxxxxxxxxxxxxxxxxx

Device = 18F43k22 ' Tell the compiler what chip we are using
Clock = 8 ' Tell the compiler what we will be setting the clock to (Mhz)
//CONFIG MCLRE = OFF
Config FOSC = INTIO67 ' Internal oscillator, IO on pins 6 and 7
#option DIGITAL_INIT = true
Include "SetDigitalIO.bas"       // Include this file when we compile so that we can use keywords like 'setalldigital'
Include "utils.bas"
Include "convert.bas"
Include "intosc.bas"                                         
Include "utils.bas"
Include "ISRTimer.bas"   

//Include "adc.bas"  //xxxxx
Dim y As Byte
Dim x As Byte
Dim counter As Byte
Dim Switch As PORTE.0 //counter
'Dim led1a As PORTD.3
'Dim led1c As PORTB.3
Dim adval As Word
Dim adcout As Word
//PLAYER LEDS
Dim led1 As PORTA.0
Dim led2 As PORTA.1
Dim led3 As PORTA.2
Dim led4 As PORTA.3
Dim led5 As PORTA.4
Dim led6 As PORTA.5
Dim led7 As PORTA.6
Dim led8 As PORTA.7
//PLAYER BUTTONS
Dim swt1 As PORTB.0
Dim swt2 As PORTB.1
Dim swt3 As PORTB.2
Dim swt4 As PORTB.3
Dim swt5 As PORTB.4
Dim swt6 As PORTB.5
Dim swt7 As PORTB.6
Dim swt8 As PORTB.7
//Dim player1 As PORTA.0
Dim KEY_BOUNCE_DELAY As Byte
Dim Battery As PORTE.1  'hlvd
//HLVDCON =%00011011      'see section 22.0 for setup and table 26-4 for voltage setting
                        'set to 4 volts in this case
 
//PIR2.bits(2) = 1        'clear HLVD interrupt flag
//PIE2.bits(2) = 1        'enable HLVD interrupt (section 22.2, sentence 5)
//INTCON.bits(7) = 1     'enable HLVD interrupt (section 22.2, sentence 5)
{                        'not needed for polled result   
 While TRUE
       If PIR2.bits(2) = 1 Then          'check HLVD interrupt
          led1 = 1                'LED = ON
          PIR2.bits(2) = 0          'clear HVLD interrupt
          Else
          led1 = 0                'LED = OFF
    End If
 wend                        'not needed for polled result   
 
 }

 




// CONST Cathodes_Data(9)AS BYTE = (%00000001,%00000010,%00000100,%00001000,%00010000,%00100000,%01000000,%10000000,%00000000)                               
                      
Const Cathodes_Data(8)As Byte = (%01111111,       ' KEEP THESE AS THEY DON"T CHANGE PER LETTER
                                 %10111111,        ' this is for scanning the rows
                                 %11011111,        //cathodes
                                 %11101111,
                                 %11110111,
                                 %11111011,
                                 %11111101,
                                 %11111110)
                                
                                
                                
Const Cat_Data(8)As Byte =    (%10000000,
                               %01000000,
                               %00100000,
                               %00010000,
                               %00001000,
                               %00000100,
                               %00000010,                                 
                               %00000001)
                              
                              
 
                        
 Const Zero(8)As Byte = (%00000000,
                         %00111100,
                         %01000010,
                         %10000001,
                         %01000010,
                         %00111100,
                         %00100000,                                 
                         %00000000)     

 Const One(8)As Byte =  (%00000000,
                         %00000000,
                         %00000000,
                         %00000000,
                         %00010000,
                         %00000000,
                         %00000000,                                 
                         %00000000)       

' number 2
                                
Const Two(8)As Byte =  (%10000000,
                        %00000000,
                        %00000000,
                        %00000000,
                        %00000000,
                        %00000000,
                        %00000001,
                        %00000000)                 
                                        
Const Three(8) As Byte =(%10000000,
                         %00000000,
                         %00000000,
                         %00010000,
                         %00000000,
                         %00000000,
                         %00000001,
                         %00000000)
                                        
 Const Four(8) As Byte =(%10000001,
                         %00000000,
                         %00000000,
                         %00000000,
                         %00000000,
                         %00000000,
                         %10000001,
                         %00000000)                                       
                                
 
Const Five(8) As Byte = (%10000001,
                         %00000000,
                         %00000000,
                         %00010000,
                         %00000000,
                         %00000000,
                         %10000001,
                         %00000000)   

Const Six(8) As Byte =  (%10000001,
                         %00000000,
                         %00000000,
                         %10000001,
                         %00000000,
                         %00000000,
                         %10000001,
                         %00000000)
                                                            
Const Seven(8) As Byte =(%10010001,
                         %00000000,
                         %00000000,
                         %10000001,
                         %00000000,
                         %00000000,
                         %10000001,
                         %00000000)
                        
                                                            
Const Eight(8) As Byte =(%10010010,
                         %00000000,
                         %00000000,
                         %10010010,
                         %00000000,
                         %00000000,
                         %10000010,
                         %00000000)
                        
 Const Nine(8) As Byte= (%10010010,
                         %00000000,
                         %00000000,
                         %10010010,
                         %00000000,
                         %00000000,
                         %10010010,
                         %00000000)
                        
                                                                                                  
 Const Ten(8) As Byte=  (%10010010,
                         %00000000,
                         %10010010,
                         %00000000,
                         %10000010,
                         %00000000,
                         %10000010,
                         %00000000)
                        
                                                            
Const Eleven(8) As Byte=(%10010010,
                         %00000000,
                         %10010010,
                         %00000000,
                         %10010010,
                         %00000000,
                         %10000010,
                         %00000000)
                        
                                                        
Const Tweleve(8)As Byte=(%10010010,
                         %00000000,
                         %10010010,
                         %00000000,
                         %10010010,
                         %00000000,
                         %10010010,                                 
                         %00000000)
// Const KEY_BOUNCE_DELAY(0) = 50     // msec delay for key bounce
Sub Debounce( )
    DelayMS(300)
    End Sub




                                                                              
// Arrays
//
 
// Arrays                           
 Sub T_12()
 //12
         Repeat
         For x = 0 To 7
            PORTC = Cathodes_Data(x) //rows top to bottom
            PORTD = Tweleve(x)// colums 8 (L-R the X is the scan
             DelayUS(300)
             Next
                   If (swt1 = 0) Then
            Toggle(led1) DelayUS(300)
        ElseIf (swt2 = 0) Then
            Toggle(led2)  DelayUS(300)
        ElseIf (swt3 = 0) Then
            Toggle(led3)  DelayUS(300)
        ElseIf (swt4 = 0) Then
            Toggle(led4)   DelayUS(300)
        ElseIf (swt5 = 0) Then
            Toggle(led5)   DelayUS(300)
        ElseIf (swt6 = 0) Then
            Toggle(led6)  DelayUS(300)
        ElseIf (swt7 = 0) Then
            Toggle(led7)  DelayUS(300)
        ElseIf (swt8 = 0) Then
            Toggle(led8)  DelayUS(300)
            End If
       Until
                Switch = 0
                DelayUS(300)     
    End Sub
                                
        

//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    
 Sub E_11()   
  //11
   Repeat
         For x = 0 To 7
            PORTC = Cathodes_Data(x) //rows top to bottom
            PORTD = Eleven(x)// colums 8 (L-R the X is the scan
             DelayUS(300)
             Next
                   If (swt1 = 0) Then
            Toggle(led1)  DelayUS(500)
        ElseIf (swt2 = 0) Then
            Toggle(led2)  DelayUS(500)
        ElseIf (swt3 = 0) Then
            Toggle(led3)  DelayUS(500)
        ElseIf (swt4 = 0) Then
            Toggle(led4)   DelayUS(500)
        ElseIf (swt5 = 0) Then
            Toggle(led5)   DelayUS(500)
        ElseIf (swt6 = 0) Then
            Toggle(led6)  DelayUS(500)
        ElseIf (swt7 = 0) Then
            Toggle(led7)  DelayUS(500)
        ElseIf (swt8 = 0) Then
            Toggle(led8)   DelayUS(500)
            End If
         Until
                Switch = 0
                DelayUS(300)
 
    End Sub
            
 
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   
   Sub T_10() 
     //10
     Repeat
         For x = 0 To 7
            PORTC = Cathodes_Data(x) //rows top to bottom B
            PORTD = Ten(x)// colums 8 (L-R the X is the scan D
             DelayUS(300)
             Next
                   If (swt1 = 0) Then
            Toggle(led1) DelayUS(300)
        ElseIf (swt2 = 0) Then
            Toggle(led2)  DelayUS(300)
        ElseIf (swt3 = 0) Then
            Toggle(led3)  DelayUS(300)
        ElseIf (swt4 = 0) Then
            Toggle(led4)   DelayUS(300)
        ElseIf (swt5 = 0) Then
            Toggle(led5)   DelayUS(300)
        ElseIf (swt6 = 0) Then
            Toggle(led6)  DelayUS(300)
        ElseIf (swt7 = 0) Then
            Toggle(led7)  DelayUS(300)
        ElseIf (swt8 = 0) Then
            Toggle(led8)   DelayUS(300)
            End If
         Until
                Switch = 0
                DelayUS(300)

    End Sub
            
    
Sub N_9()   //NINE     
     Repeat
         For x = 0 To 7
            PORTC = Cathodes_Data(x) //rows top to bottom
            PORTD = Nine(x)// colums 8 (L-R the X is the scan
             DelayUS(300)
             Next
                   If (swt1 = 0) Then
            Toggle(led1) DelayUS(300)
        ElseIf (swt2 = 0) Then
            Toggle(led2)  DelayUS(300)
        ElseIf (swt3 = 0) Then
            Toggle(led3)  DelayUS(300)
        ElseIf (swt4 = 0) Then
            Toggle(led4)   DelayUS(300)
        ElseIf (swt5 = 0) Then
            Toggle(led5)   DelayUS(300)
        ElseIf (swt6 = 0) Then
            Toggle(led6)  DelayUS(300)
        ElseIf (swt7 = 0) Then
            Toggle(led7)  DelayUS(300)
        ElseIf (swt8 = 0) Then
            Toggle(led8)   DelayUS(300)
            End If
          Until
                    Switch = 0
                    DelayUS(300)

    End Sub

//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Sub E_8()   //8       
     Repeat
         For x = 0 To 7
            PORTC = Cathodes_Data(x) //rows top to bottom
            PORTD = Eight(x)// colums 8 (L-R the X is the scan
             DelayUS(300)
             Next
                   If (swt1 = 0) Then
            Toggle(led1) DelayUS(300)
        ElseIf (swt2 = 0) Then
            Toggle(led2)  DelayUS(300)
        ElseIf (swt3 = 0) Then
            Toggle(led3)  DelayUS(300)
        ElseIf (swt4 = 0) Then
            Toggle(led4)   DelayUS(300)
        ElseIf (swt5 = 0) Then
            Toggle(led5)   DelayUS(300)
        ElseIf (swt6 = 0) Then
            Toggle(led6)  DelayUS(300)
        ElseIf (swt7 = 0) Then
            Toggle(led7)  DelayUS(300)
        ElseIf (swt8 = 0) Then
            Toggle(led8)   DelayUS(300)
            End If
             // wait for a key press
          Until
                Switch = 0
                DelayUS(300)

    End Sub

//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     
Sub S_7() //7             
     Repeat
         For x = 0 To 7
            PORTC = Cathodes_Data(x) //rows top to bottom
            PORTD = Seven(x)// colums 8 (L-R the X is the scan
             DelayUS(300)
             Next
                   If (swt1 = 0) Then
            Toggle(led1) DelayUS(300)
        ElseIf (swt2 = 0) Then
            Toggle(led2)  DelayUS(300)
        ElseIf (swt3 = 0) Then
            Toggle(led3)  DelayUS(300)
        ElseIf (swt4 = 0) Then
            Toggle(led4)   DelayUS(300)
        ElseIf (swt5 = 0) Then
            Toggle(led5)   DelayUS(300)
        ElseIf (swt6 = 0) Then
            Toggle(led6)  DelayUS(300)
        ElseIf (swt7 = 0) Then
            Toggle(led7)  DelayUS(300)
        ElseIf (swt8 = 0) Then
            Toggle(led8)   DelayUS(300)
            End If
           Until
            Switch = 0
            DelayUS(300)

    End Sub
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
      
Sub S_6()  //SIX               
      Repeat
         For x = 0 To 7
            PORTC = Cathodes_Data(x) //rows top to bottom
            PORTD = Six(x)// colums 8 (L-R the X is the scan
             DelayUS(300)
             Next
                   If (swt1 = 0) Then
            Toggle(led1) DelayUS(300)
        ElseIf (swt2 = 0) Then
            Toggle(led2)  DelayUS(300)
        ElseIf (swt3 = 0) Then
            Toggle(led3)  DelayUS(300)
        ElseIf (swt4 = 0) Then
            Toggle(led4)   DelayUS(300)
        ElseIf (swt5 = 0) Then
            Toggle(led5)   DelayUS(300)
        ElseIf (swt6 = 0) Then
            Toggle(led6)  DelayUS(300)
        ElseIf (swt7 = 0) Then
            Toggle(led7)  DelayUS(300)
        ElseIf (swt8 = 0) Then
            Toggle(led8)   DelayUS(300)
            End If
               // wait for a key press
          Until
                Switch = 0
                DelayUS(300)

    End Sub
                          

//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX       
Sub F_5() //5                   
        Repeat
         For x = 0 To 7
            PORTC = Cathodes_Data(x) //rows top to bottom
            PORTD = Five(x)// colums 8 (L-R the X is the scan
             DelayUS(300)
            Next
                  If (swt1 = 0) Then
            Toggle(led1) DelayUS(300)
        ElseIf (swt2 = 0) Then
            Toggle(led2)  DelayUS(300)
        ElseIf (swt3 = 0) Then
            Toggle(led3)  DelayUS(300)
        ElseIf (swt4 = 0) Then
            Toggle(led4)   DelayUS(300)
        ElseIf (swt5 = 0) Then
            Toggle(led5)   DelayUS(300)
        ElseIf (swt6 = 0) Then
            Toggle(led6)  DelayUS(300)
        ElseIf (swt7 = 0) Then
            Toggle(led7)  DelayUS(300)
        ElseIf (swt8 = 0) Then
            Toggle(led8)   DelayUS(300)
            End If
                 // wait for a key press
          Until
            Switch = 0
            DelayUS(300)

    End Sub
          

//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   
Sub F_4()  //FOUR                     
        Repeat
         For x = 0 To 7
            PORTC = Cathodes_Data(x) //rows top to bottom
            PORTD = Four(x)// colums 8 (L-R the X is the scan
             DelayUS(300)
             Next
                   If (swt1 = 0) Then
            Toggle(led1) DelayUS(300)
        ElseIf (swt2 = 0) Then
            Toggle(led2)  DelayUS(300)
        ElseIf (swt3 = 0) Then
            Toggle(led3)  DelayUS(300)
        ElseIf (swt4 = 0) Then
            Toggle(led4)   DelayUS(300)
        ElseIf (swt5 = 0) Then
            Toggle(led5)   DelayUS(300)
        ElseIf (swt6 = 0) Then
            Toggle(led6)  DelayUS(300)
        ElseIf (swt7 = 0) Then
            Toggle(led7)  DelayUS(300)
        ElseIf (swt8 = 0) Then
            Toggle(led8)   DelayUS(300)
            End If
                // wait for a key press
           Until
                Switch = 0
                DelayUS(300)

    End Sub
        
          

//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
          
Sub T_3()  //3                   
    Repeat
         For x = 0 To 7
            PORTC = Cathodes_Data(x) //rows top to bottom
            PORTD = Three(x)// colums 8 (L-R the X is the scan
             DelayUS(300)
           Next
                 If (swt1 = 0) Then
            Toggle(led1) DelayUS(300)
        ElseIf (swt2 = 0) Then
            Toggle(led2)  DelayUS(300)
        ElseIf (swt3 = 0) Then
            Toggle(led3)  DelayUS(300)
        ElseIf (swt4 = 0) Then
            Toggle(led4)   DelayUS(300)
        ElseIf (swt5 = 0) Then
            Toggle(led5)   DelayUS(300)
        ElseIf (swt6 = 0) Then
            Toggle(led6)  DelayUS(300)
        ElseIf (swt7 = 0) Then
            Toggle(led7)  DelayUS(300)
        ElseIf (swt8 = 0) Then
            Toggle(led8)   DelayUS(300)
            End If
            // wait for a key press
          Until
                Switch = 0
                DelayUS(300)

    End Sub

 //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX         
 Sub T_2()//2                         
    Repeat
         For x = 0 To 7
            PORTC = Cathodes_Data(x) //rows top to bottom
            PORTD = Two(x)// colums 8 (L-R the X is the scan
             DelayUS(300)
            Next
                  If (swt1 = 0) Then
            Toggle(led1) DelayUS(300)
        ElseIf (swt2 = 0) Then
            Toggle(led2)  DelayUS(300)
        ElseIf (swt3 = 0) Then
            Toggle(led3)  DelayUS(300)
        ElseIf (swt4 = 0) Then
            Toggle(led4)   DelayUS(300)
        ElseIf (swt5 = 0) Then
            Toggle(led5)   DelayUS(300)
        ElseIf (swt6 = 0) Then
            Toggle(led6)  DelayUS(300)
        ElseIf (swt7 = 0) Then
            Toggle(led7)  DelayUS(300)
        ElseIf (swt8 = 0) Then
            Toggle(led8)   DelayUS(300)
            End If
     Until
                Switch = 0
                DelayUS(300)
       // wait for a key press
    
    End Sub
 
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX                                                   
Sub O_1()   //1                       
        Repeat
           For x = 0 To 7
            PORTC = Cathodes_Data(x) //rows top to bottom  D
            PORTD = One(x)// colums 8 (L-R the X is the scanB
             DelayUS(300)
           Next
                
            If (swt1 = 0) Then
            Toggle(led1) DelayUS(300)
        ElseIf (swt2 = 0) Then
            Toggle(led2)  DelayUS(300)
        ElseIf (swt3 = 0) Then
            Toggle(led3)  DelayUS(300)
        ElseIf (swt4 = 0) Then
            Toggle(led4)   DelayUS(300)
        ElseIf (swt5 = 0) Then
            Toggle(led5)   DelayUS(300)
        ElseIf (swt6 = 0) Then
            Toggle(led6)  DelayUS(300)
        ElseIf (swt7 = 0) Then
            Toggle(led7)  DelayUS(300)
        ElseIf (swt8 = 0) Then
            Toggle(led8)   DelayUS(300)
            End If
        Until
            Switch = 0
            DelayUS(300)

    End Sub
//zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
Sub Z_ero()   //1                       
        Repeat
           For x = 0 To 7
            PORTC = Cathodes_Data(x) //rows top to bottom  D
            PORTD = Zero(x)// colums 8 (L-R the X is the scanB
             DelayUS(300)
           Next
            
            If (swt1 = 0) Then
            Toggle(led1) DelayUS(300)
        ElseIf (swt2 = 0) Then
            Toggle(led2)  DelayUS(300)
        ElseIf (swt3 = 0) Then
            Toggle(led3)  DelayUS(300)
        ElseIf (swt4 = 0) Then
            Toggle(led4)   DelayUS(300)
        ElseIf (swt5 = 0) Then
            Toggle(led5)   DelayUS(300)
        ElseIf (swt6 = 0) Then
            Toggle(led6)  DelayUS(300)
        ElseIf (swt7 = 0) Then
            Toggle(led7)  DelayUS(300)
        ElseIf (swt8 = 0) Then
            Toggle(led8)   DelayUS(300)
       EndIf
      Until
            Switch = 0
            DelayUS(300)
    End Sub
      
        
  




Sub Matrix_sel()             //select number to display
    If counter = 12 Then
    Repeat 
    T_12()
Until
Switch = 0
Debounce()
End If
counter = 11
    
            If counter = 11 Then
            Repeat
            E_11()
            Until
            Switch = 0
           Debounce()
            End If
            counter = 10
            
                If counter = 10 Then
                Repeat
                T_10()
                Until
                Switch = 0
                Debounce()
                End If
                counter = 9
                
                    If counter = 9 Then
                    Repeat
                        N_9()
                         Until
                        Switch = 0
                       Debounce()
                        End If
                        counter = 8
                    
                        
                                    If counter = 8 Then
                                    Repeat
                                        E_8()
                                         Until
                                        Switch = 0
                                        Debounce()
                                        End If
                                        counter = 7
                                      
                                        
                                        
                                                    If counter = 7 Then
                                                    Repeat
                                                        S_7()
                                                         Until
                                                        Switch = 0
                                                       Debounce()//debounce
                                                        End If
                                                        counter = 6
                                                      
                                                        
                                                        
                                                                    If counter = 6 Then
                                                                    Repeat
                                                                    S_6()
                                                                     Until
                                                                        Switch = 0
                                                                        Debounce() //debounce
                                                                        End If
                                                                        counter = 5
                                                                        
                                                                        
                                                                        If counter = 5 Then
                                                                        Repeat
                                                                        F_5()
                                                                        Until
                                                                       Switch = 0
                                                                        Debounce() //debounce
                                                                         counter = 4
                                                                        End If
                                                                        
                                                                        
                                                                                    If counter = 4 Then
                                                                                    Repeat
                                                                                    F_4()
                                                                                    Until
                                                                                    Switch = 0
                                                                                   Debounce() //debounce
                                                                                    End If
                                                                                    counter = 3
                                                                                
                                                                                
                                                                                        If counter = 3 Then
                                                                                        Repeat
                                                                                        T_3()
                                                                                        Until
                                                                                         Switch = 0
                                                                                       Debounce()//debounce
                                                                                        End If
                                                                                        counter = 2
                                                                                        
                                                                                             If counter = 2 Then
                                                                                             Repeat
                                                                                                T_2()
                                                                                                Until
                                                                                                 Switch = 0
                                                                                                Debounce()  //debounce
                                                                                                End If
                                                                                                counter = 1
                                                                                                
                                                                                                 If counter = 1 Then
                                                                                                 Repeat
                                                                                                    O_1()
                                                                                                    Until
                                                                                                     Switch = 0
                                                                                                    Debounce()  //debounce
                                                                                                    End If
                                                                                                    counter = 0
                                                                                                    
                                                                                                     If counter = 0 Then
                                                                                                     Repeat
                                                                                                        Z_ero()
                                                                                                        Until
                                                                                                         Switch = 0
                                                                                                       Debounce() //debounce
                                                                                                        End If
                                                                                                        counter = 2
                                                                                        End Sub
 
 
 

// Start Of Program


TRISB = $FF             // SWt port - all inputs
WPUB = $FF              // PORTB pullup mask - all PORTB pullups
INTCON2.bits(7) = 0     // RBPU bit - turn on pullups
//TRISB = %00000000                   // Make PORTB all outputs                 // Make PORTD all outputs
TRISC = %00000000                   // Make PORTC all outputs cathodes
TRISA = %00000000                   //player leds
TRISD = %00000000                  //anodes
TRISE = $0000
x = 0
y = 0
 HLVDCON =%00011011      'see section 22.0 for setup and table 26-4 for voltage setting
                        'set to 4 volts in this case

                                

//Output (player1)     //player leds ON PORT C
Output (led1)
Output (led2)
Output (led3)
Output (led4)
Output (led5)
Output (led6)
Output (led7)
Output (led8)
Output (Battery)
//Output (Power)
Input (PORTE.0)         //counter press
//Input (Switch)  //porta.3
//ALL ON PORT B
Input(swt1)
Input(swt2)
Input(swt3)
Input(swt4)
Input(swt5)
Input(swt6)
Input(swt7)
Input(swt8)
led1=0
led2=0
led3=0
led4=0
led5=0
led6=0
led7=0
led8=0
SetAllDigital()
 counter = 12
 
 
 ///HLVD SECTION
 //mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
 HLVDCON =%00011011      'see section 22.0 for setup and table 26-4 for voltage setting
                        'set to 4 volts in this case
 PIR2.bits(2) = 1        'clear HLVD interrupt flag
PIE2.bits(2) = 1        'enable HLVD interrupt (section 22.2, sentence 5)
INTCON.bits(7) = 1     'enable HLVD interrupt (section 22.2, sentence 5)                       
                        
                        


While TRUE
       If PIR2.bits(2) = 1 Then          'check HLVD interrupt
          Battery = 1                'LED = ON
          PIR2.bits(2) = 0          'clear HVLD interrupt
          Else
          Battery = 0                'LED = OFF
    End If
                         'not needed for polled result   
 
 //mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
 
 
 
  
 Matrix_sel()  //start out with 12
 
Wend
 
  • You clear PIR2.bits(2) after detecting it, but you also set it to 1 manually before the loop (PIR2.bits(2) = 1). This is incorrect—firmware shouldn’t set interrupt flags; the hardware does. This could mask the real HLVD event.
  • The datasheet (Section 22.2) states PIR2.HLVDIF is set by hardware when the voltage crosses the threshold. Manually setting it confuses the logic.

    Low threshold is set to 4.0V so scale your Vbat according.
 

Latest threads

New Articles From Microcontroller Tips

Back
Top