;CONTROL REMOTO DE EVOLUPIC DESDE LA PC, USANDO CABLE SERIAL COMUNICACION A 2400 BPS.
;PERMITE LEER LOS MICROSWITCHES, ENCENDER Y APAGAR LOS LEDS Y ACTIVAR O DESACTIVAR
;EL RELEVADOR. USA HYPERMTERMINAL 
;COMANDOS "S", "L" 0111xxxx, "RON", "ROFF"

	processor 16F628
	include <p16f628.inc>
	__config _XT_OSC & _WDT_OFF & _PWRTE_OFF & _MCLRE_ON & _BODEN_OFF & _LVP_OFF

BANCO0	MACRO
	BCF	STATUS,RP0
	BCF	STATUS,RP1
	ENDM

BANCO1	MACRO
	BSF	STATUS,RP0
	BCF	STATUS,RP1
	ENDM
	
RegA	equ	0x20
RegB	equ	0x21
Cuen1	equ	0x22
Band	equ	0x23
L	EQU	0x24
M	EQU	0x25
P	EQU	0x26
Cuen2	equ	0x27
RECEP	equ	0x28

INICIO	ORG	00H
 	BANCO1
	MOVLW	02H	;B1/RX entrada, B2/TX salida
	MOVWF	TRISB	
	MOVLW	019H	;x=25(10)=19(16) en formula de baud rate
	MOVWF	SPBRG	;para 2400 bauds, modo sincrono
	MOVLW	00H	;TX9=0, TXEN=0, SYNC=0, BRGH=0 
	MOVWF	TXSTA	;8 bits de datos, no Hab.Tx, Asin, baja Vel.  
	movwf	VRCON
	BANCO0
	movlw	0x07
	movwf	CMCON
	MOVLW	0X00
	MOVWF	RCREG
	MOVWF	TXREG
	movwf	RegA
	movwf	RegB
	MOVLW	0X90	
	MOVWF	RCSTA	;bits 7 SPEN y 4 CREN a uno
RECIBO	BTFSS	PIR1,5
	GOTO	RECIBO
	MOVFW	RCREG	;algo del teclado
	MOVWF	RegB	
	bcf	STATUS,Z
	sublw	0x53	;valor de S
	btfsc	STATUS,Z
	goto	PARAS
	movfw	RegB
	sublw	0x4c	;valor de L
	btfsc	STATUS,Z
	goto	PARAL
	movfw	RegB
	sublw	0x52	;valor de R
	btfsc	STATUS,Z
	goto	PARAR
	goto	FALLA
PARAS	movfw	RegB	;eco
	call	ENVIO
	movlw	0x20	;espacio
	call	ENVIO
	BANCO1
	movlw	0xFF	;sw como entradas
	movwf	TRISA
	BANCO0
	call	CONVER
	movlw	0xD	;CR
	call	ENVIO
	movlw	0xA	;LF
	call	ENVIO
	GOTO	RECIBO

PARAL	movfw	RegB	;eco
	call	ENVIO
	movlw	0x20	;espacio
	call	ENVIO
	movlw 	0x4
	movwf	Cuen1
	clrf	RECEP
DIGITOS	BTFSS	PIR1,5
	GOTO	DIGITOS
CANDADO	movfw	RCREG
	movwf	RegA
	bcf	STATUS,Z
	sublw	0x30
	btfsc	STATUS,Z
	goto	SIGUE
	movfw	RegA
	sublw	0x31
	btfsc	STATUS,Z
	goto	SIGUE
	goto	DIGITOS
SIGUE	call	CONVIE
	decfsz	Cuen1
	goto	DIGITOS
	call	RECORRE	
	call	CONVINA
	movlw	0xD	;CR
	call	ENVIO
	movlw	0xA	;LF
	call	ENVIO
	goto	RECIBO
	
ENVIO	MOVWF	TXREG	;valor a enviar de aqui pasa a TSR	
	BANCO1	
	BSF	TXSTA,5
ENVI	BTFSS	TXSTA,1
	GOTO	ENVI
	NOP
	BANCO0
	return	
CONVIE	movfw	RCREG
	movwf	RegA
	call	ENVIO
	btfss	RegA,0
	goto	BAJO
ALTO	bsf	STATUS,C
	rlf	RECEP
	return
BAJO	bcf	STATUS,C
	rlf	RECEP
	return
RECORRE	movlw	0x4
	movwf	Cuen1
VUELTA	bcf	STATUS,C
	rlf	RECEP
	decfsz	Cuen1
	goto	VUELTA
	return
CONVINA	movfw	PORTB
	andlw	B'00001111'
	iorwf	RECEP,w
	movwf	PORTB
	call	RESTO
	return
RESTO	movlw	0x4
	movwf	Cuen2
BIT	movlw	0x58	;X
	call	ENVIO
	decfsz	Cuen2
	goto	BIT
	return
PARAR	NOP
	BANCO1
	movlw	0x3e
	movwf	TRISA
	BANCO0
	movfw	RegB	;eco
	call	ENVIO
	btfss	Band,1
	goto	ACTIVA
DESACTI	bcf	Band,1
	bcf	PORTA,0
	goto	CONTIN
ACTIVA	bsf	Band,1
	bsf	PORTA,0
CONTIN	movlw	0xD	;CR
	call	ENVIO
	movlw	0xA	;LF
	call	ENVIO
	goto	RECIBO

FALLA	movLw	0X46	;F 
	call	ENVIO
	movlw	0xD	;CR
	call	ENVIO
	movlw	0xA	;LF
	call	ENVIO
	GOTO	RECIBO
CONVER	movlw	0x8	
	movwf	Cuen1	;los bits que faltan
	movlw	0x80
	movwf	Cuen2	;la mascara
	movwf	RegA
MENOS	bcf	STATUS,Z
	movfw	RegA
	movwf	Cuen2
	movfw	PORTA
	andwf	Cuen2
	btfss	STATUS,Z
	goto	UNO
	goto	CERO
UNO	movlw	0x31
	call	ENVIO
	bcf	STATUS,C
	rrf	RegA,F
	decfsz	Cuen1
	goto	MENOS
	goto	RECIBO
CERO	movlw	0x30
	call	ENVIO
	bcf	STATUS,C
	rrf	RegA,F
	decfsz	Cuen1
	goto	MENOS
	return
PAUSA	movlw	0x10	;10.785 ..s
	movwf	L
PAL2	movlw	0xFF
	movwf	M
PAM2	MOVLW	0XFF
	MOVWF	P
PAN2	DECFSZ	P,F
	GOTO	PAN2
	decfsz	M,F
	goto	PAM2
	decfsz	L,f
	goto	PAL2
	return
	END
	
