
Originally Posted by
Joe S.
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
Bookmarks