Está en la página 1de 10

Escuela Superior Politcnica de

Chimborazo

Informe
Comunicacin Serial
Microcontroladores

Comunicacin Serial Microcontroladores


Microcontroladores
Ingeniera Electrnica en Control y Redes Industriales

Resumen El presente proyecto ha


sido desarrollado con el objetivo de
analizar la utilidad e importancia del
uso de los microcontroladores en el
desarrollo de cualquier tipo de
tecnologa, a lo largo de nuestra
carrera
y
vida
profesional,
determinando asi indispensable el
tener dominio de la programacin de
los mismos para su correcto uso en
aplicaciones fsicas y su integracin
con otras tecnologas.
En
particular
analizamos
la
comunicacin serial simplex a travs
de una comunicacin pic a pic
poniendo
en
prctica
los
conocimientos adquiridos en clase..

ndice de Trminos microcontroladores,


comunicacin serial, pic, tecnologas.
I. INTRODUCCIN
Existen dos formas de realizar una
comunicacin binaria, la paralela y la serial.
La comunicacin paralela como por ejemplo
la comunicacin del PIC con el CI. 7447 de.,
en donde los datos viajan simultneamente a
travs de los 4 hilos, tiene la ventaja de que
la transferencia de datos es ms rpida, pero
el inconveniente es que necesitamos un
cable por cada bit de dato, lo que encarece y
dificulta el diseo de las placas, otro
inconveniente es la capacitancia que genera
los conductores por lo que la transmisin se
vuelve defectuosa a partir de unos pocos

metros.
La comunicacin serial en cambio es
mucho ms lenta debido a que transmite bit
por bit pero tiene la ventaja de necesitar
menor cantidad de hilos, y adems se puede
extender la comunicacin a mayor distancia,
por ejemplo; en la norma RS232 a 15 mts.,
en la norma RS422/485 a 1200mts y
utilizando un MODEM, pues a cualquier
parte del mundo.
Existen dos formas de realizar la
comunicacin serial: la sincrnica y la
asincrnica, la diferencia entre estas dos
formas de comunicacin es que la
comunicacin sincrnica adems de la lnea
para la transmisin de datos, necesita otra
lnea que contenga los pulsos de reloj, estos
a
su vez indican cuando un dato es vlido.
Por otra parte la comunicacin serial
asincrnica no necesita pulsos de reloj, en su
lugar utiliza mecanismo como referencia
tierra (RS232) o voltajes diferenciales
(RS422/485), en donde la duracin de cada
bit es determinada por la velocidad de
transmisin de datos que se debe definir
previamente entre ambos equipos.
II. FUNDAMENTACIN
MODOS DE TRANSMISIN DE
DATOS.

Se incluye este literal para poder


entender mejor las prcticas que
ms adelante realizaremos, pues
mencionaremos algunas palabras
que podra encontrar su significado
en este literal.
Los modos de transmisin de datos
se dividen en cuatro tipos y estos
son:
- Simplex. Se dice a la transmisin
que puede ocurrir en un slo
sentido, sea slo para recibir o slo
para transmitir. Una ubicacin
puede ser un transmisor o un
receptor, pero no ambos a la vez,
un
ejemplo
claro
es
la
radiodifusin, en donde la estacin
es el transmisor y los radios son los
receptores.
-Half-duplex. Se refiere a la
transmisin que puede ocurrir en
ambos sentidos pero no al mismo
tiempo, en donde una ubicacin
puede ser un transmisor y un
receptor, pero no los dos al mismo
tiempo, un ejemplo son los
llamados radios WALKING TALKING,
en donde un operador presiona el
botn y habla, luego suelta el
botn y el otro usuario presiona el
botn para contestar.
- Full-duplex. Se dice a la
transmisin que puede ocurrir en
ambos sentidos y al mismo tiempo,
tambin se los conoce con el
nombre de lneas simultneas de
doble sentido, una ubicacin puede
transmitir
y
recibir
simultneamente,
siempre
y
cuando la estacin a la que est

transmitiendo tambin sea la


estacin de la cual est recibiendo
un ejemplo es la telefona mvil.
- Full/full-duplex. Con este modo de
transmisin es posible transmitir y
recibir simultneamente, pero no
necesariamente entre las dos
ubicaciones, es decir una estacin
puede transmitir a una segunda
estacin y recibir de una tercera
estacin al mismo tiempo. Esta
transmisin
se
utilizan
casi
exclusivamente con circuitos de
comunicacin de datos.
III. METODOLOGA
Para el desarrollo de nuestro
proyecto hemos utilizado:

PIC 16F877A
Teclado matricial
LCD 16x2
Sensores Analgicos
Sensores digitales
Rels
Ventilador
Foco

Se ha programado en lenguaje
Microcode, utilizando conversin
analgica digital, ingreso y lectura
de datos desde un teclado , entre
otros conocimientos adquiridos en
clase.
Nuestro programa consta de un
menos visualizado en un display
que nos permite tomar valores
desde el teclado para elegir
opciones cuyo desarrollo ser
visualizado en el segundo display.

El valor de uno de los sensores de


entrada determinar el encendido
o apagado de dos actuadores, en
este caso un ventilados y un foco,
conectados a un rel en la etapa de
potencia.

DEFINE LCD_RSREG PORTE


DEFINE LCD_RSBIT 0
DEFINE LCD_EREG PORTE
DEFINE LCD_EBIT 1

NUMERO VAR BYTE ;variable nmero


para almacenar la tecla pulsada
R VAR BYTE ;variable r para hacer
repeticiones
H var byte
x VAR BYTE
A VAR PORTD.0 ;nombres para los
pines de las filas

RESULTADOS
Podemos observar en nuestro
proyecto que pudimos integrar en
un solo trabajo la mayora de
conocimientos adquiridos en clase,
logrando comunicar dos pics a
travs de comunicacin serial
logrando interaccin entre ellos.
REFERENCIAS

[1] Reyes, Carlos. Microcontroladores


PIC. M[exico . Ediciones Pearson,
2008, 3era Edicin

B VAR PORTD.1
C VAR PORTD.2
D VAR PORTD.3
UNO VAR PORTD.4 ;nombres para los
pines de las columnas
DOS VAR PORTD.5
TRES VAR PORTD.6
CUATRO VAR PORTD.7

ON INTERRUPT GOTO VIZUALIZAR


ANEXOS

INTCON=%10010000

PROGRAMACIN
EMISOR

PROPRIN:

ADCON1=7

SETPRIME VAR BYTE ;

DEFINE OSC 4 ; OSCILADOR 4MHZ

SETSEGUN VAR BYTE ;

DEFINE LCD_DREG PORTA

SETERCER VAR BYTE ;

DEFINE LCD_DBIT 0

SETCUART VAR BYTE ;

INICIANDO:
GOTO TECLAUNO
PAUSE 200 ;retardo para esperar que
funcione el LCD
LCDOUT $FE, 1 ;limpia la pantalla y
coloca el cursor al comienzo
LCDOUT $FE, 1,"*****ESPOCH*****"
LCDOUT $FE, $C0,"*****EIECRI*****"
pause 500
LCDOUT $FE,1,"CODIGOS:"
LCDOUT $FE,$C0,"
270"

308-259-288-

PAUSE 500
LCDOUT $FE, 1,"INICIANDO......."
PAUSE 500
LCDOUT $FE, 1
LCDOUT $FE, $83,"BIENVENIDO"
pause 1000
LCDOUT $FE, 1,"Ingrese la Clave"

; EEPROM 0, [ 2,5,7,9 ] ;cargar la


memoria EEPROM desde la direccin 0
en adelante

CAMBIAR:
LCDOUT $FE, 1,"NUEVA PASS"
GRABAUNO: ;programa para cambiar
la clave
GOSUB ESPACIO
GOSUB BARRIDO : GOSUB ESPACIO :
LCDOUT $FE, $C0,"x" ;ir a barrido y
retorna a un antirrebote
WRITE 0,NUMERO ;guardar en la
EEPROM 0 el valor de nmero
GRABADOS:
GOSUB BARRIDO : GOSUB ESPACIO :
LCDOUT $FE, $C0,"xx" ;ir a barrido y
retorna a un antirrebote
WRITE 1,NUMERO ;guardar en la
EEPROM 1 el valor de nmero
GRABATRES:
GOSUB BARRIDO : GOSUB ESPACIO :
LCDOUT $FE, $C0,"xxx" ;ir a barrido y
retorna a un antirrebote
WRITE 2,NUMERO ;guardar en la
EEPROM 2 el valor de nmero

GRABACUATRO:

LEER:
READ 0,SETPRIME ;leer el dato de la
EEPROM 0 y guardar en setprime

GOSUB BARRIDO : GOSUB ESPACIO :


LCDOUT $FE, $C0,"xxxx" ;ir a barrido y
retorna a un antirrebote

READ 1,SETSEGUN ;leer el dato de la


EEPROM 1 y guardar en setsegun

WRITE 3,NUMERO ;guardar en la


EEPROM 3 el valor de nmero

READ 2,SETERCER ;leer el dato de la


EEPROM 2 y guardar en setercer
READ 3,SETCUART ;leer el dato de la
EEPROM 3 y guardar en setcuart

LCDOUT $FE, 1,"PRESIONE D."


LCDOUT $FE, $C0,"PARA CONTINUAR"
READ 0,SETPRIME ;leer el dato de la
EEPROM 0 y guardar en setprime

READ 1,SETSEGUN ;leer el dato de la


EEPROM 1 y guardar en setsegun
READ 2,SETERCER ;leer el dato de la
EEPROM 2 y guardar en setercer
READ 3,SETCUART ;leer el dato de la
EEPROM 3 y guardar en setcuart
PORTB=0
GOSUB BARRIDO
IF
NUMERO=13
INICIANDO

THEN

GOTO

low C ;sensar la fila C


IF UNO = 0 THEN NUMERO =7 :
RETURN
IF DOS = 0 THEN NUMERO =8 :
RETURN
IF TRES = 0 THEN NUMERO =9 :
RETURN
IF CUATRO=0 THEN NUMERO =12:
RETURN
high C
low D ;sensar la fila D

BARRIDO:
low A ;sensar la fila A
IF UNO = 0 THEN NUMERO =1
:RETURN
;tecla
pulsada
retorne
cargada con 1
IF DOS = 0 THEN NUMERO =2
:RETURN
;tecla
pulsada
retorne
cargada con 2
IF TRES = 0 THEN NUMERO =3
:RETURN
;tecla
pulsada
retorne
cargada con 3
IF CUATRO=0 THEN NUMERO
=10:RETURN ;tecla pulsada retorne
cargada con 10

IF UNO = 0 THEN NUMERO =14:


RETURN
IF DOS = 0 THEN NUMERO =0
:RETURN
IF TRES = 0 THEN NUMERO =15:
RETURN
IF CUATRO= 0 THEN NUMERO =13:
RETURN
high D
PAUSE 10
GOTO BARRIDO

high A

;
*****************
programa
antirrebote de teclas *************

low B ;sensar la fila B

PTECLA:

IF UNO = 0 THEN NUMERO =4 :


RETURN

if h=2 then lcdout $FE, $C0,"xx"

IF DOS = 0 THEN NUMERO =5 :


RETURN

if h=4 then lcdout $FE, $C0,"xxxx"

IF TRES = 0 THEN NUMERO =6 :


RETURN
IF CUATRO=0 THEN NUMERO =11:
RETURN
high B

de

if h=3 then lcdout $FE, $C0,"xxx"

h=H+1
ESPACIO: ;programa de antirrebote de
teclas
IF UNO = 0 THEN ESPACIO ;si la tecla
sigue pulsada ir espacio

IF DOS = 0 THEN ESPACIO ;si la tecla


sigue pulsada ir espacio
IF TRES = 0 THEN ESPACIO ;si la tecla
sigue pulsada ir espacio
IF CUATRO= 0 THEN ESPACIO ;si la
tecla sigue pulsada ir espacio
PAUSE 25

GOTO FALSO2 ;caso contrario ir a lazo


falso
TECLACUATRO:
h=4

RETURN ;retorna si se suelta las teclas


; ***************** comparacin
claves ************************

IF numero = setercer THEN


TECLACUATRO ;si el nmero es igual a
setercer

de

TECLAUNO:
h=1
GOSUB BARRIDO ;ir a barrido y
retornar con un valor
lcdout $FE, $C0,"x"
GOSUB PTECLA ;enva a un programa
antirrebote para soltar tecla
IF numero = setprime THEN
TECLADOS ;si el nmero es igual a
setprime
GOTO FALSO ;caso contrario ir a lazo
falso
TECLADOS:
h=2
GOSUB BARRIDO:GOSUB PTECLA ;ir a
barrido y retornar con un valor
IF numero = setsegun THEN
TECLATRES ;si el nmero es igual a
setsegun
GOTO FALSO1 ;caso contrario ir a lazo
falso
TECLATRES:
h=3
GOSUB BARRIDO:GOSUB PTECLA ;ir a
barrido y retornar con un valor

GOSUB BARRIDO :GOSUB PTECLA ;ir a


barrido y retornar con un valor
IF numero = setcuart THEN MENU
GOTO FALSO3 ;caso contrario ir a lazo
falso

MENU:
PORTB=0
LCDOUT
$FE,
Principal":pause 1000
LCDOUT $FE, 1,"1.A/D

1,"Menu
2.DIG"

LCDOUT $FE, $C0,"3.SENSOR 4.Salir"


gosub BARRIDO
if numero = 1 then ENVIO1
if numero = 2 then ENVIO2
if numero = 3 then ENVIO3
if numero = 4 then goto INICIANDO
IF NUMERO = 5 THEN GOTO CAMBIAR

; ***************** lazos falsos teclas


errneas *****************
FALSO:
GOSUB BARRIDO:GOSUB PTECLA
FALSO1: ;clave
termine de

slo

espera

GOSUB BARRIDO :GOSUB PTECLA

que

FALSO2:

GOTO MENU

GOSUB BARRIDO :GOSUB PTECLA


FALSO3:
PAUSe 200
LCDOUT $FE, 1,"Clave Incorrecta"

ENVIO3:
SEROUT PORTC.6,N2400,["C"]
PAUSE 500

pause 2000

GOTO MENU

lcdout $FE,1,"Ingrese la clave"

GOTO PROPRIN

goto TECLAUNO
DISABLE
ENVIO1:

VIZUALIZAR:

SEROUT PORTC.6,N2400,["A"]

SEROUT PORTC.6,N2400,["D"]

PAUSE 500

PAUSE 500

GOTO MENU

INTCON=%10010000
RESUME

ENVIO2:

ENABLE

SEROUT PORTC.6,N2400,["B"]
PAUSE 500

END

RECEPTOR
INCLUDE "MODEDEFS.BAS"

DEFINE LCD_EBIT 2

@DEVICE_PIC16F877A_XT_OSC
@DEVICE_PIC16F877A_MCLR_OFF

DEFINE ADC_BITS 8
DEFINE ADC_CLOCK 3

DEFINE OSC 4

DEFINE ADC_SAMPLEUS 50

DEFINE LCD_DREG PORTD

DATOS2 VAR BYTE

DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTD

SERVO VAR PORTB.4

DEFINE LCD_RSBIT 3

R VAR BYTE

DEFINE LCD_EREG PORTD

BOTON4 VAR PORTC.0

LED1 VAR PORTB.5


LED2 VAR PORTB.6

ENDIF

LED3 VAR PORTB.7

IF DATOS2="B" THEN
CONVERSORDIG:

RECIBIR:

BOTON1 VAR PORTB.1


BOTON2 VAR PORTB.2

SERIN PORTC.7,N2400,DATOS2
IF DATOS2="A" THEN
CONVERSORANA:
TRISA =%11 ;el puerto A.0 es de
entrada
ADCON1 = %00000000
DATOS VAR BYTE
DATOS1 VAR BYTE;crear variable
datos para guardar el resultado
PAUSE 500 ;esperar 0,5 seg.

LCDOUT $fe, 1,"D1 D2 D3"


CAMBIAR:
IF BOTON1=0 AND BOTON2=0 AND
BOTON3=0 THEN
LCDOUT $fe, $C0,DEC BOTON1,"
",DEC BOTON2,"
",DEC BOTON3," =
0"
low led1:low led2 :low led3
endif
IF BOTON1!=0 AND BOTON2=0 AND
BOTON3=0 THEN

INICIO:
if BOTON4=0 THEN
LCDOUT $fe, 1
LCDOUT $fe,$C0

LCDOUT $fe, $C0,DEC BOTON1,"


",DEC BOTON2,"
",DEC BOTON3," =
4"
high led1:low led2 :low led3

GOTO RECIBIR

endif

ENDIF
ADCIN 0, datos ;leer el canal 0 y
guardarlo en datos
ADCIN 1, datos1
LCDOUT $fe, 1,"POT 1: ", dec datos
LCDOUT $fe,$C0,"POT 2: ", DEC
datos1 ;desplegar el valor de datos en
decimal
PAUSE 300
GOTO INICIO
conversor A/D

BOTON3 VAR PORTB.3

;volver a medir el

IF BOTON1=0 AND BOTON2!=0 AND


BOTON3=0 THEN
LCDOUT $fe, $C0,DEC BOTON1,"
",DEC BOTON2,"
",DEC BOTON3," =
2"
low led1:high led2 :low led3
endif
IF BOTON1=0 AND BOTON2=0 AND
BOTON3!=0 THEN

LCDOUT $fe, $C0,DEC BOTON1,"


",DEC BOTON2,"
",DEC BOTON3," =
1"
low led1:low led2 :high led3
endif
IF BOTON1!=0 AND BOTON2!=0 AND
BOTON3=0 THEN
LCDOUT $fe, $C0,DEC BOTON1,"
",DEC BOTON2,"
",DEC BOTON3," =
6"
high led1:high led2 :low led3
endif
IF BOTON1=0 AND BOTON2!=0 AND
BOTON3!=0 THEN
LCDOUT $fe, $C0,DEC BOTON1,"
",DEC BOTON2,"
",DEC BOTON3," =
3"
low led1:high led2 :high led3

endif
IF BOTON1!=0 AND BOTON2!=0 AND
BOTON3!=0 THEN
LCDOUT $fe, $C0,DEC BOTON1,"
",DEC BOTON2,"
",DEC BOTON3," =
7"
high led1:high led2 :high led3
endif
if BOTON4=0 THEN
LCDOUT $FE,1
LCDOUT $FE,$C0
LOW LED1:LOW LED2:LOW LED3
GOTO RECIBIR
ENDIF
GOTO CAMBIAR
ENDIF

endif

IF DATOS2="C" THEN

IF BOTON1!=0 AND BOTON2=0 AND


BOTON3!=0 THEN

ENDIF

LCDOUT $fe, $C0,DEC BOTON1,"


",DEC BOTON2,"
",DEC BOTON3," =
5"
high led1:low led2 :high led3

GOTO RECIBIR
END

También podría gustarte