Ensamblador

13
UNIDAD 5.- Subrutinas UNIDAD 5.- Subrutinas 5.1.- Introducción. 5.2.- Subrutinas de retardo.

Transcript of Ensamblador

  • UNIDAD 5.- Subrutinas5.1.- Introduccin.5.2.- Subrutinas de retardo.

  • 5.1.- IntroduccinUna subrutina o subprograma es una parte de programa que realiza una accin concreta y se repite a menudo, para ahorrar memoria y esfuerzo y para hacer el programa mas comprensible.

    Una subrutina se debe ejecutar siempre llamndola con la instruccin CALL y al final de dicha subrutina debe haber siempre un RETURN. El esquema siguiente muestra como funcionan las subrutinas: CALL SUBR .. .. .. CALL SUBR . . SUBR . . RETURN

  • 5.2.- Subrutinas de retardoCiclo maquina: Es la unidad basica de tiempo que utiliza el microcontrolador. Para el PIC 16F84A el ciclo maquina es la equivalencia de 4 ciclos de reloj, por lo tanto, el tiempo que tarda en producirse un ciclo maquina es igual a 4 veces el periodo del oscilador.

  • Las instrucciones en el PIC 16f84A necesitan 1 ciclo maquina para ejecutarse, excepto las de salto (goto, call, btfss, btfsc,return,etc) que necesitan de dos ciclos maquina.

    El tiempo que tarda el microcontrolador en ejecutar una tarea viene fijado por la formula siguiente:

  • Ejemplos1.- Calcular la duracin de 1 ciclo maquina para un PIC 16F84A que utiliza un cristal de cuarzo de 4MHzSolucin:

  • 2.- En un sistema con un microcontrolador PIC16F84A y cristal de cuarzo de 4MHz se desea generar un retardo de 1.5 mseg. Calcular el numero de ciclos maquina necesarios.Solucin:

  • Retardo mediante lazo simpleUn ejemplo tipico de subrutina de retardo puede ser el siguiente fragmento de programa: ;la llamada CALL aporta 2cmSg1ms movlw 249 ;aporta 1 cm. Este es el valor de k movwf contA ;aporta 1 cmCiclo nop ;aporta k x 1 cm decfsz contA,f ;(k-1)x1cm (cuando no salta) + 2 cm (al saltar) goto ciclo ;aporta (k-1)x2 cm return ;aporta 2 cmEn total=1 mseg

  • Es facil deducir que el valor de la constante k con el que se ha cargado inicialmente el contador contA vendra dado por la siguiente ecuacion, donde el tiempo vien expresado en microsegundos:

  • Ejemplo: Calcular el valor de la constante K, para obtener una subrutina de retardo de 500microsegundos.

  • Retardos mediante lazos anidados

    Para la generalizacion de retardos de mayor duracion deben utilizarse lazos anidados, poniendo un lazo de retardo dentro de otro. La forma de hacerlo se explica en la subrutina siguiente para generar un retraso de 0.2 seg

  • ..Call sg0.2 ;aporta 2cm....

    sg0.2 movlw d200; aporta 1cm.Este es el valor de M movwf contB ;aporta 1cmciclo1 movlw d255;aportaMx1cm.Este es K movwf contA;aporta Mx1cmciclo2 nop ;aporta(KxMx1)cm decfsz contA,F;(K-1)xMx1cm(cuando no salta)+ ;Mx2(al saltar) goto ciclo2 ;(K-1)xMx2cm decfsz contB,F;(M-1)x1 (cuando no salta)+2cm(al saltar) goto ciclo1 ;(M-1)x2cm returnTotal: 0.204806 seg

  • Prctica. Disee un sistema que genere unra intermitancia de 1 segundo en el Puerto B del PIC16F84A

  • TAREAS Investigar la funcin de las siguientes instrucciones:

    CargaBitLogicasSaltoEspecialesClrwMovf f,dAddlw kAddwf f,dDecf f,dIncf f,dSublw kSubwf f,dAndlw kAndwf f,dComf f,dIorlw kIorwf f,dDecfsz f,dIncfsz f,dNopSleepclrwdt