amodpathak
- 28th September 2014, 12:35
Iam making an up down counter using 16f913.Iam not able to make portA pins as input A2,A4,A5
Iam using active low buttons
My code Is:
DG1 VAR BYTE
DG2 VAR BYTE
DG3 VAR BYTE
DIGIT VAR BYTE
DG VAR BYTE
COUNTT VAR BYTe
N VAR WORD
pbutton var porta.2
ibutton var porta.5
i var byte
temp var byte
NUMB VAR WORD
DEFINE BUTTON_PAUSE 50
ADCON1=0
TRISA=1
TRISB=0
TRISC=%00000111
osccon=$60
N=NUMB
GOSUB DIGITCALC
numb=0
MAIN:
gosub display
if pbutton=0 then UP
IF PBUTTON=0 THEN down
GOTO MAIN
'-------------------------------------------------------------------------
'_____________________________________
UP:
IF NUMB=400 THEN MAIN
numb=NUMB+1
GOSUB DIGITCALC
N=NUMB
GOTO MAIN
'_____________________________________
'_____________________________________
DOWN:
IF NUMB=0 THEN MAIN
numb=NUMB-1
GOSUB DIGITCALC
N=NUMB
GOTO MAIN
'_____________________________________
'_____________________________________
___________
DISPLAY:
'DATA FOR DG1,DG2,DG3 IS PUT ON PORTC AND THE CORRESPONDING
'PINS ON PORTB TOGGLED
'THIS IS DONE 100 TIMES
FOR COUNTT=0 TO 99
PORTB=DG1
PORTC.5=1
PAUSE 1
PORTC.5=0
PORTB=DG2
PORTC.6=1
PAUSE 1
PORTC.6=0
PORTB=DG3
PORTC.7=1
PAUSE 1
PORTC.7=0
NEXT COUNTT
RETURN
'_________________________________________________ _______________
'_________________________________________________ _________________________
DIGITCALC:
'THIS ROUTINE BREAKS UP THE NUMBER INTO 3 DISTINCT PARTS - DG1,DG2,DG3
'NOTICE THAT ANOTHER SUBROUTINE IS CALLED EACH TIME
DIGIT=0
LP1:
IF N<100 THEN DS1
N=N-100
DIGIT=DIGIT+1
GOTO LP1
DS1:
GOSUB FND
DG1=DG
DIGIT=0
LP2:
IF N<10 THEN DS2
N=N-10
DIGIT=DIGIT+1
GOTO LP2
DS2:
GOSUB FND
DG2=DG
DIGIT=N
GOSUB FND
DG3=DG
return
'_________________________________________________ _________________________
'_________________________________________________ _________________________
FND:
'THIS ROUTINE IDENTIFIES THE SEGMENTS TO LIGHT UP
'7 SEGMENTS WIRED UP AS FOLLOWS
'A -PORTC.2
'B -PORTC.3
'C -PORTC.6
'D -PORTC.5
'E -PORTC.4
'F -PORTC.1
'G -PORTC.0
FND0:
IF DIGIT>0 THEN FND1
DG=$3F
GOTO FNDEND
FND1:
IF DIGIT>1 THEN FND2
DG=$6
GOTO FNDEND
FND2:
IF DIGIT>2 THEN FND3
DG=$5B
GOTO FNDEND
FND3:
IF DIGIT>3 THEN FND4
DG=$4F
GOTO FNDEND
FND4:
IF DIGIT>4 THEN FND5
DG=$66
GOTO FNDEND
FND5:
IF DIGIT>5 THEN FND6
DG=$6D
GOTO FNDEND
FND6:
IF DIGIT>6 THEN FND7
DG=$7D '
GOTO FNDEND
FND7:
IF DIGIT>7 THEN FND8
DG=$7 '
GOTO FNDEND
FND8:
IF DIGIT>8 THEN FND9
DG=$7F
GOTO FNDEND
FND9:
DG=$67
FNDEND:
RETURN
'_________________________________________________ _________________________
Iam using active low buttons
My code Is:
DG1 VAR BYTE
DG2 VAR BYTE
DG3 VAR BYTE
DIGIT VAR BYTE
DG VAR BYTE
COUNTT VAR BYTe
N VAR WORD
pbutton var porta.2
ibutton var porta.5
i var byte
temp var byte
NUMB VAR WORD
DEFINE BUTTON_PAUSE 50
ADCON1=0
TRISA=1
TRISB=0
TRISC=%00000111
osccon=$60
N=NUMB
GOSUB DIGITCALC
numb=0
MAIN:
gosub display
if pbutton=0 then UP
IF PBUTTON=0 THEN down
GOTO MAIN
'-------------------------------------------------------------------------
'_____________________________________
UP:
IF NUMB=400 THEN MAIN
numb=NUMB+1
GOSUB DIGITCALC
N=NUMB
GOTO MAIN
'_____________________________________
'_____________________________________
DOWN:
IF NUMB=0 THEN MAIN
numb=NUMB-1
GOSUB DIGITCALC
N=NUMB
GOTO MAIN
'_____________________________________
'_____________________________________
___________
DISPLAY:
'DATA FOR DG1,DG2,DG3 IS PUT ON PORTC AND THE CORRESPONDING
'PINS ON PORTB TOGGLED
'THIS IS DONE 100 TIMES
FOR COUNTT=0 TO 99
PORTB=DG1
PORTC.5=1
PAUSE 1
PORTC.5=0
PORTB=DG2
PORTC.6=1
PAUSE 1
PORTC.6=0
PORTB=DG3
PORTC.7=1
PAUSE 1
PORTC.7=0
NEXT COUNTT
RETURN
'_________________________________________________ _______________
'_________________________________________________ _________________________
DIGITCALC:
'THIS ROUTINE BREAKS UP THE NUMBER INTO 3 DISTINCT PARTS - DG1,DG2,DG3
'NOTICE THAT ANOTHER SUBROUTINE IS CALLED EACH TIME
DIGIT=0
LP1:
IF N<100 THEN DS1
N=N-100
DIGIT=DIGIT+1
GOTO LP1
DS1:
GOSUB FND
DG1=DG
DIGIT=0
LP2:
IF N<10 THEN DS2
N=N-10
DIGIT=DIGIT+1
GOTO LP2
DS2:
GOSUB FND
DG2=DG
DIGIT=N
GOSUB FND
DG3=DG
return
'_________________________________________________ _________________________
'_________________________________________________ _________________________
FND:
'THIS ROUTINE IDENTIFIES THE SEGMENTS TO LIGHT UP
'7 SEGMENTS WIRED UP AS FOLLOWS
'A -PORTC.2
'B -PORTC.3
'C -PORTC.6
'D -PORTC.5
'E -PORTC.4
'F -PORTC.1
'G -PORTC.0
FND0:
IF DIGIT>0 THEN FND1
DG=$3F
GOTO FNDEND
FND1:
IF DIGIT>1 THEN FND2
DG=$6
GOTO FNDEND
FND2:
IF DIGIT>2 THEN FND3
DG=$5B
GOTO FNDEND
FND3:
IF DIGIT>3 THEN FND4
DG=$4F
GOTO FNDEND
FND4:
IF DIGIT>4 THEN FND5
DG=$66
GOTO FNDEND
FND5:
IF DIGIT>5 THEN FND6
DG=$6D
GOTO FNDEND
FND6:
IF DIGIT>6 THEN FND7
DG=$7D '
GOTO FNDEND
FND7:
IF DIGIT>7 THEN FND8
DG=$7 '
GOTO FNDEND
FND8:
IF DIGIT>8 THEN FND9
DG=$7F
GOTO FNDEND
FND9:
DG=$67
FNDEND:
RETURN
'_________________________________________________ _________________________