Índice de Rutinas:
|
Rutina de DELAY para hacer
que nuestro micro espere exactamente lo que deseamos.
|
|
|
-
Bin2BCD para enviar nuestros bytes a los Displays
de 7 segmentos.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DELAY
|
- Para hacer que nuestro micro espere
exactamente lo que deseamos. Podemos llamar directamente a cada uno de
los retardos predefinidos como Del10 para esperar 10 milisegundos o
cargar w y llamar a la rutina DELAY general.
- Todos los tiempos en milisegundos para
un cristal de 4 Mhz.
|
Como podéis ver es fácil hacer los cálculos para comprobar cuanto tiempo
se emplea en cada bucle y poder así crear los múltiplos o submúltiplos que
necesitéis.
|
| |
1ª parte: en la RAM
hacen falta tres variables tal como sigue: |
|
| |
cblock 0x20 ;Comienzo de los registros de propósito general ;RAM en el Bank0
count1 ;Usado en la rutina Delay counta ;idem countb ;idem endc ... |
|
| |
|
|
| |
2ª parte: La rutina
DELAY tal como queda: |
|
| |
Del0 retlw 0x00 ;delay 0mS
- vuelve inmediatamente Del1 movlw d'1' ;delay 1mS goto Delay
Del5 movlw d'5' ;delay 5mS goto Delay
Del10 movlw d'10' ;delay 10mS goto Delay
Del20 movlw d'20' ;delay 20mS goto Delay
Del50 movlw d'50' ;delay 50mS goto Delay
Del100 movlw d'100' ;delay 100mS goto Delay
Del250 movlw d'250' ;delay 250 ms
Delay movwf count1
d1 movlw 0xC7 ;delay 1mS movwf counta movlw 0x01 movwf countb
Delay_0 decfsz counta, f goto $+2 decfsz countb, f goto Delay_0 decfsz count1 ,f goto d1 retlw 0x00 |
|
| |
|
|
SELECCIONAR un BYTE
mediante su OFFSET
|
|
|
|
|
| |
|
|
| |
... movlw 0x5
;Cargo en W Offset o Índice del Byte a cargar
;(por ejemplo el nº5)
Call Selecciona
;A partir de aquí el contenido de W es b'01101101'
...
Selecciona
addwf PCL,f
;Sumo el Offset cargado al Program Counter (Low byte)
;para saltar al retorno que me interesa
retlw b'00111111' ;índice = 0
retlw b'00000110' ;índice = 1
retlw b'01011011' ;índice = 2
retlw b'01001111' ;índice = 3
retlw b'01100110' ;índice = 4
retlw b'01101101' ;índice = 5
retlw b'01111101' ;índice = 6
retlw b'00000111' ;índice = 7
retlw b'01111111' ;índice = 8
retlw b'01100111' ;índice = 9
retlw b'01110111' ;índice = A
retlw b'01111100' ;índice = B
retlw b'00111001' ;índice = C
retlw b'01011110' ;índice = D
retlw b'01111001' ;índice = E
retlw b'01110001' ;índice = F
|
|
| |
|
|
Bin2BCD
|
Cuando queremos utilizar uno de
esos drivers para Displays de 7
segmentos que solo aceptan datos en BCD se impone una rutina que nos
convierta nuestro byte en tan estrambótico Binary Code Decimal.
|
| Ahí os dejo un
par de ellas: |
| |
| |
Bin2BCD (1):
|
|
| |
cblock 0x20 ;RAM en el Bank0
l_digit
h_digit
valor
endc
B2BCD
CLRF h_digit
MOVF valor,W
SUBLW 09
BTFSC 03.0
GOTO B2BCD2
B2BCD1
MOVLW 0A
SUBWF valor,F
INCF h_digit,F
MOVF valor,W
SUBLW 09
BTFSS 03.0
GOTO B2BCD1
B2BCD2
MOVF valor,W
MOVWF l_digit
RETLW 00
|
|
| |
|
|
| |
Bin2BCD (2):
|
|
| |
cblock 0x20 ;RAM en el Bank0
CENT
MSD
LSD
endc
BIN2BCD
CLRF CENT ;CENTENAS
clrf MSD ;DECENAS
movwf LSD ;UNIDADES
gtenth movlw .10
subwf LSD,W
BTFSS STATUS,C
goto OVERHAUL
movwf LSD
incf MSD, F
goto gtenth
OVERHAUL
MOVLW .10
SUBWF MSD,W
BTFSS STATUS,C
GOTO OVER
MOVWF MSD
INCF CENT,F
GOTO OVERHAUL
OVER
RETLW 0
|
|
| |
|
|
Esta página se modificó el
27/12/2008
|