TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado 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
-
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.
-
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.