;Supongamos temperatura en 25.6º
;Valores de temperatura que van a servir de comparacion
Umbralbajo EQU .25 ; Cuando la temperatura es MENOR a esto, Enciende (en este ejemplo temp menor o igual 24.9 )
Umbralalto EQU .27 ; Cuando la temperatura es MAYOR o IGUAL a esto Apaga ( en este ejemplo de 27.0 para arriba se apagaria)
Salida1 EQU PORTB,0 ; Puerto de salida
PasoBCD_to_Entero:
INCF cenv, W ; Tomo las decenas de la temperatura, en el ejemplo seria el "2"
MOVWF temp ; Lo incremento en 1 y lo pongo en un registro auxiliar ( temp = 3 )
MOVLW 0xF6 ; Cargo Tempentero con -10
MOVWF TEMPENTERO
MOVLW 0x0A ; W queda con un valor de 10
ADDWF TEMPENTERO, F ; Sumo a Tempentero 10, en la primer vuelta eso lo dejaria en 0 ( estaba en -10)
DECFSZ temp, F ; Decremento y luego pregunto, por eso mismo necesito incrementar en 1 antes ( ya que primero se decrementa )
GOTO $-2 ; De ser 0 cenv, queda en 1 al incrementarse, al pasar por el DECFSZ queda en 0 y saltaria, tempentero queda en 0 en ese caso
MOVF decv, W ; Sino suma de a 10 por cada 1 de "cenv", Luego le sumo la unidad, en este caso el 5
ADDWF TEMPENTERO, F ; Finalmente tengo en tempentero el valor entero, es decir el valor 25
Decision:
MOVF TEMPENTERO, W ; Temperatura a comparar
SUBLW Umbralbajo
BTFSS STATUS, C ;
GOTO Encender ; C=0, W > TUNIB, es decir esta mas bajo que el umbral lo medido
MOVF TEMPENTERO, W
SUBLW UmbralAlto
BTFSS STATUS, C ; C=1 si W <= TUNIB, es decir por encima del segundo umbral
RETURN
Apagar:
BCF Salida1
RETURN
Encender:
BSF Salida1
RETURN