Académique Documents
Professionnel Documents
Culture Documents
Resumen
Abstract
Introducción
1
Docente Facultad de Ingeniería, Universidad de Manizales. E-mail: wramirez@um.umanizales.edu.co
Debido a esto las transmisiones seriales han tenido gran aceptación entre los
fabricantes de sistemas electrónicos, razón por la cual se vio la necesidad de
2
CENTRO DE INVESTIGACIONES Y DESARROLLO – FACULTAD DE INGENIERÍA
crear un estándar que unificara este tipo de protocolo, este estándar fue
desarrollado y publicado por la Electronic Industries Association EIA y se
denominó como la recomendación RS-232C, fue diseñada inicialmente para
realizar conexiones entre terminales y módems, aunque hoy en día sea
utilizada en multitud de aplicaciones, es común encontrar equipos
electrónicos que incluyen interfaces seriales bajo este estándar. Debido a
esto es importante al desarrollar software para aplicaciones embebidas, tener
en cuenta que se hace casi indispensable tener previstas las opciones de
comunicación con otros dispositivos, ya sean de diseño propio o de terceros,
Estándar RS-232c
1
≅ 416 µSeg
2400
MAX232
4
CENTRO DE INVESTIGACIONES Y DESARROLLO – FACULTAD DE INGENIERÍA
+3 y +25 voltios
Desarrollo de la Aplicación
1
T= V
Nb
Donde
T= periodo de disparo del TMR0
V= velocidad de transmisión en baudios
Nb = Número de muestreos de cada bit
Para V=2400 bps se tiene T=1/2400/3 = 138 µs (si se toman tres muestras
por bit)
Se debe entonces configurar el TMR0 para interrumpirse cada 138 µs, para
realizar variaciones de la velocidad de transmisión es posible cambiar el valor
T o modificar el valor del cristal de oscilación externo del PIC, (para el
funcionamiento propuesto se maneja un cristal de 4 Mhz) si duplica el valor
del cristal (8Mhz) se duplica la taza de transmisión (4800 Mhz), para el
desarrollo del presente prototipo se implementó una taza de transmisión de
2400 baudios (cristal 4Mhz) por consideraciones de estabilidad y consumo
de potencia
6
CENTRO DE INVESTIGACIONES Y DESARROLLO – FACULTAD DE INGENIERÍA
Uart.asm
NroCiclos = 256+T1+T2-F
Donde
NroCiclos: Valor necesario para interrumpirse cada 138µs
T1= 2, Ciclos, durante los cuales el timer es deshabilitado al estar
reiniciándose
T2= 7, Valor del timer al momento de la recarga
F= 138µs, frecuencia deseada
Entonces
NroCiclos = 256+2+7-138=127
Figura 4. Palabra232
Donde:
Iniciotrans: Es el bit que indica que se puede dar inicio a la transmisión
MemobitAnt: Utilizado para tener la información del último bit recibido
Transmitiendo: Le indica a la rutina de la interrupción que se está llevando a
cabo una
Transmisión
CaracterListo: Indica al programa que ya se recibió un carácter valido
8
CENTRO DE INVESTIGACIONES Y DESARROLLO – FACULTAD DE INGENIERÍA
10
CENTRO DE INVESTIGACIONES Y DESARROLLO – FACULTAD DE INGENIERÍA
Figura 7. INTERRUPT
La sección de recepción está conformada por 7 subrutinas las cuales son
1. DeteccionInicio
2. BitInicioOk
3. IniciaRecepcion
4. Espera
5. RecibirBit
6. DetectaUltimoBit
7. StopBitOk
12
CENTRO DE INVESTIGACIONES Y DESARROLLO – FACULTAD DE INGENIERÍA
14
CENTRO DE INVESTIGACIONES Y DESARROLLO – FACULTAD DE INGENIERÍA
LIST P=16F84
INCLUDE "P16F84.INC" ; Librería estándar de declaraciones para
16F64
; Configuración Inicial: Code Protection=off
; WathDog: no, Power On Timer=yes, Oscilador: cristal
;*****************************
;* DECLARACION DE CONSTANTES *
;*****************************
;**********************************************
;* DECLARACION DE BANDERAS PROPOSITO GENERAL *
;**********************************************
;**************************************************
;* DECLARACION DE BANDERAS PARA EL PROTOCOLO 232 *
;**************************************************
;*****************************
;* DECLARACION DE REGISTROS *
;*****************************
16
CENTRO DE INVESTIGACIONES Y DESARROLLO – FACULTAD DE INGENIERÍA
;***********************************
;* DECLARACION DE otros REGISTROS *
;***********************************
;***********************************
;* INICIO CODIGO *
;***********************************
;*****************************
;* INTERRUPCION *
;*****************************
INTERRUPT
;--------------------------------------------------
;Se salvan los valores de los registros del sistema
;--------------------------------------------------
GuardaVector
movwf Wtemp
swapf STATUS, W
movwf STATUStemp
movf PCLATH, W
movwf PCLATHTemp
;--------------------------------------------------
;Se reinicia el conteo
;--------------------------------------------------
movlw DEFINET ; Recargar el TMR0 para otros
movwf TMR0 ; 138 microsegundos
bcf INTCON, T0IF ; Borrar banderas de interrupción
;----------------------------------------------------------------
;Tomar tres muestras de los datos de entrada para descartar oscilación
;----------------------------------------------------------------
MuestreaBit
clrf Promedio
btfsc PORTB, EntradaBits
incf Promedio, F
btfsc PORTB, EntradaBits
incf Promedio, F
btfsc PORTB, EntradaBits
incf Promedio, F ; En esta bandera se almacena el promedio
de
; los datos de entrada
;----------------------------------------------------------------
; Rutinas de transmisión
;----------------------------------------------------------------
transmisión
btfsc Palabra232, InicioTrans ; Si la bandera es verdadera
goto IniciaTransmision ; inicie la transmison
btfss Palabra232, Transmitiendo ; si no se está en proceso de
goto recepción ; transmisión ir a recepción.
decfsz TempoTx, F ; Transmisión en proceso, si no estan
goto recepción ; las tres muestras, ir a recepción
; si ya estan enviar el siguiente bit
;----------------------------------------------------------------
;enviar el siguiente bit
;----------------------------------------------------------------
EnviarBit
movf DatosTx, W ; Lleva el valor de DatoTx,0 a SalidaBits,
xorwf PORTA, W
andlw b'00000001'
xorwf PORTA, F
bsf STATUS, C ; C=1, al rotar DatosRx ingresa como el
rrf DatosTx, F ; Bit de parada
movlw 0x03 ; Se envia un bit cada tres llamados
movwf TempoTx ; a la interrupción
decfsz ContadorTx, F ; ya se enviaron los 10 bits?
goto recepción ; no, ir a recepción; si, finalizar TX
18
CENTRO DE INVESTIGACIONES Y DESARROLLO – FACULTAD DE INGENIERÍA
FinTransmision
bcf Palabra232, Transmitiendo ; fin de la transmisión
goto recepción ; ir a recibir otro bit
;----------------------------------------------------------------
;Transmitir un dato
;----------------------------------------------------------------
IniciaTransmision
movlw d'10' ; se tienen que enviar diez bits:
movwf ContadorTx ; 8 bits + 1 stop bit + 1 bit para separación
bsf Palabra232, Transmitiendo ; Activar transmisión
bcf Palabra232, InicioTrans ; desactivar Iniciar transmisión
movlw 0x03 ; hay que contar tres interrupciones
movwf TempoTx
bcf PORTA, SalidaBits ; Enviar start bit
;----------------------------------------------------------------
;Rutinas de recepción
;----------------------------------------------------------------
recepción
clrf PCLATH ; Segun el valor que traiga el registro
movf EstadoRx, W ; EstadoRx de las otras rutinas se
selecciona
addwf PCL, F ; la rutina actual
goto DeteccionInicio ; EstadoRx=0, Verfificar si hay Start
Bit
goto BitInicioOk ; EstadoRx=1, Comprobar que no sea falso
start
goto Iniciarecepcion ; EstadoRx=2, Empieza a capturar el
Byte
goto Espera ; EstadoRx=3, Espera la próxima INT
goto RecibirBit ; EstadoRx=4, Capturar el bit que sigue
goto DetectaUltimoBit ; EstadoRx=5, Ver si ya es el bit 7
goto Espera ; EstadoRx=6, Espera la próxima INT
goto StopBitOk ; EstadoRx=7, Recupera el byte completo
DeteccionInicio
btfss Palabra232, MemoBitAnt ; la linea estaba en 1?
goto END_INTERRUPT ; no, entonces no es Start Bit
btfsc Promedio, 1 ; si, pero, el dato actual es 0?
goto END_INTERRUPT ; no, falso arranque, esperar a otra
INT
incf EstadoRx, F ; si, entonces si es el Start bit, comenzar
goto END_INTERRUPT ; recepción, esperar el próximo ciclo
BitInicioOk
incf EstadoRx, F ; entró otro bit? no, entonces fue un
Iniciarecepcion
movlw 0x08 ; hay que capturar un byte
movwf CuentaByte
incf EstadoRx, F ; EstadoRx = 3
goto END_INTERRUPT
Espera
incf EstadoRx, F ; esperar otro ciclo
goto END_INTERRUPT
RecibirBit
rrf Promedio, F
rrf Promedio, F
rrf DatosRx, F ; se captura el bit actual
incf EstadoRx, F ; ir a "DetectaUltimoBit" a ver
; si es el ultimo
goto END_INTERRUPT
DetectaUltimoBit
movlw 0x06 ; sin es el ultimo espera la ultima vez
decfsz CuentaByte, F ; cuantos bits van?
movlw 0x03 ; todavía faltan bits ir a leer otro
movwf EstadoRx
goto END_INTERRUPT
StopBitOk
clrf EstadoRx ; Inicializar registro para otra lectura
btfss Promedio, 1
goto FalsoFin
bsf Palabra232, CaracterListo ; Indica que se tiene el
carácter
movf DatosRx, W ; Salvar
movwf UltimoCar
goto END_INTERRUPT
FalsoFin
clrf EstadoRx ; empezar de nuevo
;----------------------------------------------------------------
;Fin de Rutinas de recepción
;----------------------------------------------------------------
END_INTERRUPT
20
CENTRO DE INVESTIGACIONES Y DESARROLLO – FACULTAD DE INGENIERÍA
RecuperaVector
movf PCLATHTemp, W ; Recupera los registros
movwf PCLATH
swapf STATUStemp, W
movwf STATUS
swapf Wtemp, F
swapf Wtemp, W
RETFIE
;*****************************
;* FIN DE INTERRUPCION *
;*****************************
;*****************************
;* INICIALIZAR REGISTROS *
;*****************************
PIC_POWER_ON
clrwdt ; No se usa el watch dog timer
clrf INTCON ; ni el resto de las interrupciones
bsf STATUS, RP0 ; configurar los puertos
movlw b'00000000'
movwf TRISA
movlw b'00000001'
movwf TRISB
movlw b'00001000' ; Configurar las interrupciones
movwf OPTION_REG
bcf STATUS, RP0
clrf PORTB
movlw b'00000001' ; La linea de comunicaiones debe
movwf PORTA ; permanecer en 1
;---------------------------------------------------
; Borrar todas las posiciones de memoria
;---------------------------------------------------
movlw 0x0C ; hay que borrar 50 posiciones
BorraMem
clrf INDF
incf FSR, F
movlw 0x50 ; Ciclo repetido 50 veces
subwf FSR, W
btfss STATUS, C
goto BorraMem
;---------------------------------------------------
; Habilitar el TMR0
;---------------------------------------------------
clrf TMR0
bsf INTCON, T0IE ; Solo se habilita el TMR0
bsf INTCON, GIE
;*****************************
;* RUTINA PRINCIPAL *
;*****************************
MAIN
clrf Milis
EsperaLedActivo
btfsc Palabra232, CaracterListo ; ya se tiene el carácter?
call PreparaResp ; responder
movlw d'50'
subwf Milis, W ; si ya pasaron 500 milisegundos
btfss STATUS, C ; cambiar el estado de led piloto
goto EsperaLedActivo ; si no esperar (la variable Milis
call CambiaPiloto ; se actualiza en las INT
goto MAIN
;*****************************
;* FIN DE RUTINA PRINCIPAL *
;*****************************
;---------------------------------------------------
; Parpadeo del led piloto
;---------------------------------------------------
CambiaPiloto
movlw b'00100000' ; Invertir el estado del
xorwf PORTB, F ; Led
Return
;---------------------------------------------------
22
CENTRO DE INVESTIGACIONES Y DESARROLLO – FACULTAD DE INGENIERÍA
Perspectivas de Desarrollo
Bibliografía
www.maxim.com
www.microchip.com
24