Autor Tema: fallo en comunicación 16f877 y pc.  (Leído 1248 veces)

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

Desconectado Santherberg

  • PIC10
  • *
  • Mensajes: 9
fallo en comunicación 16f877 y pc.
« en: 27 de Abril de 2011, 11:06:48 »
Hola chic@s, les cuento.

estoy tratando de comunicar un 16f877 con un PC mediante el puerto USART y para ello empleo el integrado MAX232 para acondicionar los niveles de tensión.


Parece que tengo un problema en la programación del pic. Lo cierto es que no existe transmisión de datos por el puerto y no comprendo el porqué.

¿ podríais orientarme un poco? Gracias.  Adjunto el código ligeramente documentado



;Programa de conversion de una señal analógica en AN0
;que se transmite por serial 2400-8-N-1-N en RC6/TX

;   __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
   list p=16f877
   include <p16f877.inc>

ADDR_L   equ   0x20
DATA_L   equ 0x21
contador equ 0x22


   org 0x00
   nop
   nop
   
   bcf STATUS,RP0               ; ir al banco 0
   bcf   STATUS,RP1
   
   movlw   b'10000001'            ; A/D conversion a Fosc/8
   movwf   ADCON0
   
   bsf   STATUS,RP0               ; ir al banco 1
   bcf   STATUS,RP1
   
   clrf TRISA                  ;Configuracion de puertos.
   clrf TRISB
   clrf TRISC
   clrf TRISD
   clrf TRISE
   bsf   TRISA,0                  ; configuracion de AN0 como entrada
   bcf   TRISC,6                  ; RC6/TX/DT como salida.
   
   
   movlw   b'00001000'            ; A/D port AN0/RA0  b'01001110'   
   movwf   ADCON1
   
   movlw   d'12'               ;2400 baudios para cristal de 4MHz.
   movwf   SPBRG
   bcf      TXSTA,BRGH            ; BRGH=0 baja velocidad
   bcf      TXSTA, SYNC            ; Modo asincrono.
   
   bcf      STATUS,RP0            ; ir al banco 0
   bcf      STATUS,RP1
   
   bsf      RCSTA,SPEN            ; habilita el puerto serie.
   
   bsf      STATUS,RP0            ; ir al banco 1
   bcf      STATUS,RP1
   
   bcf      TXSTA,TX9            ; TX9=0 9 bit de transferecia no habiliado.
   bsf      TXSTA,TXEN            ; TXEN=1 activacion de la transmision serie.
   
   bcf      STATUS,RP0            ; ir al banco 0
   bcf      STATUS,RP1
   


;****Conversion y transmision de datos*****
_adc
   bsf      ADCON0,GO            ; habilita la conversion.
   call demora_20us
_espera
   btfsc   ADCON0,GO            ; ¿ha finalizado la conversion?
   goto   _espera               ; si no ha finalizado vuelve a _adc
   movf   ADRESH,W            ; si ha finalizado guarda el valor de ADRESH en W
   movwf   TXREG                  ;carga el registro TXREG con W
_esperatx
   btfss   PIR1,TXIF            ; comprueba si se ha vaciado el registro de transmision TSR. Entonces habrá acabado la transmision.
   goto   _esperatx            ; si no se ha vaciado aun está transmitiendo. Espera.
   goto   _adc               ; si ha finalizado inicia el ciclo convirtendo otro valor.


;**** Demora ****
demora_20us
   movlw    0x05 ;
   movwf    contador             ; Iniciamos contador1.-
repeticion
   decfsz    contador,1             ; Decrementa Contador1.-
   goto    repeticion            ; Si no es cero repetimos ciclo.-
   return                      ; Regresa de la subrutina.-
 

   end
   

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Re: fallo en comunicación 16f877 y pc.
« Respuesta #1 en: 27 de Abril de 2011, 22:40:32 »
Hola amigo, revisa este ejemplo

Código: [Seleccionar]


title ¨COMUNICACION SERIAL UTILIZANDO EL MODULO USART¨

list  p=16f873

;registros de proposito especifico

dir_ind equ 00
tmr0 equ 01
pc equ 02
status equ 03
fsr equ 04
porta equ 05
portb equ  06
portc equ 07
eedata equ 08
eeadr equ 09
pclath equ 0a
intcon equ 0b
rcsta equ 18
txreg equ 19
rcreg equ 1a
pir1 equ 0c
adcon1 equ 1f

;==============================================================================

;registros de proposito general

conta1 equ 20
conta2 equ 21

;==============================================================================

;registros de configuracion

trisa equ 05
trisb equ 06
trisc equ 07
txsta equ 18
spbrg equ 19
pie1 equ 0c
;==============================================================================

;bit de registro status

c equ 00
z equ 02
rp0 equ 05

w equ 00
f equ 01

tx equ 06
rx equ 07

;==============================================================================

org 00
goto inicio
;==============================================================================
org 04 ;CUANDO RECIBE LOS 8 BITS SE GENERA LA
;INTERRUPCION, EL DATO ES LLEVADO AL
movf rcreg,w ;PUERTO B
movwf portb

bcf pir1,5
retfie
;==============================================================================
tiempo movlw d'250' ;TIEMPO DE 1 ms PARA EVITAR REBOTES
movwf conta1

nop
decfsz conta1,f
goto $-2

return
;==============================================================================
enviar bcf intcon,7
bsf status,rp0
btfss txsta,1 ;SE PREGUNTA SI YA TERMINO DE ENVIAR
goto $-1
bcf status,rp0
bsf intcon,7

return
;==============================================================================
inicio bsf status,rp0

bsf trisc,7 ;PIN RX----RS232----AL PIN 3 DB9 DEL PC TX
bcf trisc,6 ;PIN TX----RS232----AL PIN 2 DB9 DEL PC RX
;GND-----------------AL PIN 5 DB9 DEL PC GND
clrf trisb
;LA TECLA ENTER ES EL CODIGO H'0D'
;LA TECLA TABULADOR ES EL CODIGO H'09'
;LA TECLA RETROCESO ES EL CODIGO H'08'
;LA TECLA ESPACIO ES EL CODIGO H'20'
;LA TECLA ESCAPE ES EL CODIGO H'1B'
;LA TECLA Ñ ES EL CODIGO H'D1'


movlw b'11000000' ;EL SISTEMA CONSISTE EN SENSAR UNA
movwf intcon ;TECLA Y CUANDO ESTA SE ACTIVA
;INCREMENTA UN CONTADOR QUE INICIA DESDE
movlw h'07' ;CERO, ESTE SE CONVIERTE A ASCII Y SE
movwf adcon1 ;ENVIA AL PC A HIPER-TERMINAL; DEL MISMO
;MODO DESDE EL PC SE PUEDE ENVIAR EL CODIGO
bcf status,rp0 ;DE LA TECLA Y EL PIC RECIBE Y LO ENTRGA AL
;PUERTO B
clrf conta2

bsf portc,6

clrf portb
;==============================================================================
bsf status,rp0

bsf pie1,5 ;SE HABILITA LA INTERRUPCION CUANDO
;TERMINA DE RECIBIR UN DATO POR EL RX

movlw d'12' ;SE CONFIGURA EL GENERADOR DE BAUDIOS
movwf spbrg ;PARA ENVIAR A 4800 BAUDIOS

movlw b'10100000' ;SE HABILITA EL MODULO DE TRANSMICION
movwf txsta

bcf status,rp0

movlw b'10111000' ;SE HABILITA EL MODULO DE RECEPCION
movwf rcsta
;==============================================================================
ciclo call tiempo ;RUTINA QUE PREGUNTA POR LA TECLA
btfsc porta,0
goto ciclo

movf conta2,w ;SE CONVIERTE EL VALOR DEL CONTADOR A
addlw h'30' ;ASCII Y SE LLEVA AL REGISTRO DE
movwf txreg ;TRANSMICION

incf conta2,f ;SE INCREMENTA EL CONTADOR
call enviar

;==================
;movlw h'0d' ;SE ENVIA LA FUNCION ENTER
;movwf txreg
;call enviar

call tiempo ;PREGUNTA SI YA SOLTARON LA TECLA
btfss porta,0
goto $-2
;==================
goto ciclo
;==============================================================================

end

Saludos.


 

anything