'****************************************************************
'* Name : test485.BAS *
'* Author : Navaismo *
'* Notice : Copyright (c) 2008 GPL *
'* : All Rights Reserved *
'* Date : 27/03/2008 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
device = 16f84A
xtal = 4
'*********** DEFINIMOS COMUNICACION SERIE A 9600 8N1 *********************
declare rsin_mode true
DECLARE RSOUT_MODE true
declare rsin_pin portB.0 ' PUERTO RB0 COMO ENTRADA SERIAL
declare rsout_pin portB.1 ' PUERTO RB1 COMO SALIDA SERIAL
DECLARE SERIAL_BAUD 9600
TRISA=%11111 ' PUERTO A DE ENTRADA PARA DIRECCIONES
TRISB.2=0 ' PUERTOS RB2,RB3 Y RB4 COMO SALIDAS
TRISB.3=0
TRISB.4=0
DIM RW AS PORTB.2 ' ALIAS PARA HABILITAR ESCRITURA O LECTURA RS485
DIM MUP AS PORTB.3 ' ALIAS GP -GENERAL PORPOUSE O MEJOR DICHO PARA LO QUE SEA JAJA-
DIM MOW AS PORTB.4 ' ALIAS GP
DIM CTRL[2] AS BYTE ' VARIABLE DE CONTROL DE DATOS
DIM DIR AS BYTE ' VARIABLE DE DIRECCION
DIM T[3] AS BYTE ' VARIABLE PARA PASAR A ASCII LA DIRECCION
PORTB=0 ' LIMPIAMOS EL PORTB
CMC: ' EMPEZAMOS RUTINA
DIR=PORTA ' COPIAMOS EL VALOR DEL PORTA A LA VARIABLE
STRN T = STR$ (DEC DIR) ' CONVERTIMOS EL VALOR DEL PORTA AL VALOR ASCII
RW=0 ' PONEMOS EN ESTADO DE LECTURA O RX AL DISPOSITIVO 485
rsin str CTRL\2 ' ESPERAMOS LA DIRECCION Y EL COMANDO DEL DISPOSITIVO
IF CTRL[0]=T[0] THEN ' SI LA DIRECCION ES IGUAL A LA DE NUESTRO DISPOSITIVO RELAIZA LA ACCION
SELECT CASE CTRL[1] ' LEE EL VALOR DEL COMENDO
CASE "U"
MUP=1:MOW=0 ' ************ ENCIENDE O APAGA LOS LEDS ************
DELAYMS 100
GOSUB HS
CASE "D"
mup=0:MOW=1
DELAYMS 100
GOSUB HS
CASE "O"
MUP=0:MOW=0
DELAYMS 100
GOSUB HS
END SELECT
ENDIF
' HACEMOS LOOP
GOTO CMC
HS: ' RUTINA DE HANDSHAKE
RW=1 ' PONEMOS COMO TX EL DISPOSITIVO
RSOUT "RECIBIDO EN 1: ", STR CTRL\2,13 ' ENVIAMOS LO RECIBIDO
DELAYMS 200
RETURN ' REGRESAMOS