Comunicacion serial con pic16f628a a 20MHZ

Holas a todos ..... este es mi primera participacion y espero que me puedan ayudar.

lo que trato de hacer es comunicarme con la pc por puerto serie con este pic (16f628a), y debo decir que si e encontrado ejemplos en internet de como funciona esto y los e implementado y si me han salido....el problema es que estos ejemplos usan el oscilador interno del pic o uno externo de 4MHZ y lo que yo necesito es usar uno de 20MHz y por mas que e intentado modificar esos ejemplos no e podido lograr que funcione bien.
quiero recalcar que uso el puerto Usart de este pic osea el pin RB1 y RB2 .
otro dato que tengo es que e intentado modificar el valor SPBRG que e leeido que se modifica de acuerdo a la frecuencia del pic.
para finalizar les digo que el unico lenguaje que domino bien es el assembler en Mplab
la comunicacion es por hyperterminal
espero que me ayuden en poder solucionar este problema

:) de ante mano les doy Muchas gracias a todos
 
bueno esperaba recibir ayuda por aqui ....pero bueno .......
ya resolvi mi problema era el valor de SPBRG que para 4MHZ es 19 en decimal
y para 20Mhz es 80 en decimal de todas formas pueden comentar gracias.....................
 
Código:
;************************************ RS232_11.asm **************************************
;
;	===================================================================
;	  Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
;	  E. Palacios, F. Remiro y L. López.		[url]www.pic16f84a.com[/url]
; 	  Editorial Ra-Ma.  [url]www.ra-ma.es[/url]
;	===================================================================
;
; SISTEMA DE GOBIERNO DESDE ORDENADOR: Desde el teclado de un ordenador se desea comandar
; el movimiento de una estructura móvil, según la siguiente tabla:
;
;	TECLA (Por ejemplo)		MOVIMIENTO
;	-------------------		----------
;			t				Adelante
;			b				Atrás
;			a				Izquierda
;			l				Derecha
;	     Espacio			Parada
;
; La pulsación de cualquiera de estas teclas activa el estado de las salidas correspondiente
; RB3 (Adelante), RB2 (Atrás), RB1 (Izquierda), RB0 (Derecha) y apaga el resto.
;
; El movimiento que se está realizando aparece reflejado en un mensaje en el visualizador LCD
; del sistema y también en la pantalla del ordenador.
;
; El programa debe permitir modificar facilmente en posteriores revisiones en el hardware de
; la salida. Es decir, para activar las salidas conviene utilizar el direccionamiento por bit
; en lugar de por byte (utilizar instrucciones "bsf" y "bcf", en lugar de "mov..").
;
; ZONA DE DATOS **********************************************************************

	LIST		P=16F84A
	INCLUDE		<P16F84A.INC>
	__CONFIG	_CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC

	CBLOCK   0x0C		
	TeclaPulsada					; Va a guardar el contenido de la tecla pulsada.
	MensajeApuntado					; Va a guarda la dirección del mensaje apuntado.
	ENDC

#DEFINE  SalidaAdelante		PORTB,3	; Define dónde se sitúan las salidas.
#DEFINE  SalidaAtras		PORTB,2
#DEFINE  SalidaIzquierda	PORTB,1
#DEFINE  SalidaDerecha		PORTB,0

TECLA_ADELANTE	EQU	't'				; Código de las teclas utilizadas.
TECLA_ATRAS		EQU	'b'
TECLA_IZQ		EQU	'a'
TECLA_DER		EQU	'l'
TECLA_PARADA	EQU	' '				; Código de la tecla espaciadora, (hay un espacio,
									; tened cuidado al teclear el programa).
; ZONA DE CÓDIGOS ********************************************************************

	ORG	0
Inicio
	call	LCD_Inicializa
	call	RS232_Inicializa
	bsf		STATUS,RP0				; Configura como salidas las 4 líneas del
	bcf		SalidaAdelante			; del Puerto B respetando la configuración del
	bcf		SalidaAtras				; resto de las líneas.
	bcf		SalidaIzquierda
	bcf		SalidaDerecha
	bcf		STATUS,RP0
	call	Parado					; En principio todas las salidas deben estar 
Principal							; apagadas.
	call	RS232_LeeDato			; Espera a recibir un carácter.
	call	TesteaTeclado
	goto	Principal

; "Mensajes" ----------------------------------------------------------------------------
;
Mensajes
	addwf	PCL,F
MensajeParado
	DT "Sistema PARADO", 0x00
MensajeAdelante
	DT "Marcha ADELANTE", 0x00
MensajeAtras
	DT "Marcha ATRAS", 0x00
MensajeIzquierda
	DT "Hacia IZQUIERDA", 0x00
MensajeDerecha
	DT "Hacia DERECHA", 0x00

; Subrutina "TesteaTeclado" -------------------------------------------------------------
;
; Testea el teclado y actúa en consecuencia.

TesteaTeclado
	movwf	TeclaPulsada			; Guarda el contenido de la tecla pulsada.
	xorlw	TECLA_ADELANTE			; ¿Es la tecla del movimiento hacia adelante?
	btfsc	STATUS,Z
	goto	Adelante				; Sí, se desea movimiento hacia adelante.
;
	movf	TeclaPulsada,W			; Recupera el contenido de la tecla pulsada.
	xorlw	TECLA_ATRAS				; ¿Es la tecla del movimiento hacia atrás?
	btfsc	STATUS,Z
	goto	Atras					; Sí, se desea movimiento hacia atrás.
;
	movf	TeclaPulsada,W			; Recupera el contenido de la tecla pulsada.
	xorlw	TECLA_IZQ				; ¿Es la tecla del movimiento hacia la izquierda?
	btfsc	STATUS,Z
	goto	Izquierda				; Sí, se desea movimiento hacia la izquierda.
;
	movf	TeclaPulsada,W			; Recupera el contenido de la tecla pulsada.
	xorlw	TECLA_DER				; ¿Es tecla del movimiento hacia la derecha?
	btfsc	STATUS,Z
	goto	Derecha					; Sí, se desea movimiento hacia la derecha.
;
	movf	TeclaPulsada,W			; Recupera el contenido de la tecla pulsada.
	xorlw	TECLA_PARADA			; ¿Es la tecla de parada?.
	btfss	STATUS,Z
	goto	Fin						; No es ninguna tecla de movimiento. Sale.
Parado
	bcf		SalidaAdelante			; Como se ha pulsado la tecla de parada se
	bcf		SalidaAtras				; desactivan todas las salidas.
	bcf		SalidaIzquierda
	bcf		SalidaDerecha
	movlw	MensajeParado
	goto	Visualiza
Adelante
	bcf		SalidaAtras
	bsf		SalidaAdelante
	bcf		SalidaIzquierda
	bcf		SalidaDerecha
	movlw	MensajeAdelante
	goto	Visualiza
Atras
	bcf		SalidaAdelante
	bsf		SalidaAtras
	bcf		SalidaIzquierda
	bcf		SalidaDerecha
	movlw	MensajeAtras
	goto	Visualiza
Izquierda
	bcf		SalidaAdelante
	bcf		SalidaAtras
	bsf		SalidaIzquierda
	bcf		SalidaDerecha
	movlw	MensajeIzquierda
	goto	Visualiza
Derecha
	bcf		SalidaAdelante
	bcf		SalidaAtras
	bcf		SalidaIzquierda
	bsf		SalidaDerecha
	movlw	MensajeDerecha

; Según el estado de las salidas visualiza el estado del sistema en el visualizador LCD y en
; el monitor del ordenador.

Visualiza
	movwf	MensajeApuntado			; Guarda la posición del mensaje.
	call	LCD_Borra				; Borra la pantalla del modulo LCD.
	movf	MensajeApuntado,W		; Visualiza el mensaje en la pantalla
	call	LCD_Mensaje				; del visualizador LCD.
	call	RS232_LineasBlanco		; Borra la pantalla del ordenador.
	movf	MensajeApuntado,W
	call	RS232_Mensaje			; Lo visualiza en el HyperTerminal.
	call	RS232_LineasBlanco
Fin	return

	INCLUDE  <RS232.INC>
	INCLUDE  <RS232MEN.INC>
	INCLUDE  <LCD_4BIT.INC>
	INCLUDE  <LCD_MENS.INC>
	INCLUDE  <RETARDOS.INC>
	END
	
;	===================================================================
;	  Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
;	  E. Palacios, F. Remiro y L. López.		[url]www.pic16f84a.com[/url]
; 	  Editorial Ra-Ma.  [url]www.ra-ma.es[/url]
;	===================================================================
 
gracias por tu aporte Meta.... debo decir que ese libro es uno de los mejores que e podido encontrar en internet lo malo que estoy intentando migrar uno de esos ejemplos al pic16f628a y mira que mi problema era que usaba un xt de 20mhz es por eso que de tanto insistir logre hacerlo funcionar
 
Hola que tal yo vi tu comentario en el foro y queria saber si me puedes ayudar noc como hacer que funcione una lcd 16x2 a 20Mhz, me sale simulado pero en la realidad no estoy haciendo el programa en ccs con un pic 18f8720, estoy utilizando el puerto e y la pata rw esta iendo a tierra
 
Lo tengo pasado todo al 16F88 y funciona muy bien, no creo que cueste pasarlo al 16F628A.

Puedes descargar el ejecutable con el código fuente en su interior.
Descargar

Saludo.
 
Atrás
Arriba