39
PROTON IDE GRENELECTRONIC DESARROLLO CON MICROCONTROLADORES PIC Índice 1. Introducción 2. Código de programación Basic 3. Códigos Binario, hex., Decimal, ASCII 4. Programación I Laso abierto, secuencia Actividades de programación I 5. Programación II Laso cerrado, compuertas lógicas Secuencia de control y carga Actividades de programación II 6. Programación III Display de 7 segmentos Actividades de programación III 7. Programación IV LCD, lm35, instrumentación Actividades de programación IV 8. Programación V Motores, Servos y PAP Actividades de programación V 9. Programación VI Robótica sensorial Actividades de programación VI 10. Programación VII Visual Basic Comunicación serial rx tx Actividades de Programación VII

PROTON+IDE

Embed Size (px)

DESCRIPTION

PROTON IDE

Citation preview

PROTON IDE

PROTON IDEGRENELECTRONIC DESARROLLO CON MICROCONTROLADORES PICndice1. Introduccin

2. Cdigo de programacin Basic

3. Cdigos Binario, hex., Decimal, ASCII4. Programacin I Laso abierto, secuencia

Actividades de programacin I

5. Programacin II

Laso cerrado, compuertas lgicas Secuencia de control y carga

Actividades de programacin II6. 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 asignadaLos 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 BasicUn 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 IDECONFIGURAR 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 recomiendaDim 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 GRAFICOLCD_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 TECLADOKeypad_Port = PORTB

CONFIGURAR COMUNICACIN SERIALSerial_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 entradaTRISA=1 'declaro que el puerto A es entrada pero solo el pin.0TRISA.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 salidaTRISA=0 'declaro que el puerto A es salidaTRISA.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 xx8Low xx8Low 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.1Symbol 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 inicioRETARDOS

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 ccCONTAR 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_2IF 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 10DELAYMS 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 200INC VAR1 UNTIL VAR1 > 10Configurar una entrada analgica

Declare ADIN_RES10 'resolucinDeclare ADIN_TAD2 'CLK options are 0, 1, 2, 3 (0-2 are based on internal cycles)

Declare ADIN_STIME100 'tiempo de muestreoADCON1 = %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 ?

ASCII

Hex

Smbolo

64656667686970717273747576777879

404142434445464748494A4B4C4D4E4F

@ABCDEFGHIJKLMNO

ASCII

Hex

Smbolo

80818283848586878889909192939495

505152535455565758595A5B5C5D5E5F

PQRSTUVWXYZ[\]^_

ASCII

Hex

Smbolo

96979899100101102103104105106107108109110111

606162636465666768696A6B6C6D6E6F

`abcdefghijklmno

ASCII

Hex

Smbolo

112113114115116117118119120121122123124125126127

707172737475767778797A7B7C7D7E7F

pqrstuvwxyz{|}~

Programacin IEl 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 abierto1-ACTIVEMOS UN LED, pero con un destello

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 0DelayMS 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

End 'FIN DE LA RUTINA

2-ACTIVEMOS UN LED, destello infinitoDevice 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 0DelayMS 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 pausaDevice 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 0DelayMS 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 PROGRAMA4-ACTIVEMOS UN LED, cambiando el pin

Device 16F870 'microcontroladorXtal = 20 'velocidad

TRISB=0 ' DECLARO PUERTO B SALIDA

PORTB=0 ' ASEGURO EL PUERTO B LOW

E: 'ETIQUETA

PORTB.5=1 'ENVIO UN NIVEL ALTO AL PIN 5DelayMS 100 ' EL LED SE MANTIENE ACTIVO POR 100mSEG

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 PROGRAMA5-ACTIVEMOS UN LED, cambiando de puerto

Device 16F870 'microcontrolador

Xtal = 20 'velocidad

TRISC=0 ' DECLARO PUERTO C SALIDA

PORTC=0 ' ASEGURO EL PUERTO C LOW

E: 'ETIQUETA

PORTC.0=1 'ENVIO UN NIVEL ALTO AL PIN 5DelayMS 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

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.

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

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.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 IISi 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.

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.

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______Endif1-ACTIVANDO UN LED, por un pulsador, enviando un1(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 = 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)

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 0DelayMS 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)

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 ledPORTB.0=1 'ENVIO UN NIVEL ALTO AL PIN 0DelayMS 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

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

button1button2led

000

011

101

110

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 principio5-ACTIVANDO UN LED, por 2 pulsadores, segn tabla con sub. Programasbutton1button2led

000

011

101

111

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 programaPORTB.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.

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.

3. DESARROLLE UN SISTEMA PROGRAMADO QUE ACTIVE LAS 8 COMPUERTAS LOGICAS CON EL 16F870, BUFFER, OR, AND, NOT, XOR, NAND, NOR Y XNORProgramacin IIIACTIVANDO 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 comunPORTB=%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

Device 16F870

Dim num As Byte

Dim vec As Byte

TRISB = 0 prog:

For vec = 0 To 9

LookUp vec, [191,134,219,207,230,237,253,135,255,239], numPORTB=num

DelayMS 500

Next vec

GoTo prog

End

2. ACTIVE UN DISPLAY DE CATODO COMUN, FORMANDO LOS NUMEROS DEL 0 AL 9 (Baja - sube)

Device 16F870

Dim vec As Byte

Dim num As Byte TRISB = 0 prog:

For vec=0 To 9

LookUp vec, [191,134,219,207,230,237,253,135,255,239], numPORTB=num

DelayMS 500

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 vectoresDevice 16F870

Dim vec[10] As Byte

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 conteoDevice 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 vec200 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