[?] Subscribe To This Site

XML RSS
Add to Google
Add to My Yahoo!
Add to My MSN
Subscribe with Bloglines

Home
Forum
Project Ideas
C Course
Projects Showcase
LCD-KEYS OnePort
PIC Introduction
PIC Programmer
Schematic Tool
PIC Projects
Tips & Techniques
PIC Tutorials
Digital Downloads
Store
My SECRET
Oscilloscopes
About Me
Contact
Terms of Use
Search This Site
Freebies
Articles
Books
Resource Links
Site Map
Video du Jour
Rant/Rave
Privacy Policy
Problem?-Solution
Programmer Types

16F84a Counting RA4 Input : output to single LEDs

by ROMAN
(Philippines)

16F84A example needed

I would like to see a program that will count the number of inputs on pin RA4 of pic16F84a.

Then turn on 3 outputs one at a time e.g.

..like when there is one input signal turn output 1 hi
..2 input, number 2 output is hi
..3 input signal, number 3 output is hi...
etc.




Comments for
16F84a Counting RA4 Input : output to single LEDs

Click here to add your own comments

Sep 30, 2007
ASM file
by: Colin Mitchell


To see the .asm file correctly formatted, email

Colin Mitchell:



talking :at: tpg.com.au



Or look here:


16F84A counting RA4 assembler code.



Hi Colin I've changed the email address above because your inbox will be swamped with spam email. Automatic search bots find these addresses and fill them with rubbish. Never put an unaltered email address on a web page.


(John Main)

Sep 30, 2007
ASM file
by: Colin Mitchell

;Project: Count Inputs on RA4
List P = 16F84
#include
__CONFIG 1Bh ;_CP_OFF & _PWRTE_ON & _WDT_OFF & _RC_OSC


fileA equ 20h
fileB equ 21h
swflag equ 25h


ORG 0 ;Load the code at address 000
SetUp BSF 03,5 ;Select Bank1
MOVLW 10h ;Put 0001 0000 into W
MOVWF 05 ;Load TrisA. Make RA4 input. Others output
BCF 03,5 ;Select Programming area - Bank0
GOTO Main



;1mS delay

_1mS decfsz fileA,1
goto _1mS
retlw 00

;100mS delay

_100mS movlw 60h
movwf fileB
AA call _1mS
decfsz fileB,1
goto AA
retlw 00



Main CLRF swflag
CLRF 05 ;Clear Port A
Main1 CALL _1mS
BTFSS 05,4 ;Test the input line
GOTO Main2
btfsc swflag,0 ;first time?
GOTO Main1
bsf swflag,0
bcf 05,2 ;turn off the third line
bsf 05,0 ;turn on the first line
goto Main1
Main2 btfss 05,0 ;Is first line ON and no input signal?
GOTO Main1

CLRF swflag
Main3 CALL _1mS
BTFSS 05,4 ;Test the input line
GOTO Main4
btfsc swflag,0 ;first time?
GOTO Main3
bsf swflag,0
bcf 05,0 ;turn off the first line
bsf 05,1 ;turn on the second line
goto Main3
Main4 btfss 05,1 ;Is second line ON and no input signal?
GOTO Main3



CLRF swflag
Main5 CALL _1mS
BTFSS 05,4 ;Test the input line
GOTO Main6
btfsc swflag,0 ;first time?
GOTO Main5
bsf swflag,0
bcf 05,1 ;turn off the second line
bsf 05,2 ;turn on the third line
goto Main5
Main6 btfss 05,2 ;Is third line ON and no input signal?
GOTO Main5
GOTO Main1


END




For more details:
Colin Mitchell
talking :at: tpg.com.au

Aug 27, 2007
Hows this?
by: Justin

I don't understand. Do you want it to count the number of times you press a button and display a different LED for each press? That would be easily done with something like




unsigned short x = 0

void main () {

if (porta & (1<<4)) { // check key press
delay_ms (20); // wait for boucing
while (!porta & (1<<4)) ; //wait for release
++x
}
if x == 1 ... //first press
if x == 2 ... //second press
if x == 3 ... //etc
}

Hope this helps,
Justin




JFM Note there is formating problem to be sorted out.

There's an easier to read version here


Click here to add your own comments

Join in and write your own page! It's easy to do. How?
Simply click here to return to Ask for a Solution to your microcontroller problem