TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: marianaxx en 17 de Noviembre de 2004, 14:54:00

Título: Transmisión serial pic16f876
Publicado por: marianaxx en 17 de Noviembre de 2004, 14:54:00
El siguiente programa debe transmitir por el puerto C un dato a otro pic 16F876. De acuerdo a la hoja de datos para configurar el Puerto C se debe poner el bit 7 y 6 en uno (eso es lo que dice la hoja de datos); pero de esta forma no funciona.

¿Alguien me puede decir dónde está el error?


ESTADO      EQU   H"03"   ;
INTCON      EQU   H"0B"   ;
OPCION      EQU   H"81"   ;
TRISA      EQU   H"85"   ;
TRISB      EQU   H"86"   ;
TRISC      EQU   H"87"   ;
TMR0      EQU   H"01"   ;
PORTA      EQU   H"05"   ;
PORTB      EQU   H"06"   ;
PORTC      EQU   H"07"   ;
RCREG      EQU   H"1A"
TXREG      EQU   H"19"
RCSTA      EQU   H"18"
TXSTA      EQU   H"98"
SPBRG      EQU   H"99"
PIE1      EQU   H"8C"
PIR1      EQU   H"0C"

COM         EQU   H"20"
COM_2      EQU   H"21"
SEG         EQU   H"23"

    ORG   00         ;la 1º inst. es guardada la posicion 00
     goto   CONFIG
   
    ORG   04
                      ;INICIO DE LA SUBRRUTINA DE TIEMPO
    DECFSZ   COM,1      
    GOTO   CLOK
    MOVLW   H"11"
    MOVWF   COM
    DECFSZ   COM_2,1
    GOTO   CLOK
    INCF   SEG
    MOVLW   H"08"
    MOVWF   COM_2
CLOK
    MOVLW   H"05"
    MOVWF   TMR0
    BCF   INTCON,2   
    RETFIE
    NOP

    ORG   20
         ;el progama se graba desde la posicion 20
;;;;;;;;;;;;;;;;;;configuracion de los registros ;;;;;;;;;;;;;;
CONFIG               ;
    MOVLW   H"E0"      ;1010 0000
    MOVWF   INTCON      ;
    MOVLW   H"38"      ;0011 1000
    MOVWF   ESTADO      ;
    MOVLW   H"00"      ;0000 0000
    MOVWF   TRISA      ;
    MOVLW   H"FF"      ;1111 1111
    MOVWF   TRISB      ;
    MOVLW   H"F0"      ;1011 0000
    MOVWF   TRISC      ;
    MOVLW   H"04"      ;X010 01XX
    MOVWF   TXSTA
    MOVLW   H"00"      ;0001 1001   
    MOVWF   SPBRG
    MOVLW   H"10"      ;XX01 XXXX
    MOVWF   PIE1
    CLRF   OPCION
    BCF   ESTADO,5   ;
    MOVLW   H"80"      ;1000 XXXX
    MOVWF   RCSTA
    MOVLW   H"FF"
    MOVWF   COM
    MOVLW   H"08"
    MOVWF   COM_2
INICIO
    BTFSC    PIR1,4
    NOP
    MOVF   SEG,0
    MOVWF   PORTC   ; a efectos de verficar funcionamiento pic
    BTFSS   SEG,2
    GOTO   INICIO
    CLRF   SEG      ; empieza la transmisión
    BSF   RCSTA,7
    BSF   ESTADO,5
    BCF   TXSTA,4
    BTFSC   TXSTA,1
    NOP
    BCF   ESTADO,5
    MOVLW   H"05"   
    MOVWF   TXREG
    BSF   ESTADO,5
    BSF   TXSTA,5
    BCF   ESTADO,5
    GOTO   INICIO
END

Gracias,
Mariana
Título: RE: Transmisión serial pic16f876
Publicado por: wqtrp en 17 de Noviembre de 2004, 16:32:00
hola, lo primero q veo es q en la interrupcion estas usando el reg W y no lo salvas antes y lo mismo sucede con los flags, con lo cual nunca sabras a ciencia cierta que es lo que hace el prog. o que datos hay y cuales son validos...
fijate en el data sheet como se hace para entrar y salir de una interrupcion y como salvar los datos...
ademas creo q cuando hablas de transmitir por el port C te referis a una transmision serie????
pone mas informacion a ese repstecto y trata de solucionar lo de la int.

Suerte.

Título: RE: Transmisión serial pic16f876
Publicado por: JacoPastorius2004 en 17 de Noviembre de 2004, 18:57:00
Hola!

Que interface serie estas usando?
SPI, UART?

Como manejas la recepcion, via pooling o por interrupciones?
Fijate de manejarla en un principio via pooling (en el lado del receptor), hasta que tengas bien en claro todo el proceso de comunicacion.