-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMAYORA.asm
170 lines (143 loc) · 3.49 KB
/
MAYORA.asm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
;===========================================================
; TECLADO
list p=16f873a
include <p16f873a.inc>
__CONFIG _FOSC_XT & _WDTE_OFF & _PWRTE_ON & _BOREN_ON & _LVP_OFF & _CPD_OFF & _WRT_OFF & _CP_OFF
;===========================================================
;Librerias
CBLOCK 0Ch
endc
;===========================================================
;Configuracion de puertos
ORG 0
BCF STATUS,RP1 ;
BSF STATUS,RP0 ;coloco en 1 el bit RP0 (seleccion banco 1)
CLRF TRISB ;PUERTO B como salia
MOVLW B'00001111'
MOVWF PORTC ;mitad del puerto C entradas y mitad salidas
CLRF PORTA
MOVLW b'00000111' ;
MOVWF OPTION_REG ;configuro el timer0
BCF STATUS,RP0 ;coloco en 0 el bit RP0 (seleccion banco 0)
MOVLW 0FFh
MOVWF PORTB ;apago el display
;===========================================================
;Programa principal
INICIO
MOVLW 0FFh
MOVWF PORTC ;descelecciono todas la colunas y filas
BCF PORTC,4 ;coloca en bajo el pin B4 (escaneo culmna 1)
BTFSS PORTC,0 ;si el pin C0=0 envia el numero 0 de lo contrario salta fila siguiente
GOTO UNO
BTFSS PORTC,1 ;si el pin C1=0 envia el numero 2 de lo contrario salta fila siguiente
GOTO DOS
BTFSS PORTC,2 ;si el pin C2=0 envia el numero 4 de lo contrario salta fila siguiente
GOTO TRES
BSF PORTC,4 ;coloco en alto el pin B4
BCF PORTC,5 ;coloco en B5 el pin B4 (escaneo columna 2)
BTFSS PORTC,0 ;repito lo mismo que en la columna 1
GOTO CUATRO
BTFSS PORTC,1
GOTO CINCO
BTFSS PORTC,2
GOTO SEIS
BSF PORTC,5
BCF PORTC,6
BTFSS PORTC,0
GOTO SIETE
BTFSS PORTC,1
GOTO OCHO
BTFSS PORTC,2
GOTO NUEVE
BSF PORTC,6
BCF PORTC,7
BTFSS PORTC,0
GOTO GUION
BTFSS PORTC,1
GOTO CERO
BTFSS PORTC,2
GOTO GUION
BSF PORTC,7
GOTO INICIO ;vuelvo a inicio
;===========================================================
;Subrutina a 7 segmentos
CERO movlw B'11000000' ;
movwf PORTB ;muestro codigo 7seg en el display
call Retardo_2s ;creo un retardoo
movlw 0FFh ;
movwf PORTB ;apago el display
goto ESPERAR ;vuelvo al inicio
UNO movlw B'11111001' ;repito para el resito de casos
movwf PORTB
call Retardo_2s
movlw 0FFh
movwf PORTB
goto ESPERAR
DOS movlw B'10100100'
movwf PORTB
call Retardo_2s
movlw 0FFh
movwf PORTB
goto ESPERAR
TRES movlw B'10110000'
movwf PORTB
call Retardo_2s
movlw 0FFh
movwf PORTB
goto ESPERAR
CUATRO movlw B'10011001'
movwf PORTB
call Retardo_2s
movlw 0FFh
movwf PORTB
goto ESPERAR
CINCO movlw B'10010010'
movwf PORTB
call Retardo_2s
movlw 0FFh
movwf PORTB
goto ESPERAR
SEIS movlw B'10000010'
movwf PORTB
call Retardo_2s
movlw 0FFh
movwf PORTB
goto ESPERAR
SIETE movlw B'11111000'
movwf PORTB
call Retardo_2s
movlw 0FFh
movwf PORTB
goto ESPERAR
OCHO movlw B'00000000'
movwf PORTB
call Retardo_2s
call Retardo_2s
movlw 0FFh
movwf PORTB
goto ESPERAR
NUEVE movlw B'00010000'
movwf PORTB
call Retardo_2s
movlw 0FFh
movwf PORTB
goto ESPERAR
GUION movlw B'10111111'
movwf PORTB
call Retardo_2s
movlw 0FFh
movwf PORTB
goto ESPERAR
;================================================================================
;Esta subrutina funciona para que si se deja precioad el boton de una tecla solo
;se muestre 1 vez el digito en el teclado
ESPERAR
movf PORTC,W
andlw 07h
sublw B'00000111'
btfss STATUS,Z ;salta un espacio si el resultado no es 0
goto ESPERAR ;
call Retardo_2s
GOTO INICIO
include <RETARDOS.inc>
END