Autor Tema: Problema con USART  (Leído 1717 veces)

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

Desconectado svt

  • PIC10
  • *
  • Mensajes: 38
Problema con USART
« en: 23 de Junio de 2005, 10:56:00 »
Hola, quisiera pedirles ayuda con la USART. Me he configurado mi USART a 9600 baudios, y lo tengo configurado para que lo que le entre por RX, lo vuelva a enviar. Pero no me funciona la rutina.  La rutina es la que sigue, le veis algun fallo?, gracias de antemano:

   LIST      P=16F73
        include "P16F73.inc"



W_save      res   1

CounterA   EQU   0x20
CounterB   EQU   0x21
CounterC   EQU   0x22
Status_save   res   1   ;
PCLATH_save   res   1
FSR_save   res   1

outbuffer   res   8   ;

rx_buffer   res   7   ; UART
rx_count   res   1   ; UART

recbyte      res   1   ; byte reciido


      ORG   0x00      ;Inicio en el Vector de Reset

      goto   main      ;Va a la primera instruccion del
               ;programa

;<<<<<<------------------- VECTOR DE INTERRUPCION -------------------->>>>>>>

   ORG   0x04      ;Vector de interrupcion



   bcf   INTCON,GIE
InterruptServiceVector
   movwf   W_save      ;
   movf   STATUS,W
   clrf   STATUS      ;
   movwf   Status_save   ;
   movf   PCLATH,w
   movwf   PCLATH_save   ;
   movf   FSR,w
   movwf   FSR_save   ;


   pagesel USART_rx
   btfsc   PIR1,RCIF
   call   USART_rx  
   nop
EndISR
   bsf   INTCON,GIE

   clrf   STATUS      ;
   movf   FSR_save,w   ;
   movwf   FSR
   movf   PCLATH_save,w   ;
   movwf   PCLATH
   movf   Status_save,w   ;
   movwf   STATUS
   swapf   W_save,f   ;
   swapf   W_save,w
   retfie


USART_rx

   banksel   RCREG
   movf   RCREG,w      ;
   banksel   recbyte
   movwf   recbyte      ;


   return

   

; ******************************************************************
;
;    
; ******************************************************************
main
   
   movlw   .30      ; delay 16 uS to wait for USB to reset
   movwf   W_save      ; SIE before initializing registers
   decfsz   W_save,f   ; W_save is merely a convienient register
   goto   $-1      ; to use for the delay counter.

   movlw   0x00
   movwf   recbyte
   
   BANKSEL   OPTION_REG
   bsf   OPTION_REG,NOT_RBPU   ; turn off pullups
   bsf   STATUS,RP0
   clrf   TRISB
   bcf   STATUS,RP0
   
   bsf   PORTB,4      ;cs=0
   bcf   PORTB,1
   bsf   PORTB,2      ;rx

   ; 9600 baud 8 n 1
   
   BANKSEL   TXSTA
   movlw   B"00000000"
   movwf   TXSTA
   movlw   .25      ;**** baud rate **** 9600 ***
   BANKSEL   SPBRG
   movwf   SPBRG
   BANKSEL   RCSTA
   movlw   B"10010000"
   movwf   RCSTA
   BANKSEL   PIE1
   bcf   PIE1,TXIE
   bsf   PIE1,RCIE
   BANKSEL   TXSTA
   bsf   TXSTA,TXEN
   BANKSEL   TXREG
   bsf   RCSTA,CREN

   BANKSEL   rx_count
   clrf   rx_count
   call   PDelay
   call   PDelay
   call   PDelay
   
   call   PDelay      
   movlw   .49
   movwf   recbyte
   
LoopForData

   bcf   PORTB,1
   bsf   PORTB,2   ;rx
   
   call   PDelay   

   bsf   PORTB,1
   bcf   PORTB,2      ;tx
   movf   recbyte,w

   
   call   PDelay      
   call   tx_data

   goto    LoopForData   ; huj





tx_data
   BANKSEL   PIR1
   btfss   PIR1,TXIF   ; espera a  TX termine
   goto   $-1
   BANKSEL   TXREG
   movwf   TXREG      ; enviar caracter
   return



PDelay      movlw   D"6"
      movwf   CounterC
      movlw   D"24"
      movwf   CounterB
      movlw   D"168"
      movwf   CounterA
loop      decfsz   CounterA,1
      goto   loop
      decfsz   CounterB,1
      goto   loop
      decfsz   CounterC,1
      goto   loop
      return




   end


Desconectado antoniof

  • Moderadores
  • PIC24F
  • *****
  • Mensajes: 729
RE: Problema con USART
« Respuesta #1 en: 23 de Junio de 2005, 17:19:00 »
No veo que actives el permiso global de interrupción en el programa principal, por lo tanto la interrupción no se producirá nunca.

Otra cosa es que no necesitas borrar el permiso global de interrupción cuando saltes al vector de interrupción ni volverlo a activar cuando aslgas de la rutina de interrupción. Estas dos operaciones se realizan internemente en el PIC, cuando salta cualquier interrupción y al ejecutarse la instrucción "retfie" respectivamente.

Desconectado svt

  • PIC10
  • *
  • Mensajes: 38
RE: Problema con USART
« Respuesta #2 en: 24 de Junio de 2005, 08:59:00 »
Gracias, voy a probar a ver si se solucionan mis problemas.




Saludos desde Valencia


 

anything