Autor Tema: ayuda para RX DATOS por RS232  (Leído 2055 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado LEONARDO_59

  • PIC10
  • *
  • Mensajes: 9
ayuda para RX DATOS por RS232
« en: 02 de Enero de 2008, 18:44:24 »
Amigos, tengo este programa, pero aun no he podido RX datos por puerto serial, puedo TX sin problemas y a muchos les puede ayudar, pero quiero saber si alguien puede apoyarme con la parte de la RX de datos, necesito  que reciba los datos y active el PORTA,1 ... les envio el programita por si alguien puede ayudarme

;PROGRAMA

            LIST              p=16f877
            INCLUDE          "p16f877.inc"
;------------------------------------------------------------------
 
dato_serie   EQU   0x01   ; dato serie desde la PC
;------------------------------------------------------------------

            ORG     0000h
            goto    inicio

inicio
            ORG     20h

;Configurar el puerto B y A como salida RB7 y RA0
;y como entradas RB0,RB1,RB4 y RB5

            bsf       STATUS,RP0
            bsf       TRISB,0
            bsf       TRISB,1
         bsf        TRISB,4
         bsf        TRISB,5
         bcf        TRISA,1   
            bcf       TRISB,7
            bcf       STATUS,RP0

programa
                        call              sg1          ; Subrutina para hacer sonar dos veces la
                                                       ; chicharra
                        call           sg60           ; retardo de 60 segundos.
programa1
                        movlw             04h                  ; muevo el nº 04h al W.
                        movwf             06h                  ; muevo W al registro 11h
                  btfss           PORTB,0
                  goto           comprueba1
                  btfss           PORTB,1
                  goto           comprueba2
                  btfss           PORTB,4
                  goto           comprueba3
                  btfss           PORTB,5
                  goto           comprueba4
                  call           ACTIV_DESAC
comprueba1   
                        btfsc             PORTB,0          ; compruebo si el sensor 0 está activo o no
                        goto              cuatro1           ; salto incondicional a la etiqueta “cuatro1”
                                                               ; para comprobar 4 veces si está activado el
                                                               ; sensor 0 conectado a RB0
                  bcf               PORTB,7          ; pongo a cero RB7, o sea, apago la chicharra
                                                               ; si no está activado el sensor 0
comprueba2
                        btfsc             PORTB,1           ; compruebo si el sensor 1 está activo o no
                        goto              cuatro2           ; salto incondicional a la etiqueta “cuatro2”
                                                               ; para comprobar 4 veces si está activado el
                                                               ; sensor 1 conectado a RB1
                        bcf               PORTB,7          ; pongo a cero RB7, o sea, apago la chicharra
                                                               ; si no está activado el sensor 1
comprueba3   
                        btfsc             PORTB,4          ; compruebo si el sensor 0 está activo o no
                        goto              cuatro3           ; salto incondicional a la etiqueta “cuatro3”
                                                               ; para comprobar 4 veces si está activado el
                                                               ; sensor 0 conectado a RB4
                  bcf               PORTB,7          ; pongo a cero RB7, o sea, apago la chicharra
                                                               ; si no está activado el sensor 0
comprueba4
                        btfsc             PORTB,5           ; compruebo si el sensor 1 está activo o no
                        goto              cuatro4           ; salto incondicional a la etiqueta “cuatro4”
                                                               ; para comprobar 4 veces si está activado el
                                                               ; sensor 1 conectado a RB5
                        bcf               PORTB,7          ; pongo a cero RB7, o sea, apago la chicharra
                                                               ; si no está activado el sensor 1
comprueba5
                  btfsc            dato_serie,0         ; se fija si hay dato RS232
                  call           ACTIV_DESAC      ; resetea la alarma y la desactiva para
                                             ; cualquier requerimiento
                  bcf              PORTB,7         ; pongo a cero RB7, o sea, apago la chicharra
                                                               ; si no está activado el sensor 1
                        movlw             04h                  ; cargo con el nº 04h el W
                        movwf             06h                  ; cargo el registro 11h con W
                        goto              comprueba1        ; salto incondicional a la etiqueta
                                             ; “comprueba1”
cuatro1           
                        call              sg120             ; suena una vez la chicharra retardo de 120 segundos
                  decfsz            06h,1             ; decrementa el registro 11h y si vale cero salta
                        btfsc             PORTB,0          ; compruebo si el sensor 0 está activo o no
                        call              datos
                  call              buzzer120
cuatro2
                        call              datos
                  decfsz            06h,1             ; decrementa el registro 11h y si vale cero salta           
                        btfsc             PORTB,1           ; compruebo si el sensor 1 está activo o no
                  call              buzzer120
cuatro3
                        call              datos
                  decfsz            06h,1             ; decrementa el registro 11h y si vale cero salta           
                        btfsc             PORTB,4           ; compruebo si el sensor 1 está activo o no
                  call              buzzer120
cuatro4
                        call              datos
                  decfsz            06h,1             ; decrementa el registro 11h y si vale cero salta           
                        btfsc             PORTB,5           ; compruebo si el sensor 1 está activo o no
                  call              buzzer120
;--------------------------------------------
;Tx de Datos
;--------------------------------------------
datos
   bsf      STATUS,RP0   ; Banco-1
   movlw   .25
   movwf   SPBRG      ; Vtx = 9600bps
   movlw   B'00100100'
   movwf   TXSTA      ; Tx = 8 bits / TX-ON / BRGH=1
   bcf      STATUS,RP0   ; Banco-0
   bsf      RCSTA,SPEN   ; SPEN=1
    btfsc   PORTB,0     ; compruebo si el sensor 0 está activo o no
    goto    DATOS1      ; salto incondicional a la etiqueta “DATOS1”
    btfsc   PORTB,1     ; compruebo si el sensor 1 está activo o no
    goto    DATOS2      ; salto incondicional a la etiqueta “DATOS2”
   btfsc   PORTB,4     ; compruebo si el sensor 4 está activo o no
    goto    DATOS3      ; salto incondicional a la etiqueta “DATOS3”
    btfsc   PORTB,5     ; compruebo si el sensor 5 está activo o no
    goto    DATOS4      ; salto incondicional a la etiqueta “DATOS4”
;-----------------------------------------------
DATOS1
   movlw    '#'
   call   TX_DATO
   movlw   'I'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   movlw    '0'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   movlw   '1'
   call   TX_DATO
   return
;-----------------------------------------------
DATOS2
   movlw    '#'
   call   TX_DATO
   movlw   'M'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   movlw    '0'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   movlw   '1'
   call   TX_DATO
   return
;-----------------------------------------------
DATOS3
   movlw    '#'
   call   TX_DATO
   movlw   'C'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   movlw    '0'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   movlw   '1'
   call   TX_DATO
   return
;-----------------------------------------------
DATOS4
   movlw    '#'
   call   TX_DATO
   movlw   'V'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   movlw    '0'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   movlw   '1'
   call   TX_DATO
   return
;-----------------------------------------------
TX_DATO
   bsf      STATUS,RP0   ; Banco-1
   btfss   TXSTA,TRMT   ; ¿Buffer vacio?
   goto   $-1         ; .NO
   bcf      STATUS,RP0   ; Banco-0
   movwf   TXREG      ; Inicia Tx
   clrf   TXREG
   return
;------------------------------------------------
; ESTADO ALARMA
;------------------------------------------------
ACTIV_DESAC
   bsf      STATUS,RP0   ; Banco-1
   movlw   .25
   movwf   SPBRG      ; Vtx = 9600bps
   movlw   B'00100100'
   movwf   TXSTA      ; Tx = 8 bits / TX-ON / BRGH=1
   bcf      STATUS,RP0   ; Banco-0
   movlw   B'10010000'
   movwf   RCSTA
    bsf      RCSTA,SPEN   ; SPEN=1
   goto   recibeRS232
;------------------------------------------------------------------------------
recibeRS232
   btfss   PIR1,RCIF   ; se fija si hay dato RS232
   movf    RCREG,W    ; guarda dato recibido en W
   movwf   dato_serie
   btfss   dato_serie,0
   call   msg_activa
   btfsc   dato_serie,0
   call   msg_desactiva
   return
;------------------------------------------------------------------------
msg_activa
      goto   ACTIVADA
   return
;------------------------------------------------------------------------
msg_desactiva
   goto    DESACTIVADA      ; salto incondicional a la etiqueta “DESACTIVADA”
   bsf      PORTA,1         ; RA1 es '1'
;-------------------------------------------------
ACTIVA
   movlw    '#'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   movlw    '0'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   movlw   '1'
   call   TX_DATO
   return
;-------------------------------------------------
DESACTIVA
   movlw    '#'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   movlw    '0'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   return
;---------------------------------------------
;Subrutinas de la chicharra (buzzer)
;---------------------------------------------
buzzer1
            bsf       PORTB,7
            call      sg1
            bcf       PORTB,7
            return
buzzer2
            bsf       PORTB,7
            call      sg1
            bcf       PORTB,7
            call      sg1
            bsf       PORTB,7
            call      sg1
            bcf       PORTB,7
            return
buzzer120
            bsf       PORTB,7
            call      sg120
            bcf       PORTB,7
         btfss     PORTB,7
         bsf        PORTA,1
;---------------------------------
;Subrutinas de retardos.
;---------------------------------
sg1
            movlw             0ffh
            movwf             0ch
            movlw             0ffh
            movwf             0dh
            movlw             05h
            movwf             0eh
repite
            decfsz            0ch,1
            goto              repite
            decfsz            0dh,1
            goto              repite
            decfsz            0eh,1
            goto              repite
            return
;---------------------------------------
sg2
         clrw
            movlw             0ffh
            movwf             20h
            movlw             0ffh
            movwf             21h
            movlw             05h
            movwf             22h
repite2
            decfsz            20h,1
            goto              repite2
            decfsz            21h,1
            goto              repite2
            decfsz            22h,1
            goto              repite2
            return
;------------------------------------------
;Retardo de 60 segundos.
;Incrementaremos un registro, 10h, cargado
;con el nº C3h hasta llegar a 00h (60 veces)
;-------------------------------------------
sg60
            movlw             0c3h
            movwf             10h
            call              sg1
            incfsz            10h,1
            return
;--------------------------------------------
;Retardo de 120 segundos.
;Incrementaremos un registro, 10h, cargado
;con el nº C3h hasta llegar a 00h (60 veces)
;-------------------------------------------
sg120
            movlw             0c3h
            movwf             10h
otro120
            call              sg2
            incfsz            10h,1
         goto           otro120
            return
end
LEONARDO_59

Desconectado gustavorambo

  • PIC10
  • *
  • Mensajes: 7
Re: ayuda para RX DATOS por RS232
« Respuesta #1 en: 10 de Enero de 2008, 00:53:43 »
;Configurar el puerto B y A como salida RB7 y RA0
;y como entradas RB0,RB1,RB4 y RB5

            bsf       STATUS,RP0
            bsf       TRISB,0
            bsf       TRISB,1
         bsf        TRISB,4
         bsf        TRISB,5
         bcf        TRISA,1   
            bcf       TRISB,7
            bcf       STATUS,RP0





en esta parte  veo que no configuraste bien
"  bcf        TRISA,1   "


acoso no tiene que ser
 " bcf        TRISA,0   "

Desconectado gustavorambo

  • PIC10
  • *
  • Mensajes: 7
Re: ayuda para RX DATOS por RS232
« Respuesta #2 en: 10 de Enero de 2008, 00:58:43 »
recibeRS232
   btfss   PIR1,RCIF   ; se fija si hay dato RS232
   movf    RCREG,W    ; guarda dato recibido en W
   movwf   dato_serie
   btfss   dato_serie,0
   call   msg_activa
   btfsc   dato_serie,0
   call   msg_desactiva
   return

este es lo que escriviste
si entiendo bien en ambos casos si ah recibido o no guarda un dato en "dato_serie"

Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3227
Re: ayuda para RX DATOS por RS232
« Respuesta #3 en: 10 de Enero de 2008, 01:16:46 »

Hola

Para poder recibir datos necesitas configurar el pin como entrada como bien te dicen en el post anterior.

Otra cosa , cuantos datos deberias recibir, porque puedes tener un buffer de 2 bytes y el tercero que entrara se perderia.


recibeRS232
   btfss   PIR1,RCIF   ; se fija si hay dato RS232
   movf    RCREG,W    ; guarda dato recibido en W
   movwf   dato_serie
   btfss   dato_serie,0
   call   msg_activa
   btfsc   dato_serie,0
   call   msg_desactiva
   return





ESPERA_DATO

       btfss PIR1,RCIF                      ; espera hasta tener dato completo
        goto ESPERA_DATO     
       movf dato_serie
       tu demás código
        .
        .
        .
      return

Saludos

  Atentamente
   Akenafab



Desconectado LEONARDO_59

  • PIC10
  • *
  • Mensajes: 9
Re: ayuda para RX DATOS por RS232
« Respuesta #4 en: 25 de Enero de 2008, 00:07:09 »
Gracias por sus respuestas, en lo que respecta a la configuraciòn del pin A0, tuve un error al tipeo  de la explicaciòn inicial, si ven todo el programa el pin que configuro es siempre el A1

Lo que no me queda claro es lo de la cantidad de bytes que recibirìa el buffer, en este caso es solo uno para cada opcion, les adjunto el programa que funciona bien ahora.....

Si pueden darme una manito con lo que es la posibilidad de que se reciba un dato completo en el buffer,
por ejem. PLACA-LKM420... todo este texto que sea recibido en un solo bloque

;PROGRAMA

            LIST              p=16f877
            INCLUDE          "p16f877.inc"

         CBLOCK   0x20
               count1
               count2
               count3
         ENDC
;------------------------------------------------------------------
dato_serie   EQU   01h   ; dato serie desde la PC
;------------------------------------------------------------------

            ORG     0000h
            goto    inicio

inicio
            ORG     20h

;Configurar el puerto B y A como salida RB7 y RA0
;y como entradas RB0,RB1,RB4 y RB5

            bsf       STATUS,RP0
            bsf       TRISB,0
            bsf       TRISB,1
         bsf        TRISB,4
         bsf        TRISB,5
         bcf        TRISA,1   
            bcf       TRISB,7
            bcf       STATUS,RP0

programa
                        call              sg1                   ; Subrutina para hacer sonar dos veces la
                                                                ; chicharra
                        call           sg60                 ; retardo de 60 segundos.
programa1
                        movlw             04h                  ; muevo el nº 04h al W.
                        movwf             06h                     ; muevo W al registro 06h
                  call           msg_activa
comprueba1
                  btfsc           PORTB,0
                  call           sg120                ; suena una vez la chicharra retardo de 120 segundos
                        btfsc             PORTB,0                ; compruebo si el sensor 0 está activo o no
                        goto              cuatro1              ; salto incondicional a la etiqueta “cuatro1”
                                                               ; para comprobar 4 veces si está activado el
                                                               ; sensor 0 conectado a RB0
                  bcf               PORTB,7                ; pongo a cero RB7, o sea, apago la chicharra
                                                               ; si no está activado el sensor 0
comprueba2
                        btfsc             PORTB,1              ; compruebo si el sensor 1 está activo o no
                        goto              cuatro2              ; salto incondicional a la etiqueta “cuatro2”
                                                               ; para comprobar 4 veces si está activado el
                                                               ; sensor 1 conectado a RB1
                        bcf               PORTB,7                ; pongo a cero RB7, o sea, apago la chicharra
                                                               ; si no está activado el sensor 1
comprueba3   
                        btfsc             PORTB,4          ; compruebo si el sensor 0 está activo o no
                        goto              cuatro3           ; salto incondicional a la etiqueta “cuatro3”
                                                               ; para comprobar 4 veces si está activado el
                                                               ; sensor 0 conectado a RB4
                  bcf               PORTB,7          ; pongo a cero RB7, o sea, apago la chicharra
                                                               ; si no está activado el sensor 0
comprueba4
                        btfsc             PORTB,5           ; compruebo si el sensor 1 está activo o no
                        goto              cuatro4           ; salto incondicional a la etiqueta “cuatro4”
                                                               ; para comprobar 4 veces si está activado el
                                                               ; sensor 1 conectado a RB5
                        bcf               PORTB,7          ; pongo a cero RB7, o sea, apago la chicharra
                                                               ; si no está activado el sensor 1
comprueba5
                  btfsc           PIR1,RCIF         ; se fija si hay dato RS232
                  call           ACTIV_DESAC      ; resetea la alarma y la desactiva para
                                             ; cualquier requerimiento
                  bcf              PORTB,7         ; pongo a cero RB7, o sea, apago la chicharra
                                                               ; si no está activado el sensor 1
                        movlw             04h                  ; cargo con el nº 04h el W
                        movwf             06h                  ; cargo el registro 06h con W
                        goto              comprueba1        ; salto incondicional a la etiqueta
                                             ; “comprueba1”
cuatro1 
                        call              datos
                  decfsz            06h,1             ; decrementa el registro 06h y si vale cero salta
                        btfsc             PORTB,0          ; compruebo si el sensor 0 está activo o no
                  call              buzzer120
                  call           compara
                  btfsc           PORTB,0
                  goto           comprueba1
                  btfsc           PORTB,1
                  goto           comprueba1
                  btfsc           PORTB,4
                  goto           comprueba1
                  btfsc           PORTB,5
                  goto           comprueba1
                  call           msg_activa
cuatro2
                        call              datos
                  decfsz            06h,1             ; decrementa el registro 11h y si vale cero salta           
                        btfsc             PORTB,1           ; compruebo si el sensor 1 está activo o no
                  call              buzzer120
                  call           compara
                  btfsc           PORTB,0
                  goto           comprueba1
                  btfsc           PORTB,1
                  goto           comprueba1
                  btfsc           PORTB,4
                  goto           comprueba1
                  btfsc           PORTB,5
                  goto           comprueba1
                  call           msg_activa
cuatro3
                        call              datos
                  decfsz            06h,1             ; decrementa el registro 11h y si vale cero salta           
                        btfsc             PORTB,4           ; compruebo si el sensor 1 está activo o no
                  call              buzzer120
                  call           compara
                  btfsc           PORTB,0
                  goto           comprueba1
                  btfsc           PORTB,1
                  goto           comprueba1
                  btfsc           PORTB,4
                  goto           comprueba1
                  btfsc           PORTB,5
                  goto           comprueba1
                  call           msg_activa
cuatro4
                        call              datos
                  decfsz            06h,1             ; decrementa el registro 11h y si vale cero salta           
                        btfsc             PORTB,5           ; compruebo si el sensor 1 está activo o no
                  call              sg120
                  call           compara
                  btfsc           PORTB,0
                  goto           comprueba1
                  btfsc           PORTB,1
                  goto           comprueba1
                  btfsc           PORTB,4
                  goto           comprueba1
                  btfsc           PORTB,5
                  goto           comprueba1
                  call           msg_activa
;--------------------------------------------
;Tx de Datos
;--------------------------------------------
datos
   bsf      STATUS,RP0   ; Banco-1
   movlw   .25
   movwf   SPBRG      ; Vtx = 9600bps
   movlw   B'00100100'
   movwf   TXSTA      ; Tx = 8 bits / TX-ON / BRGH=1
   bcf      STATUS,RP0   ; Banco-0
   bsf      RCSTA,SPEN   ; SPEN=1
    btfsc   PORTB,0     ; compruebo si el sensor 0 está activo o no
    goto    DATOS1      ; salto incondicional a la etiqueta “DATOS1”
    btfsc   PORTB,1     ; compruebo si el sensor 1 está activo o no
    goto    DATOS2      ; salto incondicional a la etiqueta “DATOS2”
   btfsc   PORTB,4     ; compruebo si el sensor 4 está activo o no
    goto    DATOS3      ; salto incondicional a la etiqueta “DATOS3”
    btfsc   PORTB,5     ; compruebo si el sensor 5 está activo o no
    goto    DATOS4      ; salto incondicional a la etiqueta “DATOS4”
;-----------------------------------------------
DATOS1
   movlw    '#'
   call   TX_DATO
   movlw   'I'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   movlw    '0'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   movlw   '1'
   call   TX_DATO
   return
;-----------------------------------------------
DATOS2
   movlw    '#'
   call   TX_DATO
   movlw   'M'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   movlw    '0'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   movlw   '1'
   call   TX_DATO
   return
;-----------------------------------------------
DATOS3
   movlw    '#'
   call   TX_DATO
   movlw   'C'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   movlw    '0'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   movlw   '1'
   call   TX_DATO
   return
;-----------------------------------------------
DATOS4
   movlw    '#'
   call   TX_DATO
   movlw   'V'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   movlw    '0'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   movlw   '1'
   call   TX_DATO
   return
;-----------------------------------------------
TX_DATO
   bsf      STATUS,RP0   ; Banco-1
   btfss   TXSTA,TRMT   ; ¿Buffer vacio?
   goto   $-1         ; .NO
   bcf      STATUS,RP0   ; Banco-0
   movwf   TXREG      ; Inicia Tx
   clrf   TXREG
   return
;------------------------------------------------
; ESTADO ALARMA
;------------------------------------------------
ACTIV_DESAC
   bsf      STATUS,RP0   ; Banco-1
   movlw   .25
   movwf   SPBRG      ; Vtx = 9600bps
   movlw   B'00100100'
   movwf   TXSTA      ; Tx = 8 bits / TX-ON / BRGH=1
   bcf      STATUS,RP0   ; Banco-0
   movlw   B'10010000'
   movwf   RCSTA
    bsf      RCSTA,SPEN   ; SPEN=1
   bsf      RCSTA,CREN
   goto   recibeRS232
;---------------------------------------------------
recibeRS232
   btfss   PIR1,RCIF   ; se fija si hay dato RS232
   goto   $-1
   movf    RCREG,W    ; guarda dato recibido en W
   movwf   dato_serie
   btfsc   dato_serie,0
   call   msg_activa
   btfss   dato_serie,0
   call   msg_desactiva
   return
;---------------------------------------------------
msg_activa
   bsf      STATUS,RP0   ; Banco-1
   movlw   .25
   movwf   SPBRG      ; Vtx = 9600bps
   movlw   B'00100100'
   movwf   TXSTA      ; Tx = 8 bits / TX-ON / BRGH=1
   bcf      STATUS,RP0   ; Banco-0
   movlw   B'10010000'
   movwf   RCSTA
    bsf      RCSTA,SPEN   ; SPEN=1
   bsf      RCSTA,CREN
   btfsc   PIR1,RCIF   ; se fija si hay dato RS232
   movf    RCREG,W    ; guarda dato recibido en W
   movwf   dato_serie
      call   ACTIVADA
   goto   comprueba1
;---------------------------------------------------
msg_desactiva
   goto    DESACTIVADA      ; salto incondicional a “DESACTIVADA”
;-------------------------------------------------
ACTIVADA
   movlw    '#'
   call   TX_DATO
   movlw   'X'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   movlw    '0'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   movlw   '1'
   call   TX_DATO
   return
;-------------------------------------------------
DESACTIVADA
   movlw    '#'
   call   TX_DATO
   movlw   'Y'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   movlw    '0'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   movlw   '0'
   call   TX_DATO
   call   compara
   call   recibeRS232   
;---------------------------------------------
;Subrutinas de la chicharra (buzzer)
;---------------------------------------------
buzzer1
            bsf       PORTB,7
            call      sg1
            bcf       PORTB,7
            return
buzzer2
            bsf       PORTB,7
            call      sg1
            bcf       PORTB,7
            call      sg1
            bsf       PORTB,7
            call      sg1
            bcf       PORTB,7
            return
buzzer120
            bsf       PORTB,7
            call      sg120
            bcf       PORTB,7
         return
;---------------------------------
;Subrutinas de retardos.
;---------------------------------
sg1
            movlw             0ffh
            movwf             0ch
            movlw             0ffh
            movwf             0dh
            movlw             05h
            movwf             0eh
repite
            decfsz            0ch,1
            goto              repite
            decfsz            0dh,1
            goto              repite
            decfsz            0eh,1
            goto              repite
            return
;---------------------------------------
sg2
            movlw             .10
            movwf             count1
lazo1
            movlw             .75
            movwf             count2
lazo2
         movlw           .75
         movwf           count3
repite2
         btfsc         PIR1,RCIF
         call         ACTIV_DESAC
         nop
            decfsz            count3
            goto              repite2
            decfsz            count2
            goto              lazo2
         decfsz           count1
         goto           lazo1
            return
;------------------------------------------
;Retardo de 60 segundos.
;Incrementaremos un registro, 10h, cargado
;con el nº C3h hasta llegar a 00h (60 veces)
;-------------------------------------------
sg60
            movlw             0c3h
            movwf             10h
            call              sg1
            incfsz            10h,1
            return
;--------------------------------------------
;Retardo de 120 segundos.
;Incrementaremos un registro, 10h, cargado
;con el nº C3h hasta llegar a 00h (120 veces)
;-------------------------------------------
sg120
            movlw             0dfh
            movwf             10h
otro120
            call              sg2
            incfsz            10h,1
         goto           otro120
            return
;------------------------------------------
;Resetea alarma
;------------------------------------------
compara
         bcf            PORTB,7
         btfsc         PORTB,7
         goto         compara
         return
end


LEONARDO_59
LEONARDO_59