APÉNDICE C Función llamada “Manda Señal”
encargada de mandar pulsos para los 20 servomotores
;======= Manda unos por ms ========================================movlw 0xFF ; (0.0002ms) Mete puros unos en W movwf PUERTAB ; (0.0002ms) Manda unos por la puerta B movwf PUERTAC ; (0.0002ms) Manda unos por la puerta C movwf PUERTAA ; (0.0002ms) Manda unos por la puerta A
;--- Retardo por [(1.05ms Rango Inf.)-(0.0092ms)-(0.0004ms)]=(1.04ms) --- call retardo1 ; (0.2063ms) Retardo por 0.0400ms
call retardo1 ; (0.2063ms) Retardo por 0.4126ms call retardo1 ; (0.2063ms) Retardo por 0.6189ms call retardo1 ; (0.2063ms) Retardo por 0.8252ms call retardo1 ; (0.2063ms) Retardo por 1.0315ms call ajuste ; (0.0086ms) Retardo por 1.0401ms ;===== Inicializa Variables (0.0092ms) ======
;--- (0.0004ms) ----
movlw d'32' ; (0.0002ms) Mete un 32 en W para contador de pulsos movwf var ; (0.0002ms) Guarda en var el valor de 32.
;--- (0.0008ms) ----
movlw 0xFF ; (0.0002ms) Mete puros unos en W movwf result ; (0.0002ms) Guarda el valor de W en result movwf result2 ; (0.0002ms) Guarda el valor de W en result2 movwf result3 ; (0.0002ms) Guarda el valor de W en result3 ;--- (0.008ms) ---
movf v1,0 ; (0.0002ms) Introduce el valor Vx en W movwf v11 ; (0.0002ms) Introduce el valor de W en Vxx movf v2,0 ; (0.0002ms) Introduce el valor Vx en W movwf v22 ; (0.0002ms) Introduce el valor de W en Vxx movf v3,0 ; (0.0002ms) Introduce el valor Vx en W movwf v33 ; (0.0002ms) Introduce el valor de W en Vxx movf v4,0 ; (0.0002ms) Introduce el valor Vx en W movwf v44 ; (0.0002ms) Introduce el valor de W en Vxx movf v5,0 ; (0.0002ms) Introduce el valor Vx en W movwf v55 ; (0.0002ms) Introduce el valor de W en Vxx movf v6,0 ; (0.0002ms) Introduce el valor Vx en W movwf v66 ; (0.0002ms) Introduce el valor de W en Vxx movf v7,0 ; (0.0002ms) Introduce el valor Vx en W movwf v77 ; (0.0002ms) Introduce el valor de W en Vxx movf v8,0 ; (0.0002ms) Introduce el valor Vx en W movwf v88 ; (0.0002ms) Introduce el valor de W en Vxx movf v9,0 ; (0.0002ms) Introduce el valor Vx en W movwf v99 ; (0.0002ms) Introduce el valor de W en Vxx movf vA,0 ; (0.0002ms) Introduce el valor Vx en W movwf vAA ; (0.0002ms) Introduce el valor de W en Vxx movf vA1,0 ; (0.0002ms) Introduce el valor Vx en W movwf vAA1 ; (0.0002ms) Introduce el valor de W en Vxx movf vA2,0 ; (0.0002ms) Introduce el valor Vx en W movwf vAA2 ; (0.0002ms) Introduce el valor de W en Vxx movf vA3,0 ; (0.0002ms) Introduce el valor Vx en W movwf vAA3 ; (0.0002ms) Introduce el valor de W en Vxx movf vA4,0 ; (0.0002ms) Introduce el valor Vx en W movwf vAA4 ; (0.0002ms) Introduce el valor de W en Vxx
movf vA5,0 ; (0.0002ms) Introduce el valor Vx en W movwf vAA5 ; (0.0002ms) Introduce el valor de W en Vxx movf vA6,0 ; (0.0002ms) Introduce el valor Vx en W movwf vAA6 ; (0.0002ms) Introduce el valor de W en Vxx movf vA7,0 ; (0.0002ms) Introduce el valor Vx en W movwf vAA7 ; (0.0002ms) Introduce el valor de W en Vxx movf vA8,0 ; (0.0002ms) Introduce el valor Vx en W movwf vAA8 ; (0.0002ms) Introduce el valor de W en Vxx movf vA9,0 ; (0.0002ms) Introduce el valor Vx en W movwf vAA9 ; (0.0002ms) Introduce el valor de W en Vxx movf vA10,0 ; (0.0002ms) Introduce el valor Vx en W movwf vAAA ; (0.0002ms) Introduce el valor de W en Vxx ;---
clrf var ; (0.0002ms) Limpia la variable var.
;======= Configura los bits a mandar (0.0096ms)por ciclo ================== pulseando:
;===== (0.0004ms) =====
decfsz v11,1 ; (0.0002ms) Decrementa contador y revisa si es cero goto m_sig2 ; (0.0002ms) Si no es cero, revisa el siguiente cont.
bcf result,0 ; (0.0002ms) Si ya paso por cero, entonces apara el bit corresp. m_sig2:
;===== (0.0004ms) =====
decfsz v22,1 ; (0.0002ms) Decrementa contador y revisa si es cero goto m_sig3 ; (0.0002ms) Si no es cero, revisa el siguiente cont.
bcf result,1 ; (0.0002ms) Si ya paso por cero, entonces apara el bit corresp. m_sig3:
;===== (0.0004ms) =====
decfsz v33,1 ; (0.0002ms) Decrementa contador y revisa si es cero goto m_sig4 ; (0.0002ms) Si no es cero, revisa el siguiente cont.
bcf result,2 ; (0.0002ms) Si ya paso por cero, entonces apara el bit corresp. m_sig4:
;===== (0.0004ms) =====
decfsz v44,1 ; (0.0002ms) Decrementa contador y revisa si es cero goto m_sig5 ; (0.0002ms) Si no es cero, revisa el siguiente cont.
bcf result,3 ; (0.0002ms) Si ya paso por cero, entonces apara el bit corresp. m_sig5:
;===== (0.0004ms) =====
decfsz v55,1 ; (0.0002ms) Decrementa contador y revisa si es cero goto m_sig6 ; (0.0002ms) Si no es cero, revisa el siguiente cont.
bcf result,4 ; (0.0002ms) Si ya paso por cero, entonces apara el bit corresp. m_sig6:
;===== (0.0004ms) =====
decfsz v66,1 ; (0.0002ms) Decrementa contador y revisa si es cero goto m_sig7 ; (0.0002ms) Si no es cero, revisa el siguiente cont.
bcf result,5 ; (0.0002ms) Si ya paso por cero, entonces apara el bit corresp. m_sig7:
;===== (0.0004ms) =====
decfsz v77,1 ; (0.0002ms) Decrementa contador y revisa si es cero goto m_sig8 ; (0.0002ms) Si no es cero, revisa el siguiente cont.
bcf result,6 ; (0.0002ms) Si ya paso por cero, entonces apara el bit corresp. m_sig8:
;===== (0.0004ms) =====
decfsz v88,1 ; (0.0002ms) Decrementa contador y revisa si es cero goto m_sig9 ; (0.0002ms) Si no es cero, revisa el siguiente cont.
bcf result,7 ; (0.0002ms) Si ya paso por cero, entonces apara el bit corresp. m_sig9:
;===== (0.0004ms) =====
decfsz v99,1 ; (0.0002ms) Decrementa contador y revisa si es cero goto m_sig10 ; (0.0002ms) Si no es cero, revisa el siguiente cont.
bcf result2,0 ; (0.0002ms) Si ya paso por cero, entonces apara el bit corresp. m_sig10:
;===== (0.0004ms) =====
decfsz vAA,1 ; (0.0002ms) Decrementa contador y revisa si es cero goto m_sig11 ; (0.0002ms) Si no es cero, revisa el siguiente cont.
bcf result2,1 ; (0.0002ms) Si ya paso por cero, entonces apara el bit corresp. m_sig11:
;===== (0.0004ms) =====
decfsz vAA1,1 ; (0.0002ms) Decrementa contador y revisa si es cero goto m_sig12 ; (0.0002ms) Si no es cero, revisa el siguiente cont.
bcf result2,2 ; (0.0002ms) Si ya paso por cero, entonces apara el bit corresp. m_sig12:
;===== (0.0004ms) =====
decfsz vAA2,1 ; (0.0002ms) Decrementa contador y revisa si es cero goto m_sig13 ; (0.0002ms) Si no es cero, revisa el siguiente cont.
bcf result2,3 ; (0.0002ms) Si ya paso por cero, entonces apara el bit corresp. m_sig13:
;===== (0.0004ms) =====
decfsz vAA3,1 ; (0.0002ms) Decrementa contador y revisa si es cero goto m_sig14 ; (0.0002ms) Si no es cero, revisa el siguiente cont.
bcf result2,4 ; (0.0002ms) Si ya paso por cero, entonces apara el bit corresp. m_sig14:
;===== (0.0004ms) =====
decfsz vAA4,1 ; (0.0002ms) Decrementa contador y revisa si es cero goto m_sig15 ; (0.0002ms) Si no es cero, revisa el siguiente cont.
bcf result2,5 ; (0.0002ms) Si ya paso por cero, entonces apara el bit corresp. m_sig15:
;===== (0.0004ms) =====
decfsz vAA5,1 ; (0.0002ms) Decrementa contador y revisa si es cero goto m_sig16 ; (0.0002ms) Si no es cero, revisa el siguiente cont.
bcf result2,6 ; (0.0002ms) Si ya paso por cero, entonces apara el bit corresp. m_sig16:
;===== (0.0004ms) =====
decfsz vAA6,1 ; (0.0002ms) Decrementa contador y revisa si es cero goto m_sig17 ; (0.0002ms) Si no es cero, revisa el siguiente cont.
bcf result2,7 ; (0.0002ms) Si ya paso por cero, entonces apara el bit corresp. m_sig17:
;===== (0.0004ms) =====
decfsz vAA7,1 ; (0.0002ms) Decrementa contador y revisa si es cero goto m_sig18 ; (0.0002ms) Si no es cero, revisa el siguiente cont.
bcf result3,0 ; (0.0002ms) Si ya paso por cero, entonces apara el bit corresp. m_sig18:
;===== (0.0004ms) =====
decfsz vAA8,1 ; (0.0002ms) Decrementa contador y revisa si es cero goto m_sig19 ; (0.0002ms) Si no es cero, revisa el siguiente cont.
bcf result3,1 ; (0.0002ms) Si ya paso por cero, entonces apara el bit corresp. m_sig19:
;===== (0.0004ms) =====
decfsz vAA9,1 ; (0.0002ms) Decrementa contador y revisa si es cero goto m_sig20 ; (0.0002ms) Si no es cero, revisa el siguiente cont.
bcf result3,2 ; (0.0002ms) Si ya paso por cero, entonces apara el bit corresp. m_sig20:
decfsz vAAA,1 ; (0.0002ms) Decrementa contador y revisa si es cero goto m_acaba ; (0.0002ms) Si no es cero, manda señales a motores
bcf result3,3 ; (0.0002ms) Si ya paso por cero, entonces apara el bit corresp. m_acaba:
;=========== Manda a los puertos (0.0012ms) ==========
movf result,0 ; (0.0002ms) Manda el valor de result a W movwf PUERTAB ; (0.0002ms) Manda el valor por la Puerta B movf result2,0 ; (0.0002ms) Manda el valor de result a W movwf PUERTAC ; (0.0002ms) Manda el valor por la Puerta C movf result3,0 ; (0.0002ms) Manda el valor de result a W movwf PUERTAA ; (0.0002ms) Manda el valor por la Puerta A ;========== Revisa condición de paro (0.0004ms) =====
;--- Revisa si ya llegó a 31 pulsos ---
decfsz var,1 ; (0.0002ms) Decrementa el valor de var goto pulseando ; (0.0002ms) Si no es cero, realiza denuevo el alg. ;========== Manda ceros por (9.65ms) ========
call retardo2 ; (1.6398ms) Retardo. call retardo2 ; (3.2796ms) Retardo. call retardo2 ; (4.9194ms) Retardo. call retardo2 ; (6.5592ms) Retardo. call retardo2 ; (8.1990ms) Retardo. call retardo1 ; (8.4052ms) Retardo. call retardo1 ; (8.6114ms) Retardo. call retardo1 ; (8.8176ms) Retardo. call retardo1 ; (9.0238ms) Retardo. call retardo1 ; (9.2300ms) Retardo. call retardo1 ; (9.4362ms) Retardo. call retardo1 ; (9.6424ms) Retardo.
;============================================ return