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.

MikroBasic Help

Status
Not open for further replies.
Code:
program Speedometer

dim cnt as word
dim _ones as byte
dim _tens as byte
dim _hund as byte

sub function Mask(dim num as byte) as byte    ' this function returns masks
  select case num                             ' for common cathode 7-seg. display
    case 0  result = 252
    case 1  result = 48
    case 2  result = 218
    case 3  result = 122
    case 4  result = 54                  '00110110
    case 5  result = 110                  '01101110
    case 6  result = 238                 '11101110
    case 7  result = 56                   '00111000
    case 8  result = 254                   '11111110
    case 9  result = 126                    '01111110
  end select                                  'case end
end sub

sub procedure interrupt
    cnt = cnt + 1
    if _hund > 0 then
      PortA.1 = 0
      PortB = Mask(_hund)
    End if
    Delay_ms(5)
    PortA.1 = 1
    if _tens = 0 then
       if _hund > 0 then
         PortA.2 = 0
         PortB = Mask(_tens)
       end if
    else
      PortA.2 = 0
      PortB = Mask(_tens)
    end if
    Delay_ms(5)
    PortA.2 = 1
    if _tens = 0 then
       if _ones <> 0 then
          PortA.3 = 0
          PortB = Mask(_ones)
       end if
    else
        PortA.3 = 0
        PortB = Mask(_ones)
    end if
    Delay_ms(5)
    PortA.3 = 1
    TMR0 = 96
    INTCON = $20
    INTCON.INTF = 0
end sub

main:
    Option_reg = $84
    'Initialize Ports
    TrisB = %00000001
    TrisA = 0
    PortB = 254
    PortA = %00000
    'Flash for power check
    Delay_ms(300)
    PortA = %11111
    'Set variables
    _ones = 0
    _tens = 0
    _hund = 0
    'Initialize Timer
    TMR0 = 96
    INTCON = $A0
    INTCON.INTE = 1
    INTCON.INTF = 0
    cnt = 0
    while True
        If PortB.0 = 0 then
          if (cnt = 1) then
             _ones = _ones + 1
             if (_ones) > 9 then
                _tens = _tens + 1
                _ones = 0
                if (_tens) > 9 then
                   _hund = _hund + 1
                   _tens = 0
                   if (_hund) > 9 then
                      _hund = 0
                    end if
                end if
             end if
             cnt = 0
          end if
        end if
    wend
end.

I need help on the code above. I've configured RB0 as input but it doesn't respond if I connect it to ground (0). My sample code above starts counting while RB0 = 0 and stops when it's High. The port has a pull up resistor 4.7K.
 
Last edited:
I would re-check the option reg, also make sure you select the right PIC device. If you reverse the logic on the PortB.0 = 0 to a PortB.0 = 1, does the rest of the program run correctly? What PIC are you using?
 
Im using the obsolete PIC16f84a. I have a bunch lying around so I'm trying to utilize them. Reversing it works fine, but I cant get it to 0 after. If i change it to Portb.0 = 1 then it works, but can't stop it by connecting it to the ground. Actually I don't fully understand the Option_reg. I was just copying from other samples.
 
Status
Not open for further replies.

Latest threads

New Articles From Microcontroller Tips

Back
Top