Subrutinas en uC
Manejo de Tablas
Uso de Delays
Macros
--------- Rutina:
--------- ------
Call rutina ------
--------- ------
--------- return
RD7
PIC
16F877A
RD0
ORG 0X05
Inicio: BSF STATUS,RP0 ;
Solucin CLRF
BCF
TRISD
STATUS,RP0
;
;.
CLRF PORTD ;
CLRW ;
; ************************* Cuerpo Principal **************************
Reset: CLRF digito ;
Siguiente: MOVF digito,W ;
CALL Tabla ;
Segmento a b c d e f g dp
MOVWF PORTD
Pin en D 7 6 5 4 3 2 1 0 INCF digito,F ;
Nmero MOVF digito,W ;
0 1 1 1 1 1 1 0 0 0xFC XORLW 0x0A ;
BTFSC STATUS,Z ;
1 0 1 1 0 0 0 0 0 0x60
GOTO Reset ;
2 1 1 0 1 1 0 1 0 0xDA
GOTO Siguiente ;
3 1 1 1 1 0 0 1 0 0xF2
Tabla:
4 0 1 1 0 0 1 1 0 0x66 ADDWF PCL,F ;
5 1 0 1 1 0 1 1 0 0xB6 RETLW 0xFC ; 0 en cdigo 7 segmentos
RUT_TIEMPO:
movlw 3 ; 1 ciclo de instruccin = 1uS
movwf VARIABLE ; 1 ciclo de instruccin = 1uS
LAZO:
decfsz VARIABLE ; 1 ciclo de instruccin = 1uS
goto LAZO ; 2 ciclos de instruccin = 2uS
return
CONFIGURAR
Rutinas de tiempo
CONTA1 = d'166'
DELAY_50mS:
movlw d166'
CONTA2 = d'250'
movwf CONTA1
bucle1:
movlw d250'
NO movwf CONTA2
CONTA2=CONTA2-1 NO
bucle2:
decfsz CONTA2,F
goto bucle2
decfsz CONTA1,F
CONTA2 = 0? goto bucle1
return
CONTA1 = 0?
bucle2 = 4 x 0.1x10-6 x 250 x 3 = 0.3 mS
FIN
* Se est usando un XTAL de 10 MHz
DELAY_50ms: DELAY_100ms:
movlw d166' call DELAY_50ms
movwf CONTA1 call DELAY_50ms
bucle1: return
movlw d250'
DELAY_500ms:
movwf CONTA2
call DELAY_100ms
bucle2:
call DELAY_100ms
decfsz CONTA2,F
call DELAY_100ms
goto bucle2
call DELAY_100ms
decfsz CONTA1,F
call DELAY_100ms
goto bucle1
return
return
Sintaxis:
[nombre_macro] macro [Reg, bit, etc. ]
[instruccin sola o con Reg, bit, etc.]
endm
Ejemplo:
jmp macro Adr ;goto
goto Adr
endm
Jos Oliden Martnez
Macros en PICs
(ejemplos)
Banco0 macro
bcf STATUS,RP0
bcf STATUS,RP1
endm