automatizacion de estanque con pic16f877a

hola a todos, quiero hacer un estanque controlado por el pic16f877a. mi idea es ingresar el set point atravez de una computadora ¿alguien me podria ayudar como quedaria la programacion del pic para que se establesca la comunicion entre el pic y el pc e ingresar el set point para el llenado del estanque? quiero que la pantalla me diga: "ingrese el valor del set point"

saludos
 
Última edición:
que lenguaje de programacion vas a utilizar? si es C18 hay un post en el que hay ejemplos de programacion para lo que tu quieres.
Un saludo
 
voy a utilizar asembler. cual es el C18? es C++? ise un programa, aun k esta mal:

include p16f874.inc
PDel0 equ 0x20
ORG 0x0000

goto INICIO
org 0x04
goto INTERUP




INICIO BSF STATUS,RP0 ;Selecta banco 1

movlw 0xff ;selecta port A como entrada
movwf TRISA ;selecta port A como entrada
clrf TRISB ;selecta el puerto B como salida
;selecta los pcfg para usar los terminales port A, E como entradas analogicas
;guarda losbits mas significativosen el registro ADRESH
movlw b'00000000' ;PCFG3=0,PCFG2=0, PCFG1=0
movwf ADCON1 ;PCFG0=0, ADFM=0, ADCS2=0

MOVLW b'00100110' ;configura la comunicación CSRC=X, trasmite en
MOVWF TXSTA ;8 bits TX9=0, habilita la transmisión TXEN=1,
;Asincrónica SYNC =0, BRG en alta velocidad
;BRGH=1; Registro Vacio TRMT=1 y noveno bit
;es cero TX9D=0

MOVLW .103 ;Permite la comunicación a 2400bps
MOVWF SPBRG ;Baudio = 4MhZ /(16*[103+1] dando 2403,8
clrf TRISB ;PUERTO B= SAlida
bsf INTCON,7 ;Habilita GIE
bsf INTCON,6 ;Habilita PEIE
bsf PIE1,5 ;Habilita RCIE
BCF STATUS,RP0 ;banco0
clrf PORTB ;Limpia el PORTB


bcf STATUS,5 ;selecta banco 0 de mem

MOVLW b'10010000' ;(Puerto habilitado SPEN =1, Recepción de
MOVWF RCSTA ; 8 bits RX9=0, habilita recepciones continuas CREN=1
; y Sin errores
bcf ADCON0,7 ;selecta ADCS1=0
bsf ADCON0,6 ;selecta ADCS0=1


MOVLW A'A' ;Copia en W el valor Ascci de la letra M
ESPERA BTFSS PIR1,TXIF ;PREGUNTA SI ESTA VACIO REG PIR1
GOTO ESPERA
SI_VACIO MOVWF TXREG ;Copia la letra M al TXREG para ser enviado

MOVLW A'L' ;Copia en W el valor Ascci de la letra I
ESPERA1 BTFSS PIR1,TXIF ;PREGUNTA SI ESTA VACIO (REG PIR1)
GOTO ESPERA1
MOVWF TXREG

MOVLW A'F' ;Copia en W el valor Ascci de la letra C
ESPERA2 BTFSS PIR1,TXIF ;PREGUNTA SI ESTA VACIO (REG PIR1)
GOTO ESPERA2
MOVWF TXREG

MOVLW A'R'
ESPERA3 BTFSS PIR1,TXIF ;PREGUNTA SI ESTA VACIO (REG PIR1)
GOTO ESPERA3
MOVWF TXREG

MOVLW A'E'
ESPERA4 BTFSS PIR1,TXIF ;PREGUNTA SI ESTA VACIO (REG PIR1)
GOTO ESPERA4
MOVWF TXREG

MOVLW A'D' ;Copia en W el valor Ascci de dos espacios
ESPERA5 BTFSS PIR1,TXIF ;PREGUNTA SI ESTA VACIO (REG PIR1)
GOTO ESPERA5
MOVWF TXREG

MOVLW A'O' ;Copia en W el valor Ascci de dos espacios
ESPERA6 BTFSS PIR1,TXIF ;PREGUNTA SI ESTA VACIO (REG PIR1)
GOTO ESPERA6
MOVWF TXREG

MOVLW D'13' ;Copia en W el valor Ascci de dos espacios
ESPERA7 BTFSS PIR1,TXIF ;PREGUNTA SI ESTA VACIO (REG PIR1)
GOTO ESPERA7
MOVWF TXREG

MOVLW A'R' ;Copia en W el valor Ascci de dos espacios
ESPERA8 BTFSS PIR1,TXIF ;PREGUNTA SI ESTA VACIO (REG PIR1)
GOTO ESPERA8
MOVWF TXREG

MOVLW A'I' ;Copia en W el valor Ascci de dos espacios
ESPERA9 BTFSS PIR1,TXIF ;PREGUNTA SI ESTA VACIO (REG PIR1)
GOTO ESPERA9
MOVWF TXREG

MOVLW A'V' ;Copia en W el valor Ascci de dos espacios
ESPERA10 BTFSS PIR1,TXIF ;PREGUNTA SI ESTA VACIO (REG PIR1)
GOTO ESPERA10
MOVWF TXREG

MOVLW A'E' ;Copia en W el valor Ascci de dos espacios
ESPERA11 BTFSS PIR1,TXIF ;PREGUNTA SI ESTA VACIO (REG PIR1)
GOTO ESPERA11
MOVWF TXREG

MOVLW A'R' ;Copia en W el valor Ascci de dos espacios
ESPERA12 BTFSS PIR1,TXIF ;PREGUNTA SI ESTA VACIO (REG PIR1)
GOTO ESPERA12
MOVWF TXREG

MOVLW A'A' ;Copia en W el valor Ascci de dos espacios
ESPERA13 BTFSS PIR1,TXIF ;PREGUNTA SI ESTA VACIO (REG PIR1)
GOTO ESPERA13
MOVWF TXREG





;inicio del proceso selecta el canal analogico activa el ADON, espera 40u seg y activa el go/done
PROCESO bcf ADCON0,5 ;selecta CHS2=0
bcf ADCON0,4 ;selecta CHS1=0
bcf ADCON0,3 ;selecta CHS0=0 (canal 0)
Bsf ADCON0,0 ;activa el ADON para cargar el capacitor
Call DEMORA ;retardo mayor de 40u seg
bsf ADCON0,2 ;activa el GO/DONE, inicia conversion
;pregunta si la conversion fue realizada mediante el bit GO/DONE
MIENTRAS btfsc ADCON0,2 ;GO/DONE=0?
goto MIENTRAS

movf PORTB,W
xorlw B'110001' ;COMPARA EL NUMERO TECLEADO N°1
BTFSC STATUS,Z ;SI ES N°1 IRA A GOTO DAMIAN SI NO SALTA UNA LINEA
GOTO ESPERA28
GOTO ESPERA29


ESPERA28 movlw b'10011001'
subwf ADRESH,W
btfsc STATUS,0
goto CEROO
bcf PORTB,7
goto PROCESO
CEROO bsf PORTB,7
nop
goto PROCESO

ESPERA29 movlw b'01111111'
subwf ADRESH,W
btfsc STATUS,0
goto CEROOO
bcf PORTB,7
goto PROCESO
CEROOO bsf PORTB,7
nop
goto PROCESO


INTERUP movf RCREG,0 ;Copia en W el contenido del RCREG
movwf PORTB ;Y lo envia al PORTB
bcf PIR1,5 ;Limpia el RCIF

movf PORTB,W
xorlw B'110001' ;COMPARA EL NUMERO TECLEADO N°1
BTFSC STATUS,Z ;SI ES N°1 IRA A GOTO DAMIAN SI NO SALTA UNA LINEA
GOTO UNO
GOTO DOS

DOS movf PORTB,W
xorlw B'110010' ;COMPARA EL NUMERO TECLEADO N°2
BTFSC STATUS,Z ;SI ES N°2 IRA A GOTO DAMIAN SI NO SALTA UNA LINEA
GOTO TRES
GOTO CUATRO

CUATRO movf PORTB,W
xorlw B'110011' ;COMPARA EL NUMERO TECLEADO N°2
BTFSC STATUS,Z ;SI ES N°2 IRA A GOTO DAMIAN SI NO SALTA UNA LINEA
GOTO CINCO
GOTO ESPERA222

UNO bsf TRISB,7

PROCESOO MOVLW D'8' ;Copia en W el valor Ascci de ENTER
ESPERA7xS BTFSS PIR1,TXIF ;PREGUNTA SI ESTA VACIO (REG PIR1)
GOTO ESPERA7xS
MOVWF TXREG
MOVLW A'1' ;Copia en W el valor Ascci de dos espacios
ESPERA122 BTFSS PIR1,TXIF ;PREGUNTA SI ESTA VACIO (REG PIR1)
GOTO ESPERA122
MOVWF TXREG
retfie ESPERA28
goto ESPERA28

TRES bsf TRISB,7


MOVLW D'8' ;Copia en W el valor Ascci de ENTER
ESPERA7xxS BTFSS PIR1,TXIF ;PREGUNTA SI ESTA VACIO (REG PIR1)
GOTO ESPERA7xxS
MOVWF TXREG
MOVLW A'2' ;Copia en W el valor Ascci de dos espacios
ESPERA1222 BTFSS PIR1,TXIF ;PREGUNTA SI ESTA VACIO (REG PIR1)
GOTO ESPERA1222
MOVWF TXREG
Retfie ESPERA29

CINCO bsf TRISB,7

MOVLW D'8' ;Copia en W el valor Ascci de ENTER
ESPERA7xxxS BTFSS PIR1,TXIF ;PREGUNTA SI ESTA VACIO (REG PIR1)
GOTO ESPERA7xxxS
MOVWF TXREG
MOVLW A'3' ;Copia en W el valor Ascci de dos espacios
ESPERA12222 BTFSS PIR1,TXIF ;PREGUNTA SI ESTA VACIO (REG PIR1)
GOTO ESPERA12222
MOVWF TXREG
goto ESPERA222





;Envio del carater a la pantalla
ESPERA22 BTFSS PIR1,TXIF ;PREGUNTA SI ESTA VACIO (REG PIR1)
GOTO ESPERA22
SI_VACIOO MOVWF TXREG ;Si esta vacio, se coloca el caracter en TXREG
ESPERA222 retfie










;retardo
DEMORA movlw .248 ; 1 set numero de repeticion
movwf PDel0 ; 1 |
PLoop0 clrwdt ; 1 clear watchdog
decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ?
goto PLoop0 ; 2 no, loop
PDelL1 goto PDelL2 ; 2 ciclos delay
PDelL2 clrwdt ; 1 ciclo delay
return ; 2+2 Fin.


end

quiero que al apretar un uno del teclado del pc se llene el estanque hasta cierta cantidad de agua, al apretar el numero 2 se llene a otra y al apretar el numero 3 se llene a otra cantidad de agua. y que salga el numero apretado en pantalla. alguna pista de como poder hacerlo con el lenguaje?

saludos
 
Última edición:
para un programa tan sencillo te recomiendo CCS , es C, ya que es facil de utilizar, sobre todo con pantallas LCD ya que tu solo te encargas de escribir el texto. Encontraras un montón de información sobre ese compilador en internet.
Un saludo
 
Atrás
Arriba