Microcontroladores Subrutinas y retardos
Subrutinas Sin subrutinas Con subrutinas Llamado a subrutina Subrutina Regreso de subrutina
Arreglos y Apuntadores APUNTADOR: Variable que su contenido representa la dirección de otra variable. Se utilizan para indicar valores por “referencia”. ARREGLOS: Variables del mismo tipo ordenadas consecutivamente en la memoria.
Stack y Stack pointer APUNTADOR DE STACK: Variable que contiene la posición en donde esta la última dirección de retorno que se almacenó en el stack. STACK: Arreglo que almacena las direcciones a las que tiene que regresar el programa después de terminarse una subrutina o una interrupción. También se le conoce como: Pila o FILO (First In Last Out).
SALTOS A SUBRUTINAS CALLRUTINA1 Llama a subrutina. RETURNRegresa de subrutina RETLW kRegrese de subrutina con w==k (Uso de Tablas)
Ejemplo
Ciclos y retardos de tiempo por software Ciclos: Son secciones del programa que se ejecutan varias veces consecutivas debido a un salto a un mismo punto del programa. Bucle…… Condicional que saca del ciclo GOTOBucle Retardos por software: Con secciones de código que tienen la única función de detener el programa durante un tiempo predefinido. Generalmente se hacen con ciclos que se ejecutan un número de veces determinadas.
Ciclos y retardos de tiempo por software
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Rutina de retardo de 1 Segundo. ; Genera un retardo igual a un segundo TR=TRH:TRL <--03:E8 h. ; Utiliza una rutina que retarda 1 milisegundo y la rutina que retarna N milisegundos RETARDO: movlwTRH_AUX movwfTR movlwTRL_AUX movwfTR+1 callRETARDO_NMS return Ejemplo de Retardo Largo
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Rutina de retardo programable en milisegundos. ; Genera un retardo igual al numero almacenado en TRH:TRL (TR:TR+1) en milisegundos. ; Utiliza una rutina que retarda 1 milisegundo. ; Retardio máximo es aproximadamente 65 segundos (65535). RETARDO_NMS: movfTR,w;Si (TR):(TR+1) == 00:00, sale de la subrrutina iorwfTR+1,w btfscSTATUS,Z return callRETARDO_1MS;Espera un milisegundo. movlw0xff addwfTR+1;Decrementa en 1 la variable TR = (TR):(TR+1) btfssSTATUS,C decfTR gotoRETARDO_NMS Ejemplo de Retardo Largo
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Rutina que produce un retardo de un milisegundo. Asume que se tiene un ciclo ; maquina de un microsegundo. Retardo = 5*N uS RETARDO_1MS: movlwT_4MHZ ; N=200, ciclos con OSC 4MH (ciclo maq 1 uS) nop RET_CICLO1: addlw 0xFF btfscSTATUS,Z return gotoRET_CICLO1