Inicio
Siguiente
|
3.- Programa de transmisión asíncrona con el PIC16F84.
|
Diagrama de bloques.
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