Los pasos son
1) pasas ADRESL/H a una variable
2) Cargas el complemento A2 de 512 en otra variable
3) Haces la suma
4) haces Valor abs del resultado de la suma y listo
El problema es que estoy desde hace tiempo trabajando unicamente con pics de la
serie 18 y las rutinas estan para ellos ... no creo que sea complicado hacer el pase
si se te complica hacemelo saber y con un poquito de tiempo te escribo el codigo en
pic 16 (disculpa ahora tengo mucho sueño
cualquier cosa no dudes en preguntar
El programa tiene que funcionar bien.. son todas rutinas que uso actualmente
Solo por curiocidad.. que es lo que estas manejando con PWM ???
Suerte
MOVF ADRESL,w,0 ;
movwf Res_16b_L,1 ; paso ADRESL/H a un par de variables
MOVF ADRESH,W,0 ; /
movwf Res_16b_H,1 ; /
MOVF ADRESL,w,0 ;
movwf Res2_16b_L,1 ; en otro par de variables cargo
MOVF ADRESH,W,0 ; / el complemento A2 de 512
movwf Res2_16b_H,1 ; / comp A2(512) = 65536 - 512 = 65024
; ----------------------------------------------------------------
; ----------------- RUTINA PARA LA SUMA 16b + 16b ------------------
; ----------------------------------------------------------------
; La intencion es SUMAR Res2_16b_H/L a las variables Res_16b_H/L
; RESULTADO en Res_16b_H/L
SUMA_16b
MOVF Res2_16b_L,W,1 ; Sumo Res2_16b_L con Res_16b_L
ADDWF Res_16b_L,f,1 ;/
MOVF Res2_16b_H,W,1 ; Sumo Res2_16b_H con Res_16b_H
ADDWFC Res_16b_H,f,1 ;/ + 1 si hay carry
RETURN
; ----------------------------------------------------------------
; ------------ FIN DE LA RUTINA PARA LA SUMA 16b + 16b ------------
; ----------------------------------------------------------------
;------------------ Valor Absoluto --------------------------------------------------------------------
BTFSS Res_16b_H,7 ;si el bit7 de la variable alta(H) es 1 --> Variable Negativa
GOTO resultado_positivo2 ; Res_16b_H/L positivo!!
;-- rutina de Complemento A2 --------
COMF Res_16b_L,f ; <<-Complemento A2
COMF Res_16b_H,f ;
INFSNZ Res_16b_L,f ;
INCF Res_16b_H,f ; <<-Complemento A2
;-- fin de rutina de Complemento A2 --------
resultado_positivo2
MOVF Res_16b_H,w,0 ;
movwf Abs_Var_H,1 ; paso el resultado a un par de variables
MOVF Res_16b_L,W,0 ; / de salida
movwf Abs_Var_L,1 ; /