Sunteți pe pagina 1din 16

ESCUELA SUPERIOR POLITCNICA DEL LITORAL

FACULTAD DE INGENIERA EN ELECTRICIDAD Y COMPUTACIN

LABORATORIO DE MICROCONTROLADORES

PROYECTO I EN LENGUAJE ENSAMBLADOR


RELOJ DE AJEDRECISTA
EDGAR MARCERLO VELA PINELA

PARALELO # 6

FECHA DE PRESENTACIN: 13/12/2013

2013 SEGUNDO TRMINO

1. ENUNCIADO DEL PROYECTO


Para dos jugadores. Permite registrar el tiempo en segundos para cada jugada. Al finalizar se dar el tiempo restante por cada jugador. Se establecer un lmite de tiempo si se lo sobrepasa pierde partido. Cuando el juego acabe, una alarma sonar y un indicador LED mostrar el ganador. Nota: Los relojes parten en el tiempo que se selecciona. El botn de inicio le da preferencia a las fichas blancas, tan pronto se mueven las blancas de aprieta el botn de blancas y se detiene el reloj de las blancas y arranca el de las negras y as sucesivamente hasta el fin de la partida de ajedrez. El mximo tiempo a programarse es de 99 segundos.

2. DIAGRAMA DE BLOQUES
BOTN EMPEZAR

4 BOTONERAS SET TIME

PIC16F887

2X7SEG PLAYER1 2X7SEG PLAYER2

2 BOTONERAS PLAYER1 2 BOTONERAS PLAYER2

3. DIAGRAMA DE FLUJO FUNCIONAL DEL PROGRAMA PRINCIPAL Y DE LAS SUBRUTINAS


INICIO

CONFIG. INICIAL SETEO DE PUERTOS

AUMENTAR UNIDADES

AUMENTAR DECENAS

DISMINUIR UNIDADES

DISMINUIR DECENAS

EMPEZAR

CONTU1++ CONTU2++

CONTD1++ CONTD2++

CONTU1 CONTU2--

CONTD1 CONTD2--

DISMINUIR1=1

CONTU1=10 OR CONTU2=10

CONTD1=10 OR CONTD2=10

CONTU1=255 OR CONTU2=255

CONTD1=255 OR CONTD2=255

PLAYER1

PLAYER2

CEROU

CEROD

NUEVEU

NUEVED

DISMINUR1=0 DISMINUIR2=1

DISMINUIR1=1 DISMINUIR2=0

CEROU

CEROD

NUEVEU

NUEVED

CONTU1=0 CONTU2=0

CONTD1=0 CONTD2=0

CONTU1=0X09 CONTU2=0X09

CONTD1=0X09 CONTD2=0X09

RETURN

RETURN

RETURN

RETURN

INTERRUPT

SEL=0

W=CONTU1

TMR0=226 INTCON=0 T0IF=0

W=CONTU1

BINARIOA7SEG

CONT1--

BINARIOA7SEG

PORTA.F2=0 PORTA.F3=0 PORTB=W PORTA.F2=0

CONT1=0

RETFIE

PORTA.F2=0 PORTA.F3=0 PORTB=W PORTA.F2=0

W=CONTU2

DISMINUIR1

DISMINUIR2

RETFIE

W=CONTU2

BINARIOA7SEG

CONTU1--

CONTU2--

BINARIOA7SEG

PORTA.F5=0 PORTA.F4=0 PORTB=W PORTA.F4=0

CONTU1=0XFF

CONTU2=0XFF

RETFIE

PORTA.F5=0 PORTA.F4=0 PORTB=W PORTA.F4=0

DECD1

DECD2

RETFIE

DECD1

DECD2

NUEVEDEC1

NUEVEDEC2

CONTU1=0X09 CONTD1--

CONTU2=0X09 COND2--

CONTD1=0X09

CONTD2=0X09

CONTD1=0XFF

RETURN

CONTD2=0XFF

RETURN

RETURN

RETURN

NUEVEDEC1

NUEVEDEC2

BINARIOA7SEG

PCL=PCL+W

W=0

W=0X3F

W=1

W=0X06

W=2

W=0X5B

W=3

W=0X4F

W=4

W=0X66

W=5

W=0X6D

W=6

W=0X7D

W=7

W=0X07

W=8

W=0X7F

W=0X67

RETURN

4. DESCRIPCIN DEL ALGORITMO 4.1. Configuracin inicial y seteo de puertos. 4.2. Aumentar unidades 4.2.1. Contu1++, contu2++ 4.2.2. (Contu1 OR contu2) == 10 4.2.2.1. CEROU 4.2.2.1.1. Contu1 = 0 4.2.2.1.2. Contu2 = 0 4.3. Aumentar decenas 4.3.1. Contd++, contd2++ 4.3.2. (Contd1 OR contd2) == 10 4.3.2.1. CEROD 4.3.2.1.1. Contd1 = 0 4.3.2.1.2. Contd2 = 0 4.4. Disminuir unidades 4.4.1. Contu1--, contu2 4.4.2. (Contu1 OR contu2) == 255 4.4.2.1. NUEVEU 4.4.2.1.1. Contu1 = 9 4.4.2.1.2. Contu2 = 9 4.5. Disminuir decenas 4.5.1. Contd1--, contd2 4.5.2. (Contd1 OR contd2) == 255 4.5.2.1. NUEVED 4.5.2.1.1. Contud1 = 9 4.5.2.1.2. Contud2 = 9 4.6. Empezar 4.6.1. Disminuir1 = 1 4.6.2. Player1 4.6.2.1. Disminuir1 = 0 4.6.2.2. Disminuir2 = 1 4.6.3. Player2 4.6.3.1. Disminuir1 = 1 4.6.3.2. Disminuir2 = 0

INTERRUPT

4.7. Sel == 0 4.7.1. Multiplexacin para mostrar en los 7seg las unidades 4.7.2. Multiplexacin para mostrar en los 7seg las decenas 4.8. TMR0 = 226 4.9. INTCON = 0 4.10. T0IF = 0 4.11. CONT1 4.11.1. RETFIE 4.11.2. DISMINUIR1 4.11.2.1. CONTU1 4.11.2.2. DISMINUIR2

4.11.2.2.1. 4.11.2.2.2.

CONTU2 RETFIE

BINARIOA7SEG 4.12. PCL = PCL + W 4.12.1. W = 0X3F 4.12.2. W = 0X06 4.12.3. W = 0X5B 4.12.4. W = 0X4F 4.12.5. W = 0X66 4.12.6. W = 0X6D 4.12.7. W = 0X7D 4.12.8. W = 0X07 4.12.9. W = 0X7F 4.12.10. W = 0X67 4.12.11. RETURN

5. LISTADO DEL PROGRAMA FUENTE


;ESCUELA SUPERIOR POLITCNICA DEL LITORAL ;FACULTAD DE INGENIERA EN ELECTRICIDAD Y COMPUTACIN ;LABORATORIO DE MICROCONTROLADORES ;PROYECTO DEL PRIMER PARCIAL, 2T-2013 ; ;EDGAR MARCELO VELA PINELA PARALELO:6 ;*************************************************************************************************************************** ********** ;PROYECTO 3: RELOJ DE AJEDRECISTA ;- Para dos jugadores ;- Permite registrar el tiempo en segundos para cada jugada ;- Al finalizar se dar el tiempo total empleado por cada jugador ;- Se establecer un lmite de tiempo si se lo sobrepasa pierde partido y se presenta alarma sonora. ;Nota: Los relojes parten en cero. ;El botn de inicio le da preferencia a las fichas blancas, tan pronto se mueven las blancas de aprieta el botn de blancas ;y se detiene el reloj de las blancas y arranca el de las negras y as sucesivamensucesivamente hasta el fin de la partida de ajedrez. ;El mximo tiempo a programarse es de 99 segundos. ;*************************************************************************************************************************** *********** LIST P=16F887 INCLUDE P16F887.INC __CONFIG _CONFIG1, _CP_OFF&_WDT_OFF&_XT_OSC ERRORLEVEL -302 CBLOCK 0X20 CONTU1 CONTD1 CONTU2 CONTD2 DISMINUIR1 DISMINUIR2 CONTIME SEL FLAG1 FLAG2

;contador unidades player1 ;contador decenas player1 ;contador unidades player2 ;contador decenas player2 ;flag para disminuir tiempo player1 ;flag para disminuir tiempo player2 ;contador para delay 1s

ENDC

ORG 0X00 goto INICIO

ORG MOVF BTFSS GOTO DIG1

0X04 SEL,W STATUS,2 DIG2

MOVF CONTU1,W CALL BINARIOA7SEG BSF PORTA,2 BSF PORTA,3 MOVWF PORTB BCF PORTA,2 MOVF CONTU2,W CALL BINARIOA7SEG

BSF BSF MOVWF BCF COMF SEL,F GOTO SEG DIG2

PORTA,5 PORTA,4 PORTC PORTA,4

MOVF CONTD1,W CALL BINARIOA7SEG BSF PORTA,2 BSF PORTA,3 MOVWF PORTB BCF PORTA,3 ;COMF SEL1,F MOVF CONTD2,W CALL BINARIOA7SEG BSF PORTA,5 BSF PORTA,4 MOVWF PORTC BCF PORTA,5 COMF SEL,F SEG ;CALL VERIFICAR1 ;CALL VERIFICAR2 MOVLW .226 MOVWF TMR0 BCF INTCON,T0IF DECFSZ CONTIME,1 RETFIE ;BTFSC FLAG1,0 ;RETFIE ;BTFSC FLAG2,0 ;RETFIE BTFSC DISMINUIR1,0 GOTO DISMINUCION1 BTFSC DISMINUIR2,0 GOTO DISMINUCION2 RETFIE

VERIFICAR1

MOVF CONTU1,W XORLW 0X3F BTFSC STATUS,Z GOTO COMPD1 RETURN MOVF CONTD1,W XORLW 0X3F BTFSC STATUS,Z CALL GANA1 ;CLRF PORTD RETURN BSF PORTD,3 BSF FLAG1,0 RETURN MOVF PORTC,W XORLW 0X3F BTFSC STATUS,Z GOTO COMPD2

COMPD1

GANA1

VERIFICAR2

RETURN COMPD2 MOVF CONTD2,W XORLW 0X3F BTFSC STATUS,Z CALL GANA2 ;CLRF PORTD RETURN BSF PORTD,4 BSF FLAG2,0 RETURN

GANA2

INICIO BANKSEL TRISB CLRF TRISB CLRF TRISC MOVLW MOVWF MOVLW MOVWF MOVLW ACTIVADAS, T0IE ACTIVADO MOVWF MOVLW MOVWF BANKSEL CLRF CLRF BANKSEL MOVLW MOVWF BANKSEL MOVLW MOVFW MOVFW CLRF BCF BCF BCF BCF CLRF CLRF CLRF MOVLW MOVWF MOVWF MOVWF MOVWF CLRF CLRF ;START

B'11000011' TRISA B'00000111' TRISD B'10100000' INTCON B'00000111' OPTION_REG ANSEL ANSEL ANSELH PORTB .226 TMR0 PORTB 0XFF PORTB PORTC PORTD PORTA,2 PORTA,3 PORTA,4 PORTA,5 DISMINUIR1 DISMINUIR2 CONTIME 0X09 CONTU1 CONTD1 CONTU2 CONTD2 FLAG1 FLAG2 BTFSS PORTD,0

;INTERRUPCIONES GLOBALES

;PRESCALADOR 1:256 A TMR0

LOOP1

BTFSS PORTA,6 GOTO PRESAUMENU BTFSS PORTA,7 GOTO PRESDISMU BTFSS PORTA,0

;unidades+ ;unidades;decenas+

GOTO PRESAUMEND BTFSS PORTA,1 GOTO PRESDISMD BTFSS PORTD,0 GOTO PRESEMPEZAR GOTO LOOP1 ;loop para verificar si se presion y solt empezar PRESEMPEZAR BTFSS PORTD,0 GOTO PRESEMPEZAR ;GOTO LOOP BSF DISMINUIR1,0 LOOP BTFSS PORTD,2 GOTO PLAYER2 BTFSS PORTD,1 GOTO PLAYER1 GOTO LOOP BTFSS PORTD,1 GOTO PLAYER1 BSF DISMINUIR2,0 CLRF DISMINUIR1 GOTO LOOP BTFSS PORTD,2 GOTO PLAYER2 BSF DISMINUIR1,0 CLRF DISMINUIR2 GOTO LOOP

;decenas;empezar

PLAYER1

PLAYER2

;loop para verificar si se presion y solt unidadesPRESDISMU BTFSS PORTA,7 GOTO PRESDISMU GOTO BDISMU ;BSF DISMINUIR,0 ;GOTO LOOP1 ;loop para verificar si se presion y solt unidades+ PRESAUMENU BTFSS PORTA,6 GOTO PRESAUMENU GOTO BAUMU ;BCF DISMINUIR,0 GOTO LOOP1 ;loop para verificar si se presion y solt decensasPRESDISMD BTFSS PORTA,1 GOTO PRESDISMD GOTO BDISMD ;BSF DISMINUIR,0 ;GOTO LOOP1 ;loop para verificar si se presion y solt decenas+ PRESAUMEND BTFSS PORTA,0 GOTO PRESAUMEND GOTO BAUMD ;BCF DISMINUIR,0 ;GOTO LOOP1 BDISMU DECF CONTU1,1

DECF CONTU2,1 MOVF CONTU1,W XORLW 0XFF BTFSC STATUS,Z CALL NUEVEU GOTO LOOP1 NUEVEU MOVLW .9 MOVWF CONTU1 MOVWF CONTU2 RETURN

BAUMU INCF CONTU1,1 INCF CONTU2,1 MOVF CONTU1,W XORLW 0X0A BTFSC STATUS,Z CALL CEROU GOTO LOOP1 CEROU CLRF CONTU1 CLRF CONTU2 RETURN DECF CONTD1,1 DECF CONTD2,1 MOVF CONTD1,W XORLW 0XFF BTFSC STATUS,Z CALL NUEVED GOTO LOOP1 MOVLW .9 MOVWF CONTD1 MOVWF CONTD2 RETURN

BDISMD

NUEVED

BAUMD INCF CONTD1,1 INCF CONTD2,1 MOVF CONTU1,W XORLW 0X0A BTFSC STATUS,Z CALL CEROD GOTO LOOP1 CEROD CLRF CONTD1 CLRF CONTD2 RETURN

DISMINUCION1 DECF CONTU1,1 MOVF CONTU1,W XORLW 0XFF BTFSC STATUS,Z CALL DECD1 RETFIE DECD1 MOVLW 0X09

;compara si hubo desborde a 255

MOVWF CONTU1 DECF CONTD1,1 MOVF CONTD1,W XORLW 0XFF BTFSC STATUS,Z CALL NUEVEDEC1 RETURN NUEVEDEC1 MOVLW 0X09 MOVWF CONTD1 RETURN

DISMINUCION2 DECF CONTU2,1 MOVF CONTU2,W XORLW 0XFF BTFSC STATUS,Z CALL DECD2 RETFIE DECD2 MOVLW 0X09 MOVWF CONTU2 DECF CONTD2,1 MOVF CONTD2,W XORLW 0XFF BTFSC STATUS,Z CALL NUEVEDEC2 RETURN MOVLW 0X09 MOVWF CONTD2 RETURN

;compara si hubo desborde a 255

NUEVEDEC2

BINARIOA7SEG ADDWF PCL,F RETLW 0X3F RETLW 0X06 RETLW 0X5B RETLW 0X4F RETLW 0X66 RETLW 0X6D RETLW 0X7D RETLW 0X07 RETLW 0X7F RETLW 0X67 END

6. CIRCUITO Y SIMULACIN

7. RECOMENDACIONES 7.1. Para realizar la multiplexacin es importante mantener el nmero en el display el tiempo adecuado, este no debe ser ni muy corto ni muy largo para que el efecto de multiplexacion se logre de manera correcta, sin titilar. 7.2. Para realizar un retardo de un valor especifico con mayor precisin se recomienda primero utilizar la expresin para encontrar el tiempo de desborde del timmer0, con este tiempo realizar mediciones con el Stopwatch para saber si se necesita mas o menos retardo, luego modificar el valor de inicio del timer0 o utilizar instrucciones nop. 7.3. Para evitar realizar el proceso de comprobacin de que el botn es presionado y soltado se puede hacer una modificacin del algoritmo y utilizar la interrupcin ocasionada por un cambio en el PUERTOB, aunque esto hara la subrutina de interrupcin un poco ms extensa. 7.4. Para simular el circuito en PROTEUS se debe tener en cuenta si el programa que hemos escrito funciona para un display de nodo comn o de ctodo comn para as elegir correctamente el dispositivo a usarse. 7.5. Se debe revisar las advertencias que se obtienen al simular el circuito en Proteus, ya que aunque la compilacin en Mplab termina satisfactoriamente pueden ocurrir otro tipo de errores que no son de compilacin pero afectan el funcionamiento del circuito 8. CONCLUSIONES 8.1. La realizacin de estos proyectos permiti perfeccionar nuestra habilidad en el manejo del timer0 para realizar contadores as como evidenciar la importancia de su uso cuando se trabaja en proyectos en los que se necesite llevar algn tipo de control basados en el transcurso del tiempo. Este transcurso se puede calcular de manera sencilla y precisa basados en la frecuencia a la que avanza el timer0 y su valor de inicio. 8.2. Para solucionar el problema de aumentar o disminuir un contador segn lo requiera el usuario se puede escribir dos subrutinas que se encarguen de cada accin y cual se ejecuta depende del usuario 8.3. La tcnica de multiplexacin ayuda a optimizar recursos fsicos, los pines del microcontrolador. La multiplexacin reduce casi a la mitad el nmero de salidas, esto puede ser muy importante cuando se cuenta con un pic limitado con pocos puertos de entrada y salida, o cuando nuestro programa necesite de varios puertos de comunicacin, el precio por esto es que el programa se vuelve un poco ms extenso. 8.4. Los proyectos realizados son esencialmente programas basados en interrupciones, en la activacin y desactivacin de las mismas. Observando esto podemos concluir que las interrupciones son una poderosa herramienta que permite detener la operacin del programa principal para realizar algn tipo de modificacin en los registros del PIC.

S-ar putea să vă placă și