TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: brujoracer en 30 de Septiembre de 2009, 17:22:11
-
hola amigos tengo problemas con este programa
la idea es recibir datos mediante el rx usart y enviarlos por tx usart al pc, la transmision es unidireccional
aqui les dejo lo que tengo.
LIST P=16F870
INCLUDE <P16F870.INC> ; Librerias necesarias
dato equ 0x20
org 0x0000
BSF STATUS,RP0 ; banco 1
BCF STATUS,RP1
CLRF TRISB ; configuramos el puerto B como salida
BCF TXSTA,BRGH
MOVLW D'31' ; configura velocidad de Tx a 9600 baudios
MOVWF SPBRG
BCF TXSTA,SYNC ; limpia bit sync (modo asíncrono)
BSF TXSTA,TXEN ; setea bit txen (habilita Tx)
BCF STATUS,RP0 ; volvemos al banco 0
BSF RCSTA,SPEN ; setea bit spen (habilita puerto serial)
BSF RCSTA,CREN ; habilita recepcion
;***************************** PROGRAMA PRINCIPAL **********************************************
rutina CALL recibir
MOVFW dato
CALL enviar
GOTO rutina
;rutinas que efectuan la transmision y recepcion de los datos por la USART
enviar BSF STATUS,RP0 ; vamos al banco 1
esp BTFSS TXSTA,TRMT ; chequear el buffer de transmision
GOTO esp
BCF STATUS,RP0 ; vamos al banco 0
MOVF dato,W
MOVWF TXREG ; enviamos el registro "dato" por la USART
RETURN
recibir BTFSS PIR1,RCIF ; chequeamos el buffer de recepcion
GOTO recibir
MOVF RCREG,W ; si hay dato, lo movemos a W y
MOVWF dato ; luego lo guardamos en "dato"
RETURN
end
de antemano gracias
-
Recomendaciones varias:
- Revisa lo fuses de programación.
- Verifica que el dato que estas cargando en el registro SPBRG corresponde segun el cristal que estas usando.
- Verifica que los pines de la USART estén habilitados como entradas.
- Y la más importante de todas... lee muy bien el datasheet del micro que estas usando, y luego pregunta.
Eso por el momento. Saludos a quienes nos leen
-
Hola amigo, haber lo que he visto que tienes configurado el PuertoB como salida, pero no tienes configurada el PuertoC donde van las linea RC6/TC/CK y RC7/RX/DT para implementar el USART
-
hola como estan,, gracias por responder
ahora hice este programa parecido al anterior pero aun no puedo encviar datos
al simular en proteus en el pin RC7 que es recepcion inserto un pulso para simular la entrada de datos
list p=16f870
#include <p16f870.inc>
status equ 3h
PORTC equ 7h
TRISC equ 87h
RCREG equ 1Ah
RCSTA equ 18h
SPBRG equ 99h
dato equ 20h
PIR1 equ 0Ch
TXSTA equ 98h
TXREG equ 19h
numero equ 21h
org 00h
goto inicio
inicio bsf status,RP0
clrf TRISC
movlw b'10111111'
movwf TRISC
movlw b'00100100'
movwf TXSTA
movlw D'25'
movwf SPBRG
bcf status,RP0
movlw b'10010000'
movwf RCSTA
loop call recibe
movwf dato
call envia
recibe bcf status,RP0
btfss PIR1,RCIF
goto recibe
movf RCREG,W
movwf dato
return
envia bsf status,RP0
btfss TXSTA,TRMT
bcf status,RP0
movf dato,W
movwf TXREG
return
end