Hola!:
tengo un problema con la comunicación PIC16F877A - PC, la escritura con de la PC al PIC16F877A me funciona a la perfección pero al momento de querer enviar un dato a la PC el programa no m sirve quisiera saber si alguien m podria ayudar para saber en que parte del programa tengo el error o saber q puedo tener mal.
El programa está hecho en .asm
la parte de Transmite es en donde no m hace nada el PIC
Codigo:
list p=16f877a
include "P16F877A.inc"
__CONFIG _CP_OFF & _WDT_OFF & _XT_OSC & _PWRTE_ON
dato equ 0x20 ;dato a trasmitir
reg1 equ 0x21
reg2 equ 0x22
org 0
goto inicio
inicio
bsf STATUS,RP0 ;Cambio al banco 1
movlw d'255'
movwf TRISB ;Entradas
clrf TRISD ;Salidas
movlw b'10111111'
movwf PORTC ;configura el RC7 como entrada y RC6 como salidas y los demas como salidas
movlw d'25' ;Velocidad de transmision 9600 bits/seg
movwf SPBRG
movlw b'00100100' ;8 bits de transmision
movwf TXSTA ;modo asincrono alta velocidad
bcf STATUS,RP0 ;Cambio al banco 0
movlw b'10010000' ;8 bits de recepcion, puerto serial habilitado
movwf RCSTA
bsf RCSTA,SPEN ;habilitar el puerto serie(USART)
clrf PORTD
bcf PIR1,RCIF ;limpiar la bandera de recepcion
bcf PIR1,TXIF ;limpiar la bandera de transmision
clrf dato ;inicializamos dato
ciclo
btfsc PIR1,RCIF
call Recibe_y_Transmite
goto ciclo
Recibe_y_Transmite
call Recibe
movf dato,w
movwf PORTD
call Transmite
call retardo
return
Transmite
movf PORTB,W
movwf TXREG ;almacenar el dato a transmitir en el registro TXREG
btfss PIR1,TXIF ;si TXIF=1, buffer de transmision vacio (TXREG=0 bits)
goto $-D'1'
bcf PIR1,TXIF ;limpiar la bandera de transmision
bcf PIR1,RCIF ;limpiar la bandera de recepcion
return
Recibe
movf RCREG,w ;se reciben los datos en RCREG
movwf dato
bcf PIR1,RCIF ;limpiar la bandera de recepcion
return
retardo
movlw 0xff
movwf reg2
movwf reg1
decfsz reg1,f
goto $-D'1'
decfsz reg2,f
goto $-D'4'
return
END
tengo un problema con la comunicación PIC16F877A - PC, la escritura con de la PC al PIC16F877A me funciona a la perfección pero al momento de querer enviar un dato a la PC el programa no m sirve quisiera saber si alguien m podria ayudar para saber en que parte del programa tengo el error o saber q puedo tener mal.
El programa está hecho en .asm
la parte de Transmite es en donde no m hace nada el PIC
Codigo:
list p=16f877a
include "P16F877A.inc"
__CONFIG _CP_OFF & _WDT_OFF & _XT_OSC & _PWRTE_ON
dato equ 0x20 ;dato a trasmitir
reg1 equ 0x21
reg2 equ 0x22
org 0
goto inicio
inicio
bsf STATUS,RP0 ;Cambio al banco 1
movlw d'255'
movwf TRISB ;Entradas
clrf TRISD ;Salidas
movlw b'10111111'
movwf PORTC ;configura el RC7 como entrada y RC6 como salidas y los demas como salidas
movlw d'25' ;Velocidad de transmision 9600 bits/seg
movwf SPBRG
movlw b'00100100' ;8 bits de transmision
movwf TXSTA ;modo asincrono alta velocidad
bcf STATUS,RP0 ;Cambio al banco 0
movlw b'10010000' ;8 bits de recepcion, puerto serial habilitado
movwf RCSTA
bsf RCSTA,SPEN ;habilitar el puerto serie(USART)
clrf PORTD
bcf PIR1,RCIF ;limpiar la bandera de recepcion
bcf PIR1,TXIF ;limpiar la bandera de transmision
clrf dato ;inicializamos dato
ciclo
btfsc PIR1,RCIF
call Recibe_y_Transmite
goto ciclo
Recibe_y_Transmite
call Recibe
movf dato,w
movwf PORTD
call Transmite
call retardo
return
Transmite
movf PORTB,W
movwf TXREG ;almacenar el dato a transmitir en el registro TXREG
btfss PIR1,TXIF ;si TXIF=1, buffer de transmision vacio (TXREG=0 bits)
goto $-D'1'
bcf PIR1,TXIF ;limpiar la bandera de transmision
bcf PIR1,RCIF ;limpiar la bandera de recepcion
return
Recibe
movf RCREG,w ;se reciben los datos en RCREG
movwf dato
bcf PIR1,RCIF ;limpiar la bandera de recepcion
return
retardo
movlw 0xff
movwf reg2
movwf reg1
decfsz reg1,f
goto $-D'1'
decfsz reg2,f
goto $-D'4'
return
END