Receptor Transmisor Rf

21

Click here to load reader

Transcript of Receptor Transmisor Rf

Page 1: Receptor Transmisor Rf

Control de Reles a Distancia por Radio Frecuencia (RF)_______________________

Aquí presento una pareja de circuitos para poder practicar con radio frecuencia (RF), esta compuesto de un mando emisor y uno o varios receptores, en este caso el receptor permite ser configurado con una serie de BIT para distinguirlo del resto de receptores que pueden ser comandados por el mismo mando de control. La comunicación entre el emisor (Tx) y circuitos receptores (Rx) se consigue fácilmente usando unos módulos híbridos de Aurel. Como Tx he utilizado tanto el modulo C-0503 de 2mW y el hermano mayor el modulo C-0507 de 500 mW. Con este ultimo realizando pruebas he podido verificar una distancia aproximada de 700 mtrs en ciudad, pero claro esta es una distancia que hay que tomar solo como referencia ya que varia según la altura a la que se encuentran los módulos emisor y receptor uno del otro y también interviene la cantidad de edificaciones con sus alturas. La antena que utilice es la misma en ambos circuitos y se trata de un simple cable de cobre 0.7mm de sección y 17cm de longitud protegido con su funda ya que a esta potencia si tocamos la antena durante la transmisión es posible que nos queme, desde luego yo no pienso correr el riesgo. El modulo C-0503 tiene una cobertura aproximada de 100mtrs según el fabricante pero queda reducida a 50 o 60 mtrs con paredes de por medio, por lo que funciona bien para ser utilizado en casa. Tengo que añadir que los módulos de Aurel de tx, se pueden sustituir uno por el otro en este diseño, ya que el modulo C-0503 también puede trabajar a 12Vdc, tan solo tener en cuenta que tiene dos pin de entrada de datos uno que se usa cuando esta alimentado a 5Vdc y el otro cuando trabaja alimentado a 12Vdc. Los módulos mostrados en la imagen son de Laipac y Aurel que son compatibles entre si, el soft del circuito en teoría es también compatible con los módulos de Laipac, construyendo el respectivo adaptador. Me baso en rutinas ya probadas anteriormente que me funcionaron bien tanto con los módulos de Laipac y de Aurel, pero tengo que indicar que en este caso solo lo he probado con los de Aurel, los módulos de Tx C-0503 y C-0507 junto con el receptor C-0504, todas las referencia del distribuidor en España de estos módulos híbridos son de Cebek. Sobre la trama de datos (Tx): En la trama de datos para que no se produzcan errores en la recepción de los mismos, la comienzo siempre con un BYTE de inicio el 0 en mi caso, y recordar que no es lo mismo que escribir en el comando del lenguaje “0” en cerrado entre comillas. También hay que tener encuentra que si queremos usar módulos de Laipac (los expuestos en la foto) no hay que sobre pasar los 1200 baudios de velocidad del puerto serie. El 0 inicial nos permite sincronizar la trama de datos con el receptor, pero este carácter no se tiene en cuenta a la hora de recomponer la trama en el receptor. Otra cosa importante a tener en cuenta es enviar toda la trama de una sola vez, es decir no dividirla si es posible en varios comandos de programa. Todas estas indicaciones estan pensadas para ser usadas con el modulo USART del PIC. Algunas emulaciones del puerto serie por soft ya tienen encuentra esto y no es necesario tomar tantas precauciones, pero recordar que no es seguro que funcione bien si antes no se toman estas medidas.

________________________________________________________________ CRFRLTX y CRFRLRX Ver. 1.1 – By COS - 10/06 [email protected]

1

Page 2: Receptor Transmisor Rf

Control de Reles a Distancia por Radio Frecuencia (RF)_______________________

El funcionamiento del Tx: El circuito esta compuesto de 9 teclas que van directamente conectadas a 9 entradas del PIC y estas entradas fueron polarizadas a positivo mediante resistencia, cada entrada tiene un condensador a masa de 1nF para proteger al micro en lo posible de interferencia por RF que genera el propio mando u otros equipos ajenos a el. Y también ayuda a disminuir los rebotes de las mismas teclas al ser pulsadas. Estas capacidades son muy importantes. En la parte de la fuente destacamos D1 que esta en serie con la entrada de la alimentación y nos protege el circuito contra posibles inversiones de polaridad. Q3 trabaja en modo seguidor de emisor y es un transistor darlington que esta gobernado por Q2, hay muchas formas distintas de alimentar el modulo de Tx y esta es una mas entre ellas. Existe un led por tecla que indica la maniobra que se esta procesando en ese momento, la maniobra solo podrá ser activada si se pulsa al mismo tiempo la tecla STAR junto con la tecla de la maniobra deseada, esto genera una secuencia que es indicada con el parpadeo del led asociado a la maniobra activada, esta secuencia esta sincronizada con la secuencia de activación de la placa remota, el led terminara apagado justo cuando la placa remota lleve acabo la orden recibida (temporizada a la conexión). Activara su rele durante 100mSg, pasando de nuevo al estado de reposo. En este caso un pequeño pulso es suficiente para activar el mecanismo de apertura de una puerta automática de garaje. La tecla STOP, si es pulsada, anula todas las ordenes que todavía estén en el proceso de temporizacion. El funcionamiento del Rx: Esta también protegido contra posibles inversiones de polaridad mediante el diodo D1. Se necesitan dos señales opuestas para poder activar el rele de 5v dos circuitos conmutados, y tiene en seriados sus dos circuitos de contactos, una entrada digital (RA4) se utiliza para comprobar que durante el test del circuito no estén cogidos los contactos del rele por motivos desconocidos, D3 protege este pin RA4 de sobre tensiones. Led2 nos da una indicación visual si el rele esta energizado o sin embargo esta en reposo. D2 absorbe los picos de alta tensión que genera la bobina del rele y T1 y T2 gobiernan el rele. S1 es un bloque de micro interruptores que nos permiten programar el numero de placa o dicho de otra forma nos permite asociar una placa de rele a una maniobra determinada del mando de control. Led1 nos indica con su cadencia de parpadeo en que estado se encuentra el circuito.

________________________________________________________________ CRFRLTX y CRFRLRX Ver. 1.1 – By COS - 10/06 [email protected]

2

Page 3: Receptor Transmisor Rf

Control de Reles a Distancia por Radio Frecuencia (RF)_______________________

Esquema del mando (Tx):

________________________________________________________________ CRFRLTX y CRFRLRX Ver. 1.1 – By COS - 10/06 [email protected]

3

Page 4: Receptor Transmisor Rf

Control de Reles a Distancia por Radio Frecuencia (RF)_______________________

Esquema del receptor (Rx):

________________________________________________________________ CRFRLTX y CRFRLRX Ver. 1.1 – By COS - 10/06 [email protected]

4

Page 5: Receptor Transmisor Rf

Control de Reles a Distancia por Radio Frecuencia (RF)_______________________

Módulos de Tx y Rx compatibles

________________________________________________________________ CRFRLTX y CRFRLRX Ver. 1.1 – By COS - 10/06 [email protected]

5

Page 6: Receptor Transmisor Rf

Control de Reles a Distancia por Radio Frecuencia (RF)_______________________

Placa del mando, CRFRTX versión 1.1

Detalle de la ubicación de las teclas por la cara de las pistas

________________________________________________________________ CRFRLTX y CRFRLRX Ver. 1.1 – By COS - 10/06 [email protected]

6

Page 7: Receptor Transmisor Rf

Control de Reles a Distancia por Radio Frecuencia (RF)_______________________

Placa CRFRLRX versión 1.1

________________________________________________________________ CRFRLTX y CRFRLRX Ver. 1.1 – By COS - 10/06 [email protected]

7

Page 8: Receptor Transmisor Rf

Control de Reles a Distancia por Radio Frecuencia (RF)_______________________

La trama de datos: La trama de datos esta formada por 4 bytes, no tengo en cuenta el byte de arranque 0. En este caso Hserout es el comando de alto nivel que utiliza este lenguaje para enviar los datos a través del modulo del puerto serie del PIC. La trama esta compuesta, en riguroso orden, de los bytes contenidos en las variables que se utilizan para componerla. 1º grupo: da nombre al grupo de trabajo o red de placas 2º n_placa: contiene el nombre de una placa en concreto 3º estado: indica la orden a realizar por la placa remota, cuyo nombre lo indica n_placa 4º checsum: es la suma aritmética de los de mas valores (grupo+n_placa+estado), nos ayuda a identificar posibles errores en la trama recibida. En este caso el comando Hserout quedaría de la siguiente forma: checsum = grupo + n_placa + estado Hserout 0, grupo, n_placa, estado, checsum, grupo, n_placa, estado, checsum Se puede apreciar que repito dos veces la trama en el mismo comando, todo precedido una única vez por el 0. Como el modulo de Tx no esta alimentación de forma continua hay que dejar un pequeño tiempo, después de alimentarlo, para que se estabilice antes de enviarle la trama de datos, en este circuito lo activo 50mSeg antes y desactivo 50mSeg después de enviarle la trama. Utilizo el 0 como byte de arranque por ningún motivo en especial, simplemente fue el primero que utilice y me soluciono el problema de la continua perdida de datos, puede que se pueda utilizar otro que nos genere un mejor rendimiento.

________________________________________________________________ CRFRLTX y CRFRLRX Ver. 1.1 – By COS - 10/06 [email protected]

8

Page 9: Receptor Transmisor Rf

Control de Reles a Distancia por Radio Frecuencia (RF)_______________________

El programa del Tx: '***************** CONTROL DE RELES A DISTANCIA POR RF *************************************** 'NOMBRE: 16F876_CRFRLTX 'VERSION/Autor: 1.1/By COS 11/06 'MICRO: PIC16f876A,8Mhz 'DESCRIPCION: Control de reles a distancia utilizando transmision de datos por radio frecuencia 'Version: 1.0 'Version: 1.1 'se repara el codigo del led de la tecla start que no encendia '************************************************************************************************ '--------------------------------------DEFINICION DE VARIABLES------------------------------------- '-------------------------------------Variables del contador del TIMER1---------------------------- Dim pause As Word 'contiene el valor para simular el comando Waitms Dim aux_pause As Word 'variable auxiiar Dim basetimer_1ms As Byte 'base de tiempos raiz Dim timer_1ms As Byte 'base de tiempos se incrementa cada 1mSeg Dim timer_100ms As Word 'base de tiempos se incrementa cada 100mSeg Dim timer1_100ms As Byte 'base de tiempos se incrementa cada 100mSeg Dim timer2_100ms As Byte 'base de tiempos se incrementa cada 100mSeg Dim timer3_100ms As Byte 'base de tiempos se incrementa cada 100mSeg Dim timer4_100ms As Byte 'base de tiempos se incrementa cada 100mSeg Dim timer5_100ms As Byte 'base de tiempos se incrementa cada 100mSeg Dim timer6_100ms As Byte 'base de tiempos se incrementa cada 100mSeg Dim timer7_100ms As Byte 'base de tiempos se incrementa cada 100mSeg '--------------------------------------Variables Programa------------------------------------------ Dim grupo As Byte 'nombre del grupo de trabajo Dim n_placa As Byte 'numero de la placa dentro de la red Dim estado As Byte 'accion a tomar por la placa remota Dim checsum As Byte 'control de errores de la trama Dim s1 As Byte 'habilita las operaciones de la tecla P1, parpadeo led, temporizacion, envio trama Dim s2 As Byte 'habilita las operaciones de la tecla P2, parpadeo led, temporizacion, envio trama Dim s3 As Byte 'habilita las operaciones de la tecla P3, parpadeo led, temporizacion, envio trama Dim s4 As Byte 'habilita las operaciones de la tecla P4, parpadeo led, temporizacion, envio trama Dim s5 As Byte 'habilita las operaciones de la tecla P5, parpadeo led, temporizacion, envio trama Dim s6 As Byte 'habilita las operaciones de la tecla P6, parpadeo led, temporizacion, envio trama Dim s7 As Byte 'habilita las operaciones de la tecla P7, parpadeo led, temporizacion, envio trama Dim start As Byte 'habilita las demas teclas al pulsar la tecla Start Dim stop As Byte 'anula las secuencias que se estan procesando de cada una de las placas, tecla Stop '-----------------------------------------------ASIGNACIONES---------------------------------------- '-------------------------------------Asigna valores a las variables-------------------------------- aux_pause = 0 pause = 0 basetimer_1ms = 0 'on timer_1ms = 255 'off timer_100ms = 255 'off timer1_100ms = 255 'off timer2_100ms = 255 'off timer3_100ms = 255 'off timer4_100ms = 255 'off timer5_100ms = 255 'off timer6_100ms = 255 'off timer7_100ms = 255 'off '--------------------------------------asignacion de valores generales----------------------------- grupo = 255 'nombre del grupo de trabajo n_placa = 0 'nombre de la placa actual, se descodifica pero se ignora estado = 0 'comando de reposo s1 = 0 'no hay nada para la placa nº1 s2 = 0 'no hay nada para la placa nº2 s3 = 0 'no hay nada para la placa nº3 s4 = 0 'no hay nada para la placa nº4 s5 = 0 'no hay nada para la placa nº5 s6 = 0 'no hay nada para la placa nº6 s7 = 0 'no hay nada para la placa nº7 start = 0 'no estan habilitadas las teclas de maniobra stop = 0 'no se envia comando de cancelacion

________________________________________________________________ CRFRLTX y CRFRLRX Ver. 1.1 – By COS - 10/06 [email protected]

9

Page 10: Receptor Transmisor Rf

Control de Reles a Distancia por Radio Frecuencia (RF)_______________________ '--------------------------------------DEFINICION DE PUERTOS------------------------------------------------ '--------------------------------ASIGNACION DE I/O y valores de inicio de las salidas---------------------- ADCON1 = 0x07 'deshabilita las entradas analogicas TRISA = 0xff 'puerto A configurado como entradas TRISB = 0x00 'puerto B configurado como salidas TRISC = 0xff 'puerto C configurado como entradas TRISC.2 = 0 'configurado como salida, controla la activacion del modulo hibrido de Tx TRISC.3 = 0 'configurado como salida, nc TRISC.5 = 0 'configurado como salida, controla el led de la tecla start TRISC.6 = 0 'configurado como salida, salida datos serie, Tx TRISC.7 = 0 'configurado como salida, nc PORTB = 0xff 'todo el puerto B a nivel alto, led apagados PORTC.2 = 1 'modulo Tx desconectado PORTC.5 = 1 'led apagado, start '------------------------------------INICIO DEL PUERTO SERIE, TIMER E INTERRUPCONES------------------ Hseropen 1200 'Velocidad del puerto serie e inicializa los comandos de bajo nivel que controlan la USART INTCON.PEIE = 1 'bit de habilitacion de interrupciones de perifericos(USART), comun para tx y rx PIE1.RCIE = 0 'deshabilita la interrupcion de la USART en modo rx T1CON.TMR1ON = 1 'Configuracion y habilitacion del TMR1 T1CON.TMR1CS = 0 'factor del preescales del timer1, 0 T1CON.T1CKPS0 = 0 'factor del preescales del timer1, 0 T1CON.T1CKPS1 = 0 'factor del preescales del timer1, 0 TMR1H = 0xf8 'carga el registro del contador para que desborde cada 1mSeg, byte alto TMR1L = 0x30 'carga el registro del contador para que desborde cada 1mSeg, byte bajo PIE1.TMR1IE = 1 'activa el timer1 Enable 'INTCON.GIE habilita todas las interrupciones globales '--------------------------------------Inicio Programa-------------------------------------------------- pause = 3000 'carga la rutina pause con 3Seg Gosub pause_ms 'espera 3Seg

________________________________________________________________ CRFRLTX y CRFRLRX Ver. 1.1 – By COS - 10/06 [email protected]

10

Page 11: Receptor Transmisor Rf

Control de Reles a Distancia por Radio Frecuencia (RF)_______________________ '--------------------------------------Main Programa---------------------------------------------------- main: If RA1 = 0 And RC4 = 0 Then 'P1 y Start, comprueba las tecla Gosub ledstart_on 'led a on de la tecla Start s1 = 1 'activa la secuencia para la placa remota nº 1 estado = 2 'estado de activacion n_placa = 1 'nombre de la placa relacionada timer1_100ms = 0 'activacion de la base de tiempos del led tecla P1 Gosub tx_trama 'compones y envia la trama de datos Endif If RA2 = 0 And RC4 = 0 Then 'P2 y Start, comprueba las teclas Gosub ledstart_on 'led a on de la tecla Start s2 = 1 'activa la secuencia para la placa remota nº 2 estado = 2 'estado de activacion n_placa = 2 'nombre de la placa relacionada timer2_100ms = 0 'activacion de la base de tiempos del led tecla P2 Gosub tx_trama 'compones y envia la trama de datos Endif If RA3 = 0 And RC4 = 0 Then 'P3 y Start, comprueba las teclas Gosub ledstart_on 'led a on de la tecla Start s3 = 1 'activa la secuencia para la placa remota nº 3 estado = 2 'estado de activacion n_placa = 3 'nombre de la placa relacionada timer3_100ms = 0 'activacion de la base de tiempos del led tecla P3 Gosub tx_trama 'compones y envia la trama de datos Endif If RA4 = 0 And RC4 = 0 Then 'P4 y Start, comprueba las teclas Gosub ledstart_on 'led a on de la tecla Start s4 = 1 'activa la secuencia para la placa remota nº 4 estado = 2 'estado de activacion n_placa = 4 'nombre de la placa relacionada timer4_100ms = 0 'activacion de la base de tiempos del led tecla P4 Gosub tx_trama 'compones y envia la trama de datos Endif If RA5 = 0 And RC4 = 0 Then 'P5 y Start, comprueba las teclas Gosub ledstart_on 'led a on de la tecla Start s5 = 1 'activa la secuencia para la placa remota nº 5 estado = 2 'estado de activacion n_placa = 5 'nombre de la placa relacionada timer5_100ms = 0 'activacion de la base de tiempos del led tecla P5 Gosub tx_trama 'compones y envia la trama de datos Endif If RC0 = 0 And RC4 = 0 Then 'P6 y Start, comprueba las teclas Gosub ledstart_on 'led a on de la tecla Start s6 = 1 'activa la secuencia para la placa remota nº 6 estado = 2 'estado de activacion n_placa = 6 'nombre de la placa relacionada timer6_100ms = 0 'activacion de la base de tiempos del led tecla P6 Gosub tx_trama 'compones y envia la trama de datos Endif If RC1 = 0 And RC4 = 0 Then 'P7 y Start, comprueba las teclas Gosub ledstart_on 'led a on de la tecla Start s7 = 1 'activa la secuencia para la placa remota nº 7 estado = 2 'estado de activacion n_placa = 7 'nombre de la placa relacionada timer7_100ms = 0 'activacion de la base de tiempos del led tecla P7 Gosub tx_trama 'compones y envia la trama de datos Endif If s1 = 1 Or s2 = 1 Or s3 = 1 Or s4 = 1 Or s5 = 1 Or s6 = 1 Or s7 = 1 Then Gosub led_flash 'parpadeo On pause = 50 'carga el pause con una espera de 50mSeg Gosub pause_ms 'espera el valor de pause Gosub ledstop_off 'apaga el led de la tecla Stop If RC4 = 0 Then Gosub ledstart_on 'prende el led de la tecla Start If RC4 = 1 Then Gosub ledstart_off 'apaga el led de la tecla Start Goto main End '--------------------------------------FIN DEL MAIN-------------------------------------------

________________________________________________________________ CRFRLTX y CRFRLRX Ver. 1.1 – By COS - 10/06 [email protected]

11

Page 12: Receptor Transmisor Rf

Control de Reles a Distancia por Radio Frecuencia (RF)_______________________ '--------------------------------------Sub_Rutinas Programa----------------------------------------------- tx_out: 'rutina que deja en reposo las secuencias que se activaron, despues de terminar su ejecucion If s1 = 1 And timer1_100ms >= 100 Then s1 = 0 Endif If s2 = 1 And timer2_100ms >= 100 Then s2 = 0 Endif If s3 = 1 And timer3_100ms >= 100 Then s3 = 0 Endif If s4 = 1 And timer4_100ms >= 100 Then s4 = 0 Endif If s5 = 1 And timer5_100ms >= 100 Then s5 = 0 Endif If s6 = 1 And timer6_100ms >= 100 Then s6 = 0 Endif If s7 = 1 And timer7_100ms >= 100 Then s7 = 0 Endif Return tx_trama: 'transmite la trama PORTC.2 = 0 'activa el Tx checsum = grupo + n_placa + estado 'calcula el checsum pause = 50 'espera 50mSeg, estabiliza el modulo hibrido Gosub pause_ms 'salta a la rutina de pausa Hserout 0, grupo, n_placa, estado, checsum, grupo, n_placa, estado, checsum 'envia la trama doble pause = 50 'carga el pause Gosub pause_ms 'salta a la rutina de espera PORTC.2 = 1 'desactiva el Tx estado = 0 'nuevo estado, reposo n_placa = 0 'placa no operativa, no se ejecutan las posibles ordenes con este numero Return

________________________________________________________________ CRFRLTX y CRFRLRX Ver. 1.1 – By COS - 10/06 [email protected]

12

Page 13: Receptor Transmisor Rf

Control de Reles a Distancia por Radio Frecuencia (RF)_______________________ led1_on: 'activacion de led, pulsador P1 RB1 = 0 Return led2_on: 'activacion de led, pulsador P2 RB2 = 0 Return led3_on: 'activacion de led, pulsador P3 RB3 = 0 Return led4_on: 'activacion de led, pulsador P4 RB4 = 0 Return led5_on: 'activacion de led, pulsador P5 RB5 = 0 Return led6_on: 'activacion de led, pulsador P6 RB6 = 0 Return led7_on: 'activacion de led, pulsador P7 RB7 = 0 Return ledstart_on: 'activacion de led, pulsador Start RC5 = 0 Return ledstop_on: 'prende el led de la tecla Stop RB0 = 0 Return led1_off: 'desactivacion de led, pulsadores P1 RB1 = 1 Return led2_off: 'desactivacion de led, pulsadores P2 RB2 = 1 Return led3_off: 'desactivacion de led, pulsador P3 RB3 = 1 Return led4_off: 'desactivacion de led, pulsador P4 RB4 = 1 Return led5_off: 'desactivacion de led, pulsador P5 RB5 = 1 Return led6_off: 'desactivacion de led, pulsador P6 RB6 = 1 Return led7_off: 'desactivacion de led, pulsador P7 RB7 = 1 Return ledstart_off: 'desactivacion de led, pulsador Start RC5 = 1 Return ledstop_off: 'apaga el led de la tecla Stop RB0 = 1 Return comandos_off: 'paso a estado de reposo de todas las placas n_placa = 16 'todas las placas decodifican este n_placa estado = 0 'reposo Gosub tx_trama 'envia la trama al aire s1 = 0 'se anulan todas las operaciones pendientes de P1 s2 = 0 'se anulan todas las operaciones pendientes de P2 s3 = 0 'se anulan todas las operaciones pendientes de P3 s4 = 0 'se anulan todas las operaciones pendientes de P4 s5 = 0 'se anulan todas las operaciones pendientes de P5 s6 = 0 'se anulan todas las operaciones pendientes de P6 s7 = 0 'se anulan todas las operaciones pendientes de P7 Gosub ledall_off 'se apagan los leds Return

________________________________________________________________ CRFRLTX y CRFRLRX Ver. 1.1 – By COS - 10/06 [email protected]

13

Page 14: Receptor Transmisor Rf

Control de Reles a Distancia por Radio Frecuencia (RF)_______________________ ledall_off: RB1 = 1 'P1 LED OFF RB2 = 1 'P2 LED OFF RB3 = 1 'P3 LED OFF RB4 = 1 'P4 LED OFF RB5 = 1 'P5 LED OFF RB6 = 1 'P6 LED OFF RB7 = 1 'P7 LED OFF RC5 = 1 'START LED OFF Return led_flash: 'controla la cadencia de on/off de los led de las teclas pulsadas If timer_100ms <= 2 Then 'led a on 200mSeg, controla 'el tiempo de parpadeo de los leds If timer1_100ms < 100 Then Gosub led1_on 'led a on mientras el Rx tempriza la maniobra If timer2_100ms < 100 Then Gosub led2_on 'led a on mientras el Rx tempriza la maniobra If timer3_100ms < 100 Then Gosub led3_on 'led a on mientras el Rx tempriza la maniobra If timer4_100ms < 100 Then Gosub led4_on 'led a on mientras el Rx tempriza la maniobra If timer5_100ms < 100 Then Gosub led5_on 'led a on mientras el Rx tempriza la maniobra If timer6_100ms < 100 Then Gosub led6_on 'led a on mientras el Rx tempriza la maniobra If timer7_100ms < 100 Then Gosub led7_on 'led a on mientras el Rx temporiza la maniobra Endif If timer_100ms >= 3 Then 'led a off, 200mSeg If timer1_100ms <= 100 Then Gosub led1_off 'led a on mientras el Rx temporiza la maniobra If timer2_100ms <= 100 Then Gosub led2_off 'led a on mientras el Rx temporiza la maniobra If timer3_100ms <= 100 Then Gosub led3_off 'led a on mientras el Rx tempriza la maniobra If timer4_100ms <= 100 Then Gosub led4_off 'led a on mientras el Rx tempriza la maniobra If timer5_100ms <= 100 Then Gosub led5_off 'led a on mientras el Rx tempriza la maniobra If timer6_100ms <= 100 Then Gosub led6_off 'led a on mientras el Rx tempriza la maniobra If timer7_100ms <= 100 Then Gosub led7_off 'led a on mientras el Rx tempriza la maniobra Endif If timer_100ms >= 5 Then timer_100ms = 0 'reinicia esta base de tiempos, tiempo parpadeo leds Return pause_ms: 'rutina de espera, rutina tipo Waitms, pause establece el tiempo total en mSeg aux_pause = 0 'variable auxiliar lleva la cuenta de los ms timer_1ms = 0 'al borrar el contador se activa y comienza la cuenta de 1mSeg While aux_pause <= pause 'tiempo en mSeg maximos a contar aux_pause = aux_pause + 1 'variable auxiliar lleva la cuenta de los ms If timer_1ms > 0 Then timer_1ms = 0 'al borrar el contador se activa y cuenta 1mSeg While timer_1ms < 1 'espera un milisegundo Wend Wend Return

________________________________________________________________ CRFRLTX y CRFRLRX Ver. 1.1 – By COS - 10/06 [email protected]

14

Page 15: Receptor Transmisor Rf

Control de Reles a Distancia por Radio Frecuencia (RF)_______________________ '--------------------------------------SIBRUTINAS ESPECIALES--------------------------------------------- On Interrupt 'Comienzan las rutinas de las interrupciones

Save System 'Guarda los valores del sistema If PIR1.TMR1IF = 1 Then 'comprueba la interrupcion, 'solo hay de un tipo, no es necesario, se pone por costumbre basetimer_1ms = basetimer_1ms + 1 'base de tiempos raiz If timer_1ms < 1 Then timer_1ms = timer_1ms + 1 'base de tiempos, temporiza un 1msg If basetimer_1ms >= 100 Then 'establece que las siguientes bases de tiempos 'se incrementaran cada 100mSeg If timer_100ms < 5 Then timer_100ms = timer_100ms + 1 'temporiza 0.5Seg If timer1_100ms < 100 Then timer1_100ms = timer1_100ms + 1 'temporiza 10Seg, parpadeo led If timer2_100ms < 100 Then timer2_100ms = timer2_100ms + 1 'temporiza 10Seg, parpadeo led If timer3_100ms < 100 Then timer3_100ms = timer3_100ms + 1 'temporiza 10Seg, parpadeo led If timer4_100ms < 100 Then timer4_100ms = timer4_100ms + 1 'temporiza 10Seg, parpadeo led If timer5_100ms < 100 Then timer5_100ms = timer5_100ms + 1 'temporiza 10Seg, parpadeo led If timer6_100ms < 100 Then timer6_100ms = timer6_100ms + 1 'temporiza 10Seg, parpadeo led If timer7_100ms < 100 Then timer7_100ms = timer7_100ms + 1 'temporiza 10Seg, parpadeo led basetimer_1ms = 0 'reinicia la base timer raiz Endif If RA0 = 0 Then 'Stop PORTC.2 = 0 'activa el tx RB0 = 0 'activa el led de la tecla STOP n_placa = 16 'numero de placa que descodifican todas las placas remotas estado = 0 'reposo checsum = grupo + n_placa + estado 'calculo del checsum Hserout 0, grupo, n_placa, estado, checsum, grupo, n_placa, estado, checsum

'envia la trama de datos Hserout 0, grupo, n_placa, estado, checsum, grupo, n_placa, estado, checsum

'envia la trama de datos Hserout 0, grupo, n_placa, estado, checsum, grupo, n_placa, estado, checsum

'envia la trama de datos Hserout 0, grupo, n_placa, estado, checsum, grupo, n_placa, estado, checsum

'envia la trama de datos PORTC.2 = 1 'desactiva el tx s1 = 0 'terminan todas las acciones relacionadas con la tecla P1 s2 = 0 'terminan todas las acciones relacionadas con la tecla P2 s3 = 0 'terminan todas las acciones relacionadas con la tecla P3 s4 = 0 'terminan todas las acciones relacionadas con la tecla P4 s5 = 0 'terminan todas las acciones relacionadas con la tecla P5 s6 = 0 'terminan todas las acciones relacionadas con la tecla P6 s7 = 0 'terminan todas las acciones relacionadas con la tecla P7 RB1 = 1 'P1 LED OFF RB2 = 1 'P2 LED OFF RB3 = 1 'P3 LED OFF RB4 = 1 'P4 LED OFF RB5 = 1 'P5 LED OFF RB6 = 1 'P6 LED OFF RB7 = 1 'P7 LED OFF RC5 = 1 'START LED OFF Endif TMR1H = 0xf8 'recarga el contador del timer1 para que desborde pasado 1mSeg, byte alto TMR1L = 0x30 'recarga el contador del timer1 para que desborde pasado 1mSeg, byte bajo PIR1.TMR1IF = 0 'borra el flag de salto del tmr1 Endif Resume End

________________________________________________________________ CRFRLTX y CRFRLRX Ver. 1.1 – By COS - 10/06 [email protected]

15

Page 16: Receptor Transmisor Rf

Control de Reles a Distancia por Radio Frecuencia (RF)_______________________ El programa del Rx: '***************** CONTROL DE RELES A DISTANCIA POR RF *************************************** 'NOMBRE:16F88_CRFRLRX 'MICRO: PIC16F88/8Mhz reloj interno 'Version/Autor: 1.0/By COS 11.06 'DESCRIPCION: modulo receptor de datos por Radio Frecuencia 'al conectar la placa enciendo led de estado durante 1 seg 'estado=0, 2,9Seg a off y 0.1seg a on, si el n_placa=0 o despues de una trama de stop 'estado=1, 1.3seg a off y 0.6 a on, n_placa comprendida entre 1 y 7 (OK en espera de trama) 'estado=3, '0,2 segundos a off y 0,2 seg a on durante 10Seg antes de activar el rele durante 100mSeg 'despues de recibir trama correcta led a on durante 1Seg. 'tiempo de lectura entre byte y byte del bufer serie 10mseg maximo y un milisegundo minimo 'Version 1.1, se activa una entrada digital para comprobar que los contactos del rele 'no tienen tension durante el arranque del circuito 'al energizar la placa led de estado a on si hay tension en los contactos del rele, 'y la placa queda fuera de servicio '************************************************************************************************ '-------------------------------------PUERTOS DEFINIDOS POR EL SISTEMA---------------------------- '-------------------------------------Puertos del LCD--------------------------------------------- '--------------------------------------DEFINICION DE VARIABLES------------------------------------- '-------------------------------------Variables sub_rutinas del puerto serie--------------------- Dim assii As Byte 'Contiene el valor de lectura del puerto serie Dim n_usart As Byte 'Numero de datos del USART y del bufer IMAGEN de control Dim usart As Byte 'Variable indice que apunta al ultimo dato adquirido por la USART Dim aux_usart As Byte 'Auxiliar de la variable indice usart del USART Dim c_serial As Byte 'Como USART pero para la lectura de control del bufer IMAGEN Dim bufer As Byte 'Indica si hay datos por leer en el bufer USART '-------------------------------------Variables del contador del TIMER1---------------------------- Dim pause As Word 'contiene el valor para simular el comando Waitms Dim aux_pause As Word 'variable auxiiar Dim basetimer_1ms As Byte 'base de tiempos raiz Dim timer_1ms As Word 'base de tiempos se incrementa cada 1mSeg Dim timer_100ms As Byte 'base de tiempos se incrementan cada 100mSeg Dim timer1_100ms As Byte 'base de tiempos 1 se incrementan cada 100mSeg Dim timer2_100ms As Byte 'base de tiempos 2 se incrementan cada 100mSeg Dim timer3_100ms As Byte 'base de tiempos 3 se incrementan cada 100mSeg Dim timer4_100ms As Byte 'base de tiempos 4 '--------------------------------------Variables Programa------------------------------------------ Dim arranque As Byte 'arranque, estabiliza el bit de bajada (no se contabiliza) Dim grupo As Byte 'byte de sincronismo (grupo de trabajo) Dim n_placa As Byte 'nombre de la placa Dim checsum As Byte 'chesun calculado por el micro que le pertenece a la trama recibida Dim w_posrx As Byte 'Tiempo entre lectura y lectura del bufer Dim rd_grupo As Byte 'byte del nombre de la red a la que se le envia la trama Dim rd_n_placa As Byte 'numero de la placa a la que se refiere la trama Dim rd_checsum As Byte 'control de error que suministra la trama Dim rd_estado As Byte 'modo de actuacion obtenido de la trama de datos Dim estado As Byte 'asigna el estado de la placa, 0=deshabilitada, 1=habilitada, 2 y 3 modo de activacion del rele Dim n As Byte 'variable auxiliar para las rutinas del programa '------------------------------------VARIABLES tipo array programa---------------------------------- '------------------------------------VARIABLES tipo array sub_rutinas------------------------------- '------------------------------------Variables tipo array puerto serie---------------------------------- Dim usart_imagen(81) As Byte 'Componen el bufer IMAGEN para control del bufer USART, 'apuntador que nos indica que registros tienen datos de usart_bufer Dim usart_bufer(81) As Byte 'Componen el bufer de la USART de bajo nivel, contiene los bytes recibidos

________________________________________________________________ CRFRLTX y CRFRLRX Ver. 1.1 – By COS - 10/06 [email protected]

16

Page 17: Receptor Transmisor Rf

Control de Reles a Distancia por Radio Frecuencia (RF)_______________________ '-----------------------------------------------ASIGNACIONES---------------------------------------- '-------------------------------------Asigna valores a las variables de la rutina del puerto serie-- usart = 0 aux_usart = 0 c_serial = 0 bufer = 0 n_usart = 80 assii = 0 '-------------------------------------Asigna valores a las variables del TIMER1--------------------- aux_pause = 0 pause = 0 basetimer_1ms = 0 timer_1ms = 0 timer_100ms = 0 timer1_100ms = 0 timer2_100ms = 0 timer3_100ms = 0 timer4_100ms = 0 '--------------------------------------asignacion de valores generales----------------------------- arranque = 0 grupo = 255 n_placa = 0 estado = 0 w_posrx = 10 '10mSeg rf, se espera un maximo de tiempo antes de leer el bufer si no hay datos '--------------------------------------DEFINICION DE PUERTOS------------------------------------------------ '--------------------------------ASIGNACION DE I/O y valores de inicio de las salidas---------------------- ANSEL = 0x00 'los pin I/O digitales (no analogicos) OSCCON = 0x7e 'set intrc To 8mhz CMCON = 0x07 'comparador a off TRISA = 0xff 'Puerto A como entradas digitales TRISA.5 = 0 'como salida TRISB = 0x00 'puerto B como salidas PORTB.4 = 0 'entrega negativo al rele, activa a 1 PORTB.6 = 1 'entrega positivo al rele, activa a 0 PORTB.7 = 0 'ilunina el led de estado, 1 iluminado '------------------------------------fallo placa----------------------------------------------------- WaitMs 500 'pausa para estabilizar la entrada If RA4 = 1 Then Goto fallo 'si hay tension en los contactos durante el arranque se bloquea el circuito '------------------------------------INICIO DEL PUERTO SERIE, TIMER E INTERRUPCONES------------------ Hseropen 1200 'Velocidad del puerto serie e inicializa los comandos de bajo nivel que controlan la USART INTCON.PEIE = 1 'bit de habilitacion de interrupciones de perifericos(USART), para que funcione la implementación P. SERIE PIE1.RCIE = 1 'Activa la interrupcion de la USART en modo rx T1CON.TMR1ON = 1 'Configuracion y habilitacion del TMR1 T1CON.TMR1CS = 0 'reloj principal para el timer1 T1CON.T1CKPS0 = 0 'sin preescales T1CON.T1CKPS1 = 0 'sin preescales TMR1H = 0xf8 'desbordamiento del timer1 cada 1ms, byte alto TMR1L = 0x30 'desbordamiento del timer1 cada 1ms, byte bajo PIE1.TMR1IE = 1 'activacion del timer1 Enable ' INTCON.GIE habilita todas las interrupciones globales

________________________________________________________________ CRFRLTX y CRFRLRX Ver. 1.1 – By COS - 10/06 [email protected]

17

Page 18: Receptor Transmisor Rf

Control de Reles a Distancia por Radio Frecuencia (RF)_______________________ '--------------------------------------Inicio Programa-------------------------------------------------- pause = 10 'carga el tiempo de espera Gosub pause_ms 'espera el valor del pause n_placa.0 = PORTA.0 'bits seleccion del numero de la placa, 'cero placa deshabilitada, nº 16 comun a todas las placas n_placa.1 = PORTA.1 n_placa.2 = PORTA.2 n_placa.3 = PORTA.3 If n_placa = 0 Then estado = 0 'asigna el estado de la placa segun el numero de la placa, deshabilitada If n_placa > 7 Then estado = 0 'deshabilitada If n_placa > 0 And n_placa < 8 Then estado = 1 'habilitada Gosub off_led 'asegura led apagado Gosub off_rele 'asegura rele desconectado Gosub clear_bufer 'Borra el BUFER IMAGEN y por lo tanto tambien al USART, OBLIGATORIO POR LO MENOS UNA VEZ pause = 500 'pausa de 0.5 Seg Gosub pause_ms 'espera el valor cargado en pause '--------------------------------------Main Programa---------------------------------------------------- main: If RCSTA.OERR = 1 Then 'testea posible bloqueo del puerto fisico en modo Rx Gosub clear_bufer 'borra el bufer por soft del puerto serie de entrada Endif If n_placa > 0 And n_placa <= 16 And bufer = 1 Then 'verifica que el n_placa es correcto y comprueba el bufer Gosub recibo_comando 'salta a la rutina de lectura del bufer serie Endif If n_placa = 0 Then 'la placa queda en reposo estado = 0 'la placa queda en reposo Gosub off_rele 'rele apagado Endif If estado = 0 Then 'la placa queda en reposo Gosub off_rele 'rele apagado Endif If estado = 1 Then 'la placa queda en reposo Gosub off_rele 'rele apagado Endif If estado = 2 Then 'se inicia la secuencia de activacion Gosub off_rele 'rele apagado estado = 3 'permite que se active el rele timer_100ms = 0 'activa el timer_100ms, 10Seg antes de activar el rele Endif If estado = 3 And timer_100ms >= 100 Then 'activa el rele durante 100mSEg despues de terminar timer_100ms timer_100ms = 0 'se inicializa timer_100ms Gosub on_rele 'activa rele estado = 0 'estado despues de la activacion o anulacion de secuencia pause = 100 'carga la rutina del pause Gosub pause_ms 'espera el valor del pause Gosub off_rele 'desconecta el rele Endif Goto main End '--------------------------------------FIN DEL MAIN---------------------------------------------------

________________________________________________________________ CRFRLTX y CRFRLRX Ver. 1.1 – By COS - 10/06 [email protected]

18

Page 19: Receptor Transmisor Rf

Control de Reles a Distancia por Radio Frecuencia (RF)_______________________ '--------------------------------------Sub_Rutinas Programa----------------------------------------------- on_led: PORTB.7 = 1 'enciende el led Return off_led: PORTB.7 = 0 'apaga el led Return on_rele: 'activa el rele If estado = 3 Then PORTB.6 = 0 PORTB.4 = 1 Endif estado = 0 Return off_rele: 'desactiva el rele PORTB.6 = 1 PORTB.4 = 0 Return fallo: 'bloque el programa PORTB.6 = 1 'apaga el rele, bit 1 PORTB.4 = 0 'apaga el rele, bit 2 RB7 = 1 'prende el led de estado fijo Goto fallo Return '-------------------------------Lectura de la trama de datos recibida por el bufer serie------------------ recibo_comando: 'confecciona la trama Gosub readserial 'lee un byte almacenado en el bufer del puerto serie If assii = grupo Then 'establece la cabecera y sincroniza la trama rd_grupo = assii Gosub readserial rd_n_placa = assii Gosub readserial rd_estado = assii Gosub readserial rd_checsum = assii checsum = rd_grupo + rd_n_placa + rd_estado 'calculo el checsum con los valores recibidos If rd_checsum = checsum Then 'actualizo los valores de las salidas si el checsum recibido es correcto If rd_estado >= 8 Then estado = 1 'se pasa a estado de espera If rd_n_placa = n_placa Then estado = rd_estado 'se establece el estado recibido If rd_n_placa = 16 Then estado = 0 'se pasa a estado cero timer4_100ms = 0 'se activa la base de tiempos que nos modificara el parpadeo 'del led para indicar que se recibio una trama correctamente Endif Endif Return

________________________________________________________________ CRFRLTX y CRFRLRX Ver. 1.1 – By COS - 10/06 [email protected]

19

Page 20: Receptor Transmisor Rf

Control de Reles a Distancia por Radio Frecuencia (RF)_______________________ '--------------------------------------SIBRUTINAS ESPECIALES--------------------------------------------- On Interrupt 'Comienzan las rutinas de las interrupciones Save System 'Guarda los valores del sistema '--------------------------------------RUTINA TIMER_1---------------------------------------------------- T1CON.TMR1ON = 0 'deshabilitacion del TMR1 PIE1.RCIE = 0 'desactiva la interrupcion de la USART en modo rx If PIR1.TMR1IF = 1 Then 'comprueba que es esta la interrupcion activa basetimer_1ms = basetimer_1ms + 1 'base de tiempos patron If timer_1ms < 1 Then timer_1ms = timer_1ms + 1 'se utiliza para hacer temporizaciones en pasos de 1ms If basetimer_1ms >= 100 Then 'establece pasos de 100mseg para las otras bases de tiempos If timer4_100ms < 10 Then 'solo se activa cuando se recibe una trama de datos con exito timer4_100ms = timer4_100ms + 1 'varia la longit del parpadeo del led, al recibir trama PORTB.7 = 1 'enciende el led de control If timer_100ms < 100 Then timer_100ms = timer_100ms + 1

'10seg, actualiza y controla base de tiempos If timer1_100ms < 30 Then timer1_100ms = timer1_100ms + 1

'3seg, actualiza y controla base de tiempos If timer2_100ms < 20 Then timer2_100ms = timer2_100ms + 1

'2seg, actualiza y controla base de tiempos If timer3_100ms < 4 Then timer3_100ms = timer3_100ms + 1

'0.4seg, actualiza y controla base de tiempos Goto fin 'al recibir una trama de datos valida se salta a fin Endif If timer_100ms < 100 Then timer_100ms = timer_100ms + 1 'actualiza y controla base de tiempos If timer1_100ms < 30 Then timer1_100ms = timer1_100ms + 1 'act. y controla base de tiempos If timer2_100ms < 20 Then timer2_100ms = timer2_100ms + 1 'act. y controla base de tiempos If timer3_100ms < 4 Then timer3_100ms = timer3_100ms + 1 'act. y controla base de tiempos If estado = 0 Then 'segun el estado se varia la longitud y velocidad del parpadeo del led If timer1_100ms > 29 Then '2,9Seg a off y 0.1seg a on PORTB.7 = 1 'prende el led indicador del estado If timer1_100ms >= 30 Then timer1_100ms = 0 'reinicializa base de tiempos Else PORTB.7 = 0 'apaga el led indicador del estado Endif Endif If estado = 1 Then 'segun el estado se varia la longitud y velocidad del parpadeo del led If timer2_100ms > 13 Then '1.3seg a off y 0.6 a on PORTB.7 = 1 'prende el led de estado If timer2_100ms >= 20 Then timer2_100ms = 0 'reiniciliza la base tiempos Else PORTB.7 = 0 'apaga el led de estado Endif Endif If estado = 3 Then 'segun el estado se varia la longitud y velocidad del parpadeo del led If timer3_100ms > 2 Then '0,2 segundos a off y 0,2 seg a on PORTB.7 = 1 'prende el led de estado If timer3_100ms >= 4 Then timer3_100ms = 0 'reinicializa la base tiempos Else PORTB.7 = 0 'apaga el led de estado Endif Endif fin: basetimer_1ms = 0 'la reinicializa Endif TMR1H = 0xf8 'carga el timer1 para que desborde 1mseg, byte higt TMR1L = 0x30 'carga el timer1 para que desborde 1mseg, byte low Endif '--------------------------------------BUFER PUERTO SERIE----------------------------------------------- If PIR1.RCIF = 1 Then 'comprueba que es esta la interrupcion activa If usart < n_usart Then 'comprueba que el bufer de entrada no esta lleno If usart_imagen(usart) = 0 Then 'comprueba que la posicion esta vacia aux_usart = usart 'retiene la posicion antigua del bufer usart = usart + 1 'indica cual sera la posicion siguiente del bufer usart_imagen(aux_usart) = 1 'indica que hay dato en el bufer de entrada bufer = 1 'indica que el bufer tiene datos Hserget usart_bufer(aux_usart) ' carga el dato en el bufer Else

Hserget usart_bufer(n_usart) 'descarga la usart para que no se bloquee porque el bufer 'de entrada esta lleno

Endif Else If usart_imagen(0) = 0 Then 'comprueba que esta vacia la primera posicion del bufer usart_imagen(0) = 1 'marca que hay dato en esa posicion del bufer bufer = 1 'marca que el bufer tiene datos usart = 1 'establece la proxima posicion del bufer Hserget usart_bufer(0) 'lee la usart y guarda el dato en el bufer

________________________________________________________________ CRFRLTX y CRFRLRX Ver. 1.1 – By COS - 10/06 [email protected]

20

Page 21: Receptor Transmisor Rf

Control de Reles a Distancia por Radio Frecuencia (RF)_______________________ Else Hserget usart_bufer(n_usart) 'descarga la usart porque el bufer esta lleno Endif Endif Endif PIR1.TMR1IF = 0 'borra el flag de salto del tmr1 PIR1.RCIF = 0 'borra el flag de salto de la usart PIE1.RCIE = 1 'activa la interrupcion de la USART en modo rx T1CON.TMR1ON = 1 'habilitacion del TMR1 Resume pause_ms: 'rutina de espera, rutina tipo Waitms, pause establece el tiempo total en mSeg aux_pause = 0 'variable auxiliar lleva la cuenta de los ms timer_1ms = 0 'al borrar el contador se activa y comienza la cuenta de 1mSeg While aux_pause <= pause 'tiempo en mSeg maximos a contar aux_pause = aux_pause + 1 'variable auxiliar lleva la cuenta de los ms If timer_1ms > 0 Then timer_1ms = 0 'al borrar el contador se activa y cuenta 1mSeg While timer_1ms < 1 'espera un milisegundo Wend Wend Return '------------------------------ rutinas para el control del bufer del puerto serie------------- pause_ms_rx: 'rutina de espera antes de leer el bufer, rutina tipo Waitms, w_posrx establece el tiempo total en mSeg aux_pause = 0 'variable auxiliar lleva la cuenta de los ms timer_1ms = 0 'al borrar el contador se activa y comienza la cuenta de 1mSeg While aux_pause <= w_posrx 'tiempo en mSeg maximos a contar If bufer > 0 Then aux_pause = w_posrx 'si entran datos en el bufer se termina el contaje aux_pause = aux_pause + 1 'variable auxiliar lleva la cuenta de los ms If timer_1ms > 0 Then timer_1ms = 0 'al borrar el contador se acitva y cuenta 1mSeg While timer_1ms < 1 'espera un milisegundo Wend Wend Return readserial: 'RUTINA DE LECTURA DEL BUFER DEL PUERTO SERIE (ASSII) Gosub pause_ms_rx 'valor de entrada en mSeg de espera definido por w_posrx assii = 0 ' se borra el valor de assi, no se debe de utilizar cero como un valor de control If bufer = 1 Then 'si bufer tiene datos assii = usart_bufer(c_serial) 'se lee el valor del bufer y se asigna assi usart_imagen(c_serial) = 0 'se marca como leida para que pueda ser llenada de nuevo c_serial = c_serial + 1 'se incrementa el indice del bufer If c_serial >= n_usart Then c_serial = 0 'se verifica si se llego al final del bufer If usart_imagen(c_serial) = 0 Then bufer = 0 'si no quedan mas datos en el bufer se marca como vacio Endif Return clear_bufer: For n = 0 To 1 'desbloquea el puerto serie fisico en caso de bloqueo por exceso de entrada de datos T1CON.TMR1ON = 0 'bloquea timer1 PIE1.RCIE = 0 'deshabilita la interrupcion del modulo serie RCSTA.CREN = 0 'protocolo de desbloqueo puerto serie RCSTA.CREN = 1 'protocolo de desbloqueo puerto serie RCSTA.OERR = 0 'protocolo de desbloqueo puerto serie Next n Gosub clearbufer 'borra el bufer por soft de los datos recibidos por el puerto serie PIR1.TMR1IF = 0 'borra el flag de salto del tmr1 PIR1.RCIF = 0 'borra el flag de salto de la usart PIE1.RCIE = 1 'activa la interrupcion de la USART en modo rx T1CON.TMR1ON = 1 'habilitacion del TMR1 Return clearbufer: 'BORRA E INICIALIZA EL BUFER IMAGEN DEL PUERTO SERIE For c_serial = 0 To n_usart 'pasa por cada uno de los bytes del bufer usart_imagen(c_serial) = 0 'borra bytes del bufer apuntador,

'que nos indica si esa posición del bufer tiene datos Next c_serial 'repite hasta el total del bufer c_serial = 0 'borra el contador usart = 0 'borra variable de control bufer = 0 'borra variable de control, a 1 indica que hay datos en el bufer de entrada assii = 0 'borra el ultimo caracter leido Return END

________________________________________________________________ CRFRLTX y CRFRLRX Ver. 1.1 – By COS - 10/06 [email protected]

21