16f84a running interrupt PICBASIC code


Closed Thread
Results 1 to 19 of 19

Hybrid View

  1. #1
    Join Date
    Aug 2006
    Location
    Look, behind you.
    Posts
    2,818


    Did you find this post helpful? Yes | No

    Default

    You post your code in PDF format, and the only way anyone can test it is to retype it all over, no thanks.
    If you do not believe in MAGIC, Consider how currency has value simply by printing it, and is then traded for real assets.
    .
    Gold is the money of kings, silver is the money of gentlemen, barter is the money of peasants - but debt is the money of slaves
    .
    There simply is no "Happy Spam" If you do it you will disappear from this forum.

  2. #2
    Join Date
    Jun 2006
    Location
    Greece
    Posts
    302


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by Joe S. View Post
    You post your code in PDF format, and the only way anyone can test it is to retype it all over, no thanks.
    I post the code from PDF.
    Code:
    
        '16f84a
    
        Symbol OUT_PIN = PORTB.0            ' Output to solenoid RB0
        Symbol LED = PORTB.1                ' Control button to RB1
        Symbol CNTL_BUTTON = PORTB.7        ' Control button to RB7
        
        spacing var byte
        temp var byte
        
        TRISA = $FF
        TRISB = $FC                         ' RB0 and RB1 outputs, others input
        spacing = 15
        LED = 0
        temp = 1
        
        gosub wait_button
        
        LED = 1
        pause 2000                          ' Wait for two seconds
        if CNTL_BUTTON = 1 then spacing = 30: goto direct   ' If button is released before 2 secs
                                                            ' code goes directly into the default spacing
        temp = 0
        gosub wait_button                   ' If button is pressed more than 2 secs,
                                            ' it gets caught here and waits for release
        LED = 0
        pause 1000                          ' Wait for 100 ms
        
    repeata:
        spacing = spacing + 5               ' Increase the spacing count by 2 every time
        toggle LED
        pause 1000
        toggle LED
        if spacing = 45 then spacing = 20   ' Till it reaches maximum and reset to minimum
        temp = 1
        gosub wait_button                   ' Access the push button state and repeat if short press
        pause 2000                          ' Delay for 2 seconds
        if CNTL_BUTTON = 1 then goto repeata
        LED = 1
        OUT_PIN = 0
    'Calculate the value to be loaded into TMR0 for counting at RA4 connected to the encoder output
    'Use a multiplier to convert the spacing in cm to number of pulses to count
    'Say if the distance measuring wheel's dia is 40 cm then its circumference = 3.14*40 appr = 125 cm
    'For one revolution ie 125 cm distance traveled = 500 pulse outputs of encoder
    'Correspondingly 500/125 = 4 pulses/cm distance, therefore set the count as 255 - (spacing * 4)
    direct:
        spacing = 255 - (spacing * 4)
        OPTION_REG = %00110000              ' TMR0 counter on falling edge of RA4
        'Cnt = 0                            ' Clear the event counter, Cnt
        ON INTERRUPT GOTO ISR               ' Interrupt service routine
        TMR0 = spacing
        OUT_PIN = 0
        INTCON = %10100000                  ' Enable TMR0 overflow interrupt
        
    NXT:
        if OUT_PIN = 1 then
            pause 300
            OUT_PIN =0
        endif
        GOTO NXT                            ' Continue
        
    'This is the interrupt service routine, ISR. The program jumps here whenever TMR0 overflow occurs
        DISABLE                             ' Disable interrupts
    ISR:                                    ' Entry point of the ISR
        OUT_PIN = 1
        TMR0 = spacing
        INTCON = %10100000                  ' Enable TMR0 overflow interrupt
        RESUME                              ' Resume main program
        ENABLE                              ' Enable interrupts
        
    wait_button:
        if CNTL_BUTTON && 1 = temp then wait_button
        return
        end

  3. #3
    Join Date
    Jul 2008
    Posts
    7


    Did you find this post helpful? Yes | No

    Default 16f84a running interrupt PICBASIC code

    Quote Originally Posted by Joe S. View Post
    You post your code in PDF format, and the only way anyone can test it is to retype it all over, no thanks.
    Sorry that I had attached it in pdf
    Now I have attached in text.
    Please pardon me.

Similar Threads

  1. Code works on 16F84A but not on 16F88?
    By pharaohamps in forum mel PIC BASIC Pro
    Replies: 7
    Last Post: - 6th November 2009, 18:29
  2. Help with Analog Interrupt
    By brid0030 in forum mel PIC BASIC Pro
    Replies: 7
    Last Post: - 13th February 2008, 18:14
  3. 16F876A CCP1 Capture/Interrupt Question
    By TDonBass in forum mel PIC BASIC Pro
    Replies: 6
    Last Post: - 17th January 2008, 03:25
  4. PicBasic code problems with a 16F84A
    By Lauren Barta in forum mel PIC BASIC
    Replies: 3
    Last Post: - 30th May 2006, 22:50
  5. NEWBIE: Some basic questions using interrupts
    By JackPollack in forum mel PIC BASIC Pro
    Replies: 5
    Last Post: - 8th March 2006, 02:59

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