Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PROTON - IDE Guia de Instrucciones
PROTON - IDE Guia de Instrucciones
GRENELECTRONIC
DESARROLLO CON MICROCONTROLADORES PIC
ndice
1.Introduccin
2.Cdigo de programacin Basic
3.Cdigos Binario, hex., Decimal, ASCII
4. Programacin I
Laso abierto, secuencia
Actividades de programacin I
5. Programacin II
Laso cerrado, compuertas lgicas
Secuencia de control y carga
Actividades de programacin II
6. Programacin III
Display de 7 segmentos
Actividades de programacin III
7. Programacin IV
LCD, lm35, instrumentacin
Actividades de programacin IV
8. Programacin V
Motores, Servos y PAP
Actividades de programacin V
9. Programacin VI
Robtica sensorial
Actividades de programacin VI
10. Programacin VII
Visual Basic
Comunicacin serial rx tx
Actividades de Programacin VII
Qu es un microcontrolador?
Declaraciones y comandos
Adems de estas estructuras de base, algunos compiladores tambin permiten programacin
orientada a objetos, as como procedimientos y funciones. Sin embargo
Protn IDE no permite los procedimientos y funciones en el verdadero sentido, as como no
es compatible con los objetos.
Tiene enfoque orientado hacia el simple y sencillo llamado de instrucciones. La
programacin comienza en la parte superior, y la contina hacia abajo. Sin embargo permite
las repeticiones.
Las primeras lneas del programa BASIC, difieren en la memoria de los microcontroladores,
EEPROM, nmero de puertos y registros, etc., es necesario informar al compilador sobre el
microcontrolador que se utilizar. En segundo lugar la velocidad de procesamiento depende
de la frecuencia del cristal. Por lo tanto, a fin de calcular con precisin el calendario
de funciones de retraso tambin es necesario informar al compilador de la frecuencia del
cristal Los programas de lenguaje BASIC usualmente comienzan as:
Device = 16F877A
XTAL = 4
La primera lnea indica el procesador y la segunda lnea dice que el hardware utiliza
20MHz de cristal.
Declaraciones
Son instrucciones especiales sobre los diversos dispositivos a utilizar, esto ayuda al
compilador a generar instrucciones especficas. Por ejemplo, si estamos usando una pantalla
LCD y se conecta en PORTD, entonces tenemos que informar las conexiones de nuestro LCD.
Vamos a declarar este tipo de configuracin generalmente despus de la seccin de
encabezado utilizando los comandos:
Declare LCD_DTPIN PORTD.0
Hay un nmero de declaraciones, sin embargo, slo las necesarias en el proyecto actual se
fijan normalmente....
Identificadores
Los identificadores son smbolos de texto especial que se utiliza para representar algo.
Pueden ser utilizados como etiquetas para marcar ciertos lugares en el programa, de modo
que el programa se puede hacer para ir a las etiquetas y luego continuar con el programa a
partir de entonces. Del mismo modo los identificadores pueden usarse para nombrar algunas
ubicaciones de memoria.
Estos son por lo general variables llamadas, y son los identificadores ms importantes en
la programacin. Los identificadores tambin se pueden utilizar como alias en cierto texto,
de modo que en lugar de escribir el texto concerniente del identificador, el compilador
inserta el texto pertinente en su lugar.
Las declaraciones y comandos
Hay tres tipos de declaraciones:
Comparacin y declaraciones condicionales
Repeticin y declaraciones de bucle
Biblioteca de comandos
Comparacin y sentencias condicionales nos permiten comparar dos o ms variables, los
puertos, los pines del puerto o registros de funciones especiales y luego tomar la decisin
de ejecutar un conjunto de instrucciones o de otro conjunto.
Considerando la importancia de estas declaraciones, el lenguaje BASIC prev diferentes
construcciones de esto. Vamos a explorar estas a continuacin.
La repeticin y de bucle es una de las mayores ventajas de los microprocesadores.
Podemos encargar al microcontrolador repetir continuamente ciertas instrucciones, ya sea
indefinidamente, o hasta que una determinada condicin existe.
Por ejemplo, para mantener un LED, hasta que la temperatura es alta desde un punto de
ajuste.
Biblioteca de Comandos, no son propiamente los comandos del lenguaje BASIC, pero son
proporcionados por el fabricante del compilador para hacer las tareas comunes. Por ejemplo,
un comando de biblioteca para mostrar algunos datos sobre la LCD o para leer los datos
analgicos de un pin de entrada.
Etiquetas
Para marcar las declaraciones que el programa podra hacer referencia con los comandos
Goto, Call o Gosub, PROTON utiliza las etiquetas de lnea. A diferencia de los antiguos
BASICS, PROTON no permite o exige a los nmeros de lnea y no requiere que se etiquete cada
lnea. En cambio, cualquier lnea puede comenzar con una etiqueta de lnea, que es
simplemente un identificador seguido de dos puntos (:).
LAB:
PRINT "Hola Mundo"
GOTO LAB
Los nombres de etiqueta pueden ser de hasta 32 caracteres de longitud y puede contener
cualquier carcter alfanumrico, pero no debe comenzar con un valor numrico. Por ejemplo:
Label1:
Es perfectamente vlido, sin embargo:
1LABEL:
Se producir un error de sintaxis porque las etiquetas se inician con el valor 1. Una
etiqueta que contenga ms de 32 caracteres producir un error de sintaxis sealando la
etiqueta de reincidencia. Tambin se permite caracteres como parte de la etiqueta. Esto
ayuda a crear ms nombres de etiqueta descriptiva. Por ejemplo:
THISISALABEL: No tiene la misma claridad de significado como: THIS_IS_A_LABEL:
Variables: Las variables se utilizan para almacenar datos temporalmente o para mantener
nmeros que se utilizarn en los clculos. El nmero de variables que pueden ser utilizados
en un programa depende de la memoria RAM del microcontrolador, la arquitectura del
Microcontrolador, la parte de la memoria RAM, la memoria del programa.
Smbolos y grficos
Un diagrama de flujo se construye con unos
smbolos grficos especiales que representan
acciones, funciones, y equipamiento usado
para lograr un resultado especfico.
CONFIGURAR MEMORIA
BUS I2C ------SCL_Pin = PORTA.7
SDA_Pin = PORTA.6
CONFIGURAR
VARIABLES
Tecla
var
Dim tecla
Dim cont2
Dim cont1
CONFIGURAR LCD
Declare
Declare
Declare
Declare
Declare
Declare
LCD_Type = 0
LCD_DTPin = PORTD.0
LCD_ENPin = PORTD.5
LCD_RSPin = PORTD.4
LCD_Interface = 4
LCD_Lines = 2
TRISA.0=1
'declaro
TRISA=%11111111 'declaro
TRISA=$FF
'declaro
TRISA=255
'declaro
CONFIGURAR UNA SALIDA
que
que
que
que
el
el
el
el
puerto
puerto
puerto
puerto
A
A
A
A
es
es
es
es
Output PORTC.7
TRISA=0
TRISA.0=0
TRISA=%00000000
TRISA=$0
que
que
que
que
que
el
el
el
el
el
puerto
puerto
puerto
puerto
puerto
C
A
A
A
A
pin.7 es salida
es salida
es salida pero solo el pin.0
es salida
es salida
'declaro
'declaro
'declaro
'declaro
'declaro
CONFIGURACION COMBINADA
TRISA=%00001111 'declaro que el puerto A ser: entrada los pines
TRISA=$F
'declaro que el puerto A ser: entrada los pines
TRISA=15
'declaro que el puerto A ser: entrada los pines
0,1,2,3
0,1,2,3
0,1,2,3
y salida 4,5,6,7
y salida 4,5,6,7
y salida 4,5,6,7
ACTIVAR PUERTO
High xx8
Low xx8
Low PORTB
High PORTB
PORTB=0
PORTB.0=0
PORTB=%00000000
PORTB=1
PORTB.0=1
PORTB=7
PORTB=3
PORTB=$F
PORTB=$3F
PORTB=%11111111
'el
'el
'el
'el
'el
'el
'el
'el
'el
'el
'el
'el
puerto
puerto
puerto
puerto
puerto
puerto
puerto
puerto
puerto
puerto
puerto
puerto
b
b
b
b
b
b
b
b
b
b
b
b
ACTIVAR ESTACION
WRD
por
10
2
100
'resolucin
'CLK options are 0, 1, 2, 3 (0-2 are based on internal cycles)
'tiempo de muestreo
ADCON1 = %10000000
' Setup Del registro ADCON1, AN1 / RA1 es anlogo
Mueva la posicin del cursor en la pantalla LCD para una lnea y posicin determinada.
DIM Line as BYTE
DIM Xpos as BYTE
Line = 2
Xpos = 1
CLS
PRINT "HELLO"
' Display LCD
CURSOR Line , Xpos ' line 2, position 1
ACTIVAR POR BUCLE
gg: ' etiqueta princial, ejecuta una rutina
PORTD.2=1
DelayMS 200
PORTD.2=0
DelayMS 200
GoTo gg
' termina la rutina y regresa a la etiqueta
``````````````````````````````````````````````````````````````````
LOOP:
LED = 1
' First LED on
DelayMS 300
' Delay for .3 seconds
For SCAN = 1 To 7
' Go through For..Next loop 7 times
LED = LED << 1
' Shift on LED, one to left
DelayMS 300
' Delay for .3 seconds
Next
' Close the SCAN loop
GoTo LOOP
' Go back to loop and blink LED forever
````````````````````````````````````````````````````````````````````
m3:
For n=1 To 50 Step 2
PulsOut PORTD.0,2500
DelayMS 10
Next
End
ACTIVAR TEXTO EN UN LCD
Print At 1,1, "
DelayMS 5000
ACTIVAR ESTACION
"
CODIGOS DEC,HEX.BIN
Dec
Hex
Oct
Bin
Dec
Hex
Oct
Bin
Dec
Hex
Oct
Bin
Dec
Hex
Oct
Bin
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
000
001
002
003
004
005
006
007
010
011
012
013
014
015
016
017
00000000
00000001
00000010
00000011
00000100
00000101
00000110
00000111
00001000
00001001
00001010
00001011
00001100
00001101
00001110
00001111
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
10
11
12
13
14
15
16
17
18
19
1A
1B
1C
1D
1E
1F
020
021
022
023
024
025
026
027
030
031
032
033
034
035
036
037
00010000
00010001
00010010
00010011
00010100
00010101
00010110
00010111
00011000
00011001
00011010
00011011
00011100
00011101
00011110
00011111
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
20
21
22
23
24
25
26
27
28
29
2A
2B
2C
2D
2E
2F
040
041
042
043
044
045
046
047
050
051
052
053
054
055
056
057
00100000
00100001
00100010
00100011
00100100
00100101
00100110
00100111
00101000
00101001
00101010
00101011
00101100
00101101
00101110
00101111
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
30
31
32
33
34
35
36
37
38
39
3A
3B
3C
3D
3E
3F
060
061
062
063
064
065
066
067
070
071
072
073
074
075
076
077
00110000
00110001
00110010
00110011
00110100
00110101
00110110
00110111
00111000
00111001
00111010
00111011
00111100
00111101
00111110
00111111
Dec
Hex
Oct
Bin
Dec
Hex
Oct
Bin
Dec
Hex
Oct
Bin
Dec
Hex
Oct
Bin
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
40
41
42
43
44
45
46
47
48
49
4A
4B
4C
4D
4E
4F
100
101
102
103
104
105
106
107
110
111
112
113
114
115
116
117
01000000
01000001
01000010
01000011
01000100
01000101
01000110
01000111
01001000
01001001
01001010
01001011
01001100
01001101
01001110
01001111
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
50
51
52
53
54
55
56
57
58
59
5A
5B
5C
5D
5E
5F
120
121
122
123
124
125
126
127
130
131
132
133
134
135
136
137
01010000
01010001
01010010
01010011
01010100
01010101
01010110
01010111
01011000
01011001
01011010
01011011
01011100
01011101
01011110
01011111
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
60
61
62
63
64
65
66
67
68
69
6A
6B
6C
6D
6E
6F
140
141
142
143
144
145
146
147
150
151
152
153
154
155
156
157
01100000
01100001
01100010
01100011
01100100
01100101
01100110
01100111
01101000
01101001
01101010
01101011
01101100
01101101
01101110
01101111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
70
71
72
73
74
75
76
77
78
79
7A
7B
7C
7D
7E
7F
160
161
162
163
164
165
166
167
170
171
172
173
174
175
176
177
01110000
01110001
01110010
01110011
01110100
01110101
01110110
01110111
01111000
01111001
01111010
01111011
01111100
01111101
01111110
01111111
Dec
Hex
Oct
Bin
Dec
Hex
Oct
Bin
Dec
Hex
Oct
Bin
Dec
Hex
Oct
Bin
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
80
81
82
83
84
85
86
87
88
89
8A
8B
8C
8D
8E
8F
200
201
202
203
204
205
206
207
210
211
212
213
214
215
216
217
10000000
10000001
10000010
10000011
10000100
10000101
10000110
10000111
10001000
10001001
10001010
10001011
10001100
10001101
10001110
10001111
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
90
91
92
93
94
95
96
97
98
99
9A
9B
9C
9D
9E
9F
220
221
222
223
224
225
226
227
230
231
232
233
234
235
236
237
10010000
10010001
10010010
10010011
10010100
10010101
10010110
10010111
10011000
10011001
10011010
10011011
10011100
10011101
10011110
10011111
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
AA
AB
AC
AD
AE
AF
240
241
242
243
244
245
246
247
250
251
252
253
254
255
256
257
10100000
10100001
10100010
10100011
10100100
10100101
10100110
10100111
10101000
10101001
10101010
10101011
10101100
10101101
10101110
10101111
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
B0
B1
B2
B3
B4
B5
B6
B7
B8
B9
BA
BB
BC
BD
BE
BF
260
261
262
263
264
265
266
267
270
271
272
273
274
275
276
277
10110000
10110001
10110010
10110011
10110100
10110101
10110110
10110111
10111000
10111001
10111010
10111011
10111100
10111101
10111110
10111111
Dec
Hex
Oct
Bin
Dec
Hex
Oct
Bin
Dec
Hex
Oct
Bin
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
C0
C1
C2
C3
C4
C5
C6
C7
C8
C9
CA
CB
CC
CD
CE
CF
300
301
302
303
304
305
306
307
310
311
312
313
314
315
316
317
11000000
11000001
11000010
11000011
11000100
11000101
11000110
11000111
11001000
11001001
11001010
11001011
11001100
11001101
11001110
11001111
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
D0
D1
D2
D3
D4
D5
D6
D7
D8
D9
DA
DB
DC
DD
DE
DF
320
321
322
323
324
325
326
327
330
331
332
333
334
335
336
337
11010000
11010001
11010010
11010011
11010100
11010101
11010110
11010111
11011000
11011001
11011010
11011011
11011100
11011101
11011110
11011111
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
E0
E1
E2
E3
E4
E5
E6
E7
E8
E9
EA
EB
EC
ED
EE
EF
340
341
342
343
344
345
346
347
350
351
352
353
354
355
356
357
11100000
11100001
11100010
11100011
11100100
11100101
11100110
11100111
11101000
11101001
11101010
11101011
11101100
11101101
11101110
11101111
Dec
Hex
Oct
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
F0
F1
F2
F3
F4
F5
F6
F7
F8
F9
FA
FB
FC
FD
FE
FF
360
361
362
363
364
365
366
367
370
371
372
373
374
375
376
377
Bin
11110000
11110001
11110010
11110011
11110100
11110101
11110110
11110111
11111000
11111001
11111010
11111011
11111100
11111101
11111110
11111111
CODIGO ASCII
ASCII
Hex
Smbolo
ASCII
Hex
Smbolo
ASCII
Hex
Smbolo
ASCII
Hex
Smbolo
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
NUL
SOH
STX
ETX
EOT
ENQ
ACK
BEL
BS
TAB
LF
VT
FF
CR
SO
SI
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
10
11
12
13
14
15
16
17
18
19
1A
1B
1C
1D
1E
1F
DLE
DC1
DC2
DC3
DC4
NAK
SYN
ETB
CAN
EM
SUB
ESC
FS
GS
RS
US
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
20
21
22
23
24
25
26
27
28
29
2A
2B
2C
2D
2E
2F
(espacio)
!
"
#
$
%
&
'
(
)
*
+
,
.
/
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
30
31
32
33
34
35
36
37
38
39
3A
3B
3C
3D
3E
3F
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
ASCII
Hex
Smbolo
ASCII
Hex
Smbolo
ASCII
Hex
Smbolo
ASCII
Hex
Smbolo
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
40
41
42
43
44
45
46
47
48
49
4A
4B
4C
4D
4E
4F
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
50
51
52
53
54
55
56
57
58
59
5A
5B
5C
5D
5E
5F
P
Q
R
S
T
U
V
W
X
Y
Z
[
\
]
^
_
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
60
61
62
63
64
65
66
67
68
69
6A
6B
6C
6D
6E
6F
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
70
71
72
73
74
75
76
77
78
79
7A
7B
7C
7D
7E
7F
Programacin I
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~
Device 16F870
Xtal = 20
TRISB=0
PORTB=0
E:
PORTB.0=1
DelayMS 1000
PORTB.0=0
DelayMS 1000
1SEG
End
'microcontrolador
'velocidad
' DECLARO PUERTO B SALIDA
' ASEGURO EL PUERTO B LOW
'ETIQUETA
'ENVIO UN NIVEL ALTO AL PIN 0
' EL LED SE MANTIENE ACTIVO POR 1SEG
'ENVIO UN NIVEL BAJO AL PIN 0
' EL LED SE MANTIENE APAGADO POR
U1
9
10
1
'FIN DE LA RUTINA
2
3
4
5
6
7
OSC1/CLKIN
OSC2/CLKOUT
MCLR/Vpp/THV
RB0/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD
RA0/AN0
RA1/AN1
RA2/AN2/VREFRA3/AN3/VREF+
RA4/T0CKI
RA5/AN4
RC0/T1OSO/T1CKI
RC1/T1OSI
RC2/CCP1
RC3
RC4
RC5
RC6/TX/CK
RC7/RX/DT
21
22
23
24
25
26
27
28
LED
11
12
13
14
15
16
17
18
PIC16F870
'microcontrolador
'velocidad
' DECLARO PUERTO B SALIDA
' ASEGURO EL PUERTO B LOW
'ETIQUETA
'ENVIO UN NIVEL ALTO AL PIN 0
' EL LED SE MANTIENE ACTIVO POR 1SEG
'ENVIO UN NIVEL BAJO AL PIN 0
' EL LED SE MANTIENE APAGADO POR 1SEG
'IR A ETIQUETA
'microcontrolador
'velocidad
' DECLARO PUERTO B SALIDA
' ASEGURO EL PUERTO B LOW
'ETIQUETA
'ENVIO UN NIVEL ALTO AL PIN 5
' EL LED SE MANTIENE ACTIVO POR 100mSEG
'ENVIO UN NIVEL BAJO AL PIN 5
' EL LED SE MANTIENE APAGADO POR 100mSEG
' IR AL COMIENZO DEL PROGRAMA
U1
9
10
1
2
3
4
5
6
7
9
10
1
2
3
4
5
6
7
OSC1/CLKIN
OSC2/CLKOUT
MCLR/Vpp/THV
RB0/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD
RA0/AN0
RA1/AN1
RA2/AN2/VREFRA3/AN3/VREF+
RA4/T0CKI
RA5/AN4
RC0/T1OSO/T1CKI
RC1/T1OSI
RC2/CCP1
RC3
RC4
U1
RC5
RC6/TX/CK
OSC1/CLKIN
RB0/INT
RC7/RX/DT
OSC2/CLKOUT
RB1
MCLR/Vpp/THV
RB2
PIC16F870
RB3/PGM
RA0/AN0
RB4
RA1/AN1
RB5
RA2/AN2/VREFRB6/PGC
RA3/AN3/VREF+
RB7/PGD
RA4/T0CKI
RA5/AN4
RC0/T1OSO/T1CKI
RC1/T1OSI
RC2/CCP1
RC3
RC4
RC5
RC6/TX/CK
RC7/RX/DT
PIC16F870
21
22
23
24
25
26
27
28
11
12
13
14
15
16
17
21
18
22
23
24
25
26
27
28
11
12
13
14
15
16
17
18
D1
LED
D1
LED
Device 16F870
Xtal = 20
TRISC=0
PORTC=0
E:
PORTC.0=1
DelayMS 50
PORTC.0=0
DelayMS 50
Goto E
'microcontrolador
'velocidad
' DECLARO PUERTO C SALIDA
' ASEGURO EL PUERTO C LOW
'ETIQUETA
'ENVIO UN NIVEL ALTO AL PIN 5
' EL LED SE MANTIENE ACTIVO POR 50mSEG
'ENVIO UN NIVEL BAJO AL PIN 5
' EL LED SE MANTIENE APAGADO POR 50mSEG
' IR AL COMIENZO DEL PROGRAMA
OTRAS FORMAS
inicio:
High led
pause 1000
Low led
pause 1000
GoTo inicio
End
inicio:
High PORTB.0
pause 1000
Low PORTB.0
pause 1000
GoTo inicio
End
``````````````````````````````````````````````````````````````````````
inicio1:
PORTB.0 = 1
pause 1000
PORTB.0 = 0
pause 1000
GoTo inicio
End
inicio:
High 0:Low 1:Low 2:Low 3:Low 4: High 5
DelayMS 1000
High 0:High 1:Low 2:Low 3:Low 4: High 5
DelayMS 1000
GoTo inicio
End
inicio:
PORTB = %00100001
delayms 1000
PORTB = %00100011
delayms 1000
GoTo inicio
End
Actividades de programacin I
U1
9
10
1
2
3
4
5
6
7
OSC1/CLKIN
OSC2/CLKOUT
MCLR/Vpp/THV
RB0/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD
RA0/AN0
RA1/AN1
RA2/AN2/VREFRA3/AN3/VREF+
RA4/T0CKI
RA5/AN4
RC0/T1OSO/T1CKI
RC1/T1OSI
RC2/CCP1
RC3
RC4
RC5
RC6/TX/CK
RC7/RX/DT
21
22
23
24
25
26
27
28
U2
11
12
13
14
15
16
17
18
1
2
3
4
5
6
7
8
9
10
PIC16F870
20
19
18
17
16
15
14
13
12
11
LED-BARGRAPH-GRN
U1
9
10
1
2
3
4
5
6
7
OSC1/CLKIN
OSC2/CLKOUT
MCLR/Vpp/THV
RB0/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD
RA0/AN0
RA1/AN1
RA2/AN2/VREFRA3/AN3/VREF+
RA4/T0CKI
RA5/AN4
RC0/T1OSO/T1CKI
RC1/T1OSI
RC2/CCP1
RC3
RC4
RC5
RC6/TX/CK
RC7/RX/DT
21
22
23
24
25
26
27
28
11
12
13
14
15
16
17
18
PIC16F870
U2
1
2
3
4
5
6
7
8
9
10
20
19
18
17
16
15
14
13
12
11
LED-BARGRAPH-GRN
U3
U1
9
10
1
2
3
4
5
6
7
OSC1/CLKIN
OSC2/CLKOUT
MCLR/Vpp/THV
RB0/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD
RA0/AN0
RA1/AN1
RA2/AN2/VREFRA3/AN3/VREF+
RA4/T0CKI
RA5/AN4
RC0/T1OSO/T1CKI
RC1/T1OSI
RC2/CCP1
RC3
RC4
RC5
RC6/TX/CK
RC7/RX/DT
21
22
23
24
25
26
27
28
11
12
13
14
15
16
17
18
PIC16F870
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
U2
LED
LED
4. DESARROLLE
Programacin II
20
19
18
17
16
15
14
13
12
11
20
19
18
17
16
15
14
13
12
11
Resistor
Resistor
9
10
1
OSC1/CLKIN
OSC2/CLKOUT
MCLR/Vpp/THV
2
3
4
5
6
7
R1
10k
RB0/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD
RA0/AN0
RA1/AN1
RA2/AN2/VREFRA3/AN3/VREF+
RA4/T0CKI
RA5/AN4
RC0/T1OSO/T1CKI
RC1/T1OSI
RC2/CCP1
RC3
RC4
RC5
RC6/TX/CK
RC7/RX/DT
21
22
23
24
25
26
27
28
LED
El circuito,
se a complementado
con un pulsador, y una resistencia,
enviaran un estado lgico al PIC,
en este caso el pulsador enviara un
1
al
pulsar,
sin
pulsar
la
resistencia mantiene un estado 0
por estar a tierra, si no esta la
resistencia siempre existir un 1.
11
12
13
14
15
16
17
18
PIC16F870
Resistor
Resistor
D1
R1
10k
U1
9
10
1
2
3
4
5
6
7
OSC1/CLKIN
OSC2/CLKOUT
MCLR/Vpp/THV
RB0/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD
RA0/AN0
RA1/AN1
RA2/AN2/VREFRA3/AN3/VREF+
RA4/T0CKI
RA5/AN4
RC0/T1OSO/T1CKI
RC1/T1OSI
RC2/CCP1
RC3
RC4
RC5
RC6/TX/CK
RC7/RX/DT
PIC16F870
21
22
23
24
25
26
27
28
11
12
13
14
15
16
17
18
LED
El circuito, se a complementado
con
un
pulsador,
y
una
resistencia, enviaran un estado
lgico al PIC, en este caso el
pulsador enviara un 0 al pulsar,
sin
pulsar
la
resistencia
mantiene un estado 1 por estar a
+5vcc, si no esta la resistencia
siempre existir un 1.
Estos circuitos, sern capas de
relacionar
estados
externos,
actuando como condicionales para
la ejecucin de los programas.
Vea: IF_____Then______Endif
1-ACTIVANDO UN LED, por un pulsador, enviando un1(button)
Device 16F870
Xtal = 20
TRISA=1
TRISB=0
All_Digital= true
PORTB=0
E:
If PORTA.0 = 0 Then
PORTB.0=1
DelayMS 1000
PORTB.0=0
'microcontrolador
'velocidad
'declaro que el puerto A es entrada
' DECLARO PUERTO B SALIDA
' todos los pines del micro son digitales
' ASEGURO EL PUERTO B LOW
'ETIQUETA
'el micro espera un 1 para activar
'ENVIO UN NIVEL ALTO AL PIN 0
' EL LED SE MANTIENE ACTIVO POR 1SEG
'ENVIO UN NIVEL BAJO AL PIN 0
Resistor
D1
Resistor
Device 16F870
'microcontrolador
Xtal = 20
'velocidad
TRISA=1
'declaro que el puerto A es entrada
TRISB=0
' DECLARO PUERTO B SALIDA
All_Digital= true
' todos los pines del micro son digitales
PORTB=0
' ASEGURO EL PUERTO B LOW
E:
'ETIQUETA
If PORTA.0 = 1 Then 'el micro espera un 1 para activar
PORTB.0=1
'ENVIO UN NIVEL ALTO AL PIN 7
DelayMS 1000
' EL LED SE MANTIENE ACTIVO POR 1SEG
PORTB.0=0
'ENVIO UN NIVEL BAJO AL PIN 7
DelayMS 1000
' EL LED SE MANTIENE APAGADO POR 1SEG
EndIf
' si es fin
End
'fin
2-ACTIVANDO UN LED, por un pulsador, enviando un 0 (button)
R1
10k
U1
9
10
1
2
3
4
5
6
7
OSC1/CLKIN
OSC2/CLKOUT
MCLR/Vpp/THV
RB0/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD
RA0/AN0
RA1/AN1
RA2/AN2/VREFRA3/AN3/VREF+
RA4/T0CKI
RA5/AN4
RC0/T1OSO/T1CKI
RC1/T1OSI
RC2/CCP1
RC3
RC4
RC5
RC6/TX/CK
RC7/RX/DT
PIC16F870
21
22
23
24
25
26
27
28
11
12
13
14
15
16
17
18
LED
DelayMS 1000
EndIf
End
D1
U1
9
10
1
10k
Resistor
R1
Resistor
Resistor
Device 16F870
'microcontrolador
Xtal = 20
'velocidad
TRISA.0=1
'declaro que el puerto A pin 0 es entrada
TRISA.1=1
'declaro que el puerto A pin 1 es entrada
TRISB=0
' DECLARO PUERTO B SALIDA
All_Digital= true
' todos los pines del micro son digitales
PORTB=0
' ASEGURO EL PUERTO B LOW
E:
'ETIQUETA
If PORTA.0 = 1 AND PORTA.1 = 1 THEN 'los 2 sw activaran el led
PORTB.0=1
'ENVIO UN NIVEL ALTO AL PIN 0
DelayMS 1000
' EL LED SE MANTIENE ACTIVO POR 1SEG
PORTB.0=0
'ENVIO UN NIVEL BAJO AL PIN 0
DelayMS 1000
' EL LED SE MANTIENE APAGADO POR 1SEG
EndIf
' si es fin
End
'fin
Resistor
2
3
4
5
6
7
R2
10k
Device 16F870
Xtal = 20
TRISA=1
TRISB=0
All_Digital= true
PORTB=0
button2
led
'microcontrolador
'velocidad
'declaro que el puerto A es entrada
' DECLARO PUERTO B SALIDA
' declaro que todos los pines del micro son digitales
' ASEGURO EL PUERTO B LOW
E:
'ETIQUETA
If PORTA.0 = 0 And PORTA.1 = 0 Then E' estado regreza a etiqueta principal
If PORTA.0 = 0 And PORTA.1 = 1 Then
PORTB.0=1
'ENVIO UN NIVEL ALTO
DelayMS 1000
' EL LED SE MANTIENE
PORTB.0=0
'ENVIO UN NIVEL BAJO
DelayMS 1000
' EL LED SE MANTIENE
EndIf
AL PIN 0
ACTIVO POR 1SEG
AL PIN 0
APAGADO POR 1SEG
AL PIN 0
ACTIVO POR 1SEG
AL PIN 0
APAGADO POR 1SEG
AL PIN 0
ACTIVO POR 1SEG
AL PIN 0
APAGADO POR 1SEG
button2
0
led
0
RB0/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD
RA0/AN0
RA1/AN1
RA2/AN2/VREFRA3/AN3/VREF+
RA4/T0CKI
RA5/AN4
RC0/T1OSO/T1CKI
RC1/T1OSI
RC2/CCP1
RC3
RC4
RC5
RC6/TX/CK
RC7/RX/DT
PIC16F870
OSC1/CLKIN
OSC2/CLKOUT
MCLR/Vpp/THV
21
22
23
24
25
26
27
28
11
12
13
14
15
16
17
18
LED
Device 16F870
Xtal = 20
TRISA=1
TRISB=0
All_Digital= true
PORTB=0
E:
If PORTA.0
If PORTA.0
If PORTA.0
If PORTA.0
GoTo E
=
=
=
=
0
0
1
1
'microcontrolador
'velocidad
'declaro que el puerto A es entrada
' DECLARO PUERTO B SALIDA
' declaro que todos los pines del micro son digitales
' ASEGURO EL PUERTO B LOW
'ETIQUETA
And PORTA.1
And PORTA.1
And PORTA.1
And PORTA.1
=
=
=
=
0
1
1
1
activo:
PORTB.0=1
DelayMS 1000
PORTB.0=0
DelayMS 1000
GoTo E
AL PIN 0
ACTIVO POR 1SEG
AL PIN 0
APAGADO POR 1SEG
Actividades de programacin II
D1
U1
9
10
1
OSC1/CLKIN
OSC2/CLKOUT
MCLR/Vpp/THV
10k
Resistor
Resistor
10k
R3
Resistor
R4
Resistor
Resistor
Resistor
2
3
4
5
6
7
RB0/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD
RA0/AN0
RA1/AN1
RA2/AN2/VREFRA3/AN3/VREF+
RA4/T0CKI
RA5/AN4
RC0/T1OSO/T1CKI
RC1/T1OSI
RC2/CCP1
RC3
RC4
RC5
RC6/TX/CK
RC7/RX/DT
R2
10k
21
22
23
24
25
26
27
28
LED
D2
11
12
13
14
15
16
17
18
LED
D3
LED
PIC16F870
D1
U1
9
10
1
10k
Resistor
Resistor
Resistor
10k
R2
Resistor
10k
R3
Resistor
R4
Resistor
Resistor
2
3
4
5
6
7
Resistor
R1
10k
OSC1/CLKIN
OSC2/CLKOUT
MCLR/Vpp/THV
RB0/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD
RA0/AN0
RA1/AN1
RA2/AN2/VREFRA3/AN3/VREF+
RA4/T0CKI
RA5/AN4
RC0/T1OSO/T1CKI
RC1/T1OSI
RC2/CCP1
RC3
RC4
RC5
RC6/TX/CK
RC7/RX/DT
PIC16F870
21
22
23
24
25
26
27
28
11
12
13
14
15
16
17
18
LED
D2
LED
D3
LED
D4
LED
Programacin III
OSC1/CLKIN
RB0/INT
10
OSC2/CLKOUT
RB1
Device 16F870
1
MCLR/Vpp/THV
RB2
RB3/PGM
Dim num As Byte
2
RA0/AN0
RB4
3
RA1/AN1
RB5
Dim vec As Byte
4
RA2/AN2/VREFRB6/PGC
5
RA3/AN3/VREF+
RB7/PGD
TRISB = 0
6
RA4/T0CKI
7
RA5/AN4
RC0/T1OSO/T1CKI
prog:
RC1/T1OSI
RC2/CCP1
For vec = 0 To 9
RC3
RC4
LookUp vec, [191,134,219,207,230,237,253,135,255,239], num
RC5
RC6/TX/CK
PORTB=num
RC7/RX/DT
DelayMS 500
PIC16F870
Next vec
GoTo prog
End
21
22
23
24
25
26
27
28
11
12
13
14
15
16
17
18
2. ACTIVE UN DISPLAY DE CATODO COMUN, FORMANDO LOS NUMEROS DEL 0 AL 9 (Baja - sube)
U1
Device 16F870
9
OSC1/CLKIN
RB0/INT
10
OSC2/CLKOUT
RB1
Dim vec As Byte
1
MCLR/Vpp/THV
RB2
RB3/PGM
Dim num As Byte
2
RA0/AN0
RB4
3
RA1/AN1
RB5
4
TRISB = 0
RA2/AN2/VREFRB6/PGC
5
RA3/AN3/VREF+
RB7/PGD
6
prog:
RA4/T0CKI
7
RA5/AN4
RC0/T1OSO/T1CKI
For vec=0 To 9
RC1/T1OSI
RC2/CCP1
LookUp vec, [191,134,219,207,230,237,253,135,255,239], num
RC3
RC4
RC5
PORTB=num
RC6/TX/CK
RC7/RX/DT
DelayMS 500
PIC16F870
Next vec
For vec=9 To 0 Step -1
LookUp vec,[191,134,219,207,230,237,253,135,255,239],num
PORTB=num
DelayMS 500
Next vec
GoTo prog
End
21
22
23
24
25
26
27
28
11
12
13
14
15
16
17
18
3. Contador con un display pero ahora con un vector en el cual almacenaremos los
valores correspondientes a cada numero (Para los dos ejemplos el Display es de
U1
nodo Comn)
9
21
OSC1/CLKIN
RB0/INT
OSC2/CLKOUT
ACTIVE UN DISPLAY DE ANODO COMUN, FORMANDO 101LOS
NUMEROS DELRB10 22
AL 9 con vectores
23
MCLR/Vpp/THV
RB2
24
Device 16F870
RB3/PGM
2
25
RA0/AN0
RB4
3
26
Dim vec[10] As Byte
RA1/AN1
RB5
4
27
5
6
7
RA2/AN2/VREFRB6/PGC
RA3/AN3/VREF+
RB7/PGD
RA4/T0CKI
RA5/AN4
RC0/T1OSO/T1CKI
RC1/T1OSI
RC2/CCP1
RC3
RC4
RC5
RC6/TX/CK
RC7/RX/DT
PIC16F870
28
11
12
13
14
15
16
17
18
Device 16F870
Dim vec[10] As Byte
Dim pos As Byte
TRISA = %00000011
TRISB = 0
CMCON=7
vec=0
PORTB=64
inicio:
If PORTA.0=0 Then
vec=vec+1
LookUp vec,[0,191,134,219,207,230,237,253,135,255,239],num
PORTB=num
If vec>=10 Then
vec=0
EndIf
pause 200
EndIf
If PORTA.1=0 Then
vec=vec-1
LookUp vec,[0,191,134,219,207,230,237,253,135,255,239],num
PORTB=num
If vec<=1 Then
vec=11
EndIf
pause 200
EndIf
GoTo inicio
End
U1
9
10
1
2
3
4
5
6
7
U2
OSC1/CLKIN
OSC2/CLKOUT
MCLR/Vpp/THV
RB0/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD
RA0/AN0
RA1/AN1
RA2/AN2/VREFRA3/AN3/VREF+
RA4/T0CKI
RA5/AN4
RC0/T1OSO/T1CKI
RC1/T1OSI
RC2/CCP1
RC3
RC4
RC5
RC6/TX/CK
RC7/RX/DT
PIC16F870
21
22
23
24
25
26
27
28
11
12
13
14
15
16
17
18
7
1
2
6
A
B
C
D
3
4
5
LT
BI
LE/STB
13
12
11
10
9
15
14
QA
QB
QC
QD
QE
QF
QG
4511
U3
1
2
3
4
5
6
7
8
1B
2B
3B
4B
5B
6B
7B
8B
COM
1C
2C
3C
4C
5C
6C
7C
8C
10
18
17
16
15
14
13
12
11
ULN2803
'El codigo, esta formado por dos bucles, el primero que es de donde a donde va el
contador (0-99) y el segundo bucle es el tiempo que quieres que permanesca
visualizado el valor en el display, utilizo la funcion DIG es para tomar el
digito correspondiente, y le sumo 16 32 para activar el display para formar el
nmero, es importante destcar que en este circuito se trabaja con el 4511 un
decoder binario decimal.
Device = 16F870
Xtal = 20
Dim i As Byte
Dim j As Byte
Dim unidad As Byte
Dim decena As Byte
All_Digital = true
TRISB = 0
TRISA = 1
xx:
If PORTA.0 = 1 Then lod
If PORTA.0 = 0 Then xx
GoTo xx
lod:
For i=0 To 99
For j=0 To 99
unidad = i Dig 0
PORTB = unidad + 16
DelayMS 5
decena = i Dig 1
PORTB= decena + 32
DelayMS 5
Next j
Next i
GoTo xx
End
U1
9
10
1
2
3
4
5
6
7
OSC1/CLKIN
OSC2/CLKOUT
MCLR/Vpp/THV
U2
RB0/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD
RA0/AN0
RA1/AN1
RA2/AN2/VREFRA3/AN3/VREF+
RA4/T0CKI
RA5/AN4
RC0/T1OSO/T1CKI
RC1/T1OSI
RC2/CCP1
RC3
RC4
RC5
RC6/TX/CK
RC7/RX/DT
21
22
23
24
25
26
27
28
11
12
13
14
15
16
17
18
PIC16F870
7
1
2
6
A
B
C
D
3
4
5
LT
BI
LE/STB
13
12
11
10
9
15
14
QA
QB
QC
QD
QE
QF
QG
4511
U3
1
2
3
4
5
6
7
8
1B
2B
3B
4B
5B
6B
7B
8B
10
18
17
16
15
14
13
12
11
COM
1C
2C
3C
4C
5C
6C
7C
8C
ULN2803
LCD1
Programacin VI
16_X_2_LCD
Device 16F870
PIC16F870
11
12
13
14
15
16
17
18
D0
D1
D2
D3
D4
D5
D6
D7
7
8
9
10
11
12
13
14
RA0/AN0
RA1/AN1
RA2/AN2/VREFRA3/AN3/VREF+
RA4/T0CKI
RA5/AN4
RC0/T1OSO/T1CKI
RC1/T1OSI
RC2/CCP1
RC3
RC4
RC5
RC6/TX/CK
RC7/RX/DT
21
22
23
24
25
26
27
28
RS
RW
E
RB0/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD
4
5
6
2
3
4
5
6
7
OSC1/CLKIN
OSC2/CLKOUT
MCLR/Vpp/THV
1
2
3
CONFIGURANDO UN LCD
VSS
VDD
VEE
U1
9
10
1
Xtal 20
LCD
CO VAR Byte
Declare LCD_Type = 0
Declare LCD_DTPin = PORTC.0
Declare LCD_ENPin = PORTC.5
Declare LCD_RSPin = PORTC.4
Declare LCD_Interface = 4
Declare LCD_Lines = 2
All_Digital= true
D:
Print At 1,1, "
ACTIVAR ESTACION
DelayMS 5000
Print At 2,2, "
ACTIVAR BOMBA 1
DelayMS 5000
GoTo D
"
"
CONFIGURANDO un Lm35
El LM35 es un sensor de temperatura con una precisin
calibrada de 1C y un rango que abarca desde -55 a
+150C.
El sensor se presenta en diferentes encapsulados pero
el mas comn es el to-92 3 patas, dos de ellas para
alimentarlo y la tercera nos entrega un valor de
tensin proporcional a la temperatura medida por el
dispositivo. Con el LM35 sobre la mesa las patillas
hacia nosotros y las letras del encapsulado hacia
arriba tenemos que de izquierda a derecha los pines
son: VCC - Vout - GND.
La salida es lineal y equivale a 10mV/C por lo tanto:
+1500mV = 150C
+250mV = 25C
-550mV = -55C
Device 16F877A
Declare XTAL 20
Declare LCD_TYPE 0 ' Tipo LCD Alpha numrico
Declare LCD_DTPIN PORTB.4 ' The control bits B4,B5,B6,B7
Declare LCD_RSPIN PORTB.2 ' RS pin on B2
Declare LCD_ENPIN PORTB.3 ' E pin on B3
Declare LCD_INTERFACE 4 ' Interface method is 4 bit
Dim ADC_Result As Float
Dim Temp_Float As Float
ADCON1 = %10000000 ' Set all to analogue inputs (PORTA)
TRISA = $FF ' Declare porta as all inputs
DelayMS 150
Cls
Main:
ADC_Result = ADIn 0
Temp_Float = ADC_Result * 5000 / 1023 ' to reduce decimal error
Print At 1,1, DEC1 Temp_Float , 0, "C "
Return
LCD1
16_X_2_LCD
R1
10k
PIC16F870
11
12
13
14
15
16
17
18
RS
RW
E
D0
D1
D2
D3
D4
D5
D6
D7
7
8
9
10
11
12
13
14
RA0/AN0
RA1/AN1
RA2/AN2/VREFRA3/AN3/VREF+
RA4/T0CKI
RA5/AN4
RC0/T1OSO/T1CKI
RC1/T1OSI
RC2/CCP1
RC3
RC4
RC5
RC6/TX/CK
RC7/RX/DT
21
22
23
24
25
26
27
28
4
5
6
RB0/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD
1
2
3
2
3
4
5
6
7
OSC1/CLKIN
OSC2/CLKOUT
MCLR/Vpp/THV
VSS
VDD
VEE
U1
9
10
1
Cuente el
nmero de impulsos que aparecen en
el pin durante el perodo, y
guardar el resultado en la variable
1. DESARROLLE UN CONTADOR Y
REGISTRE LOS RESULTADOS EN UN LCD
2.
DESARROLLE UN FRECUENCIMETRO Y
REGISTRE LOS RESULTADOS EN UN LCD
LCD1
16_X_2_LCD
Un
2
3
4
5
6
7
R1
10k
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD
RA0/AN0
RA1/AN1
RA2/AN2/VREFRA3/AN3/VREF+
RA4/T0CKI
RA5/AN4
RC0/T1OSO/T1CKI
RC1/T1OSI
RC2/CCP1
RC3
RC4
RC5
RC6/TX/CK
RC7/RX/DT
21
22
23
24
25
26
27
28
7
8
9
10
11
12
13
14
RS
RW
E
VSS
VDD
VEE
4
5
6
1
2
3
D0
D1
D2
D3
D4
D5
D6
D7
RB0/INT
PIC16F870
RS
RW
E
OSC1/CLKIN
OSC2/CLKOUT
MCLR/Vpp/THV
LCD1
7
8
9
10
11
12
13
14
U1
9
10
1
RA0/AN0
RA1/AN1
RA2/AN2/VREFRA3/AN3/VREF+
RA4/T0CKI
11
RA5/AN4
RC0/T1OSO/T1CKI
12
16_X_2_LCD
RC1/T1OSI
13
RC2/CCP1
14
RC3
15
RC4
16
RC5
17
RC6/TX/CK
18
RC7/RX/DT
VSS
VDD
VEE
10k
21
22
23
24
25
26
27
28
4
5
6
R1
RB0/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD
1
2
3
2
3
4
5
6
7
OSC1/CLKIN
OSC2/CLKOUT
MCLR/Vpp/THV
D0
D1
D2
D3
D4
D5
D6
D7
U1
9
10
1
11
12
13
14
15
16
17
18
PIC16F870
PERIMETRO
P= PI * RAIZ 2
Se llama as al aparato que utilizamos para medir la distancia recorrida entre dos puntos,
o el camino recorrido entre dos puntos.
Los odmetros llevan mucho tiempo de existir en su forma mecnica y recientemente, los
dispositivos digitales han empezado a reemplazarlos.
Existen odmetros que miden la distancia en millas as como tambin los hay para medir
kilmetros y metros, algunos tienen la capacidad de borrarse (parciales) y ponerse en cero
mientras que otros son permanentes, los automviles generalmente traen un odmetro parcial
y uno permanente.
LCD1
16_X_2_LCD
1.
R1
10k
PIC16F870
11
12
13
14
15
16
17
18
RS
RW
E
D0
D1
D2
D3
D4
D5
D6
D7
7
8
9
10
11
12
13
14
RA0/AN0
RA1/AN1
RA2/AN2/VREFRA3/AN3/VREF+
RA4/T0CKI
RA5/AN4
RC0/T1OSO/T1CKI
RC1/T1OSI
RC2/CCP1
RC3
RC4
RC5
RC6/TX/CK
RC7/RX/DT
21
22
23
24
25
26
27
28
4
5
6
RB0/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD
1
2
3
2
3
4
5
6
7
OSC1/CLKIN
OSC2/CLKOUT
MCLR/Vpp/THV
VSS
VDD
VEE
U1
9
10
1
DESARROLLE UN TACOMETRO Y
REGISTRE LOS RESULTADOS EN UN
LCD.
Programacin V
ROBOTICA MOVIL
Motor servo
Como se conoce, la posicin de un servo motor est determinada por el ancho del pulso que
se aplica a su pin de control (para el caso de los motores HS-311 el cable amarillo). En el
caso del motor HS-311, la posicin de 0 se consigue con un pulso de 0.5 ms, la posicin
central de 90 con un pulso de 1.5 ms y el extremo de 180 con un pulso de 2.5 ms.Para
controlar la posicin del motor usar la funcin pulsout, cuya sintaxis es:
Pulsout pin, ancho_pulso
La cual genera un ancho de pulso determinado por su segundo parmetro de entrada en el pin
determinado. Por ejemplo:
Dim XX As Byte
TRISB=0
PORTB=0
For XX=1 To 25 Step 1
PulsOut PORTB.0, 150
DelayMS 10
Next
Vamos a programar una secuencia que mantenga al motor en continuo movimiento de un extremo
al otro. Aqu entra el ciclo for-next.
Device 16F628A
XTAL 20
Dim m As Byte
Dim n As Byte
TRISB=0
PORTB=0
For m=50 To 250 Step 1
PulsOut PORTB.0,m
DelayMS 10
Next
For m=250 To 50 Step -1
PulsOut PORTB.0,m
DelayMS 10
Next
Vamos a ir un poco ms adelante, y controlaremos la posicin del motor con dos pulsadores:
uno para girar el motor a una posicin y el otro para llevarlo a la posicin contraria.
Device 16F628A
XTAL 20
CMCON=7
Dim control As PORTB.1
Dim incrementar As PORTA.0 'Pin de pulsador para incremento
Dim disminuir As PORTA.1 'Pin de pulsador para decremento
Dim X As Byte 'x de tamao 256
Dim r As Byte 'y de tamao 256
TRISB=0
PORTB=0
X=150 ; 'Posicin inicial del servo motor
inicio:
PulsOut control,X 'Enva x por el pin portb.1 (control)
GoSub timer 'Subrutina de chequeo del pulsador
GoTo inicio
timer:
If incrementar=0 Then GoSub mas 'Si el p esta a tierra, ir a subr "mas"
If disminuir=0 Then GoSub menos 'Si el p esta a tierra, ir a subr "menos"
Return
mas: 'Subrutina de aumento de posicin
DelayMS 10
X=x+1 ; 'Aumento del pulso de salida
If X>200 Then X=200 'Determina un valor mximo de 200
Return
menos: 'Subrutina de disminucin de posicin
DelayMS 10
X=x-1 'Disminucin del pulso de salida
If X<100 Then X=100 'Determina un valor mnimo de 100
Return
End
USANDO
DEVICE 16F628
DIM Pos as WORD
SYMBOL Pin = PORTA.3
ALL_DIGITAL = ON
' PICmicro
' Servo Posicin
' Alias servo pin
' PORTA TODOS EN FORMA digital
CLS
' LIMPIAR LCD
Pos = 1500
' Centro servo
PORTA = 0
' PORTA low
TRISA = %00000111
' setup porta entrada
MXX:
IF PORTA.0 = 0 AND Pos < 3000 Then Inc Pos '
IF PORTA.1 = 0 Then Pos = 1500
'
IF PORTA.2 = 0 AND Pos > 0 Then Dec Pos
'
SERVO Pin , Pos
DELAYMS 5
' Servo update rate
PRINT AT 1 , 1 , "Posicin=" , Dec Pos , " "
GOTO MXX
0,1 y 2
Mover servo izquierda
Centro servo
Mover servo derecha
Programacin VI
Robtica sensorial
El sensor Pir detector de movimientos por infrarrojos
resulta muy adecuado para su empleo en robots, gracias a
su pequeo tamao y bajo consumo. El sensor incluye una
lente tipo fresnel de plastico que le proporciona un
alcance de 5 metros y un angulo de deteccin de 60 . La
seal de salida es compatible TTL y la alimentacin es
de 5V con un consumo de tan solo 350 uA mientras esta en
reposo. Sus reducidas dimensiones de solo 25 x 35 x 18
mm hacen posible su utilizacin en todo tipo de robots y
dispositivos
sensores.
Interruptor
final de carreras sin palanca muy til como
detector de obstculos. Los finales de carrera son
interruptores muy tiles para detectar posiciones
de palancas, objetos, piezas motorizadas, etc..
Tambin se convierten en la ultima lnea de
defensa en los robots para detectar obstculos.
cdigo abierto. Con estos dos componentes se obtiene un sensor de visin de bajo coste que
es totalmente programable por lo que se puede utilizar en mltiples aplicaciones incluyendo
reconocimiento de formas, deteccin de colores, seguimiento de objetos en movimiento
Actividades de programacin VI
Programacin VII
Configuracin de una interfase grafica en Visual 2008
TRANSMITIRAN UN
DESEADA.
End Class
CODIGO PROTON
Include "modedefs.bas"
Device 16F877A
Xtal 20
Serial_Baud = 9600
Rsout_Pin = PORTC.6
Rsout_Mode = TRUE
Rsout_Pace = 1
Rsin_Pin = PORTC.7
Rsin_Mode = TRUE
Hserial_Baud = 9600
Hserial_RCSTA = %10010000
Hserial_TXSTA = %00100100
Hserial_Clear = On
PORTB=0
All_Digital=true
DIM valor AS Byte
inicio:
HSerIn 1000, inicio, [valor]
If valor = "a" Then PORTB.1=1
If valor = "g" Then PORTB.2=1
If valor = "b" Then PORTB.3=1
If valor = "l" Then PORTB.4=1
Clear valor
GoTo inicio
Comandos y
ADIN
ASM-ENDASM
BOX
BRANCH
BRANCHL
BREAK
BSTART
BStop
BRESTART
Busack
Busin
BUSOUT
BUTTN
Call
CDATA
CIRClE
CLEAR
CLEARBIT
Directivas
CLS
Borrar la pantalla LCD.
CONFIG
Set o configuraciones de programacin Perd mi fusible.
COUNTER
Cuente el nmero de impulsos que ocurren en un PIN.
CREAD
Leer datos de la memoria de cdigo.
CURSOR
Site el cursor en la pantalla LCD.
CWRITE
Escribir datos en cdigo de la memoria.
DATA
Definir inicio del contenido en la memoria.
DEC
Decremento de una variable.
DECLARE
Ajuste los parmetros de la coleccin de rutina.
DELAYMS
PAUSA (resolucin 1mSec).
DELAYUS
PAUSA (resolucin 1uSec).
DEVICE
Elija el tipo de PIC micro.
DIG
Devuelve el valor de un dgito decimal.
DIM
Crear una variable.
DISABLE
DISABLE interrupciones de software que estaban habilitados anteriormente.
DTMFOUT
Producir una nota DTMF Touch Tone para telefonia.
Edata
Definir inicial contenido de EEPROM de a bordo.
ENABLE
interrupciones de software para desconectar anteriormente.
END
detener la ejecucin del programa BASIC.
EREAD
Leer un valor de EEPROM de a bordo.
EWRITE
Escriba un valor en la memoria EEPROM de a bordo.
FOR..TO.NEXT..STEP ejecutar instrucciones.
FREQOUT
Generar uno o dos tonos, de distinta o las mismas frecuencias.
GETBIT
Examine un poco de un puerto o variable, utilizando un ndice variable.
GOSUB
llamar a una subrutina BASIC en una etiqueta especificada.
GOTO
Continuar la ejecucin en una etiqueta especificada.
HBSTART
Enviar una condicin START para el bus I2C con el mdulo MSSP.
HBSTOP
Enviar un estado de STOP al bus I2C utilizando el mdulo MSSP.
HBRESTART Enviar una condicin RESTART "para el bus I2C con el mdulo MSSP.
HBUSACK
Enviar una condicin RECONOCEN al bus I2C utilizando el mdulo MSSP.
HBUSIN
Leer de un dispositivo I2C con el mdulo MSSP.
HBUSOUT
Escriba a un dispositivo I2C con el mdulo MSSP.
HIGH
Hacer un PIN o un puerto de alto.
HPWM
generar una seal PWM utilizando el mdulo CCP.
HRSIN
recibir datos del puerto serie de dispositivos que contienen un USART.
HRSOUT
Transmitir datos desde el puerto serie de dispositivos que contienen un USART.
HSERIN
recibir datos del puerto serie de dispositivos que contienen un USART.
HSEROUT
Transmitir datos desde el puerto serie de dispositivos que contienen un USART.
HRSIN2
Igual que HRSIN pero utilizando una segunda USART si est disponible.
HRSOUT2
Igual que HRSOUT pero utilizando una segunda USART si est disponible.
HSERIN2
Igual que HSERIN pero utilizando una segunda USART si est disponible.
HSEROUT2
Igual que HSEROUT pero utilizando una segunda USART si est disponible.
IF .. THEN .. ELSEIF .. ELSE .. ENDIF condicional ejecutar instrucciones.
INC
Incremento de una variable.
INCLUDE
carga un fichero BASIC en el cdigo fuente.
INKEY
escaneo de un teclado.
INPUT
Hacer un pin de entrada.
[LET]
Asignar el resultado de una expresin a una variable. Facultativo de mando
LCDREAD
Leer un solo byte de un LCD grfico.
LCDWRITE
Escribe bytes a un LCD grfico.
LEFT$
Extracto n cantidad de caracteres de la izquierda de una cadena
LDATA
Place informacin en la memoria de cdigo. Para el acceso de los LREAD.
LINE
Dibuja una lnea en cualquier direccin en un LCD grfico.
LineTo
DIBUJA lnea recta en un LCD grfico.
LOADBIT
establecer o borrar un bit de un puerto o variable, con un ndice variable.
Lookdown
Buscar una tabla lookdown, constante de un valor.
LOOKDOWNL Buscar lookdown constante o variable de mesa para un valor.
LOOKUP
Fetch un valor constante de una tabla de bsqueda.
LOOKUPL
Fetch un valor constante o variable de tabla de bsqueda.
LOW
Hacer un pin o un puerto de bajo.
LREAD
Leer un valor de una tabla y colocar en LDATA variable.
MID$
Extracto n cantidad de caracteres de una cadena comenzando desde la izquierda.
ON_INTERRUPT
ON_INTERRUPT
ASSEMBLER Ejecutar una subrutina en un harware de interrupcin.
ON_LOW_INTERRUPT ASSEMBLER Ejecutar una subrutina cuando existe baja prioridad.
ON GOSUB
llamar a una subrutina basada en un valor de ndice. 16-bits.
ON GOTO
Saltar a una direccin en la memoria de cdigo basado en un valor de ndice.
ON GOTOL
Saltar a una direccin en memoria de cdigo basado en un valor de ndice.
OUTPUT
Hacer un alfiler una salida.
OREAD
Recibir datos de un dispositivo que utiliza el protocolo de Dallas 1-Wire.
OWRITE
Enviar datos a un dispositivo mediante el protocolo de Dallas 1-Wire.
ORG
Set Programa Origen.
PEEK
Leer un byte de un registro o variable. NO USAR
PIXEL
Leer un solo pxel de un LCD grfico.
PLOT
Establecer un solo pxel de un LCD grfico.
POKE
Escribe un byte en el registro o variable. NO USAR
POT
Leer un potencimetro en el pin especificado.
PRINT
una representacin grfica caracteres en una pantalla LCD.
PULSIN
Mida el ancho de pulso de un alfiler.
PULSOUT
Generar un pulso a un alfiler.
PWM
Salida un tren de pulsos de ancho de pulso modulado a la clavija.
RANDOM
Genera un nmero pseudo-aleatorios.
RCIN
Medida un ancho de pulso de un alfiler.
READ
Leer un valor de la memoria.
REM
Aadir un comentario al cdigo fuente.
REPEAT.UNTIL ejecutar un bloque de instrucciones hasta que una condicin es verdadera.
RESTORE
Ajuste la posicin de datos para leer.
RESUME
Vuelva a habilitar interrupciones de software y retorno.
RETURN
Continuar en la siguiente declaracin en los ltimos GOSUB.
RIGHT$
cantidad n Extracto de caracteres desde la derecha de una cadena.
RSIN
serie asncronos de entrada de un pasador fijo y velocidad de transmisin.
RSOUT
serie asncronos de salida a un pasador fijo y velocidad de transmisin.
SEED
el generador de nmeros aleatorios, para obtener un resultado ms al azar.
SELEC CASE .ENDSELECT
condicional ejecutar bloques de cdigo.
SERIN
Reciba asncrono de datos en serie (es decir, datos RS232).
SEROUT
transmisin asincrnica de datos en serie (es decir, datos RS232).
SERVO
control de un motor servo.
SET
Coloque un poco variable o en un estado alto.
SET_OSCCAL Calibrar el oscilador interno se encuentra en algunos dispositivos PICmicro.
SETBIT
Establecer un poco de un puerto o variable, con un ndice variable.
SHIN
serie sncrono de entrada.
SHOUT
salida serie sncrona.
SLEEP
Apague el procesador por un perodo de tiempo.
SNOOZE
Apague el procesador por un perodo breve de tiempo.
SONIDO
Generar un tono o ruido blanco en un pin-especificado.
SOUND2
Generar 2 tonos de 2 pines separados.
STOP
Para la ejecucin del programa.
STR
carga una matriz de bytes con valores.
STRN
Crear una matriz de bytes NULL terminado.
STR$
Convertir el contenido de una variable a una cadena terminada NULL.
Swap
Cambio de valores de dos variables.
SYMBOL
Crear un alias a un puerto constante, pin, o regstro.
TOGGLE
Invertir el estado de bits de un puerto.
Tolower
Convertir los caracteres de una cadena a minsculas.
ToUpper
Convertir los caracteres de una cadena en MAYSCULAS.
UNPLOT
Borrar un solo pxel de un LCD grfico.
USBINIT
Inicializar la interrupcin USB en los dispositivos USB.
USBIN
Recibir datos a travs de un extremo USB en los dispositivos USB.
USBOUT
transmisin de datos va USB en un extremo de los dispositivos USB.
VAL
Convertir una cadena terminada NULL en un valor entero.
VarPtr
Busque la direccin de una variable.
WHILE.WEND ejecutar instrucciones mientras la condicin es verdadera.
XIN
recibir datos mediante el protocolo X10.
XOUT
transmisin de datos mediante el protocolo X10