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 (RS-
232).
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 Byte ' no se recomienda


Dim tecla As Byte
Dim cont2 As WORD
Dim cont1 As DWORD
CONFIGURAR LCD

Declare LCD_Type = 0
Declare LCD_DTPin = PORTD.0
Declare LCD_ENPin = PORTD.5
Declare LCD_RSPin = PORTD.4
Declare LCD_Interface = 4
Declare 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 'declaro que el puerto C pin.3 es entrada


TRISA=1 'declaro que el puerto A es entrada pero solo el pin.0
TRISA.0=1 'declaro que el puerto A es entrada pero solo el pin.0
TRISA=%11111111 'declaro que el puerto A es entrada
TRISA=$FF 'declaro que el puerto A es entrada
TRISA=255 'declaro que el puerto A es entrada
CONFIGURAR UNA SALIDA

Output PORTC.7 'declaro que el puerto C pin.7 es salida


TRISA=0 'declaro que el puerto A es salida
TRISA.0=0 'declaro que el puerto A es salida pero solo el pin.0
TRISA=%00000000 'declaro que el puerto A es salida
TRISA=$0 'declaro que el puerto A es salida

CONFIGURACION COMBINADA

TRISA=%00001111 'declaro que el puerto A ser: entrada los pines 0,1,2,3 y salida 4,5,6,7
TRISA=$F 'declaro que el puerto A ser: entrada los pines 0,1,2,3 y salida 4,5,6,7
TRISA=15 'declaro que el puerto A ser: entrada los pines 0,1,2,3 y salida 4,5,6,7

ACTIVAR PUERTO

High xx8
Low xx8
Low PORTB 'el puerto b esta en nivel bajo (apagado)
High PORTB 'el puerto b esta en nivel ALTO (ACTIVO)
PORTB=0 'el puerto b esta en nivel bajo (apagado)
PORTB.0=0 'el puerto b solo el pin.0 con nivel bajo
PORTB=%00000000 'el puerto b esta con nivel bajo
PORTB=1 'el puerto b solo el pin.0 con nivel alto (activado)
PORTB.0=1 'el puerto b solo el pin.0 con nivel alto
PORTB=7 'el puerto b reproduce el dato 00000111 dec
PORTB=3 'el puerto b reproduce el dato 00000011 dec
PORTB=$F 'el puerto b reproduce el dato 00001111 hex
PORTB=$3F 'el puerto b reproduce el dato 00111111 hex
PORTB=%11111111 'el puerto b 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 ' el micro espera un 0 para activar una rutina
If s1=1 Then ' el micro espera un 1 para activar una rutina
If s1=1 And s2=0 And s3=0 Then PROG 'debe cumplir e ir a una sub rutina
EndIf ' antes de concluir 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, " ACTIVAR ESTACION "'ESCRIBE EN LA LINEA 1 POSICION 1


DelayMS 5000

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 por BRANCH VAR1, [Lab_0, Lab_1, Lab_2]
IF VAR1 = 1 THEN GOTO Lab_1 ON VAR1 GOTO LABEL_0, LABEL_1, LABEL_2
IF VAR1 = 2 THEN GOTO Lab_2 ON VAR1 GOSUB LABEL_0, LABEL_1, LABEL_2

Quiebre de bucle o rutina

IF VAR1 = 10 THEN BREAK ' BREAK ROMPE EL BUCLE CUANDO LLEGUE A 10


DELAYMS 200

Ejecutar un bloque de instrucciones hasta que una condicin es verdadera

VAR1 = 1
REPEAT
PRINT AT 1, 1, DEC VAR1 O REPEAT HIGH LED: UNTIL PORTA.0 = 1
DELAYMS 200
INC VAR1
UNTIL VAR1 > 10

Configurar una entrada analgica

Declare ADIN_RES 10 'resolucin


Declare ADIN_TAD 2 'CLK options are 0, 1, 2, 3 (0-2 are based on internal cycles)
Declare ADIN_STIME 100 '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, " ACTIVAR ESTACION "


DelayMS 5000

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 ' Perform an upward loop
PRINT Dec WRD ," " ' Display the value of WRD
NEXT ' 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 0 000 00000000 16 10 020 00010000 32 20 040 00100000 48 30 060 00110000


1 1 001 00000001 17 11 021 00010001 33 21 041 00100001 49 31 061 00110001
2 2 002 00000010 18 12 022 00010010 34 22 042 00100010 50 32 062 00110010
3 3 003 00000011 19 13 023 00010011 35 23 043 00100011 51 33 063 00110011
4 4 004 00000100 20 14 024 00010100 36 24 044 00100100 52 34 064 00110100
5 5 005 00000101 21 15 025 00010101 37 25 045 00100101 53 35 065 00110101
6 6 006 00000110 22 16 026 00010110 38 26 046 00100110 54 36 066 00110110
7 7 007 00000111 23 17 027 00010111 39 27 047 00100111 55 37 067 00110111
8 8 010 00001000 24 18 030 00011000 40 28 050 00101000 56 38 070 00111000
9 9 011 00001001 25 19 031 00011001 41 29 051 00101001 57 39 071 00111001
10 A 012 00001010 26 1A 032 00011010 42 2A 052 00101010 58 3A 072 00111010
11 B 013 00001011 27 1B 033 00011011 43 2B 053 00101011 59 3B 073 00111011
12 C 014 00001100 28 1C 034 00011100 44 2C 054 00101100 60 3C 074 00111100
13 D 015 00001101 29 1D 035 00011101 45 2D 055 00101101 61 3D 075 00111101
14 E 016 00001110 30 1E 036 00011110 46 2E 056 00101110 62 3E 076 00111110
15 F 017 00001111 31 1F 037 00011111 47 2F 057 00101111 63 3F 077 00111111

Dec Hex Oct Bin Dec Hex Oct Bin Dec Hex Oct Bin Dec Hex Oct Bin

64 40 100 01000000 80 50 120 01010000 96 60 140 01100000 112 70 160 01110000


65 41 101 01000001 81 51 121 01010001 97 61 141 01100001 113 71 161 01110001
66 42 102 01000010 82 52 122 01010010 98 62 142 01100010 114 72 162 01110010
67 43 103 01000011 83 53 123 01010011 99 63 143 01100011 115 73 163 01110011
68 44 104 01000100 84 54 124 01010100 100 64 144 01100100 116 74 164 01110100
69 45 105 01000101 85 55 125 01010101 101 65 145 01100101 117 75 165 01110101
70 46 106 01000110 86 56 126 01010110 102 66 146 01100110 118 76 166 01110110
71 47 107 01000111 87 57 127 01010111 103 67 147 01100111 119 77 167 01110111
72 48 110 01001000 88 58 130 01011000 104 68 150 01101000 120 78 170 01111000
73 49 111 01001001 89 59 131 01011001 105 69 151 01101001 121 79 171 01111001
74 4A 112 01001010 90 5A 132 01011010 106 6A 152 01101010 122 7A 172 01111010
75 4B 113 01001011 91 5B 133 01011011 107 6B 153 01101011 123 7B 173 01111011
76 4C 114 01001100 92 5C 134 01011100 108 6C 154 01101100 124 7C 174 01111100
77 4D 115 01001101 93 5D 135 01011101 109 6D 155 01101101 125 7D 175 01111101
78 4E 116 01001110 94 5E 136 01011110 110 6E 156 01101110 126 7E 176 01111110
79 4F 117 01001111 95 5F 137 01011111 111 6F 157 01101111 127 7F 177 01111111
Dec Hex Oct Bin Dec Hex Oct Bin Dec Hex Oct Bin Dec Hex Oct Bin

128 80 200 10000000 144 90 220 10010000 160 A0 240 10100000 176 B0 260 10110000
129 81 201 10000001 145 91 221 10010001 161 A1 241 10100001 177 B1 261 10110001
130 82 202 10000010 146 92 222 10010010 162 A2 242 10100010 178 B2 262 10110010
131 83 203 10000011 147 93 223 10010011 163 A3 243 10100011 179 B3 263 10110011
132 84 204 10000100 148 94 224 10010100 164 A4 244 10100100 180 B4 264 10110100
133 85 205 10000101 149 95 225 10010101 165 A5 245 10100101 181 B5 265 10110101
134 86 206 10000110 150 96 226 10010110 166 A6 246 10100110 182 B6 266 10110110
135 87 207 10000111 151 97 227 10010111 167 A7 247 10100111 183 B7 267 10110111
136 88 210 10001000 152 98 230 10011000 168 A8 250 10101000 184 B8 270 10111000
137 89 211 10001001 153 99 231 10011001 169 A9 251 10101001 185 B9 271 10111001
138 8A 212 10001010 154 9A 232 10011010 170 AA 252 10101010 186 BA 272 10111010
139 8B 213 10001011 155 9B 233 10011011 171 AB 253 10101011 187 BB 273 10111011
140 8C 214 10001100 156 9C 234 10011100 172 AC 254 10101100 188 BC 274 10111100
141 8D 215 10001101 157 9D 235 10011101 173 AD 255 10101101 189 BD 275 10111101
142 8E 216 10001110 158 9E 236 10011110 174 AE 256 10101110 190 BE 276 10111110
143 8F 217 10001111 159 9F 237 10011111 175 AF 257 10101111 191 BF 277 10111111

Dec Hex Oct Bin


Dec Hex Oct Bin Dec Hex Oct Bin Dec Hex Oct Bin

192 C0 300 11000000 208 D0 320 11010000 224 E0 340 11100000 240 F0 360
193 C1 301 11000001 209 D1 321 11010001 225 E1 341 11100001 241 F1 361 11110000
194 C2 302 11000010 210 D2 322 11010010 226 E2 342 11100010 242 F2 362 11110001
195 C3 303 11000011 211 D3 323 11010011 227 E3 343 11100011 243 F3 363 11110010
196 C4 304 11000100 212 D4 324 11010100 228 E4 344 11100100 244 F4 364 11110011
197 C5 305 11000101 213 D5 325 11010101 229 E5 345 11100101 245 F5 365 11110100
198 C6 306 11000110 214 D6 326 11010110 230 E6 346 11100110 246 F6 366 11110101
199 C7 307 11000111 215 D7 327 11010111 231 E7 347 11100111 247 F7 367 11110110
200 C8 310 11001000 216 D8 330 11011000 232 E8 350 11101000 248 F8 370 11110111
201 C9 311 11001001 217 D9 331 11011001 233 E9 351 11101001 249 F9 371 11111000
202 CA 312 11001010 218 DA 332 11011010 234 EA 352 11101010 250 FA 372 11111001
203 CB 313 11001011 219 DB 333 11011011 235 EB 353 11101011 251 FB 373 11111010
204 CC 314 11001100 220 DC 334 11011100 236 EC 354 11101100 252 FC 374 11111011
205 CD 315 11001101 221 DD 335 11011101 237 ED 355 11101101 253 FD 375 11111100
206 CE 316 11001110 222 DE 336 11011110 238 EE 356 11101110 254 FE 376 11111101
207 CF 317 11001111 223 DF 337 11011111 239 EF 357 11101111 255 FF 377 11111110
11111111

CODIGO ASCII
ASCII Hex Smbolo ASCII Hex Smbolo ASCII Hex Smbolo ASCII Hex Smbolo

0 0 NUL 16 10 DLE 32 20 (espacio) 48 30 0


1 1 SOH 17 11 DC1 33 21 ! 49 31 1
2 2 STX 18 12 DC2 34 22 " 50 32 2
3 3 ETX 19 13 DC3 35 23 # 51 33 3
4 4 EOT 20 14 DC4 36 24 $ 52 34 4
5 5 ENQ 21 15 NAK 37 25 % 53 35 5
6 6 ACK 22 16 SYN 38 26 & 54 36 6
7 7 BEL 23 17 ETB 39 27 ' 55 37 7
8 8 BS 24 18 CAN 40 28 ( 56 38 8
9 9 TAB 25 19 EM 41 29 ) 57 39 9
10 A LF 26 1A SUB 42 2A * 58 3A :
11 B VT 27 1B ESC 43 2B + 59 3B ;
12 C FF 28 1C FS 44 2C , 60 3C <
13 D CR 29 1D GS 45 2D - 61 3D =
14 E SO 30 1E RS 46 2E . 62 3E >
15 F SI 31 1F US 47 2F / 63 3F ?

ASCII Hex Smbolo ASCII Hex Smbolo ASCII Hex Smbolo ASCII Hex Smbolo

64 40 @ 80 50 P 96 60 ` 112 70 p
65 41 A 81 51 Q 97 61 a 113 71 q
66 42 B 82 52 R 98 62 b 114 72 r
67 43 C 83 53 S 99 63 c 115 73 s
68 44 D 84 54 T 100 64 d 116 74 t
69 45 E 85 55 U 101 65 e 117 75 u
70 46 F 86 56 V 102 66 f 118 76 v
71 47 G 87 57 W 103 67 g 119 77 w
72 48 H 88 58 X 104 68 h 120 78 x
73 49 I 89 59 Y 105 69 i 121 79 y
74 4A J 90 5A Z 106 6A j 122 7A z
75 4B K 91 5B [ 107 6B k 123 7B {
76 4C L 92 5C \ 108 6C l 124 7C |
77 4D M 93 5D ] 109 6D m 125 7D
78 4E N 94 5E ^ 110 6E n 126 7E }
79 4F O 95 5F _ 111 6F o 127 7F ~


Programacin I
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


U1
9 21
Device 16F870 'microcontrolador 10
OSC1/CLKIN
OSC2/CLKOUT
RB0/INT
RB1
22
1 23 LED
Xtal = 20 'velocidad MCLR/Vpp/THV RB2
RB3/PGM
24
TRISB=0 ' DECLARO PUERTO B SALIDA 2
3
RA0/AN0 RB4
25
26
RA1/AN1 RB5
PORTB=0 ' ASEGURO EL PUERTO B LOW 4
5
RA2/AN2/VREF- RB6/PGC
27
28
RA3/AN3/VREF+ RB7/PGD
E: 'ETIQUETA 6
RA4/T0CKI
7 11
PORTB.0=1 'ENVIO UN NIVEL ALTO AL PIN 0 RA5/AN4 RC0/T1OSO/T1CKI
RC1/T1OSI
12
13
DelayMS 1000 ' EL LED SE MANTIENE ACTIVO POR RC2/CCP1
RC3
14
15
1SEG RC4
16
RC5
PORTB.0=0 'ENVIO UN NIVEL BAJO AL PIN 0 RC6/TX/CK
17
18
RC7/RX/DT
DelayMS 1000 ' EL LED SE MANTIENE APAGADO POR PIC16F870
1SEG
End 'FIN DE LA RUTINA

2-ACTIVEMOS UN LED, destello infinito

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 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
GoTo E '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 U1
4-ACTIVEMOS UN LED, cambiando el pin 9
10
OSC1/CLKIN
OSC2/CLKOUT
RB0/INT
RB1
21
22
1
MCLR/Vpp/THV RB2
23 D1
24
RB3/PGM
2 25
Device 16F870 'microcontrolador 3
RA0/AN0
RA1/AN1
RB4
RB5
26
4 27
Xtal = 20 'velocidad 5
RA2/AN2/VREF-
RA3/AN3/VREF+
RB6/PGC
RB7/PGD
28 LED
6
TRISB=0 ' DECLARO PUERTO B SALIDA 7
RA4/T0CKI
RA5/AN4 RC0/T1OSO/T1CKI
11
12
RC1/T1OSI
PORTB=0 ' ASEGURO EL PUERTO B LOW RC2/CCP1
13
14
RC3
E: 'ETIQUETA RC4
15
16
RC5
PORTB.5=1 'ENVIO UN NIVEL ALTO AL PIN 5 RC6/TX/CK
RC7/RX/DT
17
18

DelayMS 100 ' EL LED SE MANTIENE ACTIVO POR 100mSEG


PIC16F870

PORTB.5=0 'ENVIO UN NIVEL BAJO AL PIN 5


DelayMS 100 ' EL LED SE MANTIENE APAGADO POR 100mSEG
Goto E ' IR AL COMIENZO DEL PROGRAMA

5-ACTIVEMOS UN LED, cambiando de puerto 9


10
U1
OSC1/CLKIN
OSC2/CLKOUT
RB0/INT
RB1
21
22
1 23
MCLR/Vpp/THV RB2
24
RB3/PGM
2 25
RA0/AN0 RB4
3 26

Device 16F870 'microcontrolador


RA1/AN1 RB5
4
RA2/AN2/VREF- RB6/PGC
27 D1
5 28
RA3/AN3/VREF+ RB7/PGD
6
RA4/T0CKI

Xtal = 20 'velocidad
7 11
RA5/AN4 RC0/T1OSO/T1CKI
12
RC1/T1OSI
13 LED
RC2/CCP1
14

TRISC=0 ' DECLARO PUERTO C SALIDA


RC3
15
RC4
16
RC5
17
RC6/TX/CK
18

PORTC=0 ' ASEGURO EL PUERTO C LOW PIC16F870


RC7/RX/DT

E: 'ETIQUETA
PORTC.0=1 'ENVIO UN NIVEL ALTO AL PIN 5
DelayMS 50 ' EL LED SE MANTIENE ACTIVO POR 50mSEG
PORTC.0=0 'ENVIO UN NIVEL BAJO AL PIN 5
DelayMS 50 ' EL LED SE MANTIENE APAGADO POR 50mSEG
Goto E ' 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
1. DESARROLLE UN SISTEMA PROGRAMADO QUE 9
10
OSC1/CLKIN RB0/INT
21
22
ACTIVE 8 LED EN EL PUERTO C DEL 1
OSC2/CLKOUT
MCLR/Vpp/THV
RB1
RB2
23
24
RB3/PGM
MICROCONTROLADOR 16F870, CON UNA PAUSA 2
3
RA0/AN0
RA1/AN1
RB4
RB5
25
26
4 27
DE Segundo EN FORMA INFINITA, CADA 5
6
RA2/AN2/VREF-
RA3/AN3/VREF+
RB6/PGC
RB7/PGD
28
U2
RA4/T0CKI
UN0 DE LOS LED ACTUARAN EN ESCALERA. 7
RA5/AN4 RC0/T1OSO/T1CKI
RC1/T1OSI
11
12
1
2
20
19
13 3 18
RC2/CCP1
14 4 17
RC3
15 5 16
RC4
16 6 15
RC5
17 7 14
RC6/TX/CK
18 8 13
RC7/RX/DT
9 12
PIC16F870 10 11

LED-BARGRAPH-GRN

U1
9 21
2. DESARROLLE UN SISTEMA PROGRAMADO QUE 10
1
OSC1/CLKIN
OSC2/CLKOUT
RB0/INT
RB1
22
23
MCLR/Vpp/THV RB2
ACTIVE 8 LED EN EL PUERTO C DEL 2
RA0/AN0
RB3/PGM
RB4
24
25
3 26
MICROCONTROLADOR 16F870, CON UNA PAUSA 4
5
RA1/AN1
RA2/AN2/VREF-
RB5
RB6/PGC
27
28
DE Segundo EN FORMA INFINITA, LOS LED 6
RA3/AN3/VREF+ RB7/PGD U2
RA4/T0CKI
7 11 1 20
RA5/AN4 RC0/T1OSO/T1CKI
ACTUARAN EN PENDULO RC1/T1OSI
RC2/CCP1
12
13
2
3
19
18
14 4 17
RC3
15 5 16
RC4
16 6 15
RC5
17 7 14
RC6/TX/CK
18 8 13
RC7/RX/DT
9 12
PIC16F870 10 11

LED-BARGRAPH-GRN

U3
1 20
U1 2 19
9 21 3 18
OSC1/CLKIN RB0/INT
3. DESARROLLE UN PENDULO INFINITO 10
1
OSC2/CLKOUT
MCLR/Vpp/THV
RB1
RB2
22
23
4
5
17
16
24 6 15
CON LOS PUERTOS B Y C, CON PAUSAS DE 2
RA0/AN0
RB3/PGM
RB4
25 7 14
3 26 8 13
100 mseg. 4
5
RA1/AN1
RA2/AN2/VREF-
RB5
RB6/PGC
27
28
9
10
12
11
RA3/AN3/VREF+ RB7/PGD U2
CON EFECTO SEGUIDOR DE POSICION, los 6
7
RA4/T0CKI
RA5/AN4 RC0/T1OSO/T1CKI
11 1 LED 20

led se activaran, dejandolo en RC1/T1OSI


RC2/CCP1
12
13
2
3
19
18
14 4 17
posicin otro led. RC3
RC4
15
16
5
6
16
15
RC5
17 7 14
RC6/TX/CK
18 8 13
RC7/RX/DT
9 12
PIC16F870 10 11

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

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
9 21
OSC1/CLKIN RB0/INT
10 22
OSC2/CLKOUT RB1
1 23 LED
MCLR/Vpp/THV RB2
24
RB3/PGM
2 25
El circuito, se ha complementado con un pulsador, y una
RA0/AN0 RB4
3 26
RA1/AN1 RB5
4 27
RA2/AN2/VREF- RB6/PGC
5 28
R1 6
RA3/AN3/VREF+ RB7/PGD
resistencia, enviaran un estado lgico al PIC, en este
Resistor

Re sistor

RA4/T0CKI
10k 7 11
RA5/AN4 RC0/T1OSO/T1CKI
RC1/T1OSI
RC2/CCP1
12
13
14
caso el pulsador enviara un 1 al pulsar, sin pulsar la
RC3
RC4
RC5
15
16 resistencia mantiene un estado 0 por estar a tierra, si
17
RC6/TX/CK
RC7/RX/DT
18 no esta la resistencia siempre existir un 1.
PIC16F870

El circuito, se ha complementado con un pulsador, y


D1
una resistencia, enviaran un estado lgico al PIC, en
R1 U1
este caso el pulsador enviara un 0 al pulsar, sin
Resistor
Resistor

10k 9 21
OSC1/CLKIN RB0/INT
10 22

2
1
OSC2/CLKOUT
MCLR/Vpp/THV
RB1
RB2
RB3/PGM
23
24
25
LED
pulsar la resistencia mantiene un estado 1 por estar a
+5vcc, si no esta la resistencia siempre existir un
RA0/AN0 RB4
3 26
RA1/AN1 RB5
4 27
RA2/AN2/VREF- RB6/PGC
5 28
RA3/AN3/VREF+ RB7/PGD
6
7
RA4/T0CKI
RA5/AN4 RC0/T1OSO/T1CKI
RC1/T1OSI
11
12
1.
13
RC2/CCP1
14
RC3
15
RC4
16
Estos circuitos, sern capas de relacionar estados RC5
RC6/TX/CK
RC7/RX/DT
17
18

externos, actuando como condicionales para la


PIC16F870

ejecucin de los programas.


Vea: IF_____Then______Endif

1-ACTIVANDO UN LED, por un pulsador, enviando un1(button)

Device 16F870 'microcontrolador


Xtal = 20 'velocidad
D1
TRISA=1 'declaro que el puerto A es entrada U1
R1
TRISB=0 ' DECLARO PUERTO B SALIDA
Resistor

Resistor

10k 9 21
OSC1/CLKIN RB0/INT
10 22
All_Digital= true ' todos los pines del micro son digitales 1
OSC2/CLKOUT
MCLR/Vpp/THV
RB1
RB2
23 LED
24
PORTB=0 ' ASEGURO EL PUERTO B LOW 2
RA0/AN0
RB3/PGM
RB4
25
3 26
E: 'ETIQUETA 4
RA1/AN1
RA2/AN2/VREF-
RB5
RB6/PGC
27
5 28
If PORTA.0 = 1 Then 'el micro espera un 1 para activar 6
RA3/AN3/VREF+
RA4/T0CKI
RB7/PGD
7 11
PORTB.0=1 'ENVIO UN NIVEL ALTO AL PIN 7 RA5/AN4 RC0/T1OSO/T1CKI
RC1/T1OSI
12
13
DelayMS 1000 ' EL LED SE MANTIENE ACTIVO POR 1SEG RC2/CCP1
RC3
14
PORTB.0=0 'ENVIO UN NIVEL BAJO AL PIN 7 RC4
15
16
RC5
DelayMS 1000 ' EL LED SE MANTIENE APAGADO POR 1SEG RC6/TX/CK
17
18
RC7/RX/DT
EndIf ' si es fin PIC16F870
End 'fin
2-ACTIVANDO UN LED, por un pulsador, enviando un 0 (button)

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 = 0 Then 'el micro espera un 1 para activar
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
3-ACTIVANDO UN LED, por 2 pulsadores, solo cuando estn en 1 (button)

D1
Device 16F870 'microcontrolador U1
9 21
OSC1/CLKIN RB0/INT
Xtal = 20 'velocidad 10
OSC2/CLKOUT RB1
22
1 23 LED
TRISA.0=1 'declaro que el puerto A pin 0 es entrada MCLR/Vpp/THV RB2
RB3/PGM
24
2 25
TRISA.1=1 'declaro que el puerto A pin 1 es entrada 3
RA0/AN0
RA1/AN1
RB4
RB5
26
4 27
TRISB=0 ' DECLARO PUERTO B SALIDA 5
RA2/AN2/VREF-
RA3/AN3/VREF+
RB6/PGC
RB7/PGD
28
All_Digital= true ' todos los pines del micro son digitales 6
7
RA4/T0CKI
11
RA5/AN4 RC0/T1OSO/T1CKI
PORTB=0 ' ASEGURO EL PUERTO B LOW RC1/T1OSI
12
13
RC2/CCP1
E: 'ETIQUETA RC3
14
15
RC4
If PORTA.0 = 1 AND PORTA.1 = 1 THEN 'los 2 sw activaran el led RC5
16
R1 R2 17
PORTB.0=1 'ENVIO UN NIVEL ALTO AL PIN 0 RC6/TX/CK

Resistor

Resistor
Resistor

Resistor
10k 10k 18
RC7/RX/DT
DelayMS 1000 ' EL LED SE MANTIENE ACTIVO POR 1SEG PIC16F870

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

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

button1 button2 led


0 0 0
0 1 1
1 0 1
1 1 0

Device 16F870 'microcontrolador


Xtal = 20 'velocidad
TRISA=1 'declaro que el puerto A es entrada
TRISB=0 ' DECLARO PUERTO B SALIDA
All_Digital= true ' declaro que todos los pines del micro son digitales
PORTB=0 ' 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 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

If PORTA.0 = 1 And PORTA.1 = 0 Then


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

If PORTA.0 = 1 And PORTA.1 = 1 Then


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
GoTo E 'ir al principio

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

button1 button2 led


0 0 0
0 1 1
1 0 1
1 1 1
Device 16F870 'microcontrolador
Xtal = 20 'velocidad
TRISA=1 'declaro que el puerto A es entrada
TRISB=0 ' DECLARO PUERTO B SALIDA
All_Digital= true ' declaro que todos los pines del micro son digitales
PORTB=0 ' 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 activo ' sub programa
If PORTA.0 = 1 And PORTA.1 = 1 Then activo ' sub programa
If PORTA.0 = 1 And PORTA.1 = 1 Then activo ' sub programa
GoTo E

activo: ' sub programa

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
GoTo E 'ir al principio

Actividades de programacin II

1. DESARROLLE UN SISTEMA DOMOTICO, PARA 3 PIESAS LOS CUALES SE RELACIONAN CON 3


PULSADORES. ELLOS ACTIVARAN, LA ILUMINACION DE CADA PIESA.
D1
U1
9 21
OSC1/CLKIN RB0/INT
10 22
OSC2/CLKOUT RB1
1 23 LED
MCLR/Vpp/THV RB2
24
RB3/PGM
2
RA0/AN0 RB4
25 D2
3 26
RA1/AN1 RB5
4 27
RA2/AN2/VREF- RB6/PGC
5 28
RA3/AN3/VREF+ RB7/PGD
6
RA4/T0CKI
7 11 LED
RA5/AN4 RC0/T1OSO/T1CKI
12
RC1/T1OSI
RC2/CCP1
13 D3
R4 R3 R2 14
Resistor

Resistor

Resistor

RC3
Resistor

Resistor

Resistor

10k 10k 10k 15


RC4
16
RC5
17
RC6/TX/CK
18 LED
RC7/RX/DT
PIC16F870

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.
D1
U1
9 21
OSC1/CLKIN RB0/INT
10 22
OSC2/CLKOUT RB1
1 23 LED
MCLR/Vpp/THV RB2
24
RB3/PGM
2
RA0/AN0 RB4
25 D2
3 26
RA1/AN1 RB5
4 27
RA2/AN2/VREF- RB6/PGC
5 28
RA3/AN3/VREF+ RB7/PGD
6
RA4/T0CKI
7 11 LED
RA5/AN4 RC0/T1OSO/T1CKI
12
RC1/T1OSI
RC2/CCP1
13 D3
R4 R3 R2 R1 RC3
14
Resi stor

Resi stor

Resi stor

Resi stor

Resi stor

Resi stor

Resi stor

Resi stor

10k 10k 10k 10k 15


RC4
16
RC5
17
RC6/TX/CK
18 LED
RC7/RX/DT
D4
PIC16F870

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
Device 16F870 9
10
OSC1/CLKIN RB0/INT
21
22
OSC2/CLKOUT RB1
Dim num As Byte 1
MCLR/Vpp/THV RB2
23
24
RB3/PGM
Dim vec As Byte 2
3
RA0/AN0
RA1/AN1
RB4
RB5
25
26

TRISB = 0 4
5
RA2/AN2/VREF-
RA3/AN3/VREF+
RB6/PGC
RB7/PGD
27
28
6
prog: 7
RA4/T0CKI
RA5/AN4 RC0/T1OSO/T1CKI
11
12
For vec = 0 To 9 RC1/T1OSI
RC2/CCP1
13
14
LookUp vec, [191,134,219,207,230,237,253,135,255,239], num RC3
RC4
15
16
RC5
PORTB=num RC6/TX/CK
17
18
RC7/RX/DT
DelayMS 500 PIC16F870

Next vec
GoTo prog
End

2. ACTIVE UN DISPLAY DE CATODO COMUN, FORMANDO LOS NUMEROS DEL 0 AL 9 (Baja - sube)
U1
Device 16F870 9
OSC1/CLKIN RB0/INT
21
10 22
Dim vec As Byte 1
OSC2/CLKOUT
MCLR/Vpp/THV
RB1
RB2
23
24
Dim num As Byte 2
RA0/AN0
RB3/PGM
RB4
25
3 26
TRISB = 0 4
5
RA1/AN1
RA2/AN2/VREF-
RB5
RB6/PGC
27
28
prog: 6
7
RA3/AN3/VREF+
RA4/T0CKI
RB7/PGD
11
RA5/AN4 RC0/T1OSO/T1CKI
For vec=0 To 9 RC1/T1OSI
12
13
RC2/CCP1
LookUp vec, [191,134,219,207,230,237,253,135,255,239], num RC3
14
15
RC4
PORTB=num RC5
RC6/TX/CK
16
17

DelayMS 500 RC7/RX/DT


18

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
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
nodo Comn)
ACTIVE UN DISPLAY DE ANODO COMUN, FORMANDO LOS NUMEROS DEL 0 AL 9 con vectores
Device 16F870
Dim vec[10] As Byte
Dim pos As Byte
vec[0]=191
vec[1]=134
vec[2]=219 U1
vec[3]=207 9
10
OSC1/CLKIN RB0/INT
21
22
OSC2/CLKOUT RB1
vec[4]=230 1
MCLR/Vpp/THV RB2
23
24
vec[5]=237 2
RB3/PGM
25
RA0/AN0 RB4
vec[6]=253 3
4
RA1/AN1 RB5
26
27
RA2/AN2/VREF- RB6/PGC
vec[7]=135 5
RA3/AN3/VREF+ RB7/PGD
28
6
vec[8]=255 7
RA4/T0CKI
11
RA5/AN4 RC0/T1OSO/T1CKI
vec[9]=239 RC1/T1OSI
12
13
RC2/CCP1
14
RC3
15
TRISB=%00000000 RC4
RC5
16
17
RC6/TX/CK
18
RC7/RX/DT
loop:
PIC16F870
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 U2
9 21 7 13
OSC1/CLKIN RB0/INT A QA
10 22 1 12
OSC2/CLKOUT RB1 B QB
1 23 2 11
MCLR/Vpp/THV RB2 C QC
24 6 10
RB3/PGM D QD
2 25 9
RA0/AN0 RB4 QE
3 26 3 15
RA1/AN1 RB5 LT QF
4 27 4 14
RA2/AN2/VREF- RB6/PGC BI QG
5 28 5
RA3/AN3/VREF+ RB7/PGD LE/STB
6
RA4/T0CKI
7 11 4511
RA5/AN4 RC0/T1OSO/T1CKI
12
RC1/T1OSI
13
RC2/CCP1
14 U3
RC3
15 10
RC4 COM
16 1 18
RC5 1B 1C
17 2 17
RC6/TX/CK 2B 2C
18 3 16
RC7/RX/DT 3B 3C
4 15
4B 4C
PIC16F870 5 14
5B 5C
6 13
6B 6C
7 12
7B 7C
8 11
8B 8C
ULN2803

'El codigo, est 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 U2
9 21 7 13
OSC1/CLKIN RB0/INT A QA
10 22 1 12
OSC2/CLKOUT RB1 B QB
1 23 2 11
MCLR/Vpp/THV RB2 C QC
24 6 10
RB3/PGM D QD
2 25 9
RA0/AN0 RB4 QE
3 26 3 15
RA1/AN1 RB5 LT QF
4 27 4 14
RA2/AN2/VREF- RB6/PGC BI QG
5 28 5
RA3/AN3/VREF+ RB7/PGD LE/STB
6
RA4/T0CKI
7 11 4511
RA5/AN4 RC0/T1OSO/T1CKI
12
RC1/T1OSI
13
RC2/CCP1
14 U3
RC3
15 10
RC4 COM
16 1 18
RC5 1B 1C
17 2 17
RC6/TX/CK 2B 2C
18 3 16
RC7/RX/DT 3B 3C
4 15
4B 4C
PIC16F870 5 14
5B 5C
6 13
6B 6C
7 12
7B 7C
8 11
8B 8C
ULN2803

2-ACTIVE UN TABLERO DE BASQUETBOL


Programacin VI

CONFIGURANDO UN LCD
LCD1
16_X_2_LCD

Device 16F870
Xtal 20 U1
LCD 9
10
OSC1/CLKIN
OSC2/CLKOUT
RB0/INT
RB1
21
22

VDD
VSS

VEE
1 23
CO VAR Byte

RW
RS

D0
D1
D2
D3
D4
D5
D6
D7
MCLR/Vpp/THV RB2

E
24
RB3/PGM
2 25
Declare LCD_Type = 0 RA0/AN0 RB4

1
2
3

4
5
6

7
8
9
10
11
12
13
14
3 26
RA1/AN1 RB5
4 27
RA2/AN2/VREF- RB6/PGC
Declare LCD_DTPin = PORTC.0 5
6
RA3/AN3/VREF+
RA4/T0CKI
RB7/PGD
28

Declare LCD_ENPin = PORTC.5 7


RA5/AN4 RC0/T1OSO/T1CKI
RC1/T1OSI
11
12
13
Declare LCD_RSPin = PORTC.4 RC2/CCP1
RC3
14
15
Declare LCD_Interface = 4 RC4
RC5
16
17
RC6/TX/CK
Declare LCD_Lines = 2 RC7/RX/DT
18

All_Digital= true PIC16F870

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 4

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 / 65472 ' to reduce decimal error
Print At 1,1, DEC1 Temp_Float , 0, "'C "

Return
USANDO COUNTER: CONTEO = COUNTER Pin, 100 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
LCD1
16_X_2_LCD En electrnica digital, Un contador (counter en ingls)
es un circuito secuencial construido a partir de
U1
9
10
OSC1/CLKIN
OSC2/CLKOUT
RB0/INT
RB1
21
22
biestables y puertas lgicas capaz de realizar el cmputo

VDD
VSS

VEE
1 23

RW
de los impulsos que recibe en la entrada destinada a tal

RS

D0
D1
D2
D3
D4
D5
D6
D7
MCLR/Vpp/THV RB2

E
24
RB3/PGM
2 25
RA0/AN0 RB4

1
2
3

4
5
6

7
8
9
10
11
12
13
14
3 26

efecto, almacenar datos o actuar como divisor de


RA1/AN1 RB5
4 27
RA2/AN2/VREF- RB6/PGC
5 28
RA3/AN3/VREF+ RB7/PGD
6
RA4/T0CKI

R1
7
RA5/AN4 RC0/T1OSO/T1CKI
RC1/T1OSI
RC2/CCP1
11
12
13
frecuencia. Habitualmente, el cmputo se realiza en un
cdigo binario, que con frecuencia ser el binario
10k 14
RC3
15
RC4
16
RC5
17

PIC16F870
RC6/TX/CK
RC7/RX/DT
18
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 frecuencmetro es un instrumento que sirve para medir la
U1
frecuencia, contando el nmero de repeticiones de una onda en
un intervalo de tiempo, mediante el uso de un contador que
9 21
OSC1/CLKIN RB0/INT
10 22
OSC2/CLKOUT RB1
VDD
VSS

VEE

1 23
RW
RS

D0
D1
D2
D3
D4
D5
D6
D7

MCLR/Vpp/THV RB2
E

24
RB3/PGM
2
RA0/AN0 RB4
25
acumula el nmero de periodos. Dado que la frecuencia se
1
2
3

4
5
6

7
8
9
10
11
12
13
14

3 26
RA1/AN1 RB5
4 27
RA2/AN2/VREF- RB6/PGC
5 28

define como el nmero de eventos de una clase particular


RA3/AN3/VREF+ RB7/PGD
6
RA4/T0CKI
7 11
RA5/AN4 RC0/T1OSO/T1CKI
12
RC1/T1OSI
R1 13
10k
RC2/CCP1
RC3
RC4
RC5
14
15
16
ocurridos en un perodo, es generalmente sencilla su medida.
17
RC6/TX/CK
18
RC7/RX/DT
PIC16F870

3. DESARROLLE UN ODOMETRO Y REGISTRE LOS RESULTADOS EN UN LCD.


LCD1
16_X_2_LCD
Se llama as al aparato que utilizamos para medir la distancia
9
U1
21
recorrida entre dos puntos, o el camino recorrido entre dos
OSC1/CLKIN RB0/INT
10
OSC2/CLKOUT RB1
22
puntos.
VDD
VSS

VEE

1 23
RW
RS

D0
D1
D2
D3
D4
D5
D6
D7

MCLR/Vpp/THV RB2
E

24
RB3/PGM
2 25

Los odmetros llevan mucho tiempo de existir en su forma


RA0/AN0 RB4
1
2
3

4
5
6

7
8
9
10
11
12
13
14

3 26
RA1/AN1 RB5
4 27
RA2/AN2/VREF- RB6/PGC
5 28
RA3/AN3/VREF+ RB7/PGD
6

R1
7
RA4/T0CKI
RA5/AN4 RC0/T1OSO/T1CKI
RC1/T1OSI
RC2/CCP1
11
12
13
mecnica y recientemente, los dispositivos digitales han
empezado a reemplazarlos.
10k 14
RC3
15
RC4
16
RC5
17
RC6/TX/CK
18
RC7/RX/DT
PIC16F870
Existen odmetros que miden la distancia en millas as como
tambin los hay para medir kilmetros y metros, algunos tienen
PERIMETRO
2 la capacidad de borrarse (parciales) y ponerse en cero
mientras que otros son permanentes, los automviles
P= PI * RAIZ 2
generalmente traen un odmetro parcial y uno permanente.

4.DESARROLLE UN TACOMETRO Y REGISTRE LOS RESULTADOS EN UN LCD.

LCD1 Un tacmetro (Del griego, tachos = velocidad y


16_X_2_LCD

metron = medida) es un dispositivo para medir la


9
10
U1
OSC1/CLKIN
OSC2/CLKOUT
RB0/INT
RB1
21
22
velocidad de giro de un eje, normalmente la velocidad de
VDD
VSS

VEE

giro del motor, se mide en Revoluciones por minuto (RPM).


1 23
RW
RS

D0
D1
D2
D3
D4
D5
D6
D7

MCLR/Vpp/THV RB2
E

24
RB3/PGM
2 25
RA0/AN0 RB4
1
2
3

4
5
6

7
8
9
10
11
12
13
14

3 26
RA1/AN1 RB5
4 27
RA2/AN2/VREF- RB6/PGC
5 28
RA3/AN3/VREF+ RB7/PGD
6
RA4/T0CKI
7 11
RA5/AN4 RC0/T1OSO/T1CKI
12
RC1/T1OSI
R1 RC2/CCP1
13
10k 14
RC3
15
RC4
16
RC5
17
RC6/TX/CK
18
RC7/RX/DT
PIC16F870
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 ' PICmicro


DIM Pos as WORD ' Servo Posicin
SYMBOL Pin = PORTA.3 ' Alias servo pin
ALL_DIGITAL = ON ' PORTA TODOS EN FORMA digital
CLS ' LIMPIAR LCD
Pos = 1500 ' Centro servo
PORTA = 0 ' PORTA low
TRISA = %00000111 ' setup porta entrada 0,1 y 2
MXX:
IF PORTA.0 = 0 AND Pos < 3000 Then Inc Pos ' Mover servo izquierda
IF PORTA.1 = 0 Then Pos = 1500 ' Centro servo
IF PORTA.2 = 0 AND Pos > 0 Then Dec Pos ' Mover servo derecha
SERVO Pin , Pos
DELAYMS 5 ' Servo update rate
PRINT AT 1 , 1 , "Posicin=" , Dec Pos , " "
GOTO MXX
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 interface grafica en Visual 2008


SERIALPORT1 ABRE LA CONFIGURACION PARA EL PUERTO SERIAL

IDEA PRINCIPAL, SE CONFIGURA UNA INTERFASE GRAFICA CON 4 BOTONES, QUE TRANSMITIRAN UN
CODIGO EN HEXA. EN ESTE CASO SE TRANSMITEN LETRAS.
NUESTRO RECEPTOR, (EL MICRO) DECODIFICA CADA ELEMENTO Y BUSCARA LA INSTRUCION DESEADA.
EN ESTE CASO SE QUIERE 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 Directivas
ADIN Leer anlogo a bordo de un convertidor digital.
ASM-ENDASM Inserte el cdigo de la seccin de idiomas.
BOX dibujar un cuadrado en un LCD grfico.
BRANCH computarizada (equivalente a ON GOTO ..).
BRANCHL se ramifican de la pgina (Long Branch).
BREAK Salir de un FOR-NEXT, REPEAT-UNTIL, o mientras WEND antes de tiempo.
BSTART Enviar una condicin START para el bus I2C.
BStop Enviar un estado de STOP al bus I2C.
BRESTART Enviar una condicin RESTART "para el bus I2C.
Busack Enviar una condicin RECONOCEN al bus I2C.
Busin Lee bytes de un dispositivo I2C.
BUSOUT Escribe bytes a un dispositivo I2C.
BUTTN Detecta rebote al pulsar una tecla.
Call Subrutina en lenguaje ensamblador.
CDATA Definir inicial contenido de la memoria.
CIRClE Dibuje un crculo en un LCD grfico.
CLEAR Coloque una variable o en un estado de bajo,o borrar todas las reas de RAM.
CLEARBIT 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 telefona.
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