You are on page 1of 9

INSTITUTO TECNOLGICO DE

CHIHUAHUA

Microcontroladores
(15:00-14:00)

Prctica # 1
Intermitencia con el PIC16F884 (SEMAFORO) (ASM).
ALUMNOS
Gonzlez Garza Miguel Angel
Medina Pin Gustavo Abdi
Polo Aguilar Gabriela
Rodrguez Olivas Erick Daniel

Ing. Jorge Aguirre Beltrn

13 de octubre 2014

Prctica No.1 Intermitencia con el PIC16F884 (SEMAFORO) (ASM).


Objetivo: Realizar un programa en lenguaje ensamblador, usando como base el programa
de intermitencia y direccionar las salidas a un solo puerto as como la aplicacin de los
conocimientos vistos en clase.
Introduccin: Esta prctica contribuye a la familiarizacin con el software Mplab y al
utilizar el simulador nos ayudara a comprende como funciona la arquitectura del
microcontrolador. En el simulador(MPLABSIM) se pueden ver los movimientos en los
registros, la memoria de datos, la memoria de programa, el registro de estado, tambin se
le puede asignar las entradas y salidas as como el comportamiento de nuestro programa
mientras se corre paso a paso. Adems la elaboracin de dicha prctica nos ayudara
comprender la conexin bsica del microcontrolador para que funcione este funcione de la
manera adecuada.
El programa funciona de la siguiente manera:
Al energizar el sistema, tenemos 4 semforos funcionando.
El semforo 1 tendr sus leds conectados en paralelo a los leds del semforo 2, conectado
de la siguiente manera: led verde al pin RB0, led amarillo al pin RB1 y led rojo al pin
RB2, y para el semforo 3 se tiene el mismo puerto B, pero en diferentes pines, el led verde
al pin RB3, el led amarillo al pin RB4 y led rojo al pin RB5, este semforo estar
conectado en paralelo a los otros leds del semforo 4. Esto con la finalidad de que cuando
los 2 semforos se encuentren encendidos en verde, los otros 2 semforos del pin RB3-RB5
estn prendidos en rojo, el semforo 1 y 2 duran encendidos en verde por un momento,
posteriormente comienzan a parpadear y despus de unos segundos cambia a amarillo,
mientras que el semforo 3 y 4 se mantienen en rojo y cuando el semforo 1 y 2 cambie a
rojo, el semforo 3 y 4 cambiara a verde y viceversa.
Este ciclo se repetir
indefinidamente.
Esta prctica se correlaciona con el Tema 2.1 de la Unidad 2.
Material y Equipo utilizado:
1 Microcontrolador PIC16F884
1 Cristal 4 Mhz
2 Capacitores de 22pf o 15pf
12 Leds
1 Resistencia de 10 Kohms
6 Resistencia de 220 ohms
1 Fuente de +5 VDC (Opcional: 1 Pila Cuadrada de +9Vdc, 1 Reg. 7805)
------------------------------------1 Software de MPLAB
1 Grabador de Pics
I.Metodologa:
1- Utilice el software MPLAB para editar el programa intermitencia.asm que se
muestra mas adelante.

2- Ensamble, Simule y entienda el funcionamiento del programa.


3- Grabe el archivo (.HEX obtenido al ensamblar) en el PIC
NOTA: En este primer ejemplo se utiliza la librera para el PIC 16F884 es
necesario poner entonces las siguientes directivas:
LIST P=PIC16F84
#include p16f884.inc
Si su programador no cuenta con la opcin de poner la palabra de configuracin ,
entonces es necesario agregar la configuracin por software con la directiva
(__config) de la siguiente forma:
LIST P=PIC16F884
#include p16f84.inc
__config _XT_OSC & _PWRTE_OFF & _WDT_OFF & _CP_OFF & _LVP_OFF
& _WRT_ENABLE_OFF
Observe que en esta configuracin se selecciona la oscilacin XT porque el cristal a
utilizar es de 4 MHZ y todas las opciones estn en OFF.
4- Arme el circuito de acuerdo al diagrama de conexin.
5- Pruebe el buen funcionamiento del programa.
6- Ahora modifique el programa para que realice alguna de las siguientes opciones.
a) Cuando prenda el LED en RB0 apague un LED conectado en el pin RB3,
realice un retardo de tiempo y luego prenda el LED en RB3 y apague el LED en
RB0, este ciclo lo deber realizar indefinidamente.
b) Simular las luces de un semforo asignando al pin RB0 un led de color verde, al
pin RB1 un led de color amarillo y al pin RB2 un led de color rojo. Asigne los
tiempos de retardo tal como un semforo real.
7- Reporte sus resultados.

II. Programa fuente Intermitencia:


;**************************************
;* intermitencia.asm
*
;* Este programa configura RB0 como salida *
;* y genera una intermitencia en dicha salida *
;*
*
;* Rev A: By Ing. Jorge Aguirre
*
;**************************************
;La siguiente configuracin solo se utiliza si usamos alguna librera ejemplo:
LIST P=PIC16F874
#include p16f874.inc
__config _XT_OSC & _PWRTE_OFF & _WDT_OFF & _CP_OFF & _LVP_OFF
& _WRT_ENABLE_OFF

CUENTA1

EQU

CUENTA2

EQU

F
w

EQU
EQU

1
0

ORG 00H
BSF STATUS,5
BCF TRISB,0
BCF STATUS,5
INICIO
BSF PORTB,0
CALL DELAY
BCF PORTB,0
CALL DELAY
GOTO INICIO

20H ;las variables que usemos siempre a


;partir de la direccin 20Hh
21H
;Constantes del programa

;Inicia en la direccin 00H de la memoria de programa


;banco 1
;RB0 como salida
;banco 0
;Pone a "1" RB0 (enciende)
;Llama a la subrutina de retardo
;Cuando vuelve del retardo pone
;a "0" RB0 (apaga)
;llama a la subrutina de retardo
;cuando vuelve del retardo
;repite el ciclo

;=======================
;= DELAY: Subrutina de retardo
=
;= Modifica los siguientes registros: =
;= CUENTA1
=
;= CUENTA2
=
;=======================
;(Conviene hacerse un pequeo resumen de lo que
;hace cada subrutina, puede sernos muy til para
;usarla en otros programas)
;Subrurtina hecha con 2 lazos anidados
DELAY MOVLW

0ffH

MOVWF CUENTA1
ACA1 MOVLW 0FFH
MOVWF CUENTA2
ACA

DECFSZ CUENTA2,F

GOTO ACA

;Carga el acumulador W con el valor


;de FFH (255 en decimal)
;Mueve el contenido del acumulador
;a CUENTA1
;Carga CUENTA2 con el valor FFH

;Decrementa CUENTA2, guarda el resultado


;en f(CUENTA2), y si es cero se salta la
;siguiente instruccin
;Vuelve a decrementar mientras

DECFSZ CUENTA1,F
GOTO ACA1
RETURN

;CUENTA2 no sea cero


;Se decrementa CUENTA1 cada vez que
;CUENTA2 llega a cero
;mientras CUENTA1 no llegue a cero recarga
;CUENTA2 y repite el proceso
;retorna al programa principal

;=
=
;= FIN DE LA SUBRUTINA DELAY =
;===========================
END

;Fin del programa

III. Cdigo de la Intermitencia con el PIC16F884 (SEMAFORO) (ASM).


;**************************************
;* semaforo.asm
*
;* Este programa simula un crucero con 4
*
;* semforos configurados en el puerto B
*
;*
*
;* Rev A: By Equipo #3
*
;**************************************
LIST P=PIC16F884
#include p16f884.inc
; __config _XT_OSC & _PWRTE_OFF & _WDT_OFF & _CP_OFF & _LVP_OFF &
_WRT_ENABLE_OFF
CUENTA1 EQU
CUENTA2 EQU
F
w

EQU
EQU

20H ;las variables que usemos siempre a


;partir de la direccin 20Hh
21H

1
0

ORG 00H
BSF STATUS,5
BCF TRISB,0
BCF TRISB,1
BCF TRISB,2
BCF TRISB,3
BCF TRISB,4
BCF TRISB,5
;MOVLW 00H
;MOVF TRISB
BCF STATUS,5

;Constantes del programa

;Inicia en la direccin 00H de la memoria de programa


;banco 1

;Carga un 0 al acumulador
;Asigna una cero todo el puerto
;banco 0

INICIO
MOVLW B'00100001'
MOVWF PORTB
CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY
MOVLW B'00100000'
MOVWF PORTB
CALL DELAY
MOVLW B'00100001'
MOVWF PORTB
CALL DELAY
MOVLW B'00100000'
MOVWF PORTB
CALL DELAY
MOVLW B'00100001'
MOVWF PORTB
CALL DELAY
MOVLW B'00100000'
MOVWF PORTB
CALL DELAY
MOVLW B'00100001'
MOVWF PORTB
CALL DELAY
MOVLW B'00100010'
MOVWF PORTB
CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY
MOVLW B'00001100'
MOVWF PORTB
CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY
MOVLW B'00001100'
MOVWF PORTB
CALL DELAY
MOVLW B'00001100'
MOVWF PORTB
CALL DELAY
MOVLW B'00000100'

MOVWF PORTB
CALL DELAY
MOVLW B'00001100'
MOVWF PORTB
CALL DELAY
MOVLW B'00000100'
MOVWF PORTB
CALL DELAY
MOVLW B'00001100'
MOVWF PORTB
CALL DELAY
MOVLW B'00010100'
MOVWF PORTB
CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY
GOTO INICIO
;repite el ciclo
;=======================
;= DELAY: Subrutina de retardo
=
;= Modifica los siguientes registros: =
;= CUENTA1
=
;= CUENTA2
=
;=======================
;(Conviene hacerse un pequeo resumen de lo que
;hace cada subrutina, puede sernos muy til para
;usarla en otros programas)
;Subrurtina hecha con 2 lazos anidados
DELAY
MOVLW 0ffH
;Carga el acumulador W con el valor
;de FFH (255 en decimal)
MOVWF CUENTA1
;Mueve el contenido del acumulador
;a CUENTA1
ACA1
MOVLW 0FFH
;Carga CUENTA2 con el valor FFH
MOVWF CUENTA2
ACA
DECFSZ CUENTA2,F
;Decrementa CUENTA2, guarda el resultado en
f(CUENTA2), y si es cero se salta la siguiente instruccin
GOTO ACA
;Vuelve a decrementar mientras CUENTA2 no sea
cero

DECFSZ CUENTA1,F
llega a cero
GOTO ACA1
y repite el proceso
RETURN

;Se decrementa CUENTA1 cada vez que CUENTA2


;mientras CUENTA1 no llegue a cero recarga CUENTA2
;retorna al programa principal

;=
=
;= FIN DE LA SUBRUTINA DELAY =
;===========================
END

;Fin del programa

IV. Diagrama de conexin

V. Conclusin.
Gabriela Polo Aguilar
El semforo diseado cumple con los requisitos pedidos por el maestro, su funcionamiento
es correcto aunque tuvimos problemas al momento de direccionarlo todo al puerto B. Pero
al final se encontr la solucin al problema. Por otro lado el aplicar los conocimientos
vistos en clase nos ayud a comprender el funcionamiento y la importancia que tiene el
tiempo en este lenguaje, y a pesar de que en la actualidad se utiliza ms el lenguaje C este
no le resta importancia al lenguaje ensamblador. Porque siempre es importante conocer el
origen de las cosas y as comprender lo que actualmente se tiene.

VI. Bibliografa Preliminar:


[1] Microchip Technology Inc., PIC16F873/874/876/877 Data Sheet, 2003
[2] Microchip Technology Inc., PIC18F2455/2550/4455/4550 Data Sheet, 2009
[3] Tpicos del Help en el MPLAB(MPLAB-IDE, MPLAB- Editor, MPLAB-SIM)
[4] E. Martn Cuenca. Microcontroladores PIC. Diseo prctico de aplicaciones Ed. Mc.
Graw Hill
[5] Apuntes del Maestro.
[6] http://www.microchip.com

You might also like