Está en la página 1de 28

PROGRAMACION DE

MICROCONTROLADORES PIC
NIVEL II
TRASMISION SERIE
El PIC16F877 contiene un modulo MSSP con dos puertas para
la comunicación serie:
 SSP: Puerto serie síncrono, se utiliza en la comunicación de
otros microcontroladores o con periféricos. Posee dos
interfaces de trabajo:
 SPI : Interfaz serie de Periféricos, desarrollada por la Motorola para la
comunicación entre microcontroladores de la misma o diferente
familia, en modo maestro-esclavo, Full – dúplex.
 I2C: Interfaz inter circuitos, desarrollada por la Phillips con una gran
capacidad para comunicar microcontroladores y periféricos, Half-
dúplex.
 Interfaz de comunicación serie (SCI) o receptor trasmisor
serie síncrono - asíncrono universal (USART), permite la
comunicación con un ordenador trabajando full-dúplex o half-
dúplex.
TRASMISION SERIE
USART
REGISTROS DE TRABAJO
TRASMISION SERIE
USART REGISTROS DE TRABAJO
SPBRG
Para generar esta frecuencia el USART dispone de un
generador de frecuencia en baudios, BRG, cuyo valor es
controlado por el contenido grabado en el registro SPBRG
(X). En modo asíncrono:

X es el valor a cargar en el registro SPBRG


Si BRGH=0 baja velocidad y K=64
Si BRGH=1 alta velocidad y K=16
TRASMISION SERIE
USART REGISTROS DE TRABAJO
SPBRG

En modo síncrono:
TRASMISION SERIE
USART EN CCS
DIRECTIVAS
 #USE RS232 (BAUD=baudios, XMIT=pin, RCV=pin...)
Esta directiva le dice al compilador la velocidad en
baudios y los pines utilizados para la I/O serie. Esta
directiva tiene efecto hasta que se encuentra otra
directiva RS232. La directiva #USE DELAY debe
aparecer antes de utilizar #USE RS232. Esta directiva
habilita el uso de funciones tales como GETCH,
PUTCHAR y PRINTF. Si la I/O no es estándar es preciso
poner las directivas FIXED_IO o FAST_IO delante de
#USE RS232.
TRASMISION SERIE
USART EN CCS
DIRECTIVAS
 #USE RS232 (BAUD=baudios, XMIT=pin, RCV=pin...)
Opciones:
TRASMISION SERIE
USART EN CCS
DIRECTIVAS
 #USE RS232 (BAUD=baudios, XMIT=pin, RCV=pin...)
Opciones:
TRASMISION SERIE
USART EN CCS
DIRECTIVAS
 #USE RS232 (BAUD=baudios, XMIT=pin, RCV=pin...)
Opciones:
TRASMISION SERIE
USART EN CCS
FUNCIONES
 Setup_uart(baud)
Baud es una constante que define la velocidad. Un 1
enciende el USART y con 0 lo apaga. Con cualquier valor
de velocidad, el USART se enciende.

 set_uart_speed(baud)
Esta función cambia la velocidad de transmisión de la
UART (Universal Asynchronous Receiver Transmitter) en
tiempo de ejecución.
TRASMISION SERIE
USART EN CCS
FUNCIONES TRASMISION DE DATOS
 putc(cdata)
 putchar(cdata)
cdata: carácter.
Estas funciones envían un carácter a la patilla XMIT del dispositivo
RS232. Es preciso utilizar la directiva #USE RS232 antes de la
llamada a esta función para que el compilador pueda determinar la
velocidad de transmisión y la patilla utilizada.

 puts(string)
Esta función envía cada carácter de string a la patilla XMIT del
dispositivo RS232. Una vez concluido el envío de todos los
caracteres la función envía un retorno de carro CR o RETURN
(ASCII 13) y un avance de línea LF o LINE-FEED (ASCII 10).
TRASMISION SERIE
USART EN CCS
FUNCIONES TRASMISION DE DATOS
 printf([function], string, [values])
La función de impresión formateada PRINTF saca una cadena de
caracteres al estándar serie RS-232 o a una función especificada. El
formato está relacionado con el argumento que ponemos dentro de
la cadena (string). Cuando se usan variables, string debe ser una
constante. El carácter % se pone dentro de string para indicar un
valor variable, seguido de uno o más caracteres que dan formato al
tipo de información a representar. Si ponemos %% obtenemos a la
salida un solo %. El formato tiene la forma genérica %wt, donde w es
optativo y puede ser 1,2,...,9. Esto es para especificar cuántos
carácteres son representados; si elegimos el formato 01,...,09
indicamos ceros a la izquierda, o también 1.1 a 9.9 para
representación en punto flotante. t es el tipo de formato y puede
ser uno de los siguientes:
TRASMISION SERIE
USART EN CCS
FUNCIONES TRASMISION DE DATOS
TRASMISION SERIE
USART EN CCS
FUNCIONES RECEPCION DE DATOS
 c = getc()
 c = getch()
 c = getchar()
Estas funciones esperan un carácter por la patilla RCV del
dispositivo RS232 y retorna el carácter recibido. Es preciso
utilizar la directiva #USE RS232 antes de la llamada a esta
función para que el compilador pueda determinar la velocidad
de transmisión y la patilla utilizada. La directiva #USE RS232
permanece efectiva hasta que se encuentre otra que anule la
anterior. Los procedimientos de I/O serie exigen incluir #USE
DELAY para ayudar a sincronizar de forma correcta la
velocidad de transmisión. Recordad que es necesario adaptar
los niveles de voltaje antes de conectar el PIC a un dispositivo
RS-232.
TRASMISION SERIE
USART EN CCS
FUNCIONES RECEPCION DE DATOS
 gets(char *string)
Esta función lee caracteres (usando GETC()) de la cadena
(string) hasta que encuentra un retorno de carro(valor ASCII
13). La cadena se termina con un 0.

 kbhit()
Esta función devuelve TRUE si el bit que se está enviando al pin
RCV de un dispositivo RS232, es el bit de inicio de un carácter.
Es preciso utilizar la directiva #USE RS232 antes de la llamada
a esta función para que el compilador pueda determinar la
velocidad en baudios y la patilla utilizada. La directiva #USE
RS232 permanece efectiva hasta que se encuentre otra que
anule la anterior.
TRASMISION SERIE
USART EN CCS
1. Enviar los datos del 0 al 10, en modo asíncrono, entre
dos PIC. Visualizar con un LCD los datos enviados y los
datos recibidos; la recepción del dato deberá ser por
interrupción del USART.

Se debe diseñar dos programas uno para cada PIC.


PIC 1 : enviando
PIC 2 : recibiendo
TRASMISION SERIE
USART EN CCS
PIC 1 : enviando PIC 2 : recibiendo
inicio
inicio
SERV_INT_RDA
Configurar
Configurar
RS232
RS232
i=1 A 10
ENVIAR VALOR Obtener dato
Habilitar
SERIAL
Interrupcion

MOSTRAR LCD
MOSTRAR LCD Fin_int

RETARDO
TRASMISION SERIE
USART EN CCS
2. Enviar los datos de una conversión AD al puerto serie
de un PC. inicio

Configurar CAD
RS232

TIEMPO

LEER
CONVERSION MOSTRAR LCD

ENVIAR
VALOR SERIAL RETARDO
TRASMISION SERIE
USART EN CCS
3. Enviar dato desde la PC al PIC por el puerto serie.
Cuando lo reciba debe visualizarse en un LCD y enviar
la palabra “recibido” al PC. Emplear Interrupciones
inicio SERV_INT_RDA

Configurar Obtener dato


RS232

Habilitar ENVIAR
Interrupción “Recibido” SERIAL

MOSTRAR LCD Fin_int


TRASMISION SERIE
I2C
 I²C es un bus de comunicaciones en serie. su diseñador es
Philips. La velocidad es de 100Kbits por segundo en el modo
estándar, aunque también permite velocidades de 3.4 Mbit/s.
 La principal característica de I²C es que utiliza dos líneas para
transmitir la información: una para los datos y por otra la señal
de reloj. También es necesaria una tercera línea, pero esta sólo
es la referencia (masa). Como suelen comunicarse circuitos en
una misma placa que comparten una misma masa esta tercera
línea no suele ser necesaria.
 Las líneas se llaman:
SDA: datos
SCL: reloj
GND: masa
TRASMISION SERIE

I2C
 Las dos primeras líneas son drenador abierto, por lo que necesitan
resistencias de pull-up.
 Los dispositivos conectados al bus I²C tienen una dirección única
para cada uno. También pueden ser maestros o esclavos. El dispositivo
maestro inicia la transferencia de datos y además genera la señal de
reloj, pero no es necesario que el maestro sea siempre el mismo
dispositivo, esta característica se la pueden ir pasando los
dispositivos que tengan esa capacidad. Esta característica hace que al
bus I²C se le denomine bus multimaestro.
TRASMISION SERIE
I2C
REGISTROS DE TRABAJO
SSPCON

SSPCON2
TRASMISION SERIE
I2C
REGISTROS DE TRABAJO
SSPSTAT
TRASMISION SERIE
I2C EN CCS
DIRECTIVAS
 #USE I2C (master/slave, SDA=Pin, SCL=Pin opciones)
La librería I2C contiene funciones para implementar un bus I2C.
Se generan las funciones software a menos que se especifique la opción
NOFORCE_SW. El modo SLAVE sólo debe usarse con las funciones SSP. Las
opciones son:
MASTER Establece el modo maestro o principal
SLAVE Modo esclavo
SCL=pin Especifica el pin SCL (es un bit de dirección)
SDA=pin Especifica el pin SDA
ADDRESS=nn Especifica la dirección del modo esclavo
FAST Usa la especificación rápida I2C
SLOW Usa la especificación lenta I2C
RESTART_WDT Reinicia el WDT mientras espera en I2C_READ
NOFORCE_SW Usa funciones hardware I2C
TRASMISION SERIE
I2C EN CCS
FUNCIONES
 i2c_start()
Esta función lanza una condición de inicio cuando el dispositivo
I2C está modo master. Es necesario especificar la directiva
#USE I2C antes de la llamada a I2C_START(). Después de la
condición de inicio el reloj se mantiene a nivel bajo hasta que
se llama a las funciones I2C_READ() e I2C_WRITE().

 i2c_stop()
Esta función lanza una condición de stop o paro cuando el
dispositivo I2C está modo máster. Hay que especificar la
directiva #USE I2C antes de la llamada a I2C_STOP()
TRASMISION SERIE
I2C EN CCS
FUNCIONES
 b = i2c_poll()
Esta función retorna un valor distinto de cero (TRUE) cuando el hardware
ha recibido un byte en el buffer. En ese momento se produce una llamada a
la función I2C_READ () que devolverá inmediatamente el byte recibido.
I2C_POLL() está disponible sólo cuando se usa el SSP.

 i2c_read()
La función I2C_READ() lee un byte del interface I2C. Es necesario
especificar la directiva #USE I2C antes de la llamada a I2C_READ(). En
modo 'master' esta función genera los impulsos de reloj y en modo
'esclavo' permanece a la espera de estos impulsos. Cuando la función
espera los datos no se puede producir ninguna interrupción. Si incluimos la
opción RESTART_WDT en la directiva #USE I2C entonces esta función
activa el WDT o perro guardián mientras está esperando. Se puede utilizar
el parámetro optativo '0' para que la función no envíe el carácter acuse de
recibo (ACK), de los datos recibidos.
TRASMISION SERIE
I2C EN CCS
FUNCIONES
 i2c_write(byte)
La función I2C_WRITE() envia un byte al interface I2C.
Hay que especificar la directiva #USE I2C antes de la
llamada a I2C_WRITE(). En modo 'master' la propia
función genera la señal de reloj con los datos y en modo
'esclavo' esperará la señal de reloj del 'master'. Esta
función devuelve el Bit de acuse de recibo (ACK).

 I2c_slaveaddr(int8 adr)
Se especifica la dirección del dispositivo en modo esclavo
TRASMISION SERIE
I2C EN CCS
1. Conectar dos microcontroladores PIC uno como maestro y
uno como esclavos en las direcciones 10h el maestro debe
enviar al esclavo un dato, conecte LCDs a cada
microcontrolador que describa la acción que esta
ejecutando.
2. Conectar tres microcontroladores, el maestro recibe una
señal analógica de voltaje (0-5) y la envía a los dos esclavos,
el primero de acuerdo al valor recibido emite una alarma si
sobrepasa los 3v. El segundo esclavo debe mostrar en un lcd
el estado de la entrada de acuerdo a lo siguiente:
0 a 2,99 V – Normal
>=3 V - ALARMA

También podría gustarte