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