TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: marckmicro en 25 de Julio de 2010, 18:18:28
-
Que tal soy nuevo en en foro pero no tan nuevo utilizando pics
mi duda es la siguiente:
¿La comunicacion RS232 con el PIC16F877 es posible si utilizo la configuracion de reloj interno (RC)?
ya lei el datasheet y unos ejemplos pero en ninguno me especifica si el modulo del USART funciona
con el reloj interno del pic que es el que yo estoy utilizando.
:?
por cualquier cosa les mando el codigo de mi programa, igual y mi error esta en este
Si alguien me puediera ayudar se los agradeceria desde ya. :)
-
Hola, yo he realizado comunicaciones en 9600 con reloj interno sin problemas...
que error te da? colocas un max232 a la salida ?
Norberto
-
primero gracias por responder
si utilizo un max232 de hecho ya he realizado comunicacion RS232 utilizando un 8081 de intel como microcontrolador
y se como se utiliza el max de hecho despues de revisar mi circuito solo me quedaba que el error estubiera en mi
programa (como el asunto de reloj).
el error es que no hace nada, se supone que cunado tecleo "a" se encienda RD0 y cuando tecleo "b" se encienda RD1
si puedieras revisar mi codigo te lo agradeceria
-
primero gracias por responder
si utilizo un max232 de hecho ya he realizado comunicacion RS232 utilizando un 8081 de intel como microcontrolador
y se como se utiliza el max de hecho despues de revisar mi circuito solo me quedaba que el error estubiera en mi
programa (como el asunto de reloj).
el error es que no hace nada, se supone que cunado tecleo "a" se encienda RD0 y cuando tecleo "b" se encienda RD1
si puedieras revisar mi codigo te lo agradeceria
me equivoque no es 8081 es 8051 jaja
-
Primero que nada estas configurando RD0 y RD1 como entradas, por lo tanto lo demás puede que este bien :smiley:
Por aquí (http://www.todopic.com.ar/foros/index.php?topic=24720.0) hay para leer sobre assembler en PICs y algunos de sus módulos en 16F.
Saludos!
-
uffffff que pena :oops: :oops: :oops: :oops: :oops: :oops:
tienes razon puse mal las salidas
pero bueno mando de nuevo el codigo ya corregido espero que no tenga mas errores tontos
y por si acaso pongo mas detalles de mi practica:
PIC16F877A
MAX232 con capacitores de 10uf
Utilizo la interface HyperTerminal para XP con cable USB-Serial
LIST P=16F877
RADIX HEX
INCLUDE <p16f877A.inc>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_OFF & _RC_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF
CBLOCK 0X20
apun
dato
PROT1
PROT2
ENDC
org 0x00
GOTO TRANS
org 0X05
TRANS BSF STATUS,RP0 ;banco 1
CLRF TRISD
MOVLW b'01000000'
MOVWF TRISC
BCF TXSTA,BRGH ;pone bit BRGH=0 (velocidad baja)
MOVLW .6 ;valor para configurar 9600 Bauds
MOVWF SPBRG ;configura 9600 Bauds
BCF TXSTA,SYNC ;limpia bit SYNC (modo asíncrono)
BCF STATUS,RP0 ;regresa al banco 0
BSF RCSTA,SPEN ;pone bit SPEN=1 (habilita puerto serie)
BSF RCSTA,CREN ;Habilita recepción
clrf PORTD
CLRF PORTC
recibe BTFSS PIR1,RCIF ;checa el buffer de recepción
GOTO recibe ;si no hay dato listo espera
MOVF RCREG,W ;si hay dato, lo lee
MOVWF dato ;lo almacena en dato
MOVF dato,W
SUBLW 0X61
BTFSS STATUS,Z
GOTO be
bsf PORTD,0
call TEMP
bcf PORTD,0
be MOVF dato,W
SUBLW 0X62
BTFSS STATUS,Z
GOTO recibe
bsf PORTD,1
call TEMP
bcf PORTD,1
goto recibe
TEMP
MOVLW B'11111111'
MOVWF PROT1 ;rutina de retardo para visualizar las operaciones
LOOP2
MOVLW B'11111111'
MOVWF PROT2
LOOP
DECFSZ PROT2,1
GOTO LOOP
DECFSZ PROT1
GOTO LOOP2
RETURN
end