1. ESCUELA POLITECNICA NACIONAL
SISTEMAS MICROPROCESADOS
TEMA:
IMPLEMENTACION DEL JUEGO DE TRES
EN RAYA CON EL
MICROCONTROLADOR ATMEGA 164P
INTEGRANTES:
• Cevallos David
• Chávez Ernesto
• Simbaña Andres
3
2. ÍNDICE
1. JUEGO DEL TRES EN RAYA 4
2. PANTALLA GLCD 5
3. DISEÑO DE SOFTWARE 12
4. CIRCUITO ESQUEMÁTICO 14
5. LISTADO DE MATERIALES 16
6. PROGRAMA DESARROLLADO 16
7. SIMULACIÓN DEL CIRCUITO 77
8. PARTE PRÁCTICA (IMPLEMENTACIÓN DEL CIRCUITO) 80
9. CONCLUSIONES 84
10. DIFICULTADES Y RECOMENDACIONES 84
11. BIBLIOGRAFÍA 85
4
3. PROYECTO FINAL SISTEMAS MICROPROCESADOS
El presente proyecto tiene como objetivo implementar un juego de tres en raya que
permita jugar entre un jugador y la PC o entre dos jugadores, por medio de una pantalla
LCD gráfica para visualizar el juego y pulsadores.
1. JUEGO DEL TRES EN RAYA
El juego tres en línea es también conocido como tres en raya, juego del gato, tatetí,
triqui, totito, tres en gallo, michi o la vieja, es un juego en el cual se necesita dos
jugadores en el cual cada uno de ellos marca una señal diferente en los espacios de un
tablero de 3x3 alternadamente (para el caso de nuestro proyecto los símbolos a utilizar
son caritas felices y caritas tristes).
Un jugador gana si consigue tener una línea de tres en sus símbolos: la línea puede ser
horizontal, vertical o diagonal.
Una partida ganada por un jugador cuyo símbolo es la “X”:
También puede existir una partida que puede terminar en empato entre los dos
jugadores:
Hay que tener en cuenta que el juego perfecto termina en empate sin importar con qué
juega el primer jugador. Este juego es practicado en su mayor parte por niños o jóvenes.
La simplicidad del juego de tres en raya lo hace ideal y por ello sirve como herramienta
pedagógica para enseñar conceptos de teoría de juegos y la rama de inteligencia
artificial que se encarga de la búsqueda de árboles de juego.
5
4. 2. PANTALLA GLCD
Todas las posibilidades que ofrecen la mayoría de las pantallas LCD Gráficas que se
utilizan van controladas por el microcontrolador T6963C de TOSHIBA que fue
diseñado con el objetivo de controlar pantallas de cristal líquido de pequeño, mediano y
gran tamaño. Es este chip el que recibe e interpreta todos los comandos que se le envían
a la pantalla, ya sea desde un PC o un microcontrolador.
MODELO DE LA PANTALLA A UTILIZARSE: JHD240128D
RESOLUCIÓN: 240 pixels × 128 pixels.
MICROCONTROLADOR QUE EMPLEA: T6963C de TOSHIBA.
2.1. CARACTERÍSTICAS TÉCNICAS
2.2. REGISTRO DE STATUS
Debe ser chequeado antes de ejecutar un comando, un dato de 1 byte o un dato de 2
bytes, pues en caso de que el LCD esté ocupado ejecutando alguna acción, la nueva
acción encomendada no se ejecutará.
6
5. 2.3. PINES
El modelo usado para el proyecto es la pantala JHD240128D cuya distribución de pines
es la siguiente:
7
6. 2.4. PROCEDIMIENTO PARA REALIZAR ACCIONES EN BASE A
COMANDOS
Veamos a continuación el procedimiento de envío de comandos. Para ello mostramos
los diagramas correspondientes:
a) Para escribir un comando.
b) El caso de un comando que requiere un dato de 1 byte.
8
7. c) El caso de un comando que requiere 2 datos de 1 byte cada uno.
2.5. MEMORIA V-RAM
En modo single la memoria V-RAM se distribuye de la siguiente manera:
9
8. Se puede configurar por software donde se desea que empiece cada sección de la
memoria.
2.6. CG-ROM INTERNO (GENERADOR DE CARACTERES INTERNO)
El T6963C cuenta con una memoria ROM donde se almacenan caracteres internos. A
continuación se detallan estos caracteres:
10
9. 2.7. RESUMEN DE COMANDOS DE PARA PODER SER UTILIZADA
Para ejecutar una acción en primer lugar se envían los datos y luego el comando
respectivo.
11
11. En base a estos conceptos ya podemos trabajar sin problemas con la pantalla GLCD.
3. DISEÑO DE SOFTWARE
.
PROGRAMA PRINCIPAL
JUEGO.ASM
CONTROLA EL JUEGO
LCD.ASM OPCIONESGRAFICAS.ASM JUGADOR.ASM
Contiene subrutinas Contiene subrutinas Contiene subrutinas
asociadas a la asociadas a los asociadas al juego de
inicialización de la gráficos que se cada jugador:
pantalla GLCD deben mostrar en la jugador 1 y jugador
así como para pantalla conforme 2 o PC. Es decir se
escribir comandos, avanza el juego, es implementa el
escribir un dato de 1 decir aquí se código para verificar
byte, escribir un dato implementa el la victoria de un
de 2 bytes y verificar código para dibujar jugador
la disponiblidad de los íconos, líneas, determinado, para
la pantalla GLCD. mensajes, posicionar determinar un
el cursor, borrar la empate, conversión a
pantalla, etc. BCD de los
resultados,
ocupación de
casillas, etc.
13
14. Descripción
El pórtico A es usado para controlar las señales de control de la pantalla GLCD de la
siguiente manera:
PA0: CD (escribir comandos o datos)
PA1: RD (para leer)
PA2: WR (para escribir)
PA3: CE (chip enable)
PA4: RESET
Los 8 pines del pórtico C son usados para los datos que se le entregarán al GLCD.
PC0: D0
PC1: D1
PC2: D2
PC3: D3
PC4: D4
PC5: D5
16
15. PC6: D6
PC7: D7
PC8: D8
El pórtico D se utiliza para controlar los movimientos del jugador 1 como se muestra a
continuación:
PD0: Subir
PD1: Bajar
PD2: Derecha
PD3: Izquierda
PD4: Seleccionar
El pórtico B se utiliza para controlar los movimientos del jugador 2 como se muestra a
continuación:
PB0: Subir
PB1: Bajar
PB2: Derecha
PB3: Izquierda
PB4: Seleccionar
5. LISTADO DE MATERIALES
• 1 Protoboard.
• 1 Pantalla GLCD 240x128 pixels que opere con el microcontrolador TOSHIBA
T6963C.
• Un microcontrolador ATMEGA 164P.
• 11 pulsadores normalmente abiertos.
• 10 capacitores 0,1 uF.
• 1 capacitor de 10 nF.
• Estaño.
• Pasta para soldar.
• Cautín.
• Alambre para conecciones.
• 1 Potenciômetro de 50 KΩ .
• 1 resistencia de 470 Ω .
6. PROGRAMA DESARROLLADO
ARCHIVO JUEGO.ASM
.NOLIST
.INCLUDE "m164pdef.inc"
.LIST
.DEF AUX1=R16 ;REGISTROS AUXILIARES PARA OPERACIONES
.DEF AUX2=R17
.DEF AUX3=R18
17
16. .DEF AUX4=R19
.DEF AUX5=R20
.
.DEF PANTALLA=R21 ;0 MENU 1 MENU1 2 JUEGO
.DEF MODO_JUEGO=R22 ;0 JGD VS PC 1 JGD VS JGD
.DEF MODO=R23 ;INDICA EL MODO DE VICTORIA
.DEF ICONO_J1=R24 ;0 CARA FELIZ 1 CARA TRISTE
.DEF CURSOR=R25 ;INDICA LA CASILLA A OCUPARSE
.DSEG
POSICION0: .BYTE 1
POSICION1: .BYTE 1
POSICION2: .BYTE 1
POSICION3: .BYTE 1
POSICION4: .BYTE 1
POSICION5: .BYTE 1
POSICION6: .BYTE 1
POSICION7: .BYTE 1
POSICION8: .BYTE 1
VICJ1: .BYTE 1
EMP: .BYTE 1
VICJ2: .BYTE 1
VIC_J1_MSB: .BYTE 1
VIC_J1_LSB: .BYTE 1
EMP_MSB: .BYTE 1
EMP_LSB: .BYTE 1
VIC_J2_MSB: .BYTE 1
VIC_J2_LSB: .BYTE 1
.CSEG
RJMP PROGRAMA
.ORG $0A
RJMP JUGADOR2
.ORG $0E
RJMP JUGADOR1
PROGRAMA:
LDI AUX1, LOW(RAMEND) ;INICIALIZACIÓN DEL STACK POINTER
OUT SPL,AUX1
LDI AUX1, HIGH(RAMEND)
OUT SPH, AUX1
LDI AUX1,$FF ;CONFIGURACIÓN DE LOS PÓRTICOS DE SALIDA
18
17. OUT DDRA,AUX1
OUT DDRC,AUX1
;ACTIVACIÓN RESISTENCIAS DE PULL-UP
OUT PORTB,AUX1
OUT PORTD,AUX1
RCALL INICIALIZAR
RCALL FORMARCARACTERES
RCALL BORRAR
RCALL MENU
LDI PANTALLA,0
LDI MODO_JUEGO,0
LDI ICONO_J1,0
LDI AUX1,$08 ;HABILITA INT. PORTICO
STS PCICR,AUX1
LDI AUX1,$12
STS PCMSK3,AUX1
LDI AUX1,$0F
OUT PCIFR,AUX1
SEI ;HABILITACIÓN GLOBAL DE INTERRUPCIONES
LOOP: CPI PANTALLA,0
BREQ LOOP
CPI PANTALLA,0
BREQ LOOP
RCALL BORRAR
RCALL MENU1
LOOP1: CPI PANTALLA,1
BREQ LOOP1
CPI PANTALLA,1
BREQ LOOP1
;-----------------------------------------------------
RCALL BORRAR
RCALL ENCERARPUNTAJES
LDI PANTALLA,2
CPI MODO_JUEGO,0
BREQ JGDVSPC
RJMP JGDVSJGD
JGDVSPC: RCALL HABILITAR_CURSOR
RCALL BORRAR
RCALL DIBUJARTABLERO ;JUGADOR VS PC
19
27. LDI AUX2,0
RCALL DATO2
LDI AUX1,$41
RCALL CMD
LDI AUX1,$00 ;GRAPHIC HOME ADRESS SET
LDI AUX2,$02
RCALL DATO2
LDI AUX1,$42
RCALL CMD
LDI AUX1,$1E ;GRAPHIC AREA SET
LDI AUX2,$00
RCALL DATO2
LDI AUX1,$43
RCALL CMD
LDI AUX1,$80 ;MODE SET
RCALL CMD
LDI AUX1,$03 ;SET OFFSERET
LDI AUX2,$00
RCALL DATO2
LDI AUX1,$22
RCALL CMD
LDI AUX1,$08 ;CURSOR POINTER
LDI AUX2,$06
RCALL DATO2
LDI AUX1,$21
RCALL CMD
LDI AUX1,$94 ;DISPLAY MODE SET
RCALL CMD
LDI AUX1,$A0 ;CURSOR PATERN
RCALL CMD
RET
;----------------------------------------------------------------------------
CMD: RCALL STATUS ;ESCRIBIR UN COMANDO
OUT DATOS,AUX1
LDI AUX3,0b00010011
OUT CONTROL,AUX3
NOP
SBI CONTROL,CE
RET
DATO1: RCALL STATUS ;ESCRIBIR 1 BYTE DE DATO
29
28. OUT DATOS,AUX1
LDI AUX3,0b00010010
OUT CONTROL,AUX3
NOP
SBI CONTROL,CE
RET
DATO2: RCALL STATUS ;ESCRIBIR 2 BYTES DE DATOS
OUT DATOS,AUX1
LDI AUX3,0b00010010
OUT CONTROL,AUX3
NOP
SBI CONTROL,CE
RCALL STATUS
OUT DATOS,AUX2
LDI AUX3,0b00010010
OUT CONTROL,AUX3
NOP
SBI CONTROL,CE
RET
STATUS: PUSH AUX1 ;VERIFICA EL ESTADO DEL LCD
LDI AUX1,0b00010101
OUT CONTROL,AUX1
LDI AUX1,0
OUT DDRC,AUX1
BUSY: CBI DATOS,CE
NOP
IN AUX1,PINC
SBI CONTROL,CE
SBRS AUX1,0
RJMP BUSY
SBRS AUX1,1
RJMP BUSY
LDI AUX1,$FF
OUT DDRC,AUX1
POP AUX1
RET
OPCIONESGRAFICAS.ASM
;-------------------------------------------------------------------------------------------------
MENU: ;MENU PRINCIPAL
LDI ZL,LOW(TBMENU<<1)
LDI ZH,HIGH(TBMENU<<1)
LDI AUX1,$81
LDI AUX2,$00
30
51. .DB $C0,$F0,$FC,$FF,$FF,$FC,$F0,$C0
;> $80
.DB $01,$01,$01,$01,$01,$01,$01,$01
;LINEA VERTICAL $81
.DB $01,$01,$01,$01,$01,$01,$01,$FF
;LINEA VERTICAL AL ANGULO $82
.DB $00,$00,$00,$00,$00,$00,$00,$FF
;LINEA HORIZONTAL $83
.DB $E0,$10,$08,$04,$02,$62,$61,$01
;PARTE SUPERIOR DERECHA CARA $84
.DB $07,$08,$10,$20,$40,$46,$86,$80
;PARTE SUPERIOR IZQUIERDA CARA $85
.DB $01,$21,$22,$42,$84,$08,$10,$E0
;PARTE INFERIOR DERECHA CARA FELIZ $86
.DB $80,$84,$44,$42,$21,$10,$08,$07
;PARTE INFERIOR IZQUIERDA CARA FELIZ $87
.DB $01,$81,$42,$22,$24,$08,$10,$E0
;PARTE INFERIOR DERECHA CARA TRISTE $88
.DB $80,$81,$42,$44,$24,$10,$08,$07
;PARTE INFERIOR IZQUIERDA CARA TRISTE $89
.DB $07,$08,$10,$20,$40,$46,$86,$FF
;PARTE IZQUIERDA CARA TACHADA EN HORIZONTAL $8A
.DB $E0,$10,$08,$04,$02,$62,$61,$FF
;PARTE DERECHA CARA TACHADA EN HORIZONTAL $8B
.DB $07,$09,$11,$21,$41,$47,$87,$81
;PARTE IZQUIERDA CARA TACHADA EN VERTICAL CF $8C
.DB $81,$85,$45,$43,$21,$11,$09,$07
;PARTE INFERIOR IZQUIERDA CARA TACHADA EN VERTICAL CF $8D
.DB $81,$81,$43,$45,$25,$11,$09,$07
;PARTE INFERIOR IZQUIERDA CARA TACHADA EN VERTICAL CF $8E
.DB $80,$40,$20,$10,$08,$04,$02,$01
;DIAGONAL IZQUIERDA $8F
.DB $87,$48,$30,$30,$48,$46,$86,$81
;CARA SUPERIOR IZQUIERDA CON LINEA DIAGONAL $90
53
52. .DB $81,$61,$22,$52,$8C,$0C,$12,$E1
;CARA FELIZ INFERIOR DERECHA CON DIAGONAL $91
.DB $81,$C1,$62,$32,$3C,$0C,$12,$E1
;CARA TRISTE INFERIOR DERECHA CON DIAGONAL $92
.DB $81,$41,$21,$11,$09,$05,$03,$FF
;BORDE CON DIAGONAL IZQUIERDA $93
.DB $E1,$12,$0C,$0C,$12,$62,$61,$81
;CARA SUPERIOR DERECHA CON LINEA DIAGONAL $94
.DB $81,$84,$44,$4A,$31,$30,$48,$87
;CARA FELIZ INFERIOR IZQUIERDA CON DIAGONAL $95
.DB $81,$83,$46,$4E,$34,$30,$48,$87
;CARA TRISTE INFERIOR IZQUIERDA CON DIAGONAL $96
.DB $01,$02,$04,$08,$10,$20,$40,$80
;DIAGONAL DERECHA $97
.DB $01,$02,$04,$08,$10,$20,$40,$FF
;BORDE SUPERIOR CON DIAGONAL DERECHA $98
.DB $01,$03,$05,$09,$11,$21,$41,$81
;BORDE INFERIOR CON DIAGONAL DERECHA $99
;-------------------------------------------------------------------------------------------------
TB_JGDVSPC:
.DB $2A,$35,$27,$21,$24,$2F,$32,$00,$00,$25,$2D,$30,$21,$34,$25,$00
;JGD EMP PC
.DB $00,$00,$00,$30,$23,$00
;-------------------------------------------------------------------------------------------------
TB_JGDVSJGD:
.DB $2A,$35,$27,$21,$24,$2F,$32,$11,$00,$25,$2D,$30,$21,$34,$25,$00
;JGD1 EMP JGD2
.DB $2A,$35,$27,$21,$24,$2F,$32,$12
;-------------------------------------------------------------------------------------------------
TABLERO: .DB $00,$00,$00,$81,$00,$00,$00,$81,$00,$00,$00,$00
;PARA DIBUJAR TABLERO
TABLERO1: .DB $83,$83,$83,$82,$83,$83,$83,$82,$83,$83,$83,$83
;-------------------------------------------------------------------------------------------------
TURN: .DB $34,$35,$32,$2E,$2F,$00
;-------------------------------------------------------------------------------------------------
54
53. TB_CARAFELIZ: .DB $85,$84,$87,$86
;TABLA PARA DIBUJAR LA CARA FELIZ
;-------------------------------------------------------------------------------------------------
TB_CARATRISTE:.DB $85,$84,$89,$88
;TABLA PARA DIBUJAR LA CARA TRISTE
;-------------------------------------------------------------------------------------------------
TB_LINEAHORIZONTAL:
.DB $83,$8A,$8B,$82,$83,$8A,$8B,$82,$83,$8A,$8B,$83
;TABLA PARA CARAS HOR. CON LÍNEA
;-------------------------------------------------------------------------------------------------
TB_LINEAVERTICALCF: .DB $81,$8C,$8D,$82,$81,$8C,$8D,$82,$81,$8C,$8D,$81
;TABLA PARA CARAS VERT. CON LINEA
;-------------------------------------------------------------------------------------------------
TB_LINEAVERTICALCT:
.DB $81,$8C,$8E,$82,$81,$8C,$8E,$82,$81,$8C,$8E,$81
;TABLA PARA CARAS VERT. CON LINEA
;-------------------------------------------------------------------------------------------------
TB_DIAGONALIZQUIERDA_FELIZ:
.DB $8F,$90,$91,$93,$8F,$90,$91,$93,$8F,$90,$91,$8F
;TABLA PARA CARAS DIAG.
;-------------------------------------------------------------------------------------------------
TB_DIAGONALIZQUIERDA_TRISTE:
.DB $8F,$90,$92,$93,$8F,$90,$92,$93,$8F,$90,$92,$8F
;TABLA PARA CARAS DIAG.
;-------------------------------------------------------------------------------------------------
TB_DIAGONALDERECHA_FELIZ:
.DB $97,$94,$95,$98,$99,$94,$95,$98,$99,$94,$95,$97
;TABLA PARA CARAS DIAG. DERECHA
;-------------------------------------------------------------------------------------------------
TB_DIAGONALDERECHA_TRISTE:
.DB $97,$94,$96,$98,$99,$94,$96,$98,$99,$94,$96,$97
;TABLA PARA CARAS DIAG. DERECHA
;-------------------------------------------------------------------------------------------------
JUGADOR.ASM
;--------------------------------------------------------------------------------------------------
COMPROBAR_VICTORIA_J1: ;DETERMINA SI GANÓ EL JUGADOR 1
;Y SU MODO DE VICTORIA
;EN EL REGISTRO MODO
LDI AUX4,0
LDI AUX2,3
55
62. RCALL CMD
RET
;--------------------------------------------------------------------------------------------------
COMPROBAR_CASILLA_J1: ;COMPRUEBA LA DISPONIBILIDAD
;DE UNA CASILLA Y ALMACENA
;DATO EN CASO
;DE ESTAR LIBRE PARA EL JUGADOR 1
LDI YL,LOW(POSICION0)
LDI YH,HIGH(POSICION0)
ADD YL,CURSOR
LDI AUX1,0
ADC YH,AUX1
LD AUX1,Y
CPI AUX1,0
BRNE CC2
LDI AUX1,1
ST Y,AUX1
SEC ;BANDERA C EN 1 CUANDO LA CASILLA ESTA LIBRE Y
;SE COLOCA ÍCONO
RJMP SAL_CC
CC2: CLC ;BANDERA C EN 0 CUANDO LA CASILLA ESTA OCUPADA Y NO
;SE PUEDE COLOCAR ÍCONO
SAL_CC:
RET
;---------------------------------------------------------------------------------------------------
COMPROBAR_CASILLA_J2: ;COMPRUEBA LA DISPONIBILIDAD DE UNA
;CASILLA Y ALMACENA DATO EN CASO
;DE ESTAR LIBRE PARA EL JUGADOR 2
LDI YL,LOW(POSICION0)
LDI YH,HIGH(POSICION0)
ADD YL,CURSOR
LDI AUX1,0
ADC YH,AUX1
LD AUX1,Y
CPI AUX1,0
BRNE CC22
LDI AUX1,2
ST Y,AUX1
SEC ;BANDERA C EN 1 CUANDO LA CASILLA ESTA LIBRE Y
;SE COLOCA ÍCONO
RJMP SAL_CC2
CC22: CLC ;BANDERA C EN 0 CUANDO LA CASILLA ESTA OCUPADA Y NO
;SE PUEDE COLOCAR ÍCONO
64
63. SAL_CC2:
RET
;---------------------------------------------------------------------------------------------------
BINTOBCD: ;TOMA EL VALOR BINARIO EN AUX1 Y LO
;CONVIERTE EN BDC - MSB AUX2 - LSB AUX4
LDI AUX2,0
REPET: SUBI AUX1,10
BRCS SALTO
INC AUX2
RJMP REPET
SALTO: LDI AUX4,10
ADD AUX1,AUX4
MOV AUX4,AUX1
RET
;--------------------------------------------------------------------------------------------------
DECOD: ;PONE EN AUX1 EL VALOR DEL CARACTER
;NUMERICO PARA MOSTRAR EN PANTALLA
CPI AUX1,0
BRNE DC2
LDI AUX1,$10
RJMP SAL_DECOD
DC2: CPI AUX1,1
BRNE DC3
LDI AUX1,$11
RJMP SAL_DECOD
DC3: CPI AUX1,2
BRNE DC4
LDI AUX1,$12
RJMP SAL_DECOD
DC4: CPI AUX1,3
BRNE DC5
LDI AUX1,$13
RJMP SAL_DECOD
DC5: CPI AUX1,4
BRNE DC6
LDI AUX1,$14
RJMP SAL_DECOD
DC6: CPI AUX1,5
BRNE DC7
LDI AUX1,$15
65
64. RJMP SAL_DECOD
DC7: CPI AUX1,6
BRNE DC8
LDI AUX1,$16
RJMP SAL_DECOD
DC8: CPI AUX1,7
BRNE DC9
LDI AUX1,$17
RJMP SAL_DECOD
DC9: CPI AUX1,8
BRNE DC10
LDI AUX1,$18
RJMP SAL_DECOD
DC10: CPI AUX1,9
BRNE SAL_DECOD
LDI AUX1,$19
SAL_DECOD:
RET
;--------------------------------------------------------------------------------------------------
ENCERARCASILLAS: ;ENCERA LAS CASILLAS DEL TABLERO
LDI AUX1,0
STS POSICION0,AUX1
STS POSICION1,AUX1
STS POSICION2,AUX1
STS POSICION3,AUX1
STS POSICION4,AUX1
STS POSICION5,AUX1
STS POSICION6,AUX1
STS POSICION7,AUX1
STS POSICION8,AUX1
RET
;--------------------------------------------------------------------------------------------------
ENCERARPUNTAJES: ;ENCERA LOS PUNTAJES DE LOS
;JUGADORES Y DE EMPATE
LDI AUX1,0
STS VICJ1,AUX1
STS EMP,AUX1
STS VICJ2,AUX1
RET
;--------------------------------------------------------------------------------------------------
HABILITARJ1: ;HABILITA LAS INTERRUPCIONES PARA EL J1
LDI AUX1,$08
66
65. STS PCICR,AUX1
LDI AUX1,$1F
STS PCMSK3,AUX1
LDI AUX1,$08
OUT PCIFR, AUX1
SEI
RET
;--------------------------------------------------------------------------------------------------
HABILITARJ2: ;HABILITA LAS INTERRUPCIONES PARA EL J2
LDI AUX1,$02
STS PCICR,AUX1
LDI AUX1,$1F
STS PCMSK1,AUX1
LDI AUX1,$02
OUT PCIFR, AUX1
SEI
RET
;--------------------------------------------------------------------------------------------------
INCREMENTAR_VICTORIA_J1: ;INCREMENTA VICTORIAS DE J1
LDS AUX1,VICJ1
INC AUX1
STS VICJ1,AUX1
RET
;--------------------------------------------------------------------------------------------------
INCREMENTAR_EMPATE: ;INCREMENTA EMPATES
LDS AUX1,EMP
INC AUX1
STS EMP,AUX1
RET
;--------------------------------------------------------------------------------------------------
INCREMENTAR_VICTORIA_J2: ;INCREMENTA VICTORIAS DE J2
LDS AUX1,VICJ2
INC AUX1
STS VICJ2,AUX1
RET
;-------------------------------------------------------------------------------------------------
ESPERA: ;TIEMPO DE ESPERA
LDI AUX1,255 ;255
LDI AUX2,70
CLR R15
ESP: DEC R15
BRNE ESP
DEC AUX1
BRNE ESP
67
66. DEC AUX2
BRNE ESP
RET
;-------------------------------------------------------------------------------------------------
ESPERA2: ;TIEMPO DE ESPERA 2 PARA PC
LDI AUX2,20
CLR R15
ESP2: DEC R15
BRNE ESP
DEC AUX2
BRNE ESP2
RET
;-------------------------------------------------------------------------------------------------
TURNO_J1: ;INDICA TURNO PARA EL JUGADOR 1
LDI AUX1,$27
LDI AUX2,$01
RCALL DATO2
LDI AUX1,$24
RCALL CMD
LDI AUX1,$2A
RCALL DATO1
LDI AUX1,$C0
RCALL CMD
LDI AUX1,$11
RCALL DATO1
LDI AUX1,$C0
RCALL CMD
RET
;--------------------------------------------------------------------------------------------------
TURNO_J2: ;INDICA TURNO PARA EL JUGADOR 2
LDI AUX1,$27
LDI AUX2,$01
RCALL DATO2
LDI AUX1,$24
RCALL CMD
LDI AUX1,$2A
RCALL DATO1
LDI AUX1,$C0
RCALL CMD
LDI AUX1,$12
RCALL DATO1
68
79. 8. PARTE PRÁCTICA (IMPLEMENTACIÓN DEL CIRCUITO)
Hay que tomar en cuenta que para la realización de este proyecto, se ha ido avanzando
poco a poco para poder cumplir con el tiempo establecido de entrega, además vale
recalcar el trabajo en grupo, para ello consideramos necesario dejar constancia de
algunas fotografías con el cual podamos demostrar cómo ha ido evolucionando el
proyecto en el transcurso del tiempo.
8.1.-
81
83. 9. CONCLUSIONES
Se pudo concluir que:
1. Para la realización de este proyecto fue necesario poner en práctica todos los
conocimientos que en el transcurso del semestre hemos ido adquiriendo ya que
en este se aplica todos los conceptos relacionado con la materia de Sistemas
Microprocesados tales como: comandos, etiquetas, subrutinas, interrupciones,
etc.
2. Una de las mayores dificultades fue la programación de la pantalla GLCD, ya
que para que logre funcionar se necesitaba un programa aparte en Assembler
para que pueda funcionar en el proyecto.
3. En la elaboración del proyecto, se necesitaba un teclado para cada jugador, antes
de iniciar el proyecto se intento buscar en los locales electrónicos uno teclado 5
teclas (arriba, abajo, derecha, izquierda y enter), desafortunadamente no se
puedo encontrar ya que solo había teclados de 3x3 o de 4x4. Debido a este
inconveniente, vemos la mejor opción de implementarlo en el mismo protoboard
con pulsadores y capacitores con el cual no haya rebotes.
4. Al principio de la elaboración del proyecto, estábamos utilizando la cables que
salían de la pantalla GLCD, esto dificultaba para el armado y sobre todo no tenía
una buena presentación, debido a esto buscamos una solución y consistió en
colocarle y soldarle un adaptador a la pantalla, esto nos facilitó para colocarle
directamente en el protoboard y mejoró mucho la presentación.
5. A pesar de que tenemos algunas fotografías de la simulación en Proteus, nos
pareció importante hacerle un video y subirle al youtube para mejor apreciación.
6. Para la programación de la pantalla GLCD de 240x128 pixels, fue necesario
descargarnos el datasheet de este, ya que necesitábamos saber cómo funciona y
la representación que tenía cada pin.
10. DIFICULTADES Y RECOMENDACIONES
1. Es recomendable no dejarse acumular todo el proyecto para el final, es por eso
que se trabajo poco a poco desde el principio con esto hemos obtenido buenos
resultados, debido a eso mediante las fotografías se ha dejado constancia del
avance progresivo del proyecto.
2. El diseño del software es un factor bastante importante en este tipo de proyectos.
Es recomendable realizar un plan de cómo se encuentra estructurado el software
para luego empezar a trabajar en el código como se hizo en este caso.
85
84. 3. Dividir las diversas actividades que el programa va a realizar en subrutinas.
Mientras más subrutinas se empleen el programa es más modular y mucho más
sencillo de manejar. De igual manera en caso de haber errores es fácil de
corregir el código.
4. Realizar el código empleando comentarios. Un código con comentarios permite
entre otras cosas saber con qué objetivo se escribió esa parte del código, saber
qué función realiza y poder corregirla con facilidad en caso de errores.
5. Los pulsadores al ser elementos mecánicos producen rebote. Para reducir dicho
rebote es recomendable emplear capacitores en paralelo a estos. Otra opción
pudiese ser emplear tiempos de espera producidos por software. No obstante
esta opción no se tomó para este proyecto para evitar mayores tiempos de
respuesta así como de escritura de datos en la pantalla GLCD.
6. Es mejor la utilización de un adaptador para la pantalla GLCD con el cual
podamos conectar de forma directa al protoboard en vez de colocar cables, esto
nos facilita para el armado del circuito y más que todo mejora mucho en la
presentación ya que no se va a ver muchos cables en el proto.
11. BIBLIOGRAFÍA
• http://es.wikipedia.org/wiki/Tres_en_l%C3%ADnea
• http://www.egochina.net.cn/e-shop/ebay/Datasheet/JHD240128D.pdf
• DIAPOSITIVAS INTERRUPCIONES DE LOS ATMEGA 164P, VECTORES,
REGISTROS Y BANDERAS, Ing. Jaime Velarde, EPN.
86