Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Subrutinas en uC
Manejo de Tablas
Uso de Delays
Macros
--------- Rutina:
--------- ------
Call rutina ------
--------- ------
--------- return
RD7
PIC
16F877A
RD0
ORG 0x00
Inicio: BSF STATUS,RP0 ;
CLRF TRISD ;
BCF STATUS,RP0 ;.
Solución CLRF
CLRW
PORTD ;
;
; ************************* Cuerpo Principal **************************
Reset: CLRF digito ;
Siguiente: MOVF digito,W ;
CALL Tabla ;
MOVWF PORTD
INCF digito,F ;
Segmento a b c d e f g dp
MOVF digito,W ;
Pin en D 7 6 5 4 3 2 1 0
XORLW 0x0A ;
BTFSC STATUS,Z ;
Número
GOTO Reset ;
0 1 1 1 1 1 1 0 0 0xFC GOTO Siguiente ;
1 0 1 1 0 0 0 0 0 0x60 Tabla:
RUT_TIEMPO:
movlw 3 ; 1 ciclo de instrucción = 1uS
movwf VARIABLE ; 1 ciclo de instrucción = 1uS
LAZO:
decfsz VARIABLE ; 1 ciclo de instrucción = 1uS
goto LAZO ; 2 ciclos de instrucción = 2uS
return
CONFIGURAR
Rutinas de tiempo
CONTA1 = d'166'
DELAY_50mS:
movlw d‘166'
CONTA2 = d'250'
movwf CONTA1
bucle1:
movlw d‘250'
NO movwf CONTA2
CONTA2=CONTA2-1 NO
bucle2:
decfsz CONTA2,F
goto bucle2
decfsz CONTA1,F
CONTA2 = 0? goto bucle1
return
FIN
* Se está usando un XTAL de 10 MHz
DELAY_50ms: DELAY_100ms:
movlw d‘166' call DELAY_50ms
movwf CONTA1 call DELAY_50ms
bucle1: return
movlw d‘250'
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
DELAY_10ms:
DELAY_50ms:
movlw d‘67'
call DELAY_10ms
movwf CONTA1
call DELAY_10ms
bucle1:
call DELAY_10ms
movlw d‘250'
call DELAY_10ms
movwf CONTA2
call DELAY_10ms
bucle2:
return
decfsz CONTA2,F
goto bucle2 DELAY_100ms:
Sintaxis:
[nombre_macro] macro [Reg, bit, etc. ]
[instrucción sola o con Reg, bit, etc.]
endm
Ejemplo:
jmp macro Adr ;goto
goto Adr
endm
José Oliden Martínez
Macros en PIC´s
(ejemplos)
Banco0 macro
bcf STATUS,RP0
bcf STATUS,RP1
endm