Memory Space of the PIC16F84...


Closed Thread
Results 1 to 8 of 8

Hybrid View

  1. #1
    Join Date
    Sep 2004
    Location
    montreal, canada
    Posts
    6,898


    Did you find this post helpful? Yes | No

    Default

    Hi Michael,
    Try the following and post results. Where i am now i can't test it
    Code:
    ' I am working on a delay project which uses 2 buttons one for increasing the 
    ' delay and one for decreasing the delay. I am using the PIC16F84 and have a 
    '
    ' buttons:
    ' ========
    '         connected to PORTB pin 5,6. 
    '                   pin 5 : increase
    '                   pin 6 : decrease
    ' LEDS:
    ' =====
    '      PORTB pin 4 : showing the length of the delay, 
    '            pin 3 : showing when both buttons are pushed that it saves 
    '                    the delay to EEPROM, 
    '            pin 7 : showing when IncreaseButton is pushed
    '
    '      PORTA pin 3 for when DecreaseButton is pushed.
    
        TRISB=%01100000  ' PORTB<6:5> as input 
                         ' others as output
                         '
        TRISA=0          ' set all PORTA as output
        
        LEDLength   var PORTB.4
        LEDSave     var PORTB.3
        LEDIncrease var PORTB.7
        LEDDecrease var PORTA.3
        
        Delay       var word
        Loop        var word
        PB          var byte
        Increase    con 1
        Decrease    con 2
        Both        con 3
        
        data @0,5,$DC         ' store initial 1.5 sec
        
        PORTB=0 '
                ' Clear all LEDs
        PORTA=0 '
    
    DelayLoop:
        read 0,delay.highbyte ' Read delay
        read 1,delay.lowbyte  ' from EEPROM
        
        ledlength=1           ' Enable Length LED
        
        for loop=0 to delay   ' Do the delay and do PushButton tests
            pause 1
            pb=(PORTB>>5)& 3  ' keep only PORTB.5 and PORTB.6 bits
            
            if pb then        ' If there's at least one push button press
               select case Pb ' choose according thing to do
                      case increase
                           if delay<=60000 then
                              delay=delay+500
                              ledincrease=1
                              endif
                         
                      case decrease
                           if delay>=500 then 
                              delay=delay-500
                              leddecrease=1
                              endif
                         
                      case both
                           ledsave=1
                           write 0, delay.highbyte
                           write 1, delay.lowbyte
                      
                      end select
               pause 100     ' kinda auto repeat delay... can be higher/lower 
    
               ledincrease=0 ' Clear all pushButtons
               leddecrease=0 '       related
               ledsave    =0 '         LEDs
               endif
            next
        ledlength=0     ' confirm delay is finished
        pause 500       ' wait a little bit
        goto DelayLoop  ' redo the delay and blah blah
    Steve

    It's not a bug, it's a random feature.
    There's no problem, only learning opportunities.

  2. #2
    Tear's Avatar
    Tear Guest


    Did you find this post helpful? Yes | No

    Default

    Thank you SOOOOOOO much Steve!!!!!! This code is exactly what I need to make it work! My poor, unefficent code was doing the job, but this is so much cleaner and easier to use!

    I defiantly have a lot of learning to do. This was my first attempt at writing my own program.

    Also, with your version of this code I save nearly half the words!

    I have been studying the way you have wrote this code and I dont understand how this line works. I understand what it does but not how. I am just curious on this one?

    pb=(PORTB>>5)& 3 ' keep only PORTB.5 and PORTB.6 bits

    Thanks,
    Michael
    Last edited by Tear; - 1st July 2005 at 15:49.

  3. #3
    Join Date
    Sep 2004
    Location
    montreal, canada
    Posts
    6,898


    Did you find this post helpful? Yes | No

    Default

    Great, but there's a tons of way to it more efficient. i was just trying to do something readable. Glad to know it's work as you wish. Hard to test when you're out of the city in a hotel room with a simple laptop.

    BTW let's look at
    pb=(PORTB>>5)& 3 ' keep only PORTB.5 and PORTB.6 bits


    this line read the whole PORTB and shift bits 5 position to the right and finnaly do a bitwise AND with 3.
    WHY... easier to read...and get only push buttons state

    let's see how it's work.

    Let's assume that PORTB=%11100000
    after >>5 = we have %00000111
    after & 3 we have %00000011 = 3 => both push buttons

    Of course we an also use PB=PORTB & %01100000
    and modify the Increase, decrease and Both constant definition too. That will save some code space and will do the same job. Or skip the Constant definition and place the expected value in the Select Case, or, or or , or...Posibility are endless.

    Sometimes, there's a choice to do. Having a readable code or a less readable but really tight. It's case by case.

    My last project use a 18F4620 and the full 64K of code. I spent many hours to shrink it as i can each time i add a new feature BUT I was out of codespace to implement new feature(on customer request)and i spend several hours to shrink everything by using PBP macro and do some workaround. Less readable but work as well as it suppose to.

    Great to know it's working fine for you.

    Have fun!
    Steve

    It's not a bug, it's a random feature.
    There's no problem, only learning opportunities.

Similar Threads

  1. 'reserving' memory space
    By comwarrior in forum General
    Replies: 11
    Last Post: - 25th September 2009, 22:37
  2. Making Program Code Space your playground...
    By Melanie in forum Code Examples
    Replies: 15
    Last Post: - 19th July 2008, 08:26
  3. Need the code to write to a memory
    By Hamlet in forum General
    Replies: 0
    Last Post: - 20th August 2007, 00:22
  4. Replies: 4
    Last Post: - 2nd March 2007, 06:12
  5. Use internal program memory like DATA memory
    By flotulopex in forum mel PIC BASIC Pro
    Replies: 2
    Last Post: - 30th December 2006, 18:38

Members who have read this thread : 0

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts