Página principal

Reloj binario


Descargar 51.19 Kb.
Fecha de conversión21.09.2016
Tamaño51.19 Kb.




ESCUELA SUPERIOR POLITÉCNICA DEL LITORAL

FIEC
Laboratorio de Microcontroladores

Proyecto#1:

Lenguaje Ensamblador
RELOJ BINARIO
Perteneciente:
Arteaga Choéz José Manuel
Paralelo: # 4

Grupo: # 1
Fecha de presentación:

22/12/2011
2011 – 2° Término


  1. Enunciado del Proyecto

Este proyecto tiene como tema central un reloj binario, el mismo que podrá funcionar como reloj normal y además podrá realizar una tarea diferente.



Función

1) Carga con valor inicial en segundos mediante un incremento rápido logrado al apretar un botón. Este valor se decrementará automáticamente cada segundo hasta llegar a cero, presentando un tono audible a final del conteo.


  1. Diagrama de Bloques





  1. Diagrama de Flujo Funcional del Programa Principal





  1. Diagrama de Flujo Funcional de las Subrutinas




  1. Descripción del Algoritmo

1. Se declaran las variables segundos, minutos, horas y counter y además se setea los puertos B, C, D y E como salidas y el puerto A como entrada.


2. Al presionar RA2 se prendera un led de color azul el cual indicara que estas ingresando al programa de reloj binario.

3. El programa correrá como un reloj binario hasta que se presione la botonera RA0, si se la presiona entrara a la aplicación .


4. Estando en la aplicación se carga rapidamente se prendera un led amarillo que indicara que se está ejecutando normalmente.

5. Ahora para ingresar el incremento de los segundos se debe presionar la botonera que está en el pin RA1 el cual incrementara la variable cseg la cual guardara los segundos .


6. Cuando el reloj disminuya el tiempo programado se prender el pin RE2 el cual activara un parlante .


  1. Programa Fuente en Lenguaje Ensamblador


;*********************************************************************

; RELOJ BINARIO

;*********************************************************************

; NOMBRE: p1.asm

; FECHA: 10/12/2011

; VERSION: 1.00

; PROGRAMADOR: JOSE ARTEAGA

;*********************************************************************

;DESCRIPCION:

;Este proyecto tiene como tema central un reloj binario,el mismo

;que podrá funcionar como reloj normal y además podrá realizar

;podrá realizar diez tareas diferentes.

;

;Carga con valor inicial en segundos mediante un incremento

;rápido logrado al apretar un botón. Este valor se decrementará

;automáticamente cada segundo hasta llegar a cero, presentando

;un tono audible a final del conteo.

;*********************************************************************

LIST P=16F887

#include

ERRORLEVEL -302, -306
__CONFIG _CONFIG1, _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT

__CONFIG _CONFIG2, _WRT_OFF & _BOR21V
;*********************************************************************

;DEFINICION DE VARIABLES
cblock 0x20 ; Bloque de variables que comienza en la direccion 20h

segundos

minutos

horas

counter

listo

endc

;**************************************************************************
org 0x0000 ; direccion de la primera instruccion del progrma

banksel ANSEL ;cambio los puertos de entradas y salidas analogicas a digital

clrf ANSEL

clrf ANSELH

banksel TRISA ;puerto a como entrada digital

movlw b'11111111'

movwf TRISA

movlw b'1000' ;puerto e el bit 3 como entrada el resto como salida digital

movwf TRISE ;puerto b,c,d como salidas digitales

clrf TRISB

clrf TRISC

clrf TRISD

banksel OPTION_REG ;prescalador de 256 al tmro

movlw 07h

movwf OPTION_REG

;**************************************************************************

;inicializacion de variables

main

banksel PORTA ;inicializacion de variables y puertos

bcf PORTE,0

bcf PORTE,1

bcf PORTE,2

clrf PORTB

clrf PORTC

clrf PORTD

clrf segundos

clrf minutos

clrf horas

clrf counter

clrf listo

bcf PORTE,0

bcf PORTE,1

loop_1 ;para iniciar con el programa

btfsc PORTA,2

goto loop_1

loop_2

btfss PORTA,2

goto loop_2

bsf PORTE,0

loop

call delay

btfss PORTA,0 ;pregunto por el pin RA0 y salto si es o

goto inicio

incf segundos,f ;incremento la variable segundos

movf segundos,w

call tabla ;me muestra la variable segundo en bcd

movwf PORTB ;presenta la variable segundos en el puerto d

movf segundos,w ;pregunto si segundos llego a 59 restando la variable

sublw .59 ; segundos con 59

btfss STATUS,2

goto loop

loop1

clrf segundos ; encero la variable segundos

incf minutos,f ; incremento la variable minutos

movf minutos,w

call tabla ; me muestra la variable minutos en bcd

movwf PORTC ; presenta la variable minutos en el puerto c

nop

movf minutos,w ; pregunto si la variable minutos llego a 59

sublw .59 ; restando minutos con 59

btfss STATUS,2 ; salto a loop2 si llego a 59 si no regreso a loop

goto loop

loop2

clrf minutos ; encero la variable minutos

incf horas,f ; incremento la variable horas

movf horas,w

call tabla ; me muestra la variable en bcd

movwf PORTD ; presenta la variable en el puerto b

nop

movf horas,w ; pregunto si la variable horas llego a 24

sublw .24 ; restando la variable con 24

btfss STATUS,2 ; si horas llego a 24 y si es asi salta a main sino va a loop

goto loop

goto main

inicio

bsf PORTE,1

bcf PORTE,0

clrf segundos

clrf PORTB

clrf PORTD

clrf PORTC

inicio_1

btfsc PORTA,1 ;pregunto por el pin RA1 y salto si es o

goto inicio_1

incf segundos,f ;incremento la variable segundos

movf segundos,w

call tabla ;me muestra la variable segundo en bcd

movwf PORTB ;presenta la variable segundos en el puerto d

nop

inicio1

btfsc PORTA,1 ;pregunto por el pin RA1 y salto si es 1

goto decrementar

movf segundos,w ;pregunto si segundos llego a 59 restando la variable

sublw .59 ; segundos con 59

btfss STATUS,2 ; si la variable segundos llego a 59 salto a inicio2 si no

goto inicio_1 ; regreso a la subrutina inicio

goto inicio

decrementar

movf segundos,w ; primero pregunta si segundos es cero

sublw .0

btfss STATUS,2 ; si lo es salta si no va desec

goto decsec

goto final

decsec

btfss PORTA,2 ;pregunto por el pin RA2 si es 0 regresa a main si no salta

goto main

decf segundos,f ; decremento segundos hasta que llegue a 0

movf segundos,w

sublw .0

btfss STATUS,2

goto mostrarsegundos ; muestra la variable segundos en el puerto d

goto final

mostrarsegundos

call delay ; genera un delay de un segundo

movf segundos,w

call tabla ; muestra la variable segundos en puerto d

movwf PORTB

goto decsec ; va a la subrutina decsec

final

bsf PORTE,0 ;prende el bit 0 y 1 de puerto e

bsf PORTE,1

movlw .1

movwf segundos

movf segundos,w

call tabla

movwf PORTB

call delay

final1

incf listo,f ;incremento la variable listo

clrf PORTD ;encero el puerto d

bsf PORTE,2 ;prendo el bit 2 del puerto e

call sound ;genera un retardo

bcf PORTE,2 ;apaga el bit 2 del puerto e

call sound ; genera un retardo

movf listo,w ; pregunta si listo llego a 2

sublw .2

btfss STATUS,2 ; si es asi salta a main si no regresa a final1

goto final1

goto main

;*********************************************************************

subdelay2

clrf TMR0

lazo31 MOVF TMR0,W

sublw .10

BTFSS STATUS,Z

GOTO lazo31

return
;**************************************************************************

sound

movlw .100

movwf counter

lazo21

call subdelay2

decfsz counter

goto lazo21

return
;*********************************************************************

subdelay

clrf TMR0

lazo3 MOVF TMR0,W

sublw .59

BTFSS STATUS,Z

GOTO lazo3

return
;**************************************************************************

delay

movlw .100

movwf counter

lazo2

call subdelay

decfsz counter

goto lazo2

return
;*************************************************************************

tabla

ADDWF PCL,F ; PCL + W -> W

; El PCL se incrementa con el

; valor de W proporcionando un

; salto

RETLW 0x00 ; Retorna con el código del 0

RETLW 0x80 ; Retorna con el código del 1

RETLW 0x40 ; Retorna con el código del 2

RETLW 0xC0 ; Retorna con el código del 3

RETLW 0x20 ; Retorna con el código del 4

RETLW 0xA0 ; Retorna con el código del 5

RETLW 0x60 ; Retorna con el código del 6

RETLW 0xE0 ; Retorna con el código del 7

RETLW 0x10 ; Retorna con el código del 8

RETLW 0x90 ; Retorna con el código del 9

RETLW 0x08 ; Retorna con 10

RETLW 0x88 ; Retorna con 11

RETLW 0x48 ; Retorna con 12

RETLW 0xC8 ; Retorna con 13

RETLW 0x28 ; Retorna con 14

RETLW 0xA8 ; Retorna con 15

RETLW 0x68 ; Retorna con 16

RETLW 0xE8 ; Retorna con 17

RETLW 0x18 ; Retorna con 18

RETLW 0x98 ; Retorna con 19

RETLW 0x04 ; Retorna con 20

RETLW 0x84 ; Retorna con 21

RETLW 0x44 ; Retorna con 22

RETLW 0xC4 ; Retorna con 23

RETLW 0x24 ; Retorna con 24

RETLW 0xA4 ; Retorna con 25

RETLW 0x64 ; Retorna con 26

RETLW 0xE4 ; Retorna con 27

RETLW 0x14 ; Retorna con 28

RETLW 0x94 ; Retorna con 29

RETLW 0x0C ; Retorna con 30

RETLW 0x8C ; Retorna con 31

RETLW 0x4C ; Retorna con 32

RETLW 0xCC ; Retorna con 33

RETLW 0x2C ; Retorna con 34

RETLW 0xAC ; Retorna con 35

RETLW 0x6C ; Retorna con 36

RETLW 0xEC ; Retorna con 37

RETLW 0x1C ; Retorna con 38

RETLW 0x9C ; Retorna con 39

RETLW 0x02 ; Retorna con 40

RETLW 0x82 ; Retorna con 41

RETLW 0x42 ; Retorna con 42

RETLW 0xC2 ; Retorna con 43

RETLW 0x22 ; Retorna con 44

RETLW 0xA2 ; Retorna con 45

RETLW 0x62 ; Retorna con 46

RETLW 0xE2 ; Retorna con 47

RETLW 0x12 ; Retorna con 48

RETLW 0x92 ; Retorna con 49

RETLW 0x0A ; Retorna con 50

RETLW 0x8A ; Retorna con 51

RETLW 0x4A ; Retorna con 52

RETLW 0xCA ; Retorna con 53

RETLW 0x2A ; Retorna con 54

RETLW 0xAA ; Retorna con 55

RETLW 0x6A ; Retorna con 56

RETLW 0xEA ; Retorna con 57

RETLW 0x1A ; Retorna con 58

RETLW 0x9A ; Retorna con 59

RETLW 0x06 ; Retorna con 60

END ; Fin del programa fuente

  1. Circuito Armado en PROTEUS



Decremento



  1. Conclusiones



  1. Recomendaciones


La base de datos está protegida por derechos de autor ©espanito.com 2016
enviar mensaje