You are on page 1of 31

03/06/13

Mis primeros programas con PIC16F84A y PIC16F628A

uControl
Junio 03, 2013, 02:05:09

Bienvenido(a), Visitante. Por favor, ingresa o regstrate. Perdiste tu email de activacin?


Siempre Ingresar Ingresar con nombre de usuario, contrasea y duracin de la sesin

Buscar
IN IC IO A YU DA BU S C A R IN G RE S A R RE G IS TRA RS E

uControl > Articulos, circuitos, tutoriales y Revista uControl > Tutoriales, guias y cursos en uControl > Mis primeros programas con PIC16F84A y PIC16F628A

anterior prximo
Pginas: [1 ] 2 3 Autor Ir Abajo
IM P RIM IR

Tema: Mis primeros programas con PIC16F84A y PIC16F628A (Ledo 115761 veces)

0 Usuarios y 2 Visitante s e stn vie ndo e ste te m a.

Leon Pic
Mode rador dsPIC De scone ctado Se x o: Me nsaje s: 5113

Mis primeros programas con PIC16F84A y PIC16F628A


: Marzo 30, 2009, 12:45:48

Este tutorial, est creado por Suky en el foro de Todopic. Por pedido de l, voy a subir en nombre de l, este magnfico curso y lo ir actualizando a la par. Por favor, si tienen comentarios o sugerencias, hacerlas en este hilo creado especialmente para ello, a fin de mantener este "limpio" y facil de leer.

C um ulonim bus

Mis primeros programas. PIC16F84A y PIC16F628A


EL PIC16F84A
La idea de este tutorial es ayudar a los que recin estn empezando, aqu mostraremos como comenzar. Usaremos en primer lugar el microcontrolador PIC16F84A, porque es el que por lo general se usa en la enseanza. Comenzaremos explicando como esta constituido, los terminales, manejo de corrientes de los puertos, osciladores externos, circuito de reset, memoria de programa y memoria de datos. Luego iremos a lo interesante, que es la programacin, nuestros primeros programitas, de los cuales se tratar de explicarlos detalladamente, el funcionamiento y los registros que se usan en cada caso.Se abarcaron los temas como:
www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/mis-primeros-programas-pic16f84a-y-pic16f628a/?PHPSESSID=6hvnibq0r09kvuigkmkges 1/31

03/06/13

Mis primeros programas con PIC16F84A y PIC16F628A

Mi Primer Programa, control de un led Creacin de Demoras, Led titilando Creacin de Tablas, Control Display 7 Segmentos Direccionamiento Indirecto, Control Display 7 Segmentos Control de varios Displays 7 Segmentos Interrupciones, Registros y guardado temporario de STATUS y W Interrupcin TMR0, modo Temporizador Interrupcin TMR0, modo Contador Interrupcin RB0, Control de Led Interrupcin RB4 a RB7, Control Teclado Matricial Control del LCD, Pantalla de Cristal Liquido Comunicacin RS232 Todas las simulaciones hechas en proteus, aqui (Para el PIC16F84A)

EL PIC16F628A
Luego se explicar el uso del PIC16F628A, una introduccin a sus caracteristicas y ejemplos de los mdulos que incorpora este PIC: Introduccin Timer1 + Ejemplo Timer2 + Ejemplo Mdulo de comunicacin serie (Usart) + Ejemplo Comparadores analgicos + Ejemplo Introduccin Mdulo CCP Modo Captura Modo Comparador Modo PWM Como hacer Cartel de Leds 7x32.-

Herramientas
Para realizar todo esto se necesitan las siguientes herramientas: Software para escribir nuestro cdigo y compilar: MPLAB Software para simular: Proteus Una plaquita programadora. Software para grabar nuestro PIC, se puede usar el WinPic800 o el Icprog Aqu dejo un tutorial de como crear un proyecto en MPLAB, compilar y simular. Un programador de PIC sencillo que pueden armar (Programador
www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/mis-primeros-programas-pic16f84a-y-pic16f628a/?PHPSESSID=6hvnibq0r09kvuigkmkges 2/31

03/06/13

Mis primeros programas con PIC16F84A y PIC16F628A

JDM Serial)(circuito, PCB para hacer la plaqueta y una pequea explicacin de cmo grabar con WinPIC800) y un tutorial para crear placas de circuito impreso (PCB) por el mtodo de la plancha ---> Tutoriales Y por supuesto, para probar nuestros programitas, un Protoboard, PIC16F84A, PIC16F628A , un cristal de 4 MHz, un par de resistencias, capacitores, leds, Display, LCD, teclado matricial, etc

DATASHEETS
DATASHEET del PIC16F84A DATASHEET del PIC16F628A ConfigPIC: Software utilitario para crear automticamente el cdigo de configuracin de estos PICs, adems de tener otras herramientas que nos permite calcular temporizaciones, Baud Rate, PWM, etc.

[/list]
16f84aGif.gif (12.7 KB - de scargado 63016 ve ce s.) ltima modificacin: Octubre 29, 2009, 10:46:53 por Suky En lne a

Je ss dijo, yo soy e l C AMINO , la VER DAD y la VIDA, nadie lle ga al PADR E si no e s por m i.

Leon Pic
Mode rador dsPIC De scone ctado Se x o: Me nsaje s: 5113

Re: Mis primeros programas con PIC16F84A y PIC16F628A


Respuesta #1 : Marzo 30, 2009, 12:49:24

PIC16F84A
Introduccin El PIC16F84A esta fabricado en tecnologa CMOS, posee memoria FLASH, y consumo bajo de potencia. Est compuesto bsicamente de una memoria ROM (1024 palabras de memoria de programa), una memoria RAM (de acceso aleatorio, 68 bytes), lneas de entrada y salida (2 Puertos) y una lgica de control que coordina la interaccin de los dems bloques. Estos micros pertenecen a la gama media y dispones de un set de 35 instrucciones, tipo RISC (Computador con Set de Instrucciones Reducido) pocas pero muy poderosas.3/31

C um ulonim bus

www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/mis-primeros-programas-pic16f84a-y-pic16f628a/?PHPSESSID=6hvnibq0r09kvuigkmkges

03/06/13

Mis primeros programas con PIC16F84A y PIC16F628A

Algunas funciones especiales que dispone este PIC: Temporizador programable (Timer). Si se quiere medir periodos de tiempo entre eventos, generar temporizaciones o salidas con frecuencia especfica, etc. Perro Guardin o Watchdog. Consiste en un temporizador que, cuando se desborda ya pasa por 0, provoca un reset automtico, utilizado para sistemas que no tienen control de un supervisor, y al bloquearse el micro se resetea. Si se utiliza el cdigo debe resetearlo antes de que se desborde. Memoria EEPROM de 64 bytes, para guardar datos que no se alteran a pesar de quitar la alimentacin. Interrupciones, cuando una seal externa, o una condicin interna activa una lnea de interrupcin, dejando de lado la tarea que esta ejecutando, atiende dicha interrupcin y luego contina con lo que estaba haciendo. Proteccin ante fallo de alimentacin. Se trata de un circuito que resetea al micro cuando el voltaje Vdd es inferior al mnimo. Estado de bajo consumo. Sleep. Si el micro debe esperar mucho tiempo sin hacer nada, posee una instruccin especial, Sleep, que lo pasa al estado de reposo. Al activarse una interrupcin se despierta y reanuda su trabajo. (Reset externo, desbordamiento de Watchdog, interrupcin por RB0, interrupcin por cambio de nivel en RB4 a RB7, interrupcin por escritura completada en EEPROM) Veamos el diagrama de pines, para ver como estn distribuidos sus pines. Este microcontrolador cuenta con dos puertos configurables como estradas y salidas, y consta de 18 pines los cuales se encuentran asignados de la siguiente manera:

El puerto A tiene solo cinco pines, el pin 3, sea, RA4/TOCKI puede ser configurado a su vez como entrada/salida o como temporizador/contador. Cuando es salida se comporta como colecto abierto, por lo tanto debemos poner una resistencia Pull-up a Vdd de 1 Kohm. Cuando se configura como entrada, funciona como disparador Schmitt Trigger por lo que puede reconocer seales con un poco de distorsin. El puerto B tiene 8 pines que pueden ser configurados como entrada/salida. RB0 puede programarse adems como entrada de interrupcin externa. Los pines RB4 a RB7 pueden programarse para responder a interrupciones por cambio de estado y los pines RB6 y RB7 se corresponden con lneas de entrada de reloj y entrada de datos cuando esta en modo programacin. MCLR/Vpp, es la entrada de reset si esta a nivel bajo, tambin es habilitador de tensin de programacin. Cuando su tensin es Vdd el PIC funciona normalmente. Vss y Vdd, son los pines de masa y alimentacin. La tensin de alimentacin esta comprendida entre los 2 y 5.5 Volt. OSC1/CLKIN y OSC2/CLKOUT, pines de entrada externa de reloj y salida de oscilador a cristal respectivamente.www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/mis-primeros-programas-pic16f84a-y-pic16f628a/?PHPSESSID=6hvnibq0r09kvuigkmkges 4/31

03/06/13

Mis primeros programas con PIC16F84A y PIC16F628A

Capacidad de corriente de los puertos. La mxima capacidad de corriente de cada uno de los pines de los puertos en modo sumidero es de 25 mA y modo fuente de 20 mA. La mxima capacidad de corriente total de los puestos es, Puerto A: Modo sumidero 80 mA; Modo fuente 50 mA. Puerto B: Modo sumidero 150 mA; Modo fuente 100 mA. El Oscilador externo. Es un circuito externo que le indica al microcontrolador la velocidad a la que debe trabajar. Puede utilizar cuatro tipos distintos: RC , Oscilador con resistencia y condensador (Poco preciso) XT, Cristal de cuarzo. HS, Cristal de alta velocidad LP, Cristal de baja frecuencia y bajo consumo de potencia. Al momento de programar un micro se debe especificar que tipo de oscilador se usa. Internamente la frecuencia del oscilador es dividida por 4, as que si temeos un oscilador de 4 MHz, la frecuencia de trabajo es de 1 MHz, por lo que cada instruccin se ejecuta cada 1 us. Aqu utilizaremos un cristal XT de 4 MHz que debe ir acompaado de dos condensadores:

Reset. El PIC 16F84A posee un temporizador interno conectado al pin de reset, que funciona cuando se da alimentacin al microcontrolador. Esto hace que al encender el sistema el microcontrolador quede en reset por un tiempo mientras se estabilizan todas las seales del circuito. Para tener control sobre el reset se utiliza el siguiente circuito:

www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/mis-primeros-programas-pic16f84a-y-pic16f628a/?PHPSESSID=6hvnibq0r09kvuigkmkges

5/31

03/06/13

Mis primeros programas con PIC16F84A y PIC16F628A

ltima modificacin: Julio 30, 2009, 02:20:20 por Suky

En lne a

Je ss dijo, yo soy e l C AMINO , la VER DAD y la VIDA, nadie lle ga al PADR E si no e s por m i.

Leon Pic
Mode rador dsPIC De scone ctado Se x o: Me nsaje s: 5113

Re: Mis primeros programas con PIC16F84A y PIC16F628A


Respuesta #2 : Marzo 30, 2009, 12:50:02

Estructura interna del Microcontrolador.


Arquitectura del PIC, existen dos arquitecturas, la clsica de Von Neumann y la arquitectura Harvard, esta ultima es la que usan los PICs. Dispone de dos memorias independientes, una que contiene solo instrucciones y la otra solo contiene datos. Ambas disponen de sus respectivos buses de acceso y es posible realizar operaciones de acceso simultneamente en ambas.

C um ulonim bus

Memoria del programa. Aqu almacenamos nuestro programa o cdigo que debe ejecutar, en el PIC16F84A es FLASH, es rpida, de bajo consumo y alta capacidad de almacenamiento. Se divide en 2048 posiciones, pero este PIC solo tiene implementadas 1024 posiciones, de 0x00 hasta 0x3FF.

www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/mis-primeros-programas-pic16f84a-y-pic16f628a/?PHPSESSID=6hvnibq0r09kvuigkmkges

6/31

03/06/13

Mis primeros programas con PIC16F84A y PIC16F628A

Cuando ocurre un reset, el contador de programa (PC) apunta a la direccin 0x00, y el micro inicia nuevamente. Aqu se debe escribir todo lo relacionado con la iniciacin del mismo, por ejemplo configuracin de puertos, etc. Si ocurre una interrupcin PC apunta a la direccin 0x04, y aqu debemos escribir el cdigo necesario para atender a dicha interrupcin. Memoria RAM esttica. Donde se encuentran los 24 registros especficos (SFR) y 68 registros de propsito general (GPR). Se halla dividida en 2 Bancos de 128 bytes cada uno.

www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/mis-primeros-programas-pic16f84a-y-pic16f628a/?PHPSESSID=6hvnibq0r09kvuigkmkges

7/31

03/06/13

Mis primeros programas con PIC16F84A y PIC16F628A

Algo que se debe tener en cuenta es la pila o Stack, que consta de 8 posiciones, cada posicin contiene la direccin y datos de la instruccin que se esta ejecutando, as cuando se ejecuta una llamada call o una interrupcin, el PC sabe donde regresar. (Limitar las llamadas anidadas)

En lne a Je ss dijo, yo soy e l C AMINO , la VER DAD y la VIDA, nadie lle ga al PADR E si no e s por m i.

Leon Pic
Mode rador dsPIC

Re: Mis primeros programas con PIC16F84A y PIC16F628A


Respuesta #3 : Marzo 30, 2009, 12:52:18
8/31

www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/mis-primeros-programas-pic16f84a-y-pic16f628a/?PHPSESSID=6hvnibq0r09kvuigkmkges

03/06/13

Mis primeros programas con PIC16F84A y PIC16F628A

de nuestro cdigo: De scone ctado


Se x o: Me nsaje s: 5113

A continuacin vamos a desarrollar nuestro primer programa. Considero que se tiene conocimiento del lenguaje Assembler, si no es as se puede leer el tutorial ASM desde cero de este mismo foro. Este activar un led conectado a RB0 siempre que el interruptor conectado a RA0 este cerrado. Para ello vamos a necesitar el siguiente circuito:

C um ulonim bus

En RA0 tenemos conectado un pulsador de forma que cuando lo pulsemos se introduzca un cero lgico en el pin y cuando no lo pulsemos se introduzca un uno lgico. Tenemos un Led con su correspondiente resistencia limitadora de corriente en el pin RB0. Diagrama de Flujo:

www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/mis-primeros-programas-pic16f84a-y-pic16f628a/?PHPSESSID=6hvnibq0r09kvuigkmkges

9/31

03/06/13

Mis primeros programas con PIC16F84A y PIC16F628A

Primero que nada debemos especificar con que microcontrolador estamos trabajando, esto lo realizamos es las dos primeras lneas:
Cdigo: (asm) ;* * * *E n c a b e z a d o* * * * l i s tp = 1 6 F 8 4 A # i n c l u d eP 1 6 F 8 4 A . i n c

En el archive P16F84A.inc se encuentran las definiciones de las direcciones de los registros especficos, los bits utilizados en cada registro y los fusibles del micro. Configuracin de fusibles. Hay ciertos aspectos del PIC que han de ser activados o desactivados mediante hardware a la hora de programarlo. Esto quiere decir que no se pueden volver a cambiar hasta que el chip no se reprograme de nuevo. El PIC16F84A dispone de 4 fuses (los modelos superiores tienen ms). Cada fuse activa o desactiva una opcin de funcionamiento. OSC: Este fuse controla el modo de oscilacin que usar el PIC para funcionar. Como ya sabemos, el oscilador se puede configurar de 4 maneras distintas, dependiendo de la velocidad y del tipo de circuito oscilador empleado. WDT: El famoso "perro guardin" del PIC se configura aqu. Esta es una capacidad del microcontrolador de autorresetearse. PWRT: Si activamos este fuse, lo que conseguimos es que se genere un retardo en la inicializacin del microcontrolador. CP: Activando este fuse tendremos la garanta de que el cdigo que escribamos en el PIC no pueda ser ledo por otra persona, para que no nos lo copien, modifiquen, etc. (Code Protection). Esto no impide que el PIC funcione como siempre, ni que no se pueda sobrescribir su contenido
Cdigo: (asm)

www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/mis-primeros-programas-pic16f84a-y-pic16f628a/?PHPSESSID=6hvnibq0r09kvuigkmkge

10/31

03/06/13

Mis primeros programas con PIC16F84A y PIC16F628A

_ _ C O N F I G

_ C P _ O F F&_ W D T _ O F F&_ P W R T E _ O N&_ X T _ O S C

Definicin de variables que utilizaremos en nuestro proyecto. En este caso solo definiremos bits, por ejemplo Led y Pulsador. Para organizar nuestro programa lo estructuraremos de la siguiente manera: Nivel Directiva Operandos ; Comentarios

Cdigo: (asm) ; * * * *D e f i n i c i o nd ev a r i a b l e s* * * * L e d e q u 0 ;D e f i n i m o sL e dc o m oe lb i tc e r od eu nr e g i s t r o ,e ne s t ec a s oP O R T P u l s a d o r e q u 0 ;D e f i n i m o sP u l s a d o rc o m oe lb i t0 ,e ne s t ec a s os e r ap a r aP O R T A

Configuracin de puertos. Para la configuracin necesitamos los siguientes registros: STATUS > 0x03; PORTA > 0x05; PORTB > 0x06; TRISA > 0x86 y TRISB > 0x86. Por defecto los puertos quedan configurados como entradas de datos y si se quiere cambiar hay que configurarlos. Esto se realiza con los registros TRISA y TRISB, teniendo en cuenta que si se asigna un cero (0) a un pin, quedara como salida y si se asigna un uno (1), quedara como entrada. En nuestro caso se necesita colocar TRISA igual a 11111 (o se puede dejar por default) y TRISB 11111110. Ahora bien, cuando el PIC arranca se encuentra en el Banco 0, TRISA y TRISB se encuentran en el Banco 1, entonces debemos cambiar de Banco. Esto se realiza con el bit RP0 del registro STATUS. Si este se pone un cero a RP0, estaremos en el Banco 0. Si se coloca un uno, estaremos en el Banco 1. Registro de trabajo W: es el registro ms importante que tiene el microcontrolador y es denominado ACUMULADOR. Este registro almacena temporalmente uno de los datos que intervienen en la operacin de la Unidad lgica y Aritmtica (ALU). ALU como indica su nombre, realiza las operaciones aritmticas y lgicas previstas en el coleccin de instrucciones del microcontrolador.
Cdigo: (asm) ; * * * *C o n f i g u r a c i o nd ep u e r t o s* * * R e s e t o r g 0 x 0 0 ;A q u ic o m i e n z ae lm i c r o . g o t o i n i c i o ;S a l t oai n i c i od em ip r o g r a m a . o r g 0 x 0 5 ;O r i g e nd e lc d i g od ep r o g r a m a . I n i c i o b s f S T A T U S , R P 0 ;P a s a m o sd eB a n c o0aB a n c o1 . m o v l w b ' 1 1 1 1 1 ' ;M u e v o1 1 1 1 1aW . m o v w f T R I S A ;C a r g oe nT R I S A . m o v l w b ' 1 1 1 1 1 1 1 0 ' m o v w f T R I S B b c f S T A T U S , R P 0 ;P a s od e lB a n c o1a lB a n c o0 b c f P O R T B , L e d ;C o m i e n z aa p a g a d o . -

Ya configurado nuestro PIC, vamos a realizar la rutina que ejecutara.


Cdigo: (asm)

www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/mis-primeros-programas-pic16f84a-y-pic16f628a/?PHPSESSID=6hvnibq0r09kvuigkmkge

11/31

03/06/13

Mis primeros programas con PIC16F84A y PIC16F628A

; * * * *C o n t r o ld eL e d* * * * B u c l e b t f s c P O R T A , P u l s a d o r ;P r e g u n t a m o ss ie s t ae n0l o g i c o . g o t o A p a g a r ;E s t aa1l o g i c o ,A p a g a m o sL e d . b s f P O R T B , L e d ;E s t aa0l o g i c o ,E n c e n d e m o sL e d . g o t o B u c l e ;T e s t e a m o sn u e v a m e n t el ac o n d i c i o nd e lP u l s a d o r . A p a g a r b c f g o t o e n d P O R T B , L e d B u c l e ; A p a g a m o sL e d . ;T e s t e a m o sn u e v a m e n t el ac o n d i c i o nd e lP u l s a d o r . -

Aqu solamente en un bucle infinito testeamos continuamente el estado del pulsador, y segn su estado se encender o apagar el Led.-

ltima modificacin: Julio 30, 2009, 02:23:57 por Suky

En lne a

Leon Pic
Mode rador dsPIC De scone ctado Se x o: Me nsaje s: 5113

C um ulonim bus

Je ss dijo, yo soy e l C AMINO , la VER DAD y la VIDA, nadie lle ga al PADR E si no e s por m i. ;* * * *E n c a b e z a d o* * * * l i s tp = 1 6 F 8 4 A # i n c l u d eP 1 6 F 8 4 A . i n c _ _ C O N F I G _ C P _ O F F&_ W D T _ O F F&_ P W R T E _ O N&_ X T _ O S C ; * * * * Re: D e f Mis i n i c i primeros o nd ev a r i a b programas l e s* * * * con PIC16F84A y PIC16F628A L e d Respuesta e #4 q u: Marzo 0 30, 2009, ;D e f 12:55:13 i n i m o sL e d c o m oe lb i tc e r od eu nr e g i s t r o ,e ne s t ec a s oP O R T P u l s a d o r e q u 0 ;D e f i n i m o sP u l s a d o rc o m oe lb i t0 ,e ne s t ec a s os e r ap a r aP O R T A ; * * * *C o n f i g u r a c i o nd ep u e r t o s* * * Programa completo: R e s e t o r g 0 x 0 0 ;A q u ic o m i e n z ae lm i c r o . Cdigo: (asm) g o t o I n i c i o ;S a l t oai n i c i od em ip r o g r a m a . o r g 0 x 0 5 ;O r i g e nd e lc o d i g od ep r o g r a m a . I n i c i o b s f S T A T U S , R P 0 ;P a s a m o sd eB a n c o0aB a n c o1 . m o v l w b ' 1 1 1 1 1 ' ;M u e v o1 1 1 1 1aW . m o v w f T R I S A ;C a r g oe nT R I S A . m o v l w b ' 1 1 1 1 1 1 1 0 ' m o v w f T R I S B b c f S T A T U S , R P 0 ;P a s od e lB a n c o1a lB a n c o0 b c f P O R T B , L e d ;C o m i e n z aa p a g a d o . ; * * * *C o n t r o ld eL e d* * * * B u c l e b t f s c P O R T A , P u l s a d o r ;P r e g u n t a m o ss ie s t ae n0l o g i c o . g o t o A p a g a r ;E s t aa1l o g i c o ,A p a g a m o sL e d . b s f P O R T B , L e d ;E s t aa0l o g i c o ,E n c e n d e m o sL e d . g o t o B u c l e ;T e s t e a m o sn u e v a m e n t el ac o n d i c i o nd e lP u l s a d o r . A p a g a r b c f g o t o e n d P O R T B , L e d B u c l e ; A p a g a m o sL e d . ; T e s t e a m o sn u e v a m e n t el ac o n d i c i o nd e lP u l s a d o r . -

Bueno aqu ya tenemos nuestro programita terminado, solo falta compilarlo y simularlo para detectar errores, esto esta mnimamente explicado en el tutorial del Utilitario MPLAB adjuntado al principio.Se adjunta el circuito realizado en Proteus para simulacin.C ontrol Le d.rar (84.08 KB - de scargado 1128 ve ce s.) En lne a Je ss dijo, yo soy e l C AMINO , la VER DAD y la VIDA, nadie lle ga al PADR E si no e s por m i.

Leon Pic
Mode rador dsPIC

Re: Mis primeros programas con PIC16F84A y PIC16F628A


Respuesta #5 : Marzo 30, 2009, 12:56:37

www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/mis-primeros-programas-pic16f84a-y-pic16f628a/?PHPSESSID=6hvnibq0r09kvuigkmkge

12/31

03/06/13

Mis primeros programas con PIC16F84A y PIC16F628A

Creacin de Demoras:
De scone ctado Se x o: Me nsaje s: 5113

Ciclo de maquina: Es la unidad bsica de tiempo que utiliza el microcontrolador y equivale a 4 ciclos de reloj. sea, si tenemos un oscilador de 4 MHz, el ciclo de reloj seria de 250 ns y el ciclo maquina de 1 us. Las instrucciones del microcontrolador necesitan 1 ciclo maquina excepto algunas excepciones, como son los comandos que incluyen saltos (goto, call, btfss, btfsc, return, etc) que necesitan dos ciclos maquina. Demoras mediante lazo simple
Cdigo: (asm) D e m o r a _ x x u s m o v l w m o v w f R e p e t i c i o n D e c f s z g o t o r e t u r n

C um ulonim bus

0 x X X C o n t a d o r C o n t a d o r R e p e t i c i o n

;C a r g a m o sv a l o rX Xq u ec o n t r o l ad u r a c i n( 1 ) ;I n i c i a m o sC o n t a d o r( 1 )

;D e c r e m e n t ac o n t a d o rys ie sc e r os a l e ( 1s in os a l e ,2s is a l e ) ;N oe s0 ,r e p e t i m o s( 2 ) ;R e g r e s a m o sd el as u b r u t i n a( 2 )

Entre parntesis se muestra el nmero de ciclos que demora cada instruccin.De manera que el nmero de ciclos de instruccin Tsub consumidos por la rutina, incluyendo los 2 ciclos de la llamada (CALL) sern Tsub = [2 + 1 + 1 + (0xXX - 1)*(1 + 2) + 2 + 2] ciclos = (3*0xXX + 5) *Tcy Donde Tcy es la duracin en segundos de un ciclo de instruccin. Utilizando un oscilador de 4 MHz la mayor duracin posible es de 770 us, con 0xXX = 0xFF.Demoras mediante Lazos anidados Para lograr demoras de mayor duracin deben utilizarse lazos anidados, poniendo un lazo de demora dentro de otro.
Cdigo: (asm) D e m o r a _ x x m o v l w m o v w f R e p e t i c i o n 1 m o v l w m o v w f R e p e t i c i o n 2 d e c f s z g o t o d e c f s z g o t o r e t u r n

0 x X X C o n t a d o r 1 0 x Y Y C o n t a d o r 2 C o n t a d o r 2 , 1 R e p e t i c i o n 2 C o n t a d o r 1 , 1 R e p e t i c i o n 1

;( 1 ) ;( 1 ) ;( 1 ) ;( 1 ) ;( 1s in os a l e ,2s is a l e ) ;( 2 ) ;( 1s in os a l e ,2s is a l e ) ;( 2 ) ;( 2 )

La duracin de esta rutina en ciclos de reloj ser Tsub = 2 + 1 + 1 + (0xXX)*[1 + 1 + (0xYY - 1)*(1 + 2) + 2 + 1 + 2] + [1 + 1 + (0xYY - 1)*(1 + 2) + 2 + 2 + 2] ciclos Lo cual se puede simplificar como sigue Tsub = [0xXX*((0xYY - 1)*3 + 7) + 5] Tcy En este caso el mximo que se puede conseguir es de aprox. 196 milisegundos.Bueno ahora que se entiende como se realizan las demoras, les adjunto un
www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/mis-primeros-programas-pic16f84a-y-pic16f628a/?PHPSESSID=6hvnibq0r09kvuigkmkge 13/31

03/06/13

Mis primeros programas con PIC16F84A y PIC16F628A

programita que obtiene el cdigo necesario para una pausa, ingresando el valor de la misma y la frecuencia del oscilador utilizado.calde lay.zip (91.32 KB - de scargado 705 ve ce s.) ltima modificacin: Julio 30, 2009, 02:21:06 por Suky En lne a

Je ss dijo, yo soy e l C AMINO , la VER DAD y la VIDA, nadie lle ga al PADR E si no e s por m i.

Leon Pic
Mode rador dsPIC De scone ctado Se x o: Me nsaje s: 5113

Re: Mis primeros programas con PIC16F84A y PIC16F628A


Respuesta #6 : Marzo 30, 2009, 12:57:40

Ejemplo: En este ejemplo se explicar como calcular demoras. Se har titilar un led conectado a RB0 siempre que el interruptor conectado a RA0 este cerrado. Diagrama de Flujo:

C um ulonim bus

Cdigo: (asm)
www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/mis-primeros-programas-pic16f84a-y-pic16f628a/?PHPSESSID=6hvnibq0r09kvuigkmkge 14/31

03/06/13

g o t o

Mis primeros programas con PIC16F84A y PIC16F628A B u c l e ;T e s t e a m o sn u e v a m e n t el ac o n d i c i o nd e lP u l s a d o r

A p a g a r b c f P O R T B , L e d g o t o B u c l e ; * * * *D e m o r a* * * * D e m o r a _ 1 5 0 m s m o v l w 0 x F F m o v w f C o n t a d o r 1 R e p e t i c i o n 1 m o v l w 0 x C 3 m o v w f C o n t a d o r 2 R e p e t i c i o n 2 d e c f s z C o n t a d o r 2 , 1 g o t o R e p e t i c i o n 2 d e c f s z C o n t a d o r 1 , 1 g o t o R e p e t i c i o n 1 r e t u r n e n d

; A p a g a m o sL e d . ;T e s t e a m o sn u e v a m e n t el ac o n d i c i o nd e lP u l s a d o r . -

; ;I n i c i a m o sc o n t a d o r 1 . ; ;I n i c i a m o sc o n t a d o r 2 ;D e c r e m e n t aC o n t a d o r 2ys ie s0s a l e . ;S in oe s0r e p e t i m o sc i c l o . ;D e c r e m e n t aC o n t a d o r 1 . ;S in oe sc e r or e p e t i m o sc i c l o . ;R e g r e s ad el as u b r u t i n a . -

Le d Titilando.rar (84.9 KB - de scargado 713 ve ce s.) En lne a Je ss dijo, yo soy e l C AMINO , la VER DAD y la VIDA, nadie lle ga al PADR E si no e s por m i.

Leon Pic
Mode rador dsPIC De scone ctado Se x o: Me nsaje s: 5113

Re: Mis primeros programas con PIC16F84A y PIC16F628A


Respuesta #7 : Marzo 30, 2009, 01:00:03

Creacin de Tablas:
Un Display es una coleccin de Leds ubicados de forma estratgica. Si se los agrupa uniendo sus ctodos ser de CTODO COMUN, o bien agrupando sus nodos, un Display de ANODO COMUN. Por otro lado estos Leds pueden ser fabricados en forma de Puntos o Segmentos, tal es as que se encuentran Display de 7 segmentos, como los de la imagen:

C um ulonim bus

www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/mis-primeros-programas-pic16f84a-y-pic16f628a/?PHPSESSID=6hvnibq0r09kvuigkmkge

15/31

03/06/13

Mis primeros programas con PIC16F84A y PIC16F628A

El programa que realizaremos leer la cantidad de veces que se activa un pulsador y mostraremos el resultado. Conectaremos el Display en forma directa, es decir conectando el puerto B del micro a los pines del Display, y luego encender cada uno de los segmentos del Display para visualizar el valor correspondiente. Para ello crearemos una tabla que contenga los distintos cdigos para el numero que necesitemos visualizar.

Es obvio que con un solo display solamente podremos contar de 0 a 9.


www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/mis-primeros-programas-pic16f84a-y-pic16f628a/?PHPSESSID=6hvnibq0r09kvuigkmkge 16/31

03/06/13

Mis primeros programas con PIC16F84A y PIC16F628A

Diagrama de Flujo:

Antes de continuar tratare de explicar algunos registros importantes: El PC. Direccionamiento del programa: Especifica la direccin de la instruccin que se ejecutar. Consta de 13 bits, con lo que es posible direccionar hasta 8K palabras, pero en el 16F84A solo se implementa 1k.

La parte alta del contador de programa (PCH) no se puede acceder directamente, ella debe cargarse desde los 5 bits ms bajos del registro llamado PCLATCH (direccin 0x08). En la creacin de tablas, la posicin a leer de la misma se realiza con el control del registro PCL. Este registro es de 8 bits, por lo que direcciona solo 256 posiciones, por ello se debe tener en cuenta: La posicin de la tabla en la memoria de programa. El tamao de la tabla, si nuestra tabla tiene mas de 255 posiciones, si o si debemos manejar los bits mas significativos de PC [PCLATCH]). Para devolver el valor direccionado se utiliza retlw, esta instruccin devuelve un valor en el acumulador al retornar de una subrutina. La creacin de la tabla se har de la siguiente forma:
Cdigo: (asm) T a b l a a d d w f P C L , f r e t l w V a l o r 0 r e t l w V a l o r 1 r e t l w V a l o r 2 r e t l w V a l o r 3 ; . . . .

Donde Valor0, Valor1, Valor2... etc. son los valores que queremos almacenar en la tabla. La estrategia a seguir para consultar algn valor de la tabla es cargar en el acumulador (W) la direccin de la tabla donde se encuentra el valor que quieres leer y despus llamar a la subrutina TABLA (con un CALL). Advertencia: la carga de W no puede superar el nmero de valores de la
www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/mis-primeros-programas-pic16f84a-y-pic16f628a/?PHPSESSID=6hvnibq0r09kvuigkmkge 17/31

03/06/13

Mis primeros programas con PIC16F84A y PIC16F628A

tabla, sino se estar ejecutando una instruccin errnea provocando un mal funcionamiento del programa.Explicado lo necesario pasamos al cdigo del ejemplo:

Cdigo: (asm) ;* * * *E n c a b e z a d o* * * * l i s tp = 1 6 F 8 4 A # i n c l u d eP 1 6 F 8 4 A . i n c _ _ C O N F I G _ C P _ O F F&_ W D T _ O F F&_ P W R T E _ O N&_ X T _ O S C ; * * * *D e f i n i c i o nd ev a r i a b l e s* * * * C o n t a d o r e q u 0 x 0 C ;R e g i s t r op a r aa l m a c e n a rc o n t e o C o n t a d o r 1 e q u 0 x 0 D ;R e g i s t r ou t i l i z a d oe nd e m o r a . C o n t a d o r 2 e q u 0 x 0 E ;R e g i s t r ou t i l i z a d oe nd e m o r a . P u l s a d o r e q u 7 ;D e f i n i m o sP u l s a d o rc o m oe lb i t7 ,e ne s t ec a s os e r ap a r a ; * * * *I n i c i o d e lM i c r o* * * * R e s e t o r g 0 x 0 0 ;A q u ic o m i e n z ae lm i c r o . g o t o I n i c i o ;S a l t oai n i c i od em ip r o g r a m a . -

; * * * *T a b l ad ec o n v e r s i o nB C Da7S e g m e n t o s* * * * ;S ec o l o c aa li n i c i op a r aa s e g u r a ru b i c a c i o ne nP a g i n a . o r g 0 x 0 5 ;O r i g e nd e lc o d i g od et a b l a . B C D 7 S E G : ;r e t l wb ' g f e d c b a ' p a r ad i s p l a yc a t o d oc o m u n a d d w f P C L , 1 ;S ei n c r e m e n t ae lc o n t a d o rd e lp r o g r a m a . r e t l w b ' 0 1 1 1 1 1 1 ' ;0 r e t l wms b ' 0 0 0 0 1 1 0 ' de escribir ;1 Una manera cmoda la tabla de instrucciones RETLW puede e t l w b ' 1 0 1 1 0 1 1 ' ;2 lograrser usando la directiva DT (Define Table) del ensamblador, la cual nos r e t l w b ' 1 0 0 1 1 1 1 ' ;3 permite r definir tabla e t l w una b ' 1 1 0 0 1 1 0 ' de datos ; 4 que ser sustituida por una lista de instrucciones as, r e t l w RETLW; b ' 1 1 0 1 1 0 1 ' la tabla ; 5 anterior puede quedar como sigue: Cdigo: (asm) r e t l w b ' 1 1 1 1 1 0 1 ' ;6 B C D 7 S E G : r e t l w b ' 0 0 0 0 1 1 1 ' ;r 7 e t l wb ' g f e d c b a ' p a r ad i s p l a yc a t o d oc o m u n r a e d t d l w w P f b ' C 1 L 1 , 1 1 1 1 1 ' ;S 8 ei n c r e m e n t ae lc o n t a d o rd e lp r o g r a m a . r D e T t l 0 w x 3 F , b ' 0 1 x 1 0 0 6 1 , 1 1 0 1 x ' 5 B ,0 x 4 ; F , 9 0 x 6 6 ,0 x 6 D ,0 x 7 D ,0 x 0 7 ,0 x F F ,0 x 6 F c l r f C o n t a d o r ;S il l e g a1 0 ,s er e s e t e ac o n t a d o r r e t l w 0 b ' x 0 3 1 F 1 1 1 1 1 ' ;0

Control anti rebote: ; * * * *C o n f i g u r a c i nd ep u e r t o s* * * * En I n i el c i o momento b s f S de T A T U presionar S , R P 0 un ;P botn a s a m o spulsador d eB a n c o0 oa cualquier B a n c o1 . conmutador m o v l w b ' 1 0 0 0 0 0 0 0 ' ; R B 7 se c o m o e n t r a d ay l o s d e m a sc o m os a l i d a . electromecnico es inevitable que produzca un pequeo arco elctrico o v w f T R I S B durantem el breve instante en que las placas del contacto se aproximan o se b c f S T A T U S , R P 0 ;P a s od e lB a n c o1a lB a n c o0 alejan de sus de m o v l w puntos b ' 0 1 1 1 1 1 1 'conexin. ;C o m i e n z ae nc e r o . m o v w f P O R T B c l r f C o n t a d o r ; * * * *T e s t e od eP u l s a d o r* * * * T e s t e o b t f s s P O R T B , P u l s a d o r g o t o T e s t e o c a l l D e m o r a _ 2 0 m s b t f s s P O R T B , P u l s a d o r g o t o T e s t e o i n c f C o n t a d o r , 1 m o v f w C o n t a d o r c a l l B C D 7 S E G m o v w f P O R T B b t f s c P O R T B , P u l s a d o r g o t o $ 1 c a l l D e m o r a _ 2 0 m s b t f s c P O R T B , P u l s a d o r g o t o $ 4 g o t o T e s t e o

; * * * *P r o g r a m ap r i n c i p a l* * * *

;T e s t e a m o ss ie s t aa1l o g i c o . ;N o ,s e g u i m o st e s t e a n d o . ;E l i m i n a m o sE f e c t or e b o t e ;T e s t e a m o sn u e v a m e n t e . ;F a l s aA l a r m a ,s e g u i m o st e s t e a n d o . ;S eh ap u l s a d o ,i n c r e m e n t a m o sc o n t a d o r . ;p a s a m o sc o n t a d o raW ;L l a m a m o st a b l a . ;C a r g a m o sv a l o rr e c i b i d op o rT a b l ae nP O R T B ;E s p e r a m o saq u es es u e l t ee lp u l s a d o r* * ;N o ,P C L-1 ,>b t f s s P O R T A , P u l s a d o r . ;E l i m i n a m o se f e c t or e b o t e . ;T e s t e a m o sn u e v a m e n t e . ;N o ,F a l s aa l a r m a ,v o l v e m o sat e s t e a raq u es es u e l t e( * * ;S i ,T e s t e a m o sn u e v a m e n t e . -

; * * * *D e m o r a* * * * D e m o r a _ 2 0 m s m o v l w 0 x F F ; La duracin de C este depende de la calidad de los switches m o v w f o n t a d o r 1 ;I n i c i a m o s c o n t a d o r 1 . - y la velocidad de R e p e t i c i o n 1 www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/mis-primeros-programas-pic16f84a-y-pic16f628a/?PHPSESSID=6hvnibq0r09kvuigkmkge

18/31

03/06/13

Mis primeros programas con PIC16F84A y PIC16F628A

accionamiento, pero no dura ms de 20 milisegundos. Se adjunta simulacin.-

C ontrol Display 7 Se gm e ntos.rar (95.19 KB - de scargado 951 ve ce s.) ltima modificacin: Julio 30, 2009, 02:29:22 por Suky En lne a

Je ss dijo, yo soy e l C AMINO , la VER DAD y la VIDA, nadie lle ga al PADR E si no e s por m i.

Leon Pic
Mode rador dsPIC De scone ctado Se x o: Me nsaje s: 5113

Re: Mis primeros programas con PIC16F84A y PIC16F628A


Respuesta #8 : Marzo 30, 2009, 01:00:50

Otra forma de c
En la programacin de los microcontroladores PIC la mayora de las instrucciones emplean direccionamiento directo, pero tambin es posible que operen en un modo de direccionamiento directo. Para el direccionamiento indirecto se emplean dos registros especiales: el FSR y el INDF (este ultimo no es un registro fsico). El registro FSR se emplea para sealar o apuntar a una direccin de la memoria RAM cuyo contenido puede ser ledo o escrito de forma indirecta empleando cualquier instruccin que use como operando al registro INDF. Esta forma de direccionamiento es particularmente til cuando se manejan tablas o arreglos de datos.Directo vs Indirecto.
Cdigo: (asm) ;D I R E C T O : ;D e f i n i m o sr e g i s t r oe nl am e m o r i ad ed a t o s . M y R e g i s t r o e q u 0 x 1 0 ;U b i c a d oe n0 x 1 0 . ;C a r g a m o sd a t oe ne lr e g i s t r o . m o v l w 0 x 8 A ; m o v w f M y R e g i s t r o ;M y R e g i s t r o=0 x 8 a . ;L e e m o sd a t od e lr e g i s t r o . m o v f w M y R e g i s t r o ;M o v e m o se lv a l o rq u et e n g aM y R e g i s t r oaW . m o v w f P O R T B ;P o re j e m p l o ,l oc a r g a m o se nP O R T B . ;I N D I R E C T O : ;C a r g a m o sd a t oe ne lr e g i s t r o . m o v l w 0 x 1 0 ; m o v w f F S R ;D i r e c c i o n a m o sR e g i s t r od ed a t o su b i c a d oe n0 x 1 0 . m o v l w 0 x 8 A ; m o v w f I N D F ;C a r g a m o sr e g i s t r od i r e c c i o n a d oc o ne lv a l o r0 x 8 A . ;L e e m o sd a t oe ne lr e g i s t r o . m o v l w 0 x 1 0 ; m o v w fel F S R ;D i r e c c i o n a m o sR e g i s t r od ecrear d a t o su b i c a d oe n 0 x 1 0 . Utilizaremos direccionamiento Indirecto para la tabla de control del m o v f w I N D F ;M o v e m o se lv a l o rq u et e n g ae lr e g i s t r os e l e c c i o n a d oaW . Display. Aqu no utilizaremos el pulsador, solo se har el contador automtico m o v w f P O R T B ;P o re j e m p l o ,l oc a r g a m o se nP O R T B . -

C um ulonim bus

de 0 a 9.- Al iniciar el microcontrolador cargaremos el cdigo de 7 Segmentos para controlar el Display en la memoria de Datos con direccionamiento indirecto. Luego, al realizar el conteo leeremos el cdigo correspondiente almacenado y lo enviaremos al PORTB.-

www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/mis-primeros-programas-pic16f84a-y-pic16f628a/?PHPSESSID=6hvnibq0r09kvuigkmkge

19/31

03/06/13

Mis primeros programas con PIC16F84A y PIC16F628A

Aqu utilizamos el registro STATUS nuevamente, pero para control de las operaciones aritmticas. Nosotros guardaremos el cdigo de 7 Segmentos del 0 al 9, en los registros 0x10 a 0x19. Si nuestro contador nos direcciona el registro ubicado en 0x1A, que seria el 10, lo reseteamos y direccionamos el 0, sea registro 0x10. Esto lo hacemos realizando la resta del registro seleccionado y 0x1A, FSR 0x1A, y si el resultado es cero, reseteamos. El bit Z (Zero) del registro STATUS, este indica si una operacin lgica o aritmtica realizada da como resultado cero. Tambin tenemos el bit C (Carry) (0), que en instrucciones aritmticas se activa cuando se presenta un acarreo desde el bit mas significativo del resultado, el bit DC (Digit Carry), que en operaciones aritmticas se activa si ocurre acarreo entre el bit 3 y bit 4.Cdigo completo:

Cdigo: (asm) ;* * * *E n c a b e z a d o* * * * l i s tp = 1 6 F 8 4 A # i n c l u d eP 1 6 F 8 4 A . i n c _ _ C O N F I G _ C P _ O F F&_ W D T _ O F F&_ P W R T E _ O N&_ X T _ O S C ; * * * *D e f i n i c i o nd ev a r i a b l e s* * * * C o n t a d o r e q u 0 x 0 C ;S e l e c c i o n a m o sp o s i c i ne nl am e m o r i aR A M( G P R )p a r ag u a r ;r e g i s t r ou t i l i z a d op a r ad e m o r a . C o n t a d o r 1 e q u 0 x 0 D ;R e g i s t r ou t i l i z a d oe nd e m o r a . C o n t a d o r 2 e q u 0 x 0 E P u l s a d o r e q u 7 ;D e f i n i m o sP u l s a d o rc o m oe lb i t0 ,e ne s t ec a s os e r p a r a

R e s e t o r g 0 x 0 0 ;A q u c o m i e n z ae lm i c r o . g o t o I n i c i o ;S a l t oai n i c i od em ip r o g r a m a . ; * * * *P r o g r a m ap r i n c i p a l* * * * ; * * * *C o n f i g u r a c i o nd ep u e r t o s* * * * I n i c i o b s f S T A T U S , R P 0 ;P a s a m o sd eB a n c o0aB a n c o1 . c l r f T R I S B ;P O R T Bc o m os a l i d a . b c f S T A T U S , R P 0 ;P a s od e lB a n c o1a lB a n c o0 c a l l C o n f i g _ T a b l a ;C a r g a m o sr e g i s t r o sc o nC o d i g od e7s e g m e n t o s . Dire ccionam ie nto Indire cto.rar (95.1 KB scargado 532 ve ce s.) m o v f w I N D F ;L e e m o sde c o d i g od e7 S e g m e n t o sp a r ae lC E R O . m o v w f P O R T B ;M o s t r a m o se lC E R O . ; * * * *T e s t e od eP u l s a d o r* * * * En lne a B u c l e Je ss dijo, c a l yo l soyD e e lm o C r AMINO a _ 1 9 0 m ,s la VER ;DAD D e m o r ya la p a VIDA, r av i s nadie u a l i z lle a r ga D i s al p l PADR a y E si no e s por m i. i n c f F S R , 1 ;I n c r e m e n t a m o sP u n t e r o . m o v l w 0 x 1 A ;C o n s u l a m o ss is ep i d ec o d i g op a r am o s t r a r" 1 0 " , s u b w f F S R , 0 ;s ie sa s ir e s e t e a m o sF S R ,a p u n t aa0 x 1 0 >" 0 " . b t f s s S T A T U S , Z ;S iZ = 1>0 x 1 A-F S R=0 . Re:g Mis programas con PIC16F84A o t o primeros M u e s t r o _ D i s p l a y;N o ,m u e s t r od i s p l a y . - y PIC16F628A Respuesta #9 : Marzo 30, 2009, 01:14:18 s m o v l w 0 x 1 0 ;S ir e e t e op u n t e r o . m o v w f F S R ; M u e s t r o _ D i s p l a y m o v f w I N D F ;L e oR e g i s t r oq u ea p u n t aF S R . m o v w f P O R T B ;L o c a r g oe nP O R T B . - seal enviada por el Para el control de varios display la idea es multiplexar la g o t o B u c l e ;C o n t i n u oc o n t e o . - de cada display y sus microcontrolador, con l administraremos el encendido

Leon Pic
Mode rador dsPIC De scone ctado Se x o: Me nsaje s: 5113

Control de v

segmentos (lo cual se hace por programa). Para ejemplificar ; * * * * D e m o r a* * * * haremos un contador automtico de 0 a 999: El D e m hardware o r a _ 1 9 0 m s necesario es el siguiente:

m o v l w 0 x F F ; m o v w f C o n t a d o r 1 ;I n i c i a m o sc o n t a d o r 1 . R e p e t i c i o n 1 m o v l w 0 x F F ; C um ulonim bus m o v w f C o n t a d o r 2 ;I n i c i a m o sc o n t a d o r 2 R e p e t i c i o n 2 d e c f s z C o n t a d o r 2 , 1 ;D e c r e m e n t aC o n t a d o r 2ys ie s0s a l e . g o t o R e p e t i c i o n 2 ;S in oe s0r e p e t i m o sc i c l o . d e c f s z C o n t a d o r 1 , 1 ;D e c r e m e n t aC o n t a d o r 1 . g o t o R e p e t i c i o n 1 ;S in oe sc e r or e p e t i m o sc i c l o . r e t u r n ;R e g r e s ad el as u b r u t i n a . ; * * * *C a r g a m o st a b l ae nm e m o r i a* * * * www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/mis-primeros-programas-pic16f84a-y-pic16f628a/?PHPSESSID=6hvnibq0r09kvuigkmkge

20/31

03/06/13

Mis primeros programas con PIC16F84A y PIC16F628A

Diagramas de Flujo:

Se observa que el Puerto B se utiliza para enviar los datos a mostrar en cada display, mientras que por el Puerto A seleccionas el display que mostrar ese dato. Supongamos que quiero mostrar "231", pues muy fcil, pongo el puerto B en 0000110 (cdigo para el 1), y activo ahora el 3 transistor por un periodo de tiempo corto, desactivamos este transistor, cargamos el puerto B con 1001111 y activamos el 2 transistor por un tiempito, lo mismo hacemos para mostrar 1. Repetimos esta misma secuencia mientras se quiera mostrar este valor. La secuencia es tan rpida que el observador no nota el momento en que cambias de display.
www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/mis-primeros-programas-pic16f84a-y-pic16f628a/?PHPSESSID=6hvnibq0r09kvuigkmkge 21/31

03/06/13

Mis primeros programas con PIC16F84A y PIC16F628A

Control de conteo: Para realizar el conteo incrementamos continuamente Unidad, cuando est llega a 10, las reseteamos a 0, e incrementamos en 1 Decena. La misma operacin se realiza con Decena, al llegar a 10 se lleva a 0 y se incrementa Centena.Cdigo: (asm) ;* * * *E n c a b e z a d o* * * * l i s tp = 1 6 F 8 4 A # i n c l u d eP 1 6 F 8 4 A . i n c _ _ C O N F I G _ C P _ O F F&_ W D T _ O F F&_ P W R T E _ O N&_ X T _ O S C ; * * * *D e f i n i c i o nd ev a r i a b l e s* * * * U n i d a d e q u 0 x 0 C ;G u a r d a m o sc o n t e ou n i d a d D e c e n a e q u 0 x 0 D ; C e n t e n ae q u 0 x 0 E ; C o n t a d o r 1 e q u 0 x 0 F ;R e g i s t r ou t i l i z a d oe nd e m o r a . C o n t a d o r 2 e q u 0 x 1 0 ;R e g i s t r ou t i l i z a d oe nd e m o r a . C o n t a d o r e q u 0 x 1 1 ;C o n t r o ld eR e f r e s c od eD i s p l a y . M u e s t r o U M u e s t r o D M u e s t r o C e q u e q u e q u 2 1 0 ;P a r ac o n t r o ld e l1 D i s p l a y ;P a r ac o n t r o ld e l2 D i s p l a y ;P a r ac o n t r o ld e l3 D i s p l a y

En este ejemplo se mantiene la visualizacin del mismo valor durante aprox. 300 ms, se puede determinar ya que utilizamos 3 demoras de 5 ms ; * * * *T a b l ad ec o n v e r s i o nB C Da7S e g m e n t o s* * * * despreciando ciclos utilizados en los comandos, que son aprox. 30 (30 ;S ec o l o c aa l los i n i c i op a r a a s e g u r a ru b i c a c i o ne nP a g i n a . us). Entonces por ciclo tenemos 15 ms, y por 20 repeticiones, 300 ms.o r g 0 x 0 5 ;O r i g e n d e l c d i g o d e t a b l a . B C D 7 S E G ;r e t l wb ' g f e d c b a ' p a r ad i s p l a yc a t o d oc o m u n a d d w f P C L , 1 ;S ei n c r e m e n t ae lc o n t a d o rd e lp r o g r a m a . D T0 x 3 F ,0 x 0 6 ,0 x 5 B ,0 x 4 F ,0 x 6 6 ,0 x 6 D ,0 x 7 D ,0 x 0 7 ,0 x F F ,0 x 6 F

; * * * *I n i c i od e lM i c r o* * * * R e s e t o r g 0 x 0 0 g o t o I n i c i o

;A q u c o m i e n z ae lm i c r o . ;S a l t oai n i c i od em ip r o g r a m a . -

; * * * *P r o g r a m ap r i n c i p a l* * * * C ontrol Varios Display.rar (102.11 KB - de scargado 961 ve ce s.) ; * * * *C o n f i g u r a c i o nd ep u e r t o s* * * * I n i c i o En lne a b s f S T A T U S , R P 0 ;P a s a m o sd eB a n c o0aB a n c o1 . c l r f T R I S A ;P O R T Ac o m os a l i d a Je ss dijo, yo soy e l C AMINO , la VER DAD y la VIDA, nadie lle ga al PADR E si no e s por m i. c l r f T R I S B ;P O R T Bc o m os a l i d a . b c f S T A T U S , R P 0 ;P a s od e lB a n c o1a lB a n c o0 c l r f P O R T A ;D e s a c t i v ot o d o sl o sD i s p l a y s c l r f U n i d a d ;C o m i e n z ae nc e r o>000 . Leon Pic c l r f D e c e n a Re: Mis primeros programas con PIC16F84A y PIC16F628A Mode rador c l r f C e n t e n a Respuesta #10 : Marzo 30, 2009, 01:15:03 dsPIC g o t o A c t u a l i z o _ D i s p l a y ;E s t ar u t i n am u l t i p l e x al o sd i s p l a y s . ; * * * *T e s t e od eP u l s a d o r* * * * B u c l e De scone ctado i n c f U n i d a d , 1 ;I n c r e m e t oU n i d a d . La otra m posibilidad es utilizar un decodificador BCD como el 74LS47 o el o v l w d ' 1 0 ' ;S ie s1 0r e s e t e oei n c r e m e n t oD e c e n a Se x o: 74LS249, o el CD4511. integrados disponen de 4 entradas s u b w f U n i d a d , 0 Estos ; Me nsaje s: 5113 correspondientes b t f s s S T A T a U S un , Z cdigo; binario BCD, y 7 salidas que se conectan a un o t o A c t u a l i z o _ D i s p l a y ;n oe s1 0 Display.g c l r f U n i d a d ;S i ,r e s e t e o . i n c f D e c e n a , 1 ;I n c r e m e n t oD e c e n a . www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/mis-primeros-programas-pic16f84a-y-pic16f628a/?PHPSESSID=6hvnibq0r09kvuigkmkge

Decodificador BCD.

22/31

03/06/13

Mis primeros programas con PIC16F84A y PIC16F628A

C um ulonim bus

Lo importante de este integrado, es que posee 4 pines de entrada y 7 de salida, mas unos cuantos de configuracin. El hecho es que, los 4 pines de entrada (A, B, C y D) sern los que reciban el cdigo en binario enviado por el micro. Una vez recibido el dato, el integrado se har cargo de decodificarlo y enviarlo por los pines de salida (a, b, c, d, e, f y g) para mostrarlo en el display. Lo que nos falta saber, es que dato deber enviar al decodificador. DCBA Valor que muestra el Display 0000 0 0001 1 0010 2 0011 3 0100 4 0101 5 0110 6 0111 7 1000 8 1001 9

En lne a Je ss dijo, yo soy e l C AMINO , la VER DAD y la VIDA, nadie lle ga al PADR E si no e s por m i.

Leon Pic
Mode rador dsPIC

Re: Mis primeros programas con PIC16F84A y PIC16F628A


Respuesta #11 : Marzo 30, 2009, 01:15:50

De scone ctado INTERRUPCIONES Se x o: Me nsaje s: 5113

Una de las caractersticas ms importante de los microcontroladores y que mencionamos al inicio del tutorial, es que tienen la posibilidad de manejar interrupciones. Se trata de un acontecimiento que hace que el micro deje de
23/31

www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/mis-primeros-programas-pic16f84a-y-pic16f628a/?PHPSESSID=6hvnibq0r09kvuigkmkge

03/06/13

Mis primeros programas con PIC16F84A y PIC16F628A

C um ulonim bus

lado lo que se encuentra realizando, atienda ese suceso y luego regrese y contine con lo suyo. Hay dos tipos de interrupciones posibles, una es mediante una accin externa (es decir por la activacin de uno de sus pines), la otra es interna (por ejemplo cuando ocurre el desbordamiento de uno de sus registros) En el 16F84A hay 4 fuentes de interrupcin: Por el pin RB0/INT, que regresa al PIC del modo SLEEP (interrupcin externa). Por los pines RB4 a RB7, configurados como entrada y en caso de que alguno de ellos cambie de estado (interrupcin externa). Por desbordamiento del registro TMR0, cuando este registro pasa de 255 a 0 en decimal (interrupcin interna). Al completar la escritura de la EEPROM de datos (interrupcin interna). Cada fuente de interrupcin esta controlada por 2 bits. Un bit local de interrupciones (Terminado en E) de permiso o prohibicin de ejecucin. Si esta en 0 bloquear la solicitud de interrupcin, y si esta en 1 permitir la ejecucin. Un bit que acta como sealizador (Terminado en F) el cual es activado (puesto a 1) si se ha producido la interrupcin. Adems existe 1 bit de control global, el bit GIE (INTCON <7>) el cual si esta desactivado bloquea todas las solicitudes de interrupcin. Lo anterior descrito puede entenderse observando el diagrama lgico de la siguiente figura:

El bit GIE se borra automticamente cuando se reconoce una interrupcin para evitar que se produzca otra mientras se est atendiendo a la primera y al retornar de la interrupcin con la instruccin RETFIE, el bit GIE se vuelve a activar ponindose a 1. En cambio los bits sealizadores o banderas de interrupcin deben ser puestos a cero por el tratamiento de la interrupcin realizada por el usuario (Programador) Cuando una interrupcin est habilitada (su bit local de habilitacin est activado, el bit GIE est activado) y ocurre el evento que la activa, el valor
www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/mis-primeros-programas-pic16f84a-y-pic16f628a/?PHPSESSID=6hvnibq0r09kvuigkmkge 24/31

03/06/13

Mis primeros programas con PIC16F84A y PIC16F628A

de PC se guarda en la PILA y en ste se carga el 0x04 (nico vector de interrupcin). Es a partir de esta direccin que se debe colocar el tratamiento de la interrupcin, detectando por medio de los bits banderas cual de los eventos ha ocurrido y actuar segn sea el caso. Nota: El nico registro que se salva en la PILA es PC , para preservar algn otro registro debe ser el propio programa de atencin a la interrupcin el que se encargue de salvar su estado al inicio de la rutina y de devolverlos al final del mismo. Resumiendo, las acciones que se realizan automticamente el microcontrolador y las que el programador debe tener en cuenta en sus programas son las siguientes: Cuando se activa una posible causa de interrupcin, el flag correspondiente se activa. Si el bit de permiso correspondiente est a 1 y el bit de habilitacin de todas las interrupciones (GIE) est a 1, se produce la interrupcin. Para evitar que se produzca otra interrupcin mientras se est atendiendo a otra anterior, el bit GIE se pone a 0. El valor del PC se guarda en la PILA El PC se carga con el valor 0x04, que es el vector de interrupciones El programador, debe comenzar la rutina de atencin a la interrupcin con un salto a la posicin de memoria donde se encuentra el programa, seguidamente se guardan todos los registros que puedan ser modificados por esta, seguidamente si estn habilitadas varias vas de interrupcin, se debe explorar el valor de las banderas para determinar la causa de la interrupcin. Dependiendo de la causa de la interrupcin, la rutina de interrupcin se bifurca a la subrutina correspondiente. Se deben devolver los valores que tenan los registros antes de producirse la interrupcin y se deben borrar por software las banderas que indican las fuentes de las interrupciones, antes del retorno al programa principal. Cuando se llega a la ltima instruccin de la rutina de interrupcin, RETURN, se carga el PC con el valor que se guard inicialmente en la PILA y el bit GIE se pone automticamente a 1. Bits utilizados. INTF para RB0/INT, bit 1 de INTCON, si es 1 ocurri interrupcin externa RBIF para los pines B4 a RB7, bit 0 de INTCON, si es 1 por lo menos un pin cambio de estado T0IF para TMR0, bit 2 de INTCON, si es 1 TMR0 desbordado EEIF para la EEPROM, bit 4 de EECON1, si es 1 se ha completado escritura GIE, bit 7 de INTCON, si es 1 habilita todas las interrupciones EEIE, bit 6 de INTCON, si es 1 se activa interrupciones de perifricos T0IE, bit 5 de INTCON, si es 1 int. TMR0 activada INTE, bit 4 de INTCON, si es 1 int. Externa activada RBIE, bit 3, si es 1 int. Por RB4 a RB7 activada Todos estos bits al resetearse o iniciarse el micro se encuentran en 0. Rutina de Servicio de Interrupciones: Primero debes guardar el contenido del registro W, el problema de mover W a otro registro (haciendo uso de movf) es que esta instruccin corrompe la bandera Z, modificando el registro de STATUS. Segn la hoja de datos otorgada por Microchip, en uno de sus apartados recomienda una secuencia
www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/mis-primeros-programas-pic16f84a-y-pic16f628a/?PHPSESSID=6hvnibq0r09kvuigkmkge 25/31

03/06/13

Mis primeros programas con PIC16F84A y PIC16F628A

de cdigo que permite guardar y restaurar los registros sin modificarlos.


Cdigo: (asm) ; * * * *R u t i n ad es e r v i c i od eI n t e r r u p c i o n* * * * ; G u a r d a d od er e g i s t r oWyS T A T U S . I n i c i o _ I S R m o v w f W _ T e m p ;C o p i a m o sWau nr e g i s t r oT e m p o r a r i o . s w a p f S T A T U S ,W ; I n v e r t i m o sl o sn i b l e sd e lr e g i s t r oS T A T U S . m o v w f S T A T U S _ T e m p ;G u a r d a m o sS T A T U Se nu nr e g i s t r ot e m p o r a l . I S R ;A t e n d e m o sl ai n t e r r u p c i n . ;R e s t a u r a m o sl o sv a l o r e sd eWyS T A T U S . F i n _ I S R s w a p f S T A T U S _ T e m p , W ;I n v e r t i m o sl on i b l e sd eS T A T U S _ T e m p . m o v w f S T A T U S s w a p f W _ T e m p ,f ;I n v e r t i m o sl o sn i b l e syl og u a r d a m o se ne lm i s m or e g i s t r o . s w a p fW _ T e m p , W ;I n v e r t i m o sl o sn i b l e sn u e v a m e n t eyl og u a r d a m o se nW . r e t f i e ;S a l i m o sd ei n t e r r u p c i n . -

Los registros W_Temp y STATUS_Temp son registros alternativos para guardar temporariamente sus valores correspondientes.-

ltima modificacin: Julio 30, 2009, 02:42:11 por Suky

En lne a

Je ss dijo, yo soy e l C AMINO , la VER DAD y la VIDA, nadie lle ga al PADR E si no e s por m i.

Leon Pic
Mode rador dsPIC De scone ctado Se x o: Me nsaje s: 5113

Re: Mis primeros programas con PIC16F84A y PIC16F628A


Respuesta #12 : Marzo 30, 2009, 01:16:40

INTERRUPCION POR TMR0


El Timer 0 es un contador / temporizador de 8 bits. El registro principal de este mdulo es TMR0 (0x01). Este registro se incrementa continuamente a una frecuencia seleccionable manejada por un preescalador y el reloj interno Fosc/4 (modo temporizador) o bien, por un preescalador y una seal externa (modo contador). En la siguiente figura se muestra un diagrama de bloques de este mdulo, en donde se indican los bits que afectan su operacin y la manera en que lo hacen.

C um ulonim bus

www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/mis-primeros-programas-pic16f84a-y-pic16f628a/?PHPSESSID=6hvnibq0r09kvuigkmkge

26/31

03/06/13

Mis primeros programas con PIC16F84A y PIC16F628A

El modo Temporizador En el modo temporizador la seal de reloj que controla el incremento del registro TMR0 es la frecuencia Fcy = Fosc/4, la cual puede ser dividida opcionalmente por el preescalador. Este modo es seleccionado al limpiar el bit T0CS (OPTION_REG<5>). En este modo si se realiza una escritura al registro TMR0, su incremento es inhibido por los siguientes dos ciclos de instruccin (Tcy) y si el preescalador est asignado se pierde la cuenta pero no su asignacin. El modo Contador En el modo contador, la seal que controla los incrementos del registro TMR0 es una seal externa que proviene de la patita T0CKI poniendo el bit T0CS en alto. Se puede seleccionar la transicin que provoca los incrementos mediante el bit Timer0 Source Edge Select T0SE (OPTION_REG<4>), limpiando este bit se selecciona la transicin de subida, mientras que al ponerlo en alto se selecciona la de bajada. Observacin: En este modo, la seal conectada a TOCKI es muestreada durante los ciclos Q2 y Q4 del reloj interno, por ello es necesario que permanezca en alto al menos por 2 Tosc ms un pequeo retardo de 20nseg y lo mismo en bajo. (Es decir, seales demasiado rpidas no podrn ser detectadas).
www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/mis-primeros-programas-pic16f84a-y-pic16f628a/?PHPSESSID=6hvnibq0r09kvuigkmkge 27/31

03/06/13

Mis primeros programas con PIC16F84A y PIC16F628A

El preescalador El preescalador es un divisor de frecuencia de mdulo seleccionable. Como se puede ver en la figura anterior, el preescalador est compartido entre el timer0 y el mdulo Watchdog, sin embargo slo puede conectarse a uno de los dos y esto se establece mediante el bit PSA (OPTION_REG<3>), as, con este bit en alto el preescalador es asignado al reloj del Watchdog, mientras que con un nivel bajo en PSA el preescalador dividir la frecuencia que maneja al Timer 0. La seleccin del mdulo (valor de divisin de frecuencia) del preescalador se puede realizar mediante los bits PS2,PS1,PS0 (OPTION_REG<2:0>) de acuerdo a la siguiente tabla: PS2 PS1 PS0 Divisor 000 001 010 011 100 101 110 111 1/2 1/4 1/8 1/16 1/32 1/64 1/128 1/256

ltima modificacin: Octubre 29, 2009, 10:53:06 por Suky

En lne a

Je ss dijo, yo soy e l C AMINO , la VER DAD y la VIDA, nadie lle ga al PADR E si no e s por m i.

Leon Pic
Mode rador dsPIC De scone ctado Se x o: Me nsaje s: 5113

Re: Mis primeros programas con PIC16F84A y PIC16F628A


Respuesta #13 : Marzo 30, 2009, 01:21:21

Ejemplo modo temporizador.


Para calcular una temporizacin se necesita el tiempo de un ciclo de instruccin (es decir 1 microsegundo, si estas trabajando con un XT de 4 Mhz), el valor del Divisor de Frecuencia (el que seleccionabas con los bits PS2, PS1 y PS0), y finalmente el complemento del valor cargado en TMR0 (es decir 255-TMR0). Entonces tenemos: Temporizacin = Ciclo de instruccin. (256-TMR0) .Divisor de Frecuencia De este modo si queremos temporizar 4 ms con un divisor de frecuencia de 32, tendramos: TMR0 = 256 - ^[4000us / (1us x 32)] TMR0 = 131 Vemos que la mxima temporizacin posible es con TMR0 = 0, y Divisor de Frecuencia en 256, logrndose unos 65.5 ms aprox. Para ejemplificar el uso de esta interrupcin haremos titilar un led conectado al PIN RB0 cada 200 ms, para ello haremos una temporizacin con TMR0 de 50ms y contaremos 4 desbordes del mismo para lograr los 200 ms necesarios. Lo interesante de usar interrupcin es que con el micro se puede estar ejecutando cualquier tarea y no ocupar este tiempo en un bucle de demora.

C um ulonim bus

www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/mis-primeros-programas-pic16f84a-y-pic16f628a/?PHPSESSID=6hvnibq0r09kvuigkmkge

28/31

03/06/13

Mis primeros programas con PIC16F84A y PIC16F628A

El hardware necesario es equivalente al primer ejemplo realizado.Diagrama de Flujo:

Cdigo: (asm) ;* * * *E n c a b e z a d o* * * * l i s tp = 1 6 F 8 4 A # i n c l u d eP 1 6 F 8 4 A . i n c _ _ C O N F I G _ C P _ O F F&_ W D T _ O F F&_ P W R T E _ O N&_ X T _ O S C ; * * * *D e f i n i c i o nd ev a r i a b l e s* * * * C o n t a d o r e q u 0 x 0 C ;C o n t a d o rp a r ad e t e c t a r4d e s b o r d e sd eT M R 0 . W _ T e m p e q u 0 x 0 D ;R e g i s t r op a r ag u a r d a rt e m p o r a l m e n t eW . S T A T U S _ T e m p e q u 0 x 0 E ;R e g i s t r op a r ag u a r d a rt e m p o r a l m e n t eS T A T U S L e d e q u 0

;D e f i n i m o sL e dc o m oe lb i tc e r od eu nr e g i s t r o ,e ne s t ec

; * * * *I n i c i od e lM i c r o* * * * R e s e t o r g 0 x 0 0 ;A q u c o m i e n z ae lm i c r o . g o t o I n i c i o ;S a l t oai n i c i od em ip r o g r a m a . ; * * * *V e c t o rd eI n t e r r u p c i o n* * * * o r g 0 x 0 4 ;A t i e n d oI n t e r r u p c i o n . g o t o I n i c i o _ I S R ;* * * *P r o g r a m aP r i n c i p a l* * * * ; * * * *C o n f i g u r a c i o nd ep u e r t o s* * * o r g 0 x 0 5 ;O r i g e nd e lc d i g od ep r o g r a m a . Una ayuda adicional I n i c i o El programita presentado tiene una utilidad que nos b s f S T A T U S , R P 0 en el ; primer P a s a m o spost, d eB a n c o0a B a n c o 1 . ayudarm en el clculo del y valor inicial del Timer para obtener una o v l w b ' 1 1 1 1 1 1 1 0 ' preescaler ;R B 0c o m o s a l i d a . m o v w f deseada, T R I S B temporizacin aparte de generar el cdigo. m o v l w b ' 0 0 0 0 0 1 1 1 ' ;S es e l e c c i o n aT M R 0m o d ot e m p o r i z a d o ryp r e e s c a l e rd e1 / 2 5 6 . m o v w f O P T I O N _ R E G b c f S T A T U S , R P 0 ;P a s od e lB a n c o1a lB a n c o0 b c f P O R T B , L e d ;E lL e dc o m i e n z aa p a g a d o . m o v l w 0 x 3 D ;C a r g a m o s6 1e nT M R 0p a r al o g r a ra p r o x .5 0 m s . m o v w f T M R 0 c l r f C o n t a d o r ;I n i c i a m o sc o n t a d o r . m o v l w b ' 1 0 1 0 0 0 0 0 ' ;H a b i l i t a m o sG I EyT 0 I E( i n t e r r u p c i nd e lT M R 0 ) m o v w f I N T C O N ; * * * *B u c l e* * * * B u c l e n o p ;A q u ie lm i c r op u e d ee j e c u t a rc u a l q u i e ro t r at a r e a g o t o B u c l e ;s i nn e c e s i d a dd eu t i l i z a rt i e m p oe nu nb u c l ed ed e m o r a . -

; * * * *R u t i n ad es e r v i c i od eI n t e r r u p c i o n* * * * ; >A q u ih a r e m o sc o p i ad er e s p a l d op a r am o s t r a rc o m os eh a c ea u n q u en oe s ;n e c e s a r i oy aq u ee lm i c r on oh a c eo t r at a r e am i e n t r a st a n t o< ; G u a r d a d od er e g i s t r oWyS T A T U S . I n i c i o _ I S R m o v w f W _ T e m p ;C o p i a m o sWau nr e g i s t r oT e m p o r a r i o . s w a p f S T A T U S ,W ; I n v e r t i m o sl o sn i b l e sd e lr e g i s t r oS T A T U S . m o v w f S T A T U S _ T e m p ;G u a r d a m o sS T A T U Se nu nr e g i s t r ot e m p o r a l . ; * * * *I n t e r r u p c i o np o rT M R 0* * * * I S R b t f s s I N T C O N , T 0 I F ;C o n s u l t a m o ss ie sp o rT M R 0 . www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/mis-primeros-programas-pic16f84a-y-pic16f628a/?PHPSESSID=6hvnibq0r09kvuigkmkge 29/31

03/06/13

Mis primeros programas con PIC16F84A y PIC16F628A

TMR 0 Modo Te m porizador.rar (84.78 KB - de scargado 629 ve ce s.) ltima modificacin: Julio 30, 2009, 03:00:49 por Suky En lne a

Je ss dijo, yo soy e l C AMINO , la VER DAD y la VIDA, nadie lle ga al PADR E si no e s por m i.

Leon Pic
Mode rador dsPIC De scone ctado Se x o: Me nsaje s: 5113

Re: Mis primeros programas con PIC16F84A y PIC16F628A


Respuesta #14 : Marzo 30, 2009, 01:22:22

Ejemplo modo contador.


El siguiente programa realiza el conteo del nmero de veces que produce una transicin de bajo a alto en la patita T0CKI. El valor del contador se incrementar una vez por cada dos transiciones, y al detectarse 10 cambiamos el estado del Led conectado a RB0.

C um ulonim bus

Diagrama de Flujo:

Cdigo: (asm)

www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/mis-primeros-programas-pic16f84a-y-pic16f628a/?PHPSESSID=6hvnibq0r09kvuigkmkge

30/31

03/06/13

Mis primeros programas con PIC16F84A y PIC16F628A

;* * * *E n c a b e z a d o* * * * l i s tp = 1 6 F 8 4 A # i n c l u d eP 1 6 F 8 4 A . i n c _ _ C O N F I G _ C P _ O F F&_ W D T _ O F F&_ P W R T E _ O N&_ X T _ O S C ; * * * *D e f i n i c i o nd ev a r i a b l e s* * * * C o n t a d o r e q u 0 x 0 C ;C o n t a d o rp a r ad e t e c t a r4d e s b o r d e sd eT M R 0 . W _ T e m p e q u 0 x 0 D ;R e g i s t r op a r ag u a r d a rt e m p o r a l m e n t eW . S T A T U S _ T e m p e q u 0 x 0 E ;R e g i s t r op a r ag u a r d a rt e m p o r a l m e t eS T A T U S L e d e q u 0

;D e f i n i m o sL e dc o m oe lb i tc e r od eu nr e g i s t r o ,e

; * * * *I n i c i od e lM i c r o* * * * R e s e t o r g 0 x 0 0 ;A q u c o m i e n z ae lm i c r o . g o t o I n i c i o ;S a l t oai n i c i od em ip r o g r a m a . ; * * * *V e c t o rd eI n t e r r u p c i o n* * * * o r g 0 x 0 4 ;A t i e n d oI n t e r r u p c i o n . g o t o I n i c i o _ I S R ;* * * *P r o g r a m aP r i n c i p a l* * * * ; * * * *C o n f i g u r a c i o nd ep u e r t o s* * * o r g 0 x 0 5 ;O r i g e nd e lc d i g od ep r o g r a m a . I n i c i o b s f S T A T U S , R P 0 ;P a s a m o sd eB a n c o0aB a n c o1 . m o v l w b ' 1 1 1 1 1 1 1 0 ' ;R B 0c o m os a l i d a . m o v w f T R I S B m o v l w b ' 0 0 1 0 0 0 0 0 ' ;S es e l e c c i o n aT M R 0m o d oC o n t a d o r ,t r a n s i c i o np o s i t i v a m o v w f O P T I O N _ R E G ;yp r e e s c a l e rd e1 / 2 . b c f S T A T U S , R P 0 ;P a s od e lB a n c o1a lB a n c o0 b c f P O R T B , L e d ;E lL e dc o m i e n z aa p a g a d o . m o v l w 0 x F B ;C a r g a m o s2 5 1e nT M R 0p a r ac o n t a r1 0p u l s o se nR A 4 / T O C K I . m o v w f T M R 0 TMR 0 Modo C ontador.rar (87.16 KB - de scargado 779 ve ce s.) m o v l w b ' 1 0 1 0 0 0 0 0 ' ;H a b i l i t a m o sG I EyT 0 I E( i n t e r r u p c i nd e lT M R 0 ) m o v w f I N T C O N En lne a ; * * * *B u c l e* * * * B u c l e Je ss dijo, yo soy e l C AMINO , la VER DAD y la VIDA, nadie lle ga al PADR E si no e s por m i. n o p ;A q u ie lm i c r op u e d ee j e c u t a rc u a l q u i e ro t r at a r e a g o t o B u c l e ;s i nn e c e s i d a dd eu t i l i z a rt i e m p oe nu nb u c l ed ed e m o r a . -

Pginas: [1 ] 2 3

Ir Arriba
; * * * *R u t i n ad es e r v i c i od eI n t e r r u p c i o n* * * *

IM P RIM IR

anterior prximo

; >A q u ih a r e m o sc o p i ad er e s p a l d op a r am o s t r a rc o m os eh a c ea u n q u en oe s ; n e c e s a r i o y a q u e e l m i c r o n o h a c e o t r a t a r e a m i e n t r a s t a n t o < Ir a: => Tutoriales, guias y cursos en uControl ; G u a r d a d od er e g i s t r oWyS T A T U S . I n i c i o _ I S R m o v w f W _ T e m p ;C o p i a m o sWau nr e g i s t r oT e m p o r a r i o . s w a p f S T A T U S ,W ; I n v e r t i m o sl o sn i b l e sd e lr e g i s t r oS T A T U S . Powe m o v w re fd by S T A SMF T U S _ 1.1.18 T e m p | SMF ;G u a r d 2011, a m o sS Sim T A T ple U Se Machine nu nr e s g i s t r ot e m p o r a l . ; * * * *I n t e r r u p c i o np o rT M R 0* * * * Free Forums SMFAds for I S R b t f s s I N T C O N , T 0 I F ;C o n s u l t a m o ss ie sp o rT M R 0 . Pgina cre adag e n 0.113 se gundos con 25 consultas. (Pre tty UR Ls adds 0.022s, o t o F i n _ I S R ;N o ,e n t o n c e sr e s t a u r a m o s v a l o r e s . - 3q)

ir

b t f s s P O R T B , L e d ;S i ,C o n t r o l a m o sL e d . S ie s t aa p a g a d o ,p r e n d oyv i s e v e r s a . g o t o P r e n d o _ l e d b c f P O R T B , L e d ;A p a g oL e d . A c t u a l i z o _ T M R 0 ;C a r g a m o s2 5 1e nT M R 0p a r ac o n t a r1 0p u l s o se nR A 4 / T O C K I . m o v l w 0 x F B ;d ' 2 5 1 ' m o v w f T M R 0 b c f I N T C O N , T 0 I F ;B o r r ob a n d e r ad ec o n t r o ld eI n t e r r u p c i o n . g o t o F i n _ I S R ;R e s t a u r ov a l o r e s . P r e n d o _ l e d b s f P O R T B , L e d ;p r e n d oL e d . g o t o A c t u a l i z o _ T M R 0 ;R e s t a u r a m o sl o sv a l o r e sd eWyS T A T U S . F i n _ I S R s w a p f S T A T U S _ T e m p , W ;I n v e r t i m o sl on i b l e sd eS T A T U S _ T e m p . m o v w f S T A T U S www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/mis-primeros-programas-pic16f84a-y-pic16f628a/?PHPSESSID=6hvnibq0r09kvuigkmkge 31/31

You might also like