Академический Документы
Профессиональный Документы
Культура Документы
LABORATORIO N 1
MICROPROCESADORES E INTERFASES
Jess Moreno, Dillam J. Daz, Vanessa Cucha B.
jesus.moreno@mail.escuelaing.edu.co, dillam.diaz@mail.escuelaing.edu.co ingrid.cuchia@mail.escuelaing.edu.co
Universidad Rosario, Escuela Colombiana de Ingeniera Julio Garavito.
Bogot, Colombia.
INTRODUCCIN
.
entorno de desarrollo MPLAB al permitir programar el
micro en tiempo real con su propio hardware.
El objetivo del proyecto es comprender y manejar el
lenguaje ensamblador en el modelamiento de sistemas
digitales por medio de la programacin del
microcontrolador PIC16F877A en la creacin del juego Picas
y Fijas para de esta manera trascender en forma prctica la
teora vista en clase.
.
II. METODOLOGA
NMLKJH
0
1
2
3
NUMERO 4
S
5
6
7
8
9
11111111
11111111
11111111
11111111
11111111
11111111
11111111
11111111
11111111
11111111
G2G1FEDCBA
(L)
11000000
11111001
00100100
00110000
00011001
00010010
00000010
11111000
00000000
00010000
A
G
M
E
O
P
F
MENSAJE H
GANADO
L
R
N
R
W
I
*
-
11111111
11111111
11111010
11111111
11111111
11111111
11111111
11111111
11111111
11110110
11110111
11010111
11101101
11000000
11111111
11111111
00001000
01000010
11001001
00000110
01000000
00001100
00001110
00001001
11000111
11001001
00001100
11001001
11110110
11111111
00111111
11111111
A2
0
0
0
0
1
1
1
1
A1
0
0
1
1
0
0
1
1
A0
0
1
0
1
0
1
0
1
G Guardas
A Nmero Aleatorio
T Enter
M Leer
DISP ON
0
1
2
3
4
5
6
7
Figura 3. Teclado matricial 4x4
2.2 Teclado
.
cual permite hacer operaciones cuando se active su flanco
por ende cada vez que halla un desbordamiento en el
programa va a entrar en la interrupcin. En la interrupcin
se evala si existe una interrupcin de los puertos B
entonces se dirige a teclado pero si por el contrario no existe
ninguna interrupcin se ir a los contadores.
El contador de interrupciones tiene que contar hasta 764
cuando cuenta hasta este valor es equivalente a 50 ms
tiempo estimado para entrar en este modo de bajo consumo
de energa, el valor de esto se obtuvo de la siguiente
manera:
256 256=
50
=764 pulsos
65536 ( 1 106 )
.
memoria EEPROM, esto debido a que pequeos errors en la
codificacin los cuales no eran facilmente identificables en
el procesos de simulacin. Un aspecto a mejorar del sistema
es el metdo de antirrebote para el teclado matricil, ya que, a
pesar que el sistema funcionaba acorde a las
especificaciones del laboratorio, el teclado difcultaba una
adecuada manipulacin del sistema. Cabe mencionar que el
proceso de generacin de numero aleatorio con el mtodo
LFSR resulto ser fcil de implementar en un nuero reducido
de instrucciones, por lo tanto, el procesos de validacin del
nmero implico a constante utilizacin de estas
instrucciones.
Otra dificultad en la realizacin del laboratorio fue el haber
elegido el puerto B para el ingreso de datosel, dado que no
hera posible programar el microcontrolador sobre el
montagea. El constante montar y desmontar del del
microcontrolador debilito el pin uno, pero afortunadamente
no se desprendio. En el futuro se procuara tener encuenta
este citerio a la hora de disear el sistema.
Figura 4. Montaje del circuito que desarrolla el juego Picas y Fijas con 8
displays y teclado matricial 4x4 con el microcontrolador PIC16F877A.
V. CONCLUSIONES
REFERENCIAS
[1] El microcontrolador PIC16F877 [Online]. Disponible en:
http://www.utp.edu.co/~eduque/arquitec/PIC16F877.pdf
[2] Qu es un microcontrolador? [Online]. Disponible en:
http://www.electronicaestudio.com/microcontrolador.htm
[3] PIC16F87XA. SEDA. [Online]. Disponible en:
http://190.24.150.73/seda/seda_wp_00/?page_id=30
ANEXO CDIGO
;
************************************************
**********************
; Nombre del archivo: decoTecladoInt.asm
; Fecha:
05-09-2015
; Version:
1
;
; Autor:
;
************************************************
**********************
; __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_OFF
& _XT_OSC
list p=16f877A
; list directive to define processor
#include <p16f877A.inc> ; processor specific variable
definitions
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF
& _PWRTE_OFF & _XT_OSC & _WRT_OFF &
_LVP_OFF & _CPD_OFF
; '__CONFIG' directiva usada para la palabra de
configuracin
; Las etiquetas que siguen a la directiva estan definidas en el
archivo .inc
; Revise el datasheet para informacin sobre la palabra de
configuraci?n
;***** VARIABLE DEFINITIONS
w_temp
EQU 0x7D ; variable used for context saving
status_temp EQU 0x7E ; variable used for context
saving
pclath_temp EQU 0x7F ; variable used for context
saving
;
************************************************
**********************
;DEFINICION DE VARIABLES
;
************************************************
**********************
tec
EQU
0x22 ;variable que almacena el valor de
la tecla pulsad
ret1
EQU
0x23
ret2
EQU
0x24 ; variables para retardo
visu01
EQU
0X25 ; VISUALIZACION BAJA
SEGEMENTO 1
cont_part_b EQU
0X26 ; contador ready
pifi01
EQU
0X70 ; numero generado 1
visu02
EQU
0X27 ; VISUALICACI?N BAJA
SEGEMENTO 2
cont_part_a EQU
0X28 ; contador read
pifi02
EQU
0X71 ; nmero generado 2
visu03
EQU
0X29 ; VISUALICACI?N BAJA
SEGEMENTO 3
pifi03
EQU
0X72 ; nmero generado 3
visu04
EQU
0X2B ; VISUALICACI?N BAJA
SEGEMENTO 4
pifi04
EQU
0X73 ; nmero generado 4
visu05
EQU
0X2D ; VISUALICACI?N BAJA
SEGEMENTO 5
valnum
EQU
0X2E ; valida el nmero
visu06
EQU
0X2F ; VISUALICACI?N BAJA
SEGEMENTO 6
cont_dato_1 EQU
0X30 ; contador dato de entrada
visu07
EQU
0X31 ; VISUALICACIN BAJA
SEGEMENTO
visu08
EQU
0X33 ; VISUALICACIN BAJA
SEGEMENTO 8
cont_ret1
EQU
0X34 ;RETARDO PARA EL RELOJ
cont_ret2
EQU
0X36 ;RETARDO PARA EL
RELOJ2
cont_ale
EQU
0X37 ;contador del nmero aletorio
numale
EQU
0X38 ;nmero aletorio
entdato01
EQU
0X32 ; dato de entrada 1
entdato02
EQU
0X39 ; dato de entrada 2
entdato03
EQU
0X3a ; dato de entrada 3
entdato04
EQU
0X3b ; dato de entrada 3
bandera
EQU
0X3c ; dato de entrada 3
pica
EQU
0X40 ; numero de picas
fija
EQU
0X41
bandsleep
EQU
0X42
entdatopica EQU
0x43 ; valor a analisar
ret3
EQU
0x44 ;variables para retardo
cont_in1
EQU
0X45 ;CONTADOR DE INTENTOS
UNO
cont_in2
EQU
0X46 ;CONTADOR DE INTENTOS
D0S
cont_sleep EQU
0X47 ;CONTADOR DE EL MODO
DORMIR
direccion
EQU
0X79 ; DIRECCION DE LA
MEMORIA EEPROM
guardado1
EQU
0X74 ; dato guardado en la
memeoria
guardado2
EQU
0X75 ; dato guardado en la
memeoria
guardado3
EQU
0X76 ; dato guardado en la
memeoria
guardado4
EQU
0X77 ; dato guardado en la
memeoria
dato
EQU
0X78 ; DATO GUARDADO PARA
ESCRIBIR
BANDERA1
EQU
0X4E ; DATO GUARDADO
PARA ESCRIBIR
datoreg
EQU
0X7A
;
************************************************
**********************
ORG
0x000
;vector de reinicializaci?n del
procesador
nop
; nop required for icd
; go to beginning of program
goto main
;ir a main
ORG
0x004
interrupciones
movwf w_temp
; save off current W register
contents
movf STATUS,w
; move status register into W
register
movwf status_temp ; save off contents of STATUS
register
movf PCLATH,w
; move pclath register into w
register
movwf pclath_temp ; save off contents of PCLATH
register
BTFSC INTCON,RBIF
goto TECLADOin
goto ingresosleep
ingresosleep:
call tecla1
;va a tecla1, si fila 1 = 0
btfss PORTB,6
call tecla5
;va a tecla5, si fila 2 = 0
btfss PORTB,5
call tecla9
;va a tecla9, si fila 3 = 0
btfss PORTB,4
call teclaB2
;va a teclaD, si fila 4 = 0
;******BARRIDO PARA TERCERA COLUMNA
movlw b'00001101'
movwf PORTB
;asigna 0 l?gico a la columna 3
btfss PORTB,7
call tecla2
;va a tecla2, si fila 1 = 0
btfss PORTB,6
call tecla6
;va a tecla6, si fila 2 = 0
btfss PORTB,5
call teclaMas
;va a teclaA, si fila 3 = 0
btfss PORTB,4
call teclaB3
;va a teclaE, si fila 4 = 0
;******BARRIDO PARA CUARTA COLUMNA
movlw b'00001110'
TECLADOin:
clrf TMR0
clrf cont_part_b
porque se esta usando
clrf cont_part_a
se esta usando
movwf PORTB
;asigna 0 l?gico a la columna 4
btfss PORTB,7
call tecla3
;va a tecla3, si fila 1 = 0
btfss PORTB,6
call tecla7
;va a tecla7, si fila 2 = 0
btfss PORTB,5
call teclaMenos ;va a teclaB, si fila 3 = 0
btfss PORTB,4
call teclaB4
;va a teclaF, si fila 4 = 0
; limpiar timer0
; Borro contador del timer
; Borro contador del timer porque
main
;******CONFIGURACI?N DE PUERTOS E
INTERRUPCIONES
bsf
STATUS,RP0 ;banco 1
movlw b'11110000' ;Puerto B <7:4> entradas
movwf TRISB & 0x7F ;puerto B <3:0 salida
movlw b'11100000' ;Puerto a <7:5> entradas
movwF TRISA & 0x7f ;Verificaci?n y accinaci?n de
valores (valores de a entrada
bcf
OPTION_REG,7 ;Habilita las pull-ups del
Puerto B
movlw 0x06
movwf ADCON1
; configurar como analogicas
tec
;tecla <- 0
PORTB
ciclo
tecla0:
movlw 0x0
movwf tec
de analisar
call ingre
clrf bandsleep
return
tecla2:
movlw 0x2
movwf tec
de analisar
call ingre
tecla3:
movlw 0x3
movwf tec
de analisar
call ingre
clrf bandsleep
return
tecla4:
movlw 0x4
movwf tec
de analisar
call ingre
clrf bandsleep
return
tecla5:
movlw 0x5
movwf tec
de analisar
call ingre
clrf bandsleep
return
tecla6:
movlw 0x6
movwf tec
de analisar
call ingre
clrf bandsleep
return
tecla7:
movlw 0x7
movwf tec
de analisar
call ingre
clrf bandsleep
return
tecla1:
movlw 0x1
movwf tec
de analisar
call ingre
clrf bandsleep
return
clrf bandsleep
return
tecla8:
movlw 0x8
movwf tec
de analisar
call ingre
clrf bandsleep
return
tecla9:
movlw 0x9
movwf tec
de analisar
call ingre
clrf bandsleep
return
teclaMas:
; increse dato
;movf tecla,w
;movwf entdato01
clrf bandsleep
return
;retorna
teclaMenos:
return
teclaB1:
;general numero aletorio
clrf bandsleep
call asignacion_pifi
call visualaleatorio
call reinicio
clrf cont_in1
clrf cont_in2
return
teclaB2:
; ingresar datos
clrf bandsleep
call visualing
incf bandera,f
movf bandera,w
xorlw 0x05
btfss STATUS,Z
return
call fijas
call picas
movf pica,w
xorlw .4
btfss STATUS,Z
goto reinicio
movf fija,w
xorlw .4
btfss STATUS,Z
goto reinicio
return
return
teclaB3:
clrf bandsleep
BSF BANDERA1,5
return
teclaB4: ; GUADAR
clrf bandsleep
BSF BANDERA1,7
return
apagar:
bcf PORTA,3
goto reposo
reposo:
clrwdt ; refrestar el perro guardairn
sleep ; entrada al modo de bajo consumo
bcf PIR1,TMR1IF
goto ciclo
;----------------------------reinicio y contador de
intentos .................
reinicio:
clrf bandera
clrf pica
clrf fija
movlw .24
movwf entdato01
movwf entdato02
movwf entdato03
movwf entdato04
incf cont_in1,f
movf cont_in1,w
xorlw .9
btfsc STATUS,Z
goto conteo
conteo:
clrf cont_in1
incf cont_in2,f
return
;----------------------------ingreso .................
ingre:
movf bandera,w
xorlw 0x01
btfsc STATUS,Z
call ing00
movf bandera,w
xorlw 0x02
btfsc STATUS,Z
call ing01
movf bandera,w
xorlw 0x03
btfsc STATUS,Z
call ing02
movf bandera,w
xorlw 0x04
btfsc STATUS,Z
call ing03
call deco
return
ing00:
movlw
movwf
movlw
movwf
movlw
movwf
movlw
movwf
movf
.15
visu08
.25
visu07
.16
visu06
.25
visu05
tec,w
movwf entdato01
movf entdato01,w
movwf visu04
; Unidades de mil
movlw
movwf
movlw
movwf
movlw
movwf
return
ing01:
movlw
movwf
movlw
movwf
movlw
movwf
movlw
movwf
.24
visu03
.24
visu02
.24
visu01
; centenas
; decenas
; unidades
movlw
movwf
movlw
movwf
return
ing02:
movlw
movwf
movlw
movwf
movlw
movwf
movlw
movwf
.24
visu02
.24
visu01
.15
visu08
.25
visu07
.16
visu06
.25
visu05
movf entdato01,w
movwf visu04
; decenas
; unidades
return
ing03:
movlw .15
movwf visu08
movlw .25
movwf visu07
movlw .16
movwf visu06
movlw .25
movwf visu05
movf entdato01,w
movwf visu04
tec,w
movwf entdato02
movf entdato02,w
movwf visu03
movf tec,w
movwf entdato03
movf entdato03,w
movwf visu02
movlw .24
movwf visu01
.15
visu08
.25
visu07
.16
visu06
.25
visu05
movf entdato01,w
movwf visu04
movf
movf entdato02,w
movwf visu03
; centenas
movf entdato02,w
movwf visu03
movf entdato03,w
movwf visu02
; decenas
; unidades
movf tec,w
movwf entdato04
movf entdato04,w
movwf visu01
return
;----------------------------------SUBRUTINAS....................................................
fijas:
clrf
clrf
clrf
bandera
fija
pica
movf entdato01,w
xorwf pifi01,w
btfsc STATUS,Z
incf fija,f
movf entdato02 ,w
xorwf pifi02,w
btfsc STATUS,Z
incf fija,f
movf entdato03 ,w
xorwf pifi03,w
btfsc STATUS,Z
incf fija,f
movf entdato04,w
xorwf pifi04,w
btfsc STATUS,Z
incf fija,f
movf fija,w
movwf visu05
return
picas:
clrf bandera
movf entdato01,w
movwf entdatopica
movf bandera,w
xorlw 0x00
btfsc STATUS,Z
call comparapica1
movf entdato02,w
movwf entdatopica
movf bandera,w
xorlw 0x01
btfsc STATUS,Z
call comparapica2
movf entdato03,w
movwf entdatopica
movf bandera,w
xorlw 0x02
btfsc STATUS,Z
call comparapica3
movf entdato04,w
movwf entdatopica
movf bandera,w
xorlw 0x03
btfsc STATUS,Z
call comparapica4
movf pica,w
movwf visu07
clrf bandera
return
movf entdatopica,w
xorwf pifi01,w
btfsc STATUS,Z
incf pica,f
comparapica1:
movf entdatopica,w
xorwf pifi02,w
btfsc STATUS,Z
incf pica,f
movf entdatopica,w
xorwf pifi03,w
btfsc STATUS,Z
incf pica,f
movf entdatopica,w
xorwf pifi04,w
btfsc STATUS,Z
incf pica,f
incf bandera,f
return
comparapica2:
movf entdatopica,w
xorwf pifi01,w
btfsc STATUS,Z
incf pica,f
movf entdatopica,w
xorwf pifi03,w
btfsc STATUS,Z
incf pica,f
movf entdatopica,w
xorwf pifi04,w
btfsc STATUS,Z
incf pica,f
incf bandera ,f
return
comparapica3:
movf
xorwf
btfsc
incf
movf
xorwf
btfsc
incf
entdatopica,w
pifi02,w
STATUS,Z
pica,f
entdatopica,w
pifi04,w
STATUS,Z
pica,f
incf bandera,f
return
comparapica4:
movf entdatopica,w
xorwf pifi01,w
btfsc STATUS,Z
incf pica,f
movf entdatopica,w
xorwf pifi02,w
btfsc STATUS,Z
incf pica,f
movf entdatopica,w
xorwf pifi03,w
btfsc STATUS,Z
incf pica,f
incf bandera,f
return
;-----------------------------------visualizaci?
n ....................................................
EESCRIBIRR:
; guarda el dato numero uno
movf pifi01,w
movwf dato
movlw .0
movwf direccion
call escritura
bcf STATUS,RP0 ;banco 0
CALL lectura
movf datoreg,w
movwf guardado2
;lectura del segundo dato
bcf
STATUS,RP0 ;banco 0
bcf
STATUS,RP1 ;banco 0
movlw .2
movwf direccion
CALL lectura
movf datoreg,w
movwf guardado3
;lectura del segundo dato
bcf
STATUS,RP0 ;banco 0
bcf
STATUS,RP1 ;banco 0
movlw .3
movwf direccion
CALL lectura
movf datoreg,w
movwf guardado4
;retornas la banderas a su forma normal
bcf
STATUS,RP0 ;banco 0
bcf
STATUS,RP1 ;banco 0
call lectvisul
BCF BANDERA1,5
RETURN
lectura:
BANKSEL PORTB
movf direccion,w ; mover la direcci?n al registro w
BANKSEL EEADR
MOVWF EEADR
;direcci?n donde se va a leer el
dato
BANKSEL EECON1
bcf EECON1, EEPGD
bsf EECON1, RD
BANKSEL EEDATA
MOVF EEDATA,W ; Dato se almacena en el registro
W
BANKSEL PORTB
movwf datoreg
RETURN
escritura:
BANKSEL EECON1
BTFSC EECON1,WR
;Espera que se complete o no
haya
GOTO $-1
;iniciado un ciclo de escritura
BANKSEL PORTA
MOVF direccion,W
BANKSEL EEADR
MOVWF EEADR
escribir el dato
BANKSEL PORTA
;Direcci?n donde se va a
MOVF dato,W
BANKSEL EEDATA
MOVWF EEDATA
;Dato que se va a escribir en la
memoria
BANKSEL EECON1
BCF EECON1,EEPGD ;Selecciona operaci?n en la
memoria EEPROM de datos
BSF EECON1,WREN ;Habilita la escritura
MOVLW 0x55
;secuencia requerida
MOVWF EECON2
MOVLW 0xAA
MOVWF EECON2
BSF EECON1,WR
;Iniciar ciclo de escritura
BANKSEL EECON1
bcf EECON1, WREN
BANKSEL PORTB
RETURN
movlw .25
movwf visu03
movlw .11
movwf visu02
movlw .14
movwf visu01
call deco
return
lectvisul:
movlw .12
movwf visu08
movlw .22
movwf visu07
movlw .20
movwf visu06
movlw .10
movwf visu05
movf guardado1,w
movwf visu04
movf guardado2,w
movwf visu03
movf guardado3,w
movwf visu02
movf guardado4,w
movwf visu01
call deco
return
gano:
call mensf
return
esctvisul:
movlw
movwf
movlw
movwf
movlw
movwf
movlw
movwf
movlw
movwf
.25
visu08
.19
visu07
.14
visu06
.21
visu05
.25
visu04
visualing:
movlw .15
movwf visu08
movf pica,w
movwf visu07
movlw .16
movwf visu06
movf fija,w
movwf visu05
; Unidades de mil
; centenas
; decenas
; unidades
movf entdato01,w
movwf visu04
movf entdato02,w
movwf visu03
movf entdato03,w
movwf visu02
movf entdato04,w
movwf visu01
return
debug:
movf pifi01,w
movwf visu08
movf pifi02,w
movwf visu07
movf pifi03,w
movwf visu06
movf pifi04,w
movwf visu05
movf entdato01,w
movwf visu04
movf entdato02,w
movwf visu03
movf entdato03,w
movwf visu02
movf entdato04,w
movwf visu01
return
visualaleatorio:
movlw .10
posici?n 8
movwf visu08
movlw .18
en la posici?n 7
movwf visu07
movlw .13
display l en la posici?n 6
movwf visu06
movlw .24
display a en la posici?n 5
movwf visu05
movlw .23
movwf visu04
movlw .23
; Unidades de mil
; centenas
movwf
movlw
movwf
movlw
movwf
return
visu03
.23
visu02
.23
visu01
; centenas
; decenas
; unidades
movwf visu02
movf cont_in1,w
movwf visu01
return
;-----------------Numero aletorio--------------- genera el
moviento del vector aletorio
; decenas
; unidades
; Unidades de mil
; centenas
; decenas
; unidades
; Unidades de mil
; centenas
; decenas
; unidades
mensb:
movlw .17
; mueve a display H en la
posici?n 8
movwf visu08
movlw .14
; mueve a display o
en la posici?n 7
movwf visu07
movlw .18
; mueve a
display l en la posici?n 6
movwf visu06
movlw .10
; mueve a
display a en la posici?n 5
movwf visu05
movlw .25
; mueve a
display (vasio) en la posici?n 5
movwf visu04
movlw .15
movwf visu03
movlw .25
movwf visu02
movlw .16
movwf visu01
return
; mueve a display H en la
; mueve a display o
; mueve a
; mueve a
; Unidades de mil
mensf:
movlw .21
movwf visu08
movlw .22
movwf visu07
movlw .19
movwf visu06
movlw .25
movwf visu05
movlw .15
movwf visu04
movlw .16
movwf visu03
movf cont_in2,w
aleatorio:
clrf cont_ale
realizar
btfsc numale, 4
incf cont_ale, 1
btfsc numale, 5
incf cont_ale, 1
btfsc numale, 6
incf cont_ale, 1
btfsc numale, 0
incf cont_ale, 1
BTFSC cont_ale, 0
goto mov1
registro
goto mov0
x8+x6+x5+x4+1
mov0:
bcf STATUS,C
el analisis de Xor
rrf numale,1
return
mov1:
; le mueve un 0 al registro en
bsf STATUS,C
el analisis de Xor
rrf numale,1
return
; le mueve un 1 al registro en
generanum:
movf numale,w
a la variable global
movwf valnum
reutilizar la funcion
call valida_10a15
la variable global
movf valnum,w
guardar 2
movwf pifi02
goto valida_pifi
return
valida_pifi2_3:
asignacion_pifi:
call aleatorio
call generanum
movf valnum,w
guardar
movwf pifi01
generado a la posicion 1
call aleatorio
call generanum
movf valnum,w
guardar 2
movwf pifi02
generado a la posicion
call aleatorio
call generanum
movf valnum,w
guardar 3
movwf pifi03
generado a la posicion
call aleatorio
call generanum
movf valnum,w
guardar 4
movwf pifi04
call valida_pifi
return
valida_pifi1_3:
movf pifi01,w
xorwf pifi03,w
btfss STATUS,Z
goto valida_pifi3_4
call aleatorio
call generanum
movf valnum,w
guardar 2
movwf pifi03
goto valida_pifi2_3
valida_pifi3_4:
valida_pifi:
; realiza la validaci?n de los
numeros generales , no necesita condici?n incial
movf pifi01,w
1 y dos no sean iguales
xorwf pifi02,w
btfss STATUS,Z
genera otra vez
goto valida_pifi2_3
call aleatorio
call generanum
movf pifi02,w
xorwf pifi03,w
btfss STATUS,Z
goto valida_pifi1_3 ; valida con el nmero 1 si es igual
vuelve a generar el numero 3
call aleatorio
call generanum
call generanum
movf valnum,w
; el nmero listo que se desea
guardar 2
movwf pifi03
goto valida_pifi2_3
movf pifi03,w
xorwf pifi04,w
btfss STATUS,Z
goto valida_pifi4_1
call aleatorio
call generanum
movf valnum,w
guardar 2
movwf pifi04
goto valida_pifi3_4
valida_pifi4_1:
movf pifi01,w
xorwf pifi04,w
btfss STATUS,Z
goto valida_pifi4_2
call aleatorio
call generanum
movf valnum,w
guardar 2
movwf pifi04
goto valida_pifi3_4
valida_pifi4_2:
movf pifi02,w
xorwf pifi04,w
btfss STATUS,Z
return
call aleatorio
call generanum
movf valnum,w
guardar 2
movwf pifi04
goto valida_pifi4_1
suma6:
movlw .6
addwf valnum,f ; sumele 6 al numero analizar y guadarlo
en el numero generado
movlw 0x0f
andwf valnum,f
; valida los 4 bits m?s
significativos
return
movf
visu02,W ; VISUA02 ES EL NUMERO DE
LA PANTALLA A DIVISUALIZAR nivel Alto
call visuaH ; PINTA A NIVEL ALTO
movwf PORTD
movlw
b'00001011' ; habilita el enable para la
visualizaci?n primer segmento
movwf
PORTA
call
retardo
; valor para retener el numero
bcf
PORTA,3
; apaga todos los displays
;------------------------visualizaci?n 5 display
--------------------------------------------------movlw 0x07
movwf PCLATH
movf
visu05,W ; VISUA05 ES EL NUMERO DE
LA PANTALLA A DIVISUALIZAR nivel bajo
call visuaL
movwf PORTC ; NIVEL BAJO
movf
visu05,W ; VISUA05 ES EL NUMERO DE
LA PANTALLA A DIVISUALIZAR nivel Alto
call visuaH ; PINTA A NIVEL ALTO
movwf PORTD
;CONFIGURACION VISUALIZACI?N DINAMICA
movlw
b'00001100' ; habilita el enable para la
visualizaci?n primer segmento
movwf
PORTA
call
retardo
; valor para retener el numero
bcf
PORTA,3
; apaga todos los displays
;------------------------visualizaci?n 6 display
--------------------------------------------------movlw 0x07
movwf PCLATH
movf
visu06,W ; VISUA02 ES EL NUMERO DE
LA PANTALLA A DIVISUALIZAR
call visuaL
movwf PORTC ; NIVEL BAJO
movf
visu06,W ; VISUA02 ES EL NUMERO DE
LA PANTALLA A DIVISUALIZAR nivel Alto
call visuaH ; PINTA A NIVEL ALTO
movwf PORTD
;CONFIGURACION VISUALIZACI?N DINAMICA
movlw
b'00001101' ; habilita el enable para la
visualizaci?n primer segmento
movwf
PORTA
call
bcf
retardo
; valor para retener el numero
PORTA,3
; apaga todos los displays
;------------------------visualizaci?n 7 display
--------------------------------------------------movlw 0x07
movwf PCLATH
movf
visu07,W ; VISUA03 ES EL NUMERO DE
LA PANTALLA A DIVISUALIZAR
call visuaL
movwf PORTC ; NIVEL BAJO
movf
visu07,w ; nivel alto de visualizaci?n
call visuaH ; PINTA A NIVEL ALTO
movwf PORTD
;CONFIGURACION VISUALIZACI?N DINAMICA
movlw
b'00001110' ; habilita el enable para la
visualizaci?n primer segmento
movwf
PORTA
call
retardo
; valor para retener el numero
bcf
PORTA,3
; apaga todos los displays
;------------------------visualizaci?n 8 display
--------------------------------------------------movlw 0x07
movwf PCLATH
movf
visu08,W ; VISUA04 ES EL NUMERO DE
LA PANTALLA A DIVISUALIZAR
call visuaL
movwf PORTC ; NIVEL BAJO
movf
visu08,w ; visualizaci?n nivel alto
call visuaH ; PINTA A NIVEL ALTO
movwf PORTD
;CONFIGURACION VISUALIZACI?N DINAMICA
movlw
b'00001111' ; habilita el enable para la
visualizaci?n primer segmento
movwf
PORTA
call
retardo
; valor para retener el numero
bcf
PORTA,3
; apaga todos los displays
return
;................................. Retardos----------------------retardo:
movlw .2 ; 10
movwf ret1
for1
movlw .50 ;50
movwf ret2
for2
decfsz ret2,F
goto for2
decfsz ret1,F
goto for1
return
;*******Retardo de 100 ms para evitar rebote en el
teclado
retardo100ms:
movlw .0
movwf ret2
asig_cont_ret1
movlw .102
movwf ret1
decRet1
nop
decfsz ret1,F
goto decRet1
decfsz ret2,F
goto asig_cont_ret1
return
retardo50ms:
movlw .0
movwf ret2
asig_cont_ret2
movlw .25
movwf ret1
decRet2
nop
decfsz ret1,F
goto decRet2
decfsz ret2,F
goto asig_cont_ret2
return
retardo50s:
movlw .20
movwf ret3
asig_cont_ret22
movlw .255
movwf ret2
asig_cont_ret33
movlw .255
movwf ret1
decRet22
nop
decfsz ret1,F
goto decRet22
decfsz ret2,F
goto asig_cont_ret33
decfsz ret3,F
goto asig_cont_ret22
return
;----------------------------guardado de dato y lectura en la
memoria Eeprom --------------------------------------;---------Codificaci?n de la visualizaci?
n--------------------------------------ORG 0X700
visuaL:
andlw 0x3F
addwf PCL,1
retlw
en W
retlw
en W
retlw
en W
retlw
en W
retlw
en W
retlw
en W
retlw
en W
retlw
en W
retlw
en W
retlw
en W
;*******************CONFIGURACI?N LETRAS
*******************+++++++++++++
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
visuaH:
addwf PCL,1
retlw
en W
retlw
en W
retlw
en W
retlw
en W
retlw
en W
retlw
en W
retlw
en W
retlw
en W
retlw
en W
retlw
en W
;*******************CONFIGURACI?N LETRAS
*******************+++++++++++++
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
END