¿Cómo seteo valores en DS1620 + PIC16F628 mediante RS-232?

Hola!

Tengo un código el cual controla el sensor de temperatura DS1620 a través del PIC16F628.
Este código ya tiene seteados los valores TH y TL del DS1620, el cual dependiendo del valor de TH enciende un led, y si es TL enciende otro, que estos indican si la temperatura paso un umbral.
Ejemplo: Si pasa los 30 grados enciende led rojo, y si baja 17 grados enciende verde, estos valores en TH y TL.

El código lee los datos de la temperatura del sensor y los envía serialmente.

Quiero hacer una variación del código en el cual pueda modificar esos datos serialmente (el TH y TL), pero necesito crear un protocolo de comunicación en el cual al enviarle un valor por serial, el código sepa reconocer para que acción corresponde.
Ejemplo: Si de Python envío start, debería reconocer el código que es para iniciar la conversión, si envío stop, debería detenerla, si envío SETH + un valor, setee dicho valor en TH, si envío SETTL + valor, setee ese valor en TL.

Entonces la idea es que se pueda estar leyendo el valor de la temperatura pero si presiono alguna tecla cualquiera que tenga determinado cualquiera de esos 4 comandos, (start, stop, seth, setl), el codigo hecho en picbasic, pueda reconocer la acción y setear valor, detener, iniciar etc.


¿Alguien sabe cómo adaptar ese código para algo así? (Más que nada, cómo recibir el valor adaptado a un protocolo)

Supongo que con la función serin, pin,mode {timeout,label}{qual...}{item...}
Por ahí debo colocar algún protocolo + valor, que diga la acción.


Muchas gracias!!!
Código:
include "Modedefs.bas
DEFINE OSC = 4
CMCON = 7
VRCON = 0

TRISA= %00000000
TRISB = % 00000000

CFGW CON $0C
CPUCN CON $02
START CON $EE
GETT CON $AA
STH CON $01
STL CON $02

DST var PortB.0
CLK Var PortB.1
RST var PortB.2
SER var PortB.3
Temp var byte
GCel var byte

    gosub Init
    GoSUB SetHL
    gosub LetGo

e_go:
    gosub Lee_T
    GCel = Temp /2
    serout ser,N2400,[GCel]
    pause 250
    goto e_go
    end

Init:
    High RST
    shiftout DST,CLK,LSBFIRST,[CFGW,CPUCN]
    low RST
    pause 10
    return

LetGo
    high RST
    shiftout DST,CLK,LSBFIRST,[START]
    low RST
    pause 10
    return

Lee_T:
    high RST
    shiftout DST,CLK,LSBFIRST,[GetT]
    shiftin DST,CLK,LSBPRE,[Temp]
    low RST
    return

SetHL:
    high RST
    shiftout DST,CLK,LSBFIRST,[SHL,48\9]
    low RST
    pause 10
    high RST
    shiftout DST,CLK,LSBFIRST,[STL,34\9]
    low RST
    pause 10
    return
 
Última edición por un moderador:
Atrás
Arriba