-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathReloj 1 boton 16F886.pbp
166 lines (166 loc) · 5.63 KB
/
Reloj 1 boton 16F886.pbp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
'****************************************************************
'* Name : UNTITLED.BAS *
'* Author : [select VIEW...EDITOR OPTIONS] *
'* Notice : Copyright (c) 2020 [select VIEW...EDITOR OPTIONS] *
'* : All Rights Reserved *
'* Date : 19/08/2020 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
I VAR BYTE:S VAR BYTE:DIGIT var byte:PATTERN VAR BYTE: D3 VAR BYTE;
D2 VAR BYTE: D1 VAR BYTE: D0 VAR BYTE: M VAR BYTE: H VAR BYTE;
X VAR BYTE: Z VAR BYTE;
TRISA =%10000111; RA0:RA2,RA7 SET AS INPUT, RA3:RA6 SET AS OUTPUT
TRISB =%10000000; RB0:RB6 SET AS OUTPUT, RB7 SET AS INPUT
TRISC =%00000001; RC0 SET AS INPUT, RC1:RC7 SET AS INPUT
ANSEL = 0; PORTA SET AS DIGITAL
ANSELH=0; PORTB SET AS DIGITAL
OSCCON =%01101100;SET 4MHZ EXTERNAL OSC
;FOSC.2 = 1 ;
;DEFINE FOSC %001
;CONFIGURATION_WORDS_FOSC = %001
;_CONFIG1_XT_OSC
HPWM 1,127,250; OUTPUT PWM TO 250 HZ WITH 50% IN STATE HIGH
OSCTUNE = 0; CLOCK WORKING WITH FACTORY CALIBRATION
T1CON= $07; TMR1 ENEABLE AND COUNT IN STATE LOW
M=0;
H=0;
D0=0; ;INICIAL CONDITION
D1=0;
D2=0;
D3=0;
PORTA = 0;
PORTB= 0;
PORTC=0;
OPTION_REG.7=0; PORTB PULL UP ENEABLE
RPT: ;RESTART
pause 50; ;STOP FOR 50 MILISECOND
TMR1 = 0;
SEC: ;LABEL SEC
PORTA.3=0; SET A LED OFF
PORTA.4=0; SET A LEDM OF
PORTA.5=0; SET A LEDH OFF
T1CON.0=1; ENEABLE TMR1
GOSUB SHOW ;GO TO LABEL SHOW
GOSUB SHOWMINUTES; GO TO LABEL SHOWMINUTES
GOSUB DOTS; GO TO LABEL DOTS
GOSUB SHOWHOURS; GO TO LABEL SHOWHOURS
FOR S = 0 TO 59; START THE COUNT OF SECONDS
STAY: ;LABEL STAY
IF PORTA.0 = 0 THEN GOTO SET; ;STARTING SET TIME
GOSUB SHOW ;GO TO LABEL SHOW
GOSUB SHOWMINUTES; GO TO LABEL SHOWMINUTES
GOSUB DOTS; GO TO LABEL DOTS
GOSUB SHOWHOURS; GO TO LABEL SHOWHOURS
IF TMR1 < 250 THEN STAY ;PAUSE 1 SECOND
TMR1 = 0; ;CLEAR TMR1
GOSUB SHOW ;GO TO LABEL SHOW
GOSUB SHOWMINUTES; GO TO LABEL SHOWMINUTES
GOSUB DOTS; GO TO LABEL SHOWHOURS
GOSUB SHOWHOURS;
NEXT S; ;NEXT LOOP
M = M+1 ;ADD ONE MINUTE TO VAR M
IF M<60 THEN GOTO SEC; ;RESTART MINUTES TO CERO
M= 0;
H= H+1; ;ADD ONE HOUR TO VAR H
IF H < 24 THEN GOTO SEC; ;RESTART HOUR TO CERO
H = 0;
GOTO SEC;
;------------------------------------------------------------------------------
;--------------------------------------------------------------------------------
SET:
PAUSE 200; ;START SET MINUTES
TMR1 = 0;
for x = 0 to 2; WAIT FOR 3 SECONDS TO CONTINUE
TMR1 = 0;
;FOR y = 0 TO 59
MINU:
PORTC.6 = 0; OFF HOUR DISPLAY
PORTC.7 = 0; OFF HOUR DISPLAY
PORTC.3 = 0; OFF DOTS
GOSUB SHOW; GO TO LABEL SHOW
GOSUB SHOWMINUTES; GO TO LABEL SHOWMINUTES
IF PORTA.0 = 0 THEN
M = M + 1;
X = 0; RESTART FOR X
TMR1 = 0; RESTART TMR1
IF (M>59) THEN M = 0;
FOR Z = 0 TO 25; DEBOUNCING: (SHOW + SHOWMINUTES) = 2 mS *26 = 52 mS
GOSUB SHOW; GO TO LABEL SHOW
GOSUB SHOWMINUTES; GO TO LABEL SHOWMINUTES
NEXT Z; NEXT LOOP
ENDIF; END IF;
IF (TMR1 < 250) THEN MINU; IF TMR1 IS LOW TO 250 DO NOT ADVANCES
PAUSE 200; PAUSE 200 mS
NEXT X; NEXT LOOP
;--------------------------------------------------------------------------------
TMR1 = 0;
for x = 0 to 2 ; SET HOURS ;WAIT FOR 3 SECONDS TO CONTINUE
TMR1 = 0
HOUR:
PORTC.5 = 0; OFF MINUTES DISPLAY
PORTC.4 = 0; OFF MINUTES DISPLAY
PORTC.3 = 0;OFF DOTS
GOSUB SHOW; GOTO LABEL SHOW
GOSUB SHOWHOURS; GOTO LABEL SHOWHOURS
IF PORTA.0 = 0 THEN; IF PORTA.0 IS EQUAL TO 0 CONTINUE
H = H + 1; HOUR + 1
IF (H>23) THEN H = 0; RESTART HOURS
FOR Z = 0 TO 25; DEBOUNCING: (SHOW + SHOWHOURS) = 2 mS *26 = 52 mS
GOSUB SHOW; GOTO LABEL SHOW
GOSUB SHOWHOURS; GOTO LABEL SHOWHOURS
NEXT Z; NEXT LOOP
X = 0; RESTART FOR X
TMR1 = 0; RESTART TMR1
ENDIF; END IF
IF (TMR1 < 250) THEN HOUR; IF TMR1 IS LOW TO 250 DO NOT ADVANCES
PAUSE 200; PAUSE 200 mS
NEXT X; NEXT LOOP
GOTO RPT; GO TO LABEL RPT
;--------------------------------------------------------------------------------
;------------------------------------------------------------------------------
SHOW:
D0= M DIG 0; GETTING DIGIT OF UNITS
D1= M DIG 1; GETTING DIGIT OF TENS
D2= H DIG 0; GETTING DIGIT OF UNITS
D3= H DIG 1; GETTING DIGIT OF TENS
RETURN;
SHOWHOURS:
PORTC.4=1 ;TURN ON CATODE OF FIRST DIGIT
DIGIT =D3; ;SAVE D3 IN DIGIT VARIABLE
GOSUB BCD7; ;GO TO LABEL BCD7
PORTC.4=0; ;TURN OFF CATODE OF FIRST DIGIT
PORTC.5=1; ;TURN ON CATODE OF SECOND DIGIT
DIGIT= D2; ;SAVE D2 IN DIGIT VARIABLE
GOSUB BCD7; ;GO TO LABEL BCD7
PORTC.5=0; ;TURN OFF CATODE OF SECOND DIGIT
RETURN;
DOTS:
IF(TMR1 > 125) THEN ;TURN ON FOR 500 MILISECONDS
PORTC.3=1 ;TURN ON CATODE OF L1,L2,L3
PORTB= %00000011 ;TURN ON RB0:RB1
PAUSE 1; ;PAUSE 1 MICROSECOND
PORTC.3=0; ;TURN OFF CATODE OF L1,L2,L3
ELSE ;IF NOT THEN
PAUSE 1; ;PAUSE 1 MICROSECOND
ENDIF; ;IF IS FINISHED
RETURN;
SHOWMINUTES:
PORTC.6=1; ;TURN ON CATODE OF THIRD DIGIT
DIGIT= D1; ;SAVE D1 IN DIGIT VARIABLE
GOSUB BCD7; ;GO TO LABER BCD7
PORTC.6=0; ;TURN OFF CATODE OF THIRD DIGIT
PORTC.7=1; ;TURN ON CATODE OF QUARTER DIGIT
DIGIT= D0; ;SAVE D0 IN DIGIT VARIABLE
GOSUB BCD7; ;GOTO BCD7
PORTC.7=0; ;TURN OF CATODE OF QUARTER DIGIT
RETURN; ;GO TO THE CALL UPON
;-------------------------------------------------------------------------------
BCD7:
LOOKUP DIGIT,[$40,$79,$A4,$B0,$99,$92,_ ;DECODING DIGIT TO BCD
$82,$F8,$80,$90],PATTERN; ;SAVE VARIABLE ON PATTERN
PORTB= ~PATTERN; ;DENY VARIABLE PATTERN AND SAMPLE IN PORTB
PAUSE 1; ;PAUSA DE 1 MICROSEGUNDO
RETURN; GO TO THE CALL UPON
END