Inicio Siguiente
3.- Programa de transmisión asíncrona con el PIC16F84.
Diagrama de bloques.
TX con le PIC16F84
Programa:

;*****************************************************************************
;
;		TRANSMISION SERIAL CON EL PIC16F84 
;
;*****************************************************************************

LIST   P=16F84
include "p16f84.inc"		;PI6C84.INC Es un archivo estandar del 
				;ensamblador de Microchip que contiene las
				;definiciones de etiquetas asociadas a los
				;registros y bits del PIC16C84				
;*****************************************************************************
;
;DEFINICION DE ETIQUETAS Y VARIABLES
;
;*****************************************************************************

DatoTX		equ	0x0c		;Dato que se transmitira
ContBITS	equ	0x0d		;Contador de bits a transmitir
TX		equ	3		;linea de transmision 
ContDEL		equ	0x0e		;contador de retardo
OFFSET		equ	0x0f		;offset para barrer tabla


;*****************************************************************************
;
;	+++++++++++++ ASIGNACION DE MEMORIA DE PROGRAMA ++++++++++++++
;
;*****************************************************************************

org	0			;VECTOR DE RESET
goto	TRANSMISION_PIC		;Saltar al programa principal


org	4			;Vector de Interrupcion
	nop

;****************************************************************************
;
;	0000	TRANSMISION_PIC
;
;****************************************************************************
;Transmite bytes de forma serial a 1200 bps,sin paridad,un bit de paro, sin
;control de flujo.

TRANSMISION_PIC
;----------------CONFIGURACION DE RA3 COMO SALIDA----------------------------
bsf	STATUS,RP0		;Cambiar al banco 1
bcf	TRISA,TX		;programar RA3 como salida
bcf	STATUS,RP0		;regresar al banco 0
clrf	OFFSET			;limpiar el offset

MENSAJE					;Enviar Mensaje
						
	movf	OFFSET,W		;copiar el OFFSET a W
	call	TABLA_MENSAJE		;cargar en W el caracter
	iorlw	0			;actualizar banderas
	btfsc	STATUS,2		;prueba si es el ultimo dato
	goto	SALIR			;salir
	call	ENVIAR_DATO_SERIAL	;enviar dato
	incf	OFFSET,F		;incrementar el OFFSET
	goto	MENSAJE			;regresar para enviar el siguiente
					;caracter
SALIR
	a
	goto	a		;ciclo infinito

;****************************************************************************
;
;			TABLA DE MENSAJE
;
;****************************************************************************
;Esta tabla contiene los caracteres que serán enviados de forma serial
TABLA_MENSAJE
	addwf	PCL,1
	retlw	'C'		;Offset = 0
	retlw	'e'		;Regresar caracter correspondiente al offset
	retlw	's'		;Regresar caracter correspondiente al offset
	retlw	'a'		;Regresar caracter correspondiente al offset
	retlw	'r'		;Regresar caracter correspondiente al offset
	retlw	' '		;Regresar caracter correspondiente al offset
	retlw	'H'		;Regresar caracter correspondiente al offset
	retlw	'e'		;Regresar caracter correspondiente al offset
	retlw	'n'		;Regresar caracter correspondiente al offset
	retlw	'a'		;Regresar caracter correspondiente al offset
	retlw	'n'		;Regresar caracter correspondiente al offset
	retlw	'd'		;Regresar caracter correspondiente al offset
	retlw	'e'		;Regresar caracter correspondiente al offset
	retlw	'z'		;Regresar caracter correspondiente al offset
	retlw	0		;Final de la tabla


;*****************************************************************************
;
;	200		ENVIAR DATO SERIAL                      ENVIAR_DATO_SERIAL
;
;*****************************************************************************
;Se realiza transmision serial a una velocidad de 1200bps, con datos de
;8 bits, sin paridad, con un bit de paro, sin control deflujo; a traves del
; pin RA3. El dato a transmitir se recibe del acomulador W.

ENVIAR_DATO_SERIAL

bsf		PORTA,TX	;pone linea en reposo

clrwdt
movwf		DatoTX		;Cargar el contenido de W a DatoTX
movlw		8		;Cargar el numero de bits que se transmitiran
movwf		ContBITS	;Contador de bits
bcf		PORTA,TX	;Colocar la linea de TX en bajo para generar
				;el bit de arranque.
call		RETARDO833	;Generar un retardo de aproximadamente 833us

TXsig	

bcf		PORTA,TX	;Colocar la linea TX en bajo
bcf		STATUS,C	;Limpiar al acarreo (para evitar errores)
rrf		DatoTX		;pasar el LBS de DatoTX a el acarreo
btfsc		STATUS,C	;pregunta si el bit es cero
bsf		PORTA,TX	;Si es uno, colocar la linea en "1"
call		RETARDO833	;Generar un retardo de aproximadamente 833us
decfsz		ContBITS	;decrementar el contador de bits,salta si es
				;cero
goto		TXsig		;Repetir la transmision de bit
bsf		PORTA,TX	;Colocar la linea TX en alto para generar
call		RETARDO833	;el bit de paro
return				;regresar

;*****************************************************************************
;
;	210		RETARDO DE 833us		RETARDO_DE_833us  
;
;*****************************************************************************
;Genera un retardo de 833us, para poder transmitir a la velocidad 
;de 1200bps.

RETARDO833

movlw	.166		;retardo de 833us aprox.
movwf	ContDEL		;contador para generar retardo
RETARDO
	nop
	nop
decfsz	ContDEL		;decrementar contador de retardo
goto	RETARDO		;repetir el retardo
	
return			;regresar
;--------------------------------------------------------------------------
end

Hosted by www.Geocities.ws

1