Anda di halaman 1dari 11

Sistemas Embebidos

Subrutinas en uC
Manejo de Tablas
Uso de Delays
Macros

Jos Oliden Martnez


Subrutinas en C

El uso de subrutinas hace al programa mas modular, a esta se llamar por


el comando call y bastar para regresar de ellas el comando return o retlw
k, el cual retornar de la subrutina con el valor de k en W.

--------- Rutina:
--------- ------
Call rutina ------
--------- ------
--------- return

Una tabla es una lista en ROM de constantes en la memoria de programa.


Son esencialmente tiles para la conversin de unos cdigos a otros.
Jos Oliden Martnez
Manejo de Tablas
Para el manejo de tablas en microcontroladores se debe tener en cuenta bsicamente el
manejo del puntero de programa. En nuestro caso es el PC, pero debemos darnos cuenta
de que este se divide en PCL y PCH, y que podemos modificar el PCL, pero el PCH se
modifica a travs del PCLATH. Se debe tener cuidado con las pginas y adems de
direccionar correctamente el PC.
Ahora vamos a ver un ejemplo de manejo de tablas en una visualizacin de los
nmeros hexadecimales (manejados por el microcontrolador) en un display de 7
segmentos puesto en el puerto D. Utilice displays de nodo comn y de Ctodo
Comn

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

6 1 0 1 1 1 1 1 0 0xBE RETLW 0x60 ; 1 en cdigo 7 segmentos


RETLW 0xDA ; 2 en cdigo 7 segmentos
7 1 1 1 0 0 0 0 0 0xE0
RETLW 0xF2 ; 7 en cdigo 7 segmentos
8 1 1 1 1 1 1 1 0 0xFE
;...
9 1 1 1 1 0 1 1 0 0xF6 RETLW 0xFE ; 8 en cdigo 7 segmentos
RETLW 0xF6 ; 9 en cdigo 7 segmentos
Para el display de nodo comn se END
intercambian los unos por ceros y
viceversa
Jos Oliden Martnez
Tarea

Realizar un decodificador de BCD a 7 segmentos donde el dato en BCD se


ingrese por el puerto A y el nmero se visualice por el puerto D

Jos Oliden Martnez


Manejo de tiempos

Una de las principales utilidades de las subrrutinas es el manejo de tiempos.


Se pueden manejar delays o temporizadores en uC ya que se conoce el
tiempo que demora cada instruccin (4 ciclos de reloj, las de salto demoran
8 ciclos de reloj). Haga los clculos para un XTAL de 4 MHZ

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

1 ciclo de instruccin = 4 ciclos de reloj


Jos Oliden Martnez
INICIO

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 = CONTA1-1 bucle = 4 x Tosc x CONTA x (Nmero de ciclos de instruccin)

CONTA1 = 0?
bucle2 = 4 x 0.1x10-6 x 250 x 3 = 0.3 mS

FIN
* Se est usando un XTAL de 10 MHz

Jos Oliden Martnez


Rutinas de tiempo

Sobre el mismo programa de manejo de tablas (display de 7 segmentos) introduzca un


tiempo para poder visualizar los datos cada segundo.
NOTA. Tenga en cuenta que tipo de display est usando.

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

Jos Oliden Martnez


Tarea

Visualizar los nmeros del 0 al 9 en un display de nodo comn o de Ctodo Comn,


con retardos de 1 segundo entre nmeros.

Jos Oliden Martnez


Macros en PICs

Las macros son pequeas subrutinas en donde se ingresan valores o


parmetros sobre los cuales se efecta una accin.

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

sbs macro Reg, Bit ;obviar si bit esta seteado


btfss Reg, Bit
endm

compara macro reg1, constante


movlw constante
xorwf reg1,W
endm

Jos Oliden Martnez

Anda mungkin juga menyukai