Está en la página 1de 33

PROTON IDE

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?

Es un circuito integrado programable que acepta un


listado de instrucciones y contiene todos los
componentes de un computador. Se utilizan para realizar
determinadas tareas o para gobernar dispositivos,
debido a su reducido tamao, suele ir incorporado en el
propio dispositivo que gobierna.
El microcontrolador es un dispositivo dedicado. En su
memoria solo reside un programa destinado a gobernar
una aplicacin determinada, sus lneas de entradas y
salidas (I/O) permiten la conexin de sensores y relay.
Una vez programado y configurado el microcontrolador
solamente sirve para gobernar la tarea asignada

Los microcontroladores en general, y los de la empresa Microchip en particular, necesitan


de un circuito electrnico auxiliar que nos permita transferirles desde el ordenador el
programa que hemos escrito para ellos.
Hay muchas maneras de encarar este problema, y en general se suele utilizar alguno de los
puertos disponibles en cualquier ordenador para este fin. As es que en el mercado es
posible conseguir quemadores de PICs con conexin para puerto USB, paralelo o serie (RS232).
Los microcontroladores de Microchip (PICs) se programan mediante un protocolo tipo serie.
Se necesitan dos tensiones de alimentacin para poder llevar a cabo la programacin: una de
4.5v a 5.5v (VDD) y otra comprendida entre 12v y 14v (VPP), que es la que indica al PIC que
va a ser programado, para que el cambie la funcin que realizan los pines I/O implicados en
la programacin. Los pines implicados en la programacin varan de un microcontrolador a
otro, pero en general, los de un mismo numero de pines (8, 18, etc.) tienen las mismas
patitas asignadas a la programacin, lo que nos permite construir programadores que sirvan
para mas de un PIC.
Es muy recomendable leer la hoja de datos de Microchip sobre este tema dado que es
conveniente conocer el mecanismo implicado en la programacin (tiempos, seales, etc). El
documento se refiere especficamente a la familia 16F8x, pero los dems no difieren
demasiado de lo all expuesto.
El programador, ser el encargado de transferir el programa que escribamos en la PC a la
memoria FLASH del PIC. Esta es una memoria no voltil, de bajo consumo, que se puede
escribir y borrar en el circuito integrado (al igual que las EEPROM). Microchip
comercializa dos microcontroladores prcticamente iguales que slo se diferencian en que la
memoria de programa de uno de ellos es tipo EEPROM y la del otro tipo Flash. Se trata del
PIC16C84 y el PIC16F84, respectivamente.
Adems de esta memoria, casi todos los PICs tambin disponen de una memoria de datos de
lectura y escritura no voltil, (esta del tipo EEPROM). De esta forma, un corte en el
suministro de la alimentacin no ocasiona la prdida de la informacin, que est disponible
al reiniciarse el programa. Por ejemplo, el 16F84 dispone de 64 bytes de memoria EEPROM
para contener datos, y los programas que creemos pueden leer y escribir en ella.
BOOTLOADER
Un bootloader (cargador de arranque ) es un programa sencillo que no tiene la totalidad
de las funcionalidades de un sistema operativo, diseado exclusivamente para preparar todo
lo que necesita el sistema operativo para funcionar. Normalmente se utilizan los cargadores
de arranque multietapas, en los que varios programas pequeos se suman los unos a los
otros, hasta que el ltimo de ellos carga el sistema operativo.
En los ordenadores modernos, el proceso de arranque comienza con la CPU ejecutando los
programas contenidos en la memoria ROM en una direccin predefinida y se configura la CPU
para ejecutar este programa, sin ayuda externa, al encender el ordenador.
Bootloader es un pequeo programa de arranque, residente en las primeras 0x800 bytes de la
memoria de programa de un Microcontroladores PIC. El bootloader funciona en el momento del
cargado de programa (justo cuando el PIC es reseteado) y es capaz de cargar un completo
programa de aplicacin en la memoria de programa del PIC. Microchip ofrece, de tamao
compacto, verstil, autnomo, que ha sido diseado pensando en la necesidad de contar con
un modulo que fcilmente pueda ser montado sobre un Protoboard y la ves se pueda tener un
potente microcontrolador de la gama serie 18 equipado con puerto de comunicaciones USB,
Serie, I2C, Paralelo, Conversores A/D, mltiples puerto I/O, los cuales estn disponibles
para ser conectados a diferentes circuitos y configuraciones sin necesidad de retirar el
PIC del Protoboard para programarlo cada ves que sea necesario, modificar el programa
grabado el PIC o para una fcil depuracin del programa en proceso de desarrollo.
Estructura del programa en Pic Basic
Un programa bsico consta de:
Programa de cabecera
Declaraciones
Explicacin de los signos e identificadores

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.

PROGRAMACION CON PROTON IDE


CONFIGURAR MICROCONTROLADOR
Device 16F870
Device 16F873A
Device 16F877A
Device 18F225
CONFIGURAR VELOCIDAD DEL MICRO EN Mhz
Xtal 4
Xtal 10
Xtal 20
Xtal 40
CONFIGURAR PINES DIGITALES
All_Digital= true

' PARA PUERTOS A Y E

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

Byte ' no se recomienda


As Byte
As WORD
As DWORD

LCD_Type = 0
LCD_DTPin = PORTD.0
LCD_ENPin = PORTD.5
LCD_RSPin = PORTD.4
LCD_Interface = 4
LCD_Lines = 2

CONFIGURAR LCD GRAFICO


LCD_DTPort = PORTD
LCD_RSPin = PORTC.1
LCD_ENPin = PORTE.0
LCD_RWPin = PORTC.0
LCD_CS1Pin = PORTE.1
LCD_CS2Pin = PORTE.2
LCD_Type = GRAPHIC
Internal_Font = OFF
Font_Addr = 0
CONFIGURAR TECLADO
Keypad_Port = PORTB
CONFIGURAR COMUNICACIN SERIAL
Serial_Baud = 9600
Rsout_Pin = PORTC.6
Rsout_Mode = TRUE
Rsout_Pace = 1
Rsin_Pin = PORTC.7
Rsin_Mode = TRUE
Hserial_Baud = 9600
' velocidad baudios 9600
Hserial_RCSTA = %10010000 ' Enable serial port and continuous receive
Hserial_TXSTA = %00100100 ' Enable transmit and asynchronous mode
Hserial_Clear = On
' Enable Error clearing on received characters
CONFIGURAR UNA ENTRADA
Input PORTC.3
TRISA=1

'declaro que el puerto C pin.3 es entrada


'declaro que el puerto A es entrada pero solo el pin.0

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

entrada pero solo el pin.0


entrada
entrada
entrada

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

esta en nivel bajo (apagado)


esta en nivel ALTO (ACTIVO)
esta en nivel bajo (apagado)
solo el pin.0 con nivel bajo
esta con nivel bajo
solo el pin.0 con nivel alto (activado)
solo el pin.0 con nivel alto
reproduce el dato 00000111 dec
reproduce el dato 00000011 dec
reproduce el dato 00001111 hex
reproduce el dato 00111111 hex
esta con nivel alto
bin

ALIAS PARA PERIFERICOS


Symbol MOTOR = PORTA.1 existe un motor conectado en el puerto A pin.1
Symbol SW = PORTA.2existe un pulsador conectado en el puerto A pin.2
ACTIVAR POR CONDICION
If s1=0 Then
If s1=1 Then
If s1=1 And s2=0 And s3=0 Then PROG
EndIf

' el micro espera un


' el micro espera un
'debe cumplir e ir a
' antes de concluir

0 para activar una rutina


1 para activar una rutina
una sub rutina
una rutina al usar IF sin bucle

ACTIVAR SOFT.WERE POR etiquetas


GoSub GIRA activar una rutina llamada GIRA
GIRA:
Return
retornar al punto de inicio
RETARDOS
DelayMS 1000 ' RETARDO DEL ESTADO 1000 ES 1SEG
DelayMS 500 ' RETARDO DEL ESTADO 500 ES 1/2SEG
DelayUS 1000 ' RETARDO DEL ESTADO 1000 ES 1mseg
pause 1000
' RETARDO DEL ESTADO 1000 ES 1SEG no se recomienda
ACTIVAR TEXTO EN UN LCD
Print At 1,1, "
DelayMS 5000

ACTIVAR ESTACION

"'ESCRIBE EN LA LINEA 1 POSICION 1

RESCATAR UN VALOR EN DECIMAL


Dim cc As Word
Print At 1,1, "f = ", Dec cc' imprimir el dato en el LCD desde cc
CONTAR LOS PULSOS QUE ENTRAN EN UN PIN
WRD = Counter Pin , 1000 ' LA VARIABLE

WRD

CONTIENE EL VALOR DE ENTRADA EN 1seg

CONTADOR DE EVENTOS CON OPERATORIA


If IRIS =1 Then
DelayMS 500
cont1 = cont1 + 1 'se ejecuta una suma en memoria
EndIf
Organizador de instrucciones (branch,on goto,on gosub)
IF VAR1 = 0 THEN GOTO LAB_0
IF VAR1 = 1 THEN GOTO Lab_1
IF VAR1 = 2 THEN GOTO Lab_2

por

BRANCH VAR1, [Lab_0, Lab_1, Lab_2]


ON VAR1 GOTO LABEL_0, LABEL_1, LABEL_2
ON VAR1 GOSUB LABEL_0, LABEL_1, LABEL_2

Quiebre de bucle o rutina


IF VAR1 = 10 THEN BREAK
DELAYMS 200

' BREAK ROMPE EL BUCLE CUANDO LLEGUE A 10

Ejecutar un bloque de instrucciones hasta que una condicin es verdadera


VAR1 = 1
REPEAT
PRINT AT 1, 1, DEC VAR1
DELAYMS 200
INC VAR1
UNTIL VAR1 > 10

REPEAT HIGH LED: UNTIL PORTA.0 = 1

Configurar una entrada analgica


Declare ADIN_RES
Declare ADIN_TAD
Declare ADIN_STIME

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

"

RESCATAR UN VALOR EN DECIMAL


Dim RPM As Word
Print At 1,1, "f = ", Dec RPM' imprimir el dato en el LCD
CONTAR LOS PULSOS QUE ENTRAN EN UN PIN
WRD = Counter Pin , 1000 ' LA VARIABLE WRD
CONTIENE EL
VALOR DE ENTRADA EN 1seg
CONTADOR DE EVENTOS CON OPERATORIA
If IRIS =1 Then
DelayMS 500
cont1 = cont1 + 1 'se ejecuta una suma en memoria
EndIf
````````````````````````````````````````````````````````````````````
If IRIS =1 Then
DelayMS 500
cont1 = cont1 * 2 'se ejecuta una multiplicacion en memoria
Mostrar en decimal, todos los valores de WRD dentro de un bucle hacia arriba
DIM WRD as WORD
FOR WRD = 0 TO 2000 STEP 2
PRINT Dec WRD ," "
NEXT

' Perform an upward loop


' Display the value of WRD
' Close the loop

Mostrar en decimal, todos los valores de WRD dentro de un ciclo a la baja


DIM WRD as WORD
FOR WRD = 2000 TO 0 STEP -2 ' Perform a downward loop
PRINT Dec WRD ," "
' Display the value of WRD
NEXT
' Close the loop
Mostrar en decimal, todos los valores de DWRD dentro de un ciclo a la baja
DIM DWRD as DWORD
FOR DWRD = 200000 TO 0 STEP -200 ' Perform a downward loop
PRINT Dec DWRD ,"
"
' Display the value of DWRD
NEXT
Mostrar en decimal, todos los valores de WRD1 utilizando una expresin como parte de la
construccin de FOR-NEXT
DIM WRD1 as WORD
DIM WRD2 as WORD
WRD2 = 1000
FOR WRD1= WRD2 + 10 TO WRD2 + 1000 ' Perform a loop
PRINT Dec WRD1," "
' Display the value of WRD1
NEXT
' Close the loop
Notas de programacin segn fabricante
Para la serie 16f el pin4 del puerto A es colector abierto con drenaje a tierra, tratar de
no usar como salida. Ver ficha del micro
Para la serie 16f8xx los puertos A y E por defecto trabajan los ADC usar comando de bloqueo
Para la serie 16f6xx el puerto A ser analgico usar CMCON = 7
Para la serie 16f87x el puerto A o E ser analgico usar ADCON1 = 7

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
{
|
}
~


El proceso se desarrolla en diferentes fases


sin comprobar que el objetivo se ha alcanzado
satisfactoriamente.
En el ejemplo de una lavadora, la seal de
salida (que sera la ropa lavada) no se
introduce en el sistema en ningn momento
para poder dar el proceso por terminado. Es
posible que la ropa no est bien lavada pero
el sistema no puede rectificar
automticamente. Esto se denomina laso
abierto
1-ACTIVEMOS UN LED, pero con un destello
D1

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

2-ACTIVEMOS UN LED, destello infinito


Device 16F870
Xtal = 20
TRISB=0
PORTB=0
E:
PORTB.0=1
DelayMS 1000
PORTB.0=0
DelayMS 1000
GoTo E

'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

3-ACTIVEMOS UN LED, alterando la pausa


Device 16F870
'microcontrolador
Xtal = 20
'velocidad
TRISB=0
' DECLARO PUERTO B SALIDA
PORTB=0
' ASEGURO EL PUERTO B LOW
E:
'ETIQUETA
PORTB.0=1
'ENVIO UN NIVEL ALTO AL PIN 0
DelayMS 50
' EL LED SE MANTIENE ACTIVO POR 50mSEG
PORTB.0=0
'ENVIO UN NIVEL BAJO AL PIN 0
DelayMS 50
' EL LED SE MANTIENE APAGADO POR 50mSEG
Goto E
' IR AL COMIENZO DEL PROGRAMA
4-ACTIVEMOS UN LED, cambiando el pin
Device 16F870
Xtal = 20
TRISB=0
PORTB=0
E:
PORTB.5=1
DelayMS 100
PORTB.5=0
DelayMS 100
Goto E

'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

5-ACTIVEMOS UN LED, cambiando de puerto

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

1. DESARROLLE UN SISTEMA PROGRAMADO


QUE ACTIVE 8 LED EN EL PUERTO C DEL
MICROCONTROLADOR 16F870, CON UNA PAUSA
DE Segundo EN FORMA INFINITA, CADA
UN0 DE LOS LED ACTUARAN EN ESCALERA.

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

2. DESARROLLE UN SISTEMA PROGRAMADO


QUE ACTIVE 8 LED EN EL PUERTO C DEL
MICROCONTROLADOR 16F870, CON UNA PAUSA
DE Segundo EN FORMA INFINITA, LOS
LED ACTUARAN EN PENDULO

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

3. DESARROLLE UN PENDULO INFINITO CON LOS


PUERTOS B Y C, CON PAUSAS DE 100 mseg.
CON EFECTO SEGUIDOR DE POSICION, los led se
activaran, dejandolo en posicin otro led.

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

SEMAFORO CON EL PUERTO B , CON PAUSAS DE 100 mseg.

Nota: esquematice cada circuito en un formato A4, con su diagrama de


flujo y programa.

Programacin II

20
19
18
17
16
15
14
13
12
11
20
19
18
17
16
15
14
13
12
11

Si la seal que queremos controlar debe alcanzar


un valor determinado, es habitual que el sistema
la mida constantemente y acte para alcanzar ese
valor deseado. En este caso el sistema es
realimentado, y hablamos de un sistema
automtico de lazo cerrado.
El funcionamiento de un sistema automtico de
lazo cerrado se resume de esta forma.
D1
U1

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

' EL LED SE MANTIENE APAGADO POR 1SEG


' si es fin
'fin

3-ACTIVANDO UN LED, por 2 pulsadores, solo cuando estn en 1 (button)

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

If PORTA.0 = 1 And PORTA.1 = 0 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

If PORTA.0 = 1 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
' si es fin
GoTo E
'ir al principio

AL PIN 0
ACTIVO POR 1SEG
AL PIN 0
APAGADO POR 1SEG

5-ACTIVANDO UN LED, por 2 pulsadores, segn tabla con sub. Programas


button1

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

4-ACTIVANDO UN LED, por 2 pulsadores, segn tabla (button)


button1

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

Then E' estado regreza a etiqueta principal


Then activo ' sub programa
Then activo ' sub programa
Then activo ' sub programa

activo:

' sub programa

PORTB.0=1
DelayMS 1000
PORTB.0=0
DelayMS 1000
GoTo E

'ENVIO UN NIVEL ALTO


' EL LED SE MANTIENE
'ENVIO UN NIVEL BAJO
' EL LED SE MANTIENE
'ir al principio

AL PIN 0
ACTIVO POR 1SEG
AL PIN 0
APAGADO POR 1SEG

Actividades de programacin II
D1
U1
9
10
1

1. DESARROLLE UN SISTEMA DOMOTICO, PARA 3


PIESAS LOS CUALES SE RELACIONAN CON 3
PULSADORES. ELLOS ACTIVARAN, LA ILUMINACION
DE CADA PIESA.

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

2. DESARROLLE UN SISTEMA PROGRAMADO QUE


ACTIVE 4 LED EN EL PUERTO C DEL
MICROCONTROLADOR 16F870, CON UNA PAUSA DE
segundo. LOS LED TENDRAN DIRECTA RELACION
CON 4 PULSADORES, LOS CUALES EJUTARAN 4
DISTINTAS RUTINAS CON UN MAXIMO DE 6SEG,
OCUPANDO SUB PROGRAMAS.

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

3. DESARROLLE UN SISTEMA PROGRAMADO QUE


ACTIVE LAS 8 COMPUERTAS LOGICAS CON EL
16F870, BUFFER, OR, AND, NOT, XOR, NAND, NOR
Y XNOR

Programacin III

ACTIVANDO UN DISPLAY DE 7 SEGMENTOS

LOS DISPLAYS SON FABRICADOS CON ANODO COMUN O CATADO


COMUN, SI ES DE CATODO COMUN DEBERA ACTIVAR CON NIVEL ALTO, PERO SI ES ANODO
COMUN CON NIVEL BAJO.
PORTB=%01111111 forma el numero 8 para catado comun
PORTB=%00000000 forma el numero 8 para anodo comun
Segun puertob seria % X g f e d c b A
1. ACTIVE UN DISPLAY DE CATODO COMUN, FORMANDO LOS NUMEROS DEL 0 AL 9
U1

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

Dim pos As Byte


vec[0]=191
vec[1]=134
vec[2]=219
vec[3]=207
vec[4]=230
vec[5]=237
vec[6]=253
vec[7]=135
vec[8]=255
vec[9]=239
TRISB=%00000000
loop:
For pos=0 To 9
PORTB=vec[pos]
DelayMS 500
Next
GoTo loop
End
5-ACTIVANDO UN DISPLAY, contador ascendente y descendente posee dos pulsantes
que sirven para subir y bajar el conteo

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

5-ACTIVANDO UN DISPLAY , DE 2 DIGITOS

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

Actividades de programacin III

1-ACTIVE UN CONTADOR DE 0 A 9999 CON LAS MISMAS PROPIEDADES DEL 0 A 99

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

2-ACTIVE UN TABLERO DE BASQUEtBOL

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

USANDO COUNTER: CONTEO =

16_X_2_LCD

COUNTER Pin, 100

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

En electrnica digital, Un contador (counter en ingls) es un circuito secuencial


construido a partir de biestables y puertas lgicas capaz de realizar el cmputo de los
impulsos que recibe en la entrada destinada a tal efecto, almacenar datos o actuar como
divisor de frecuencia. Habitualmente, el cmputo se realiza en un cdigo binario, que con
frecuencia ser el binario natural o el BCD natural (contador de dcadas).

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

frecuencmetro es un instrumento que


sirve para medir la frecuencia,
contando el nmero de repeticiones
de una onda en un intervalo de
tiempo, mediante el uso de un
contador que acumula el nmero de
periodos. Dado que la frecuencia se
define como el nmero de eventos de
una clase particular ocurridos en un
perodo, es generalmente sencilla su
medida.

PIC16F870

PERIMETRO

P= PI * RAIZ 2

2. DESARROLLE UN ODOMETRO Y REGISTRE LOS


RESULTADOS EN UN LCD.

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.

Un tacmetro (Del griego,


tachos = velocidad y
metron = medida) es un
dispositivo para medir la
velocidad de giro de un eje,
normalmente la velocidad de giro
del motor, se mide en
Revoluciones por minuto (RPM).

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:

PulsOut PORTB.0, 150


Generar un pulso de ancho 1.5 ms en el pin 0 de puerto B.
Ahora bien, la frecuencia de
envo de este pulso ser generada por un ciclo for-next y la funcin pause.
El ejemplo siguiente posicionar el motor en 90:

Dim XX As Byte
TRISB=0
PORTB=0
For XX=1 To 25 Step 1
PulsOut PORTB.0, 150
DelayMS 10
Next

Es importante inicializar a 0 el pin por el cual se sacar el pulso, debido a que la


funcin pulsout invierte el estado del pin.
La resolucin de Pulsout depende de la frecuencia del oscilador. Si un oscilador de 4 MHz
es utilizada, el perodo del pulso generado estar en incrementos de 10us. Si un oscilador
de 20 MHz se utiliza, Periodo tendr una resolucin 2US. Declarar un valor XTAL no tiene
efecto sobre Pulsout. La resolucin siempre cambia con la velocidad del oscilador real.
Para el caso del motor HS-311 es necesario cambiar la configuracin del motor para la
simulacin como muestra la siguiente figura:

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

SERVO Pin, VALOR ROTACION

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

Motor Paso a Paso

El El motor de paso a paso es un dispositivo


electromecnico que convierte una serie de impulsos
elctricos en desplazamientos angulares discretos , lo
que significa es que es capaz de avanzar una serie de
grados (paso) dependiendo de sus entradas de control.
Este motor presenta las ventajas de tener alta
precisin y repetibilidad en cuanto al posicionamiento.
Entre sus principales aplicaciones destacan como motor
de frecuencia variable, motor de corriente continua sin
escobillas, servomotores y motores controlados
digitalmente.
Existen 3 tipos fundamentales de motores paso a paso:
el motor de reluctancia variable, el motor de
magnetizacin permanente, y el motor paso a paso
hbrido.

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.

SRF04 es un sensor de distancias por ultrasonidos


capaz de detectar objetos y calcular la distancia a la
que se encuentra en un rango de 3 a 300 cm. El sensor
srf04 funciona por ultrasonidos y contiene toda la
electrnica encargada de hacer la medicin

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.

TSOP4838 es un sensor de infrarrojos empleado para


recibir las seales infrarrojas de los mandos a
distancia empleados normalmente en los
electrodomsticos. El sensor tiene un su interior
un circuito amplificador y un oscilador a 38 Khz
que permiten la recepcin de las seales incluso
en presencia de fuentes de luz intensas.

Sensor de distancia por infrarrojo para


robot con un alcance mximo de 15 cm. Este
sensor es muy simple y funciona por
reflexin detectando la presencia o no de
objetos, pero sin proporcionar un valor
numrico de la misma.
CMUcam3 es la ultima versin del popular sistema
de visin para robots compuesto por una cmara en
formato digital y un sistema de desarrollo de

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

SERIALPORT1 :ABRE LA CONFIGURACION PARA EL PUERTO SERIAL

IDEA PRINCIPAL, SE CONFIGURA UNA INTERFASE GRAFICA CON 4 BOTONES, QUE


CODIGO EN HEXA. EN ESTE CASO SE TRANSMITEN LETRAS.
NUESTRO RECEPTOR, (EL MICRO)
EN ESTE CASO SE QUIERE

TRANSMITIRAN UN

DECODIFICA CADA ELEMENTO Y BUSCARA LA INSTRUCION

DESEADA.

COMANDAR ELECTROVALVULAS DE RIEGO POR ZONAS.

CODIGO EN VISUAL BASIC


Imports System.IO.Ports
Public Class Form_Principal
Public Sub New()
InitializeComponent()
' Abrir puerto mientra se ejecute la aplicacin
If Not SerialPort1.IsOpen Then
Try
SerialPort1.Open()
Catch ex As System.Exception
MessageBox.Show(ex.ToString())
End Try
End If
End Sub
Private Sub Button_g_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button_t.Click
Dim mBuffer As Byte() = New Byte(0) {}
mBuffer(0) = &H67 'ASCII letra "g".
SerialPort1.Write(mBuffer, 0, mBuffer.Length)
End Sub
Private Sub Button_b_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button_b.Click
Dim mBuffer As Byte() = New Byte(0) {}
mBuffer(0) = &H62 'ASCII letra "b".
SerialPort1.Write(mBuffer, 0, mBuffer.Length)
End Sub
Private Sub Button_a_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button_a.Click
Dim mBuffer As Byte() = New Byte(0) {}
mBuffer(0) = &H61 'ASCII letra "a"
SerialPort1.Write(mBuffer, 0, mBuffer.Length)
End Sub
Private Sub Button_l_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button_l.Click
Dim mBuffer As Byte() = New Byte(0) {}
mBuffer(0) = &H6C 'ASCII letra "l".
SerialPort1.Write(mBuffer, 0, mBuffer.Length)
End Sub
Private Sub Button_Espacio_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button_Espacio.Click
Dim mBuffer As Byte() = New Byte(0) {}
mBuffer(0) = &H20 'ASCII letra "Espacio".
SerialPort1.Write(mBuffer, 0, mBuffer.Length)
End Sub
Private Sub Form_Principal_Paint(ByVal sender As System.Object, ByVal e As
System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
End Sub

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

Leer anlogo a bordo de un convertidor digital.


Inserte el cdigo de la seccin de idiomas.
dibujar un cuadrado en un LCD grfico.
computarizada (equivalente a ON GOTO ..).
se ramifican de la pgina (Long Branch).
Salir de un FOR-NEXT, REPEAT-UNTIL, o mientras WEND antes de tiempo.
Enviar una condicin START para el bus I2C.
Enviar un estado de STOP al bus I2C.
Enviar una condicin RESTART "para el bus I2C.
Enviar una condicin RECONOCEN al bus I2C.
Lee bytes de un dispositivo I2C.
Escribe bytes a un dispositivo I2C.
Detecta rebote al pulsar una tecla.
Subrutina en lenguaje ensamblador.
Definir inicial contenido de la memoria.
Dibuje un crculo en un LCD grfico.
Coloque una variable o en un estado de bajo,o borrar todas las reas de RAM.
Borrar un poco de un puerto o variable, con un ndice variable.

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

Ejecutar una subrutina o ensamblador usando una interrupcin de software.

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

También podría gustarte