You are on page 1of 13

PONTIFICIA UNIVERSIDAD CATLICA DEL PER

SECCIN ELECTRICIDAD Y ELECTRNICA


rea de Circuitos y Sistemas Electrnicos
/$%25$725,21

7(0325,=$'25(,17(5583&,21(6



,

2%-(7,92

$SUHQGHUD FRQILJXUDU HOWHPSRUL]DGRU\WUDEDMDU FRQODVLQWHUUXSFLRQHVFRQTXHFXHQWD

HOPLFURFRQWURODGRU$7PHJD


,,

0$7(5,$/(6<(48,32

PyGXORGHHQWUHQDPLHQWR$YU38&30HJD 5HYRSRVWHULRU 
&DEOHGHFRPXQLFDFLyQVHULDO,63 5HYRSRVWHULRU 
0yGXORGHHQWUDGDVDOLGD 5HYRSRVWHULRU 
&DEOHGHFRPXQLFDFLyQVHULDO56
)XHQWHGHDOLPHQWDFLyQGHYROWLRV
FRPSXWDGRUDSHUVRQDO
GLVFRGHGH0%
&DEOHVGHFRQH[LyQ



,,,+(55$0,(17$6'('(6$552//2

VMLab versin 3.11


AvrPUCP versin 0.96



,9

7(0325,=$'25&217$'257,0(5




(OPyGXORGHO7LPHUHVWDEDVDGRHQHOUHJLVWUR7&17TXHHVXQFRQWDGRUGHELWV

/D IUHFXHQFLD FRQ OD TXH VH LQFUHPHQWD OD FXHQWD GH HVWH UHJLVWUR HV FRQILJXUDEOH OD VHxDO GH
UHORMSXHGHYHQLUGHOSUHHVFDODGRURSXHGHVHUXQDVHxDOH[WHUQDDOPLFURFRQWURODGRU



/D PDQHUD PDV FRP~Q GH WUDEDMDU FRQ HO 7LPHU HV PDQHMDQGR ORV &RPSDUDGRUHV GH

6DOLGD (O 7LPHU  FXHQWD FRQ GRV XQLGDGHV GH FRPSDUDGRU GH VDOLGD &DGD FRPSDUDGRU GH
VDOLGD SRVHH XQ UHJLVWUR GH  ELWV 2&5$ \ 2&5% &DGD YH] TXH HO 7&17 LJXDOD D XQR GH
HVWRV UHJLVWURV FRPSDUDFLyQ H[LWRVD  XQ GHWHUPLQDGR ELW WRPD HO YDORU OyJLFR GH  2&)$ \
2&)%HQHOUHJLVWUR7,)5 



'H HVWD PDQHUD SRGHPRV WHPSRUL]DU D XQD IUHFXHQFLD GHVHDGD &RQRFLHQGR OD

IUHFXHQFLD GH LQFUHPHQWR GH 7&17 IUHFXHQFLD FRQILJXUDEOH  SRGHPRV FDOFXODU HO YDORU TXH
GHEHPRVGDUD2&5;SDUDTXHODFRPSDUDFLyQH[LWRVDVHSURGX]FDDODIUHFXHQFLDGHVHDGD



&XDQGR WUDEDMDPRVHQPRGR&7&ODFXHQWDHQ 7&17VHUHLQLFLDHQ FHURFDGDYH]TXH

VHSURGXFHODFRPSDUDFLyQH[LWRVD


352%/(0$'(6$552//$'2 7LPHUBVRQGHR 




(O VLJXLHQWH HMHPSOR PXHVWUD XQD FXHQWD HQ  OHGV TXH VH LQFUHPHQWD FDGD PV

9DPRVDWUDEDMDUFRQHO7LPHUHQPRGR&7&&DGDYH]TXHVHSURGXFHODFRPSDUDFLyQH[LWRVD
HOELW2&)$WRPDHOYDORUGH6HYDDVRQGHDUHOHVWDGRGHHVWHELW\FDGDYH]TXHWRPHHO
YDORUOyJLFRGH LQFUHPHQWDPRV ODFXHQWD(VQHFHVDULR SRQHUHOELW2&)$HQSDUDYROYHUD
VRQGHDU 3DUDTXHHVWHELWWRPHHOYDORUGHWHQHPRVTXHHVFULELUXQ 

IEE206 LABORATORIO DE SISTEMAS DIGITALES

PONTIFICIA UNIVERSIDAD CATLICA DEL PER


SECCIN ELECTRICIDAD Y ELECTRNICA
rea de Circuitos y Sistemas Electrnicos



D1
R1
X1

VDD
N1
ND2

N1
N2
180
PB0 PB0 N2

D2
R2
X2

VDD
N3
ND2

N3
N4
180
PB1 PB1 N4

D3
R3
X3

VDD
N5
ND2

N5
N6
180
PB2 PB2 N6

OHGV

D4
R4
X4

VDD
N7
ND2

N7
N8
180
PB3 PB3 N8

DUFKLYR

D5
R5
X5

VDD
N9
ND2

N9
N10
180
PB4 PB4 N10

D6
R6
X6

VDD
N11
ND2

N11
N12
180
PB5 PB5 N12

D7
R7
X7

VDD
N13
ND2

N13
N14
180
PB6 PB6 N14

D8
R8
X8

VDD
N15
ND2

N15
N16
180
PB7 PB7 N16











HVWi

(O KDUGZDUH GH HVWH SUREOHPD


FRQIRUPDGR

SRU

RFKR

FRQHFWDGRVDOSXHUWR%



$xDGLU

DO

7LPHUBVRQGHRSUMODVVLJXLHQWHVOtQHDV




'LDJUDPDGHIOXMR

Tmr1_sondeo
IN IC IO

Configurar puertos de
salida para leds
Configurar el
T em porizador
cuenta 0

S e cum pli el
tiem po ?

NO

SI

cuenta cuenta + 1
LE DS cuenta

IEE206 LABORATORIO DE SISTEMAS DIGITALES

PONTIFICIA UNIVERSIDAD CATLICA DEL PER


SECCIN ELECTRICIDAD Y ELECTRNICA
rea de Circuitos y Sistemas Electrnicos

//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//

********************************************************************
********************************************************************
*****
PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU
*****
*****
Laboratorio de Sistemas Digitales
*****
*****
*****
***** Nombre:
timer1_sondeo.c
*****
***** Autor:
Rolando Snchez
*****
***** Fecha:
Octubre 2005
*****
*****
*****
***** Descripcin: Mostramos en ocho leds, conectados al
*****
*****
Puerto B, una cuenta que se incrementa cada
*****
*****
250ms.
*****
*****
Utilizamos para la temporizacin el Timer1
*****
*****
en modo CTC.
*****
*****
*****
********************************************************************
********************************************************************

#include <avr\io.h>
//
//
//
//
//
//
//
//

********************************************************************
*****
Funcin que Configura el TIMER1
*****
********************************************************************
***** Pin OC1A desconectado: COM1A1 COM1A0 <- 00
*****
***** Modo CTC (tope OCCR1A):
*****
*****
WGM13 WGM12 WGM12 WGM10 < - 0100
*****
***** Preescalamiento 1:1024:
CS12 CS11 CS10 <- 101
*****
********************************************************************

void configura_TMR1(void)
{
TCCR1A = (0<<COM1A1 | 0<<COM1A0 | 0<<WGM11 | 0<<WGM10);
TCCR1B = (0<<WGM13 | 1<<WGM12 | 1<<CS12 | 0<<CS11 | 1<<CS10);
OCR1AH = 0x00;
OCR1AL = 0xF3;

// Valor asignado al registro OCR1A: 243 ($00F3)


// (1us)x(1024)x(243+1) = 249.8 ms

}
//
//
//
//
//

********************************************************************
********************************************************************
*****
PROGRAMA PRINCIPAL
*****
********************************************************************
********************************************************************

int main(void)
{
uint8_t cuenta;
DDRB = 0xFF;
PORTB = 0x00;

// Configuramos el puerto B como salida

configura_TMR1();

// Configuramos el Timer1

cuenta = 0;
while (1)
{
while ((TIFR & 1<<OCF1A) == 0);

// Sondeamos OCF1A esperando


// que sea 1 (TCNT1 = OCR1A)

TIFR = 0b00010000;

// Asignamos 0 a OCF1A (escribiendo 1)

cuenta = cuenta + 1;
PORTB = cuenta;

// Incrementamos "cuenta"
// y la mostramos en los leds.

}
}

IEE206 LABORATORIO DE SISTEMAS DIGITALES

PONTIFICIA UNIVERSIDAD CATLICA DEL PER


SECCIN ELECTRICIDAD Y ELECTRNICA
rea de Circuitos y Sistemas Electrnicos
9

,17(5583&,21(6

8QD FDUDFWHUtVWLFDPX\ LPSRUWDQWHGH ORVPLFURFRQWURODGRUHV\ PLFURSURFHVDGRUHV HVOD


FDSDFLGDGTXHWLHQHQGHPDQHMDULQWHUUXSFLRQHV

6H OODPD LQWHUUXSFLyQ D OD SURSLHGDG TXH WLHQH HO &38 GH FDPELDU UiSLGDPHQWH GH XQD
WDUHD D RWUD FXDQGR HV UHTXHULGR SRU XQ HYHQWR H[WHUQR DO &38 SXHGH VHU GHQWUR GHO
PLFURFRQWURODGRU R IXHUD GH pO  HVWH HYHQWR UHTXLHUH TXH VH HMHFXWH XQ FRQMXQWR GH
LQVWUXFFLRQHVDVRFLDGDVDpO

(VWHFRQMXQWRGHLQVWUXFFLRQHVVHGHQRPLQD5XWLQDGH6HUYLFLRGH,QWHUUXSFLyQ 56, \
FXDQGR OD SHWLFLyQ GHO HYHQWR HV DWHQGLGD SRU HO &38 VH LQWHUUXPSH HO IOXMR QRUPDO GH
HMHFXFLyQ GH XQ SURJUDPD \ VH VDOWD D HMHFXWDU OD 56, 8QD YH] WHUPLQDGD pVWD VH UHWRUQD D
HMHFXWDUODLQVWUXFFLyQVLJXLHQWHDODTXHVHHMHFXWyDQWHVTXHVHVDOWDUDDOD56,

/DV IXHQWHV GH LQWHUUXSFLyQ TXH VRSRUWD  HO PLFURFRQWURODGRU $7PHJD VRQ ODV TXH VH
PXHVWUDHQODWDEOD





&XDQGR SURJUDPDPRVHQ&XWLOL]DPRVODPDFUR 6,*1$/ VLJQDPH TXHVHHQFDUJDGH
LQVWDODU HO YHFWRU GH LQWHUUXSFLyQ \ HMHFXWDU XQD IXQFLyQ FXDQGR VH SURGXFH OD VROLFLWXG GH
LQWHUUXSFLyQ

(ODUJXPHQWRGH

VLJQDPHGHEHVHUXQRGHORVPRVWUDGRVHQODVLJXLHQWHWDEOD

IEE206 LABORATORIO DE SISTEMAS DIGITALES

PONTIFICIA UNIVERSIDAD CATLICA DEL PER


SECCIN ELECTRICIDAD Y ELECTRNICA
rea de Circuitos y Sistemas Electrnicos



)XHQWHGH,QWHUUXSFLyQ

$UJXPHQWRSDUD6,*1$/

VLJQDPH 

,17

6,*B,17(55837

,17

6,*B,17(55837

7,0(5&203

6,*B287387B&203$5(

7,0(529)

6,*B29(5)/2:

7,0(5&$37

6,*B,1387B&$3785( 

7,0(5&203$

6,*B287387B&203$5($

7,0(5&203%

6,*B287387B&203$5(%

7,0(529)

6,*B29(5)/2:

7,0(529)

6,*B29(5)/2:

63,67&

6,*B63,

86$575;&

6,*B8$57B5(&9

86$578'5(

6,*B8$57B'$7$

86$577;&

6,*B8$57B75$16

$'&

6,*B$'&

((B5'<

6,*B((3520B5($'<

$1$B&203

6,*B&203$5$725

7:,

6,*B:,5(B6(5,$/

630B5'<

6,*B630B5($'<




3DUD KDELOLWDU H LQKDELOLWDU ODV LQWHUUXSFLRQHV VH XWLOL]DQ ODV IXQFLRQHV VHL  \ FOL 

UHVSHFWLYDPHQWHTXHHMHFXWDQODVLQVWUXFFLRQHV6(, \&/,6(,KDFHTXHODEDQGHUD,GHO65(*
WRPHHOYDORUOyJLFRGH\FRQ&/,ODEDQGHUD,WRPDHOYDORUGH


9,

,17(5583&,21(6(;7(51$6


/DV IXHQWHV GH HVWDV LQWHUUXSFLRQHV FRPR VX QRPEUH OR LQGLFD VRQ H[WHUQDV DO
PLFURFRQWURODGRU ODV VHxDOHV TXH LQYROXFUDQ D HVWDV LQWHUUXSFLRQHV VH FRQHFWDQ ItVLFDPHQWH D
DOJ~Q SLQ GHO PLFURFRQWURODGRU (O $7PHJD SRVHH GRV IXHQWHV GH LQWHUUXSFLRQHV H[WHUQDV
,17H,17





IEE206 LABORATORIO DE SISTEMAS DIGITALES

PONTIFICIA UNIVERSIDAD CATLICA DEL PER


SECCIN ELECTRICIDAD Y ELECTRNICA
rea de Circuitos y Sistemas Electrnicos

3XHGHKDEHUSHWLFLyQGHLQWHUUXSFLyQHQORVVLJXLHQWHVFDVRV


1LYHOEDMRHQ,17\R,17
&DPELRGHQLYHOHQ,17\R,17
)ODQFRGHEDMDGDHQ,17\R,17
)ODQFRGHVXELGD,17\R,17


(OHYHQWRORFRQILJXUDPRVHQHOUHJLVWUR0&8&5

ISC11
0
0
1
1

ISC10
0
1
0
1

Descripcin
Nivel bajo en INT1 solicita interrupcin
Cambio de nivel en INT1 solicita interrupcin
Flanco de bajada en INT1 solicita interrupcin
Flanco de subida en INT1 solicita interrupcin

ISC01
0
0
1
1

ISC00
0
1
0
1

Descripcin
Nivel bajo en INT0 solicita interrupcin
Cambio de nivel en INT0 solicita interrupcin
Flanco de bajada en INT0 solicita interrupcin
Flanco de subida en INT0 solicita interrupcin


352%/(0$'(6$552//$'2 ,QWBH[W 


(VWH HMHPSOR PXHVWUD XQD FXHQWD HQ  OHGV TXH VH LQFUHPHQWD FDGD YH] TXH VH
SUHVLRQDXQSXOVDGRU/RVOHGVHVWiQFRQHFWDGRVDO3XHUWR%\HOSXOVDGRUHVWiFRQHFWDGRDOSLQ
,17 3' TXHUHPRVTXHODFXHQWDVHLQFUHPHQWHHQFDGDIODQFRGHVXELGDHQ,17

3DUD OD VLPXODFLyQ HQ 90/$% HQ HO DUFKLYR ,QWBH[WSUM HVFULELU ODV PLVPDV OtQHDV TXH
HQHOSUREOHPDDQWHULRUSDUDGHILQLUORVOHGV\DxDGLUORVLJXLHQWHSDUDGHILQLUHOSXOVDGRU


K0
R10

VDD
VSS

PD2
PD2

3.3K





Programa Principal
RSI Externa 0

INICIO

Configurar puertos de
salida para leds

INICIO

cuenta cuenta + 1

Configurar Interrupcin
externa

LEDS cuenta
cuenta 0
FIN
FIN

Int_ext0

IEE206 LABORATORIO DE SISTEMAS DIGITALES

PONTIFICIA UNIVERSIDAD CATLICA DEL PER


SECCIN ELECTRICIDAD Y ELECTRNICA
rea de Circuitos y Sistemas Electrnicos

//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//

********************************************************************
********************************************************************
*****
PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU
*****
*****
Laboratorio de Sistemas Digitales
*****
*****
*****
***** Nombre:
int_ext0.c
*****
***** Autor:
Rolando Snchez
*****
***** Fecha:
Octubre 2005
*****
*****
*****
***** Descripcin: Mostramos en ocho leds, conectados al
*****
*****
Puerto B, una cuenta que se incrementa cada
*****
*****
vez que se presiona un pulsador conectado
*****
*****
a INT0 (PD2).
*****
*****
Utilizamos la interrupcin externa 0 (INT0)
*****
*****
para detectar flancos de subida en INT0.
*****
*****
*****
********************************************************************
********************************************************************

// *****

L I B R E R I A S

I N C L U I D A S

*****

G L O B A L E S

*****

#include <avr\io.h>
#include <avr\interrupt.h>
#include <avr\signal.h>

// *****

V A R I A B L E S

uint8_t cuenta;
//
//
//
//
//
//
//
//

********************************************************************
*****
Interrupcin INT0
*****
********************************************************************
*****
Configurada para que se ejecute en cada flanco
*****
*****
de subida.
*****
*****
Incrementamos el valor de "cuenta" y lo muestra *****
*****
en los leds.
*****
********************************************************************

SIGNAL(SIG_INTERRUPT0)
{
cuenta = cuenta + 1;
PORTB = cuenta;
}

//
//
//
//
//
//

********************************************************************
*****
Funcin que Configura INT0
*****
********************************************************************
*****
Flanco de subida en INT0: ISC01 ISC00 <- 11
*****
*****
Habilitamos la interrupcin INT0: INT0 <- 1
*****
********************************************************************

void configura_INT0(void)
{
MCUCR = MCUCR | 1<<ISC01 | 1<<ISC00 ;
GICR = GICR | 1<<INT0;
}

//
//
//
//
//

********************************************************************
********************************************************************
*****
PROGRAMA PRINCIPAL
*****
********************************************************************
********************************************************************

int main(void)
{
cli();

// Inhabilitamos las interrupciones

DDRB = 0xFF;
PORTB = 0x00;

// Configuramos el puerto B como salida

IEE206 LABORATORIO DE SISTEMAS DIGITALES

PONTIFICIA UNIVERSIDAD CATLICA DEL PER


SECCIN ELECTRICIDAD Y ELECTRNICA
rea de Circuitos y Sistemas Electrnicos
configura_INT0();

// Configuramos la interrupcin INT0

cuenta = 0;
sei();

// Habilitamos las interrupciones.

while (1);

// Lazo infinito que no hace nada.

352%/(0$'(6$552//$'2 7PUBLQW 


9DPRVDGHVDUUROODUHOSUREOHPDXWLOL]DQGRLQWHUUXSFLRQHV

(QHOSUREOHPDVHVRQGHDHOELW2&)$SDUDGHWHUPLQDUVLHO7&17LJXDOyDO2&5$
DKRUD HVWR QR HV QHFHVDULR SRUTXH FDGD YH] TXH VH SURGX]FD OD FRPSDUDFLyQ H[LWRVD VH
SURGXFLUiXQDVROLFLWXGGHLQWHUUXSFLyQ

(VWD LQWHUUXSFLyQ VH GHQRPLQD 7,0(5 &203$ \ SDUD KDELOLWDUOD HV QHFHVDULR HVFULELU
XQHQHOELW2&,($GHOUHJLVWUR7,06.



Programa Principal
INICIO

RSI Timer 1
(cada 250ms)

Configurar puertos de
salida para leds

INICIO

Configurar Interrupcin
del temporizador

cuenta cuenta + 1

cuenta 0
FIN

LEDS cuenta
Tmr1_int

//
//
//
//
//
//
//
//
//
//
//
//

********************************************************************
********************************************************************
*****
PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU
*****
*****
Laboratorio de Sistemas Digitales
*****
*****
*****
***** Nombre:
tmr1_int.c
*****
***** Autor:
Rolando Snchez
*****
***** Fecha:
Octubre 2005
*****
*****
*****
***** Descripcin: Mostramos en ocho leds, conectados al
*****
*****
Puerto B, una cuenta que se incrementa cada
*****
*****
250ms.
*****

IEE206 LABORATORIO DE SISTEMAS DIGITALES

PONTIFICIA UNIVERSIDAD CATLICA DEL PER


SECCIN ELECTRICIDAD Y ELECTRNICA
rea de Circuitos y Sistemas Electrnicos
//
//
//
//
//
//

*****
Utilizamos para la temporizacin el Timer1
*****
*****
en modo CTC. Trabajamos con la interrupcin
*****
*****
TIMER1 COMPA.
*****
*****
*****
********************************************************************
********************************************************************

// *****

L I B R E R I A S

I N C L U I D A S

*****

G L O B A L E S

*****

#include <avr\io.h>
#include <avr\interrupt.h>
#include <avr\signal.h>

// *****

V A R I A B L E S

uint8_t cuenta;

//
//
//
//
//
//

********************************************************************
*****
Interrupcin TIMER1 COMPA
*****
********************************************************************
*****
Configurada para que se ejecute cada 250ms.
*****
*****
Incrementamos el valor de "cuenta"
*****
********************************************************************

SIGNAL(SIG_OUTPUT_COMPARE1A)
{
cuenta = cuenta + 1;
}
//
//
//
//
//
//
//
//
//

********************************************************************
*****
Funcin que Configura el TIMER1
*****
********************************************************************
*****
Pin OC1A desconectado:
COM1A1 COM1A0 <- 00
*****
*****
Modo CTC (tope OCCR1A):
*****
*****
WGM13 WGM12 WGM12 WGM10 < - 0100
*****
*****
Preescalamiento 1:1024:
CS12 CS11 CS10 <- 101 *****
*****
Habilitamos interrupcin TIMER1 COMPA: OCIE1A <- 1 *****
********************************************************************

void configura_TMR1(void)
{
TCCR1A = (0<<COM1A1 | 0<<COM1A0 | 0<<WGM11 | 0<<WGM10);
TCCR1B = (0<<WGM13 | 1<<WGM12 | 1<<CS12 | 0<<CS11 | 1<<CS10);
OCR1AH = 0x00;
OCR1AL = 0xF3;

// Valor asignado al registro OCR1A: 243 ($00F3)


// (1us)x(1024)x(243+1) = 249.8 ms

TIMSK = (TIMSK|1<<OCIE1A);

// Habilitamos interrupcin TIMER1 COMPA

//
//
//
//
//

********************************************************************
********************************************************************
*****
PROGRAMA PRINCIPAL
*****
********************************************************************
********************************************************************

int main(void)
{
cli();

// Inhabilitamos las interrupciones

DDRB = 0xFF;
PORTB = 0x00;

// Configuramos el puerto B como salida

cuenta = 0;
configura_TMR1();

// Configuramos el Timer1

sei();

// Habilitamos las interrupciones

while (1)

PORTB = cuenta;

// Lazo infinito que constantemente escribe


// "cuenta" en los leds

IEE206 LABORATORIO DE SISTEMAS DIGITALES

PONTIFICIA UNIVERSIDAD CATLICA DEL PER


SECCIN ELECTRICIDAD Y ELECTRNICA
rea de Circuitos y Sistemas Electrnicos

352%/(0$'(6$552//$'2 7PUBXVDUW 


P rograma P rincipal
IN IC IO
RS I Recepcin
Completa
C onfigurar puerto serial
(9600, 8, 0, 1)
INIC IO

C onfigurar Interrupcin
por dato recibido

dato_rx D ato recibido

C onfigurar Interrupcin
del tem porizador

dato_valido 0

dato_valido 0

dato_rx es caracter
num rico ?
NO

dato_valido = 1 ?

NO

SI

dato_valido 1
SI

dato_tx dato_rx
FIN

T ransm itir dato_rx


RS I Timer 1 cada 250ms

cnt_int 0

cnt_int < 4 ?

IN IC IO

SI

cnt_int cnt_int + 1

NO

dato_tx dato_tx - 1
F IN

dato_tx = 0 - 1
SI

NO

Tm r1 _ us a rt








IEE206 LABORATORIO DE SISTEMAS DIGITALES

10

PONTIFICIA UNIVERSIDAD CATLICA DEL PER


SECCIN ELECTRICIDAD Y ELECTRNICA
rea de Circuitos y Sistemas Electrnicos

(Q HVWH SUREOHPD YDPRV D GHVDUUROODU XQ SURJUDPD TXH HVSHUH OD OOHJDGD GH XQ GDWR
SRU HO SXHUWR VHULDO VL HVWH GDWR QR HV HO FyGLJR $6&,, GH XQ FDUDFWHU QXPpULFR   VH
HVSHUD RWUR GDWR (Q HO FDVR TXH Vt VHD XQ FDUDFWHU QXPpULFR UHWUDQVPLWLUOR \ WUDQVPLWLU FDGD
VHJXQGR HO FyGLJR $6&,, GH ORV FDUDFWHUHV PHQRUHV DO UHFLELGR GH PDQHUD GHFUHFLHQWH KDVWD HO



(MHPSOR

6LVHUHFLEH

7UDQVPLWLU

5
5 4 3 2 1 0

HQLQWHUYDORVGHVHJXQGR


8WLOL]DU ODV LQWHUUXSFLRQHV 7,0(5 &203$ SDUD WHPSRUL]DU  VHJXQGR \ 86$57 5;&
SDUDGHWHUPLQDUVLOOHJyXQGDWRSRUHOSXHUWRVHULDO



&XDQGR WUDEDMDPRV FRQ LQWHUUXSFLRQHV SRU GDWR UHFLELGR \D QR HV QHFHVDULR HVWDU

VRQGHDQGRHOELW5;&SDUDVDEHUVLOOHJyXQGDWRDKRUDFXDQGRHOELW5;&WRPHHOYDORUGHVH
SURGXFLUi OD VROLFLWXG GH LQWHUUXSFLyQ 3DUD KDELOLWDU OD LQWHUUXSFLyQ 86$57 5;& HV QHFHVDULR
SRQHUDHOELW5;&,(GHOUHJLVWUR8&65%



3DUDODVLPXODFLyQGHHVWHSUR\HFWRLQFOXLUHQHO7PUBXVDUWSUMORVLJXLHQWH

X1 TTY(9600 8 0 0 1 1) PD0 PD1

//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//

********************************************************************
********************************************************************
*****
PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU
*****
*****
Laboratorio de Sistemas Digitales
*****
*****
*****
***** Nombre:
tmr1_usart.c
*****
***** Autor:
Rolando Snchez
*****
***** Fecha:
Octubre 2005
*****
*****
*****
***** Descripcin: El programa espera que le llegue un dato
*****
*****
por el puerto serial. Si este dato es el cdigo
*****
*****
ASCII de un caracter numrico ('0'...'9') lo
*****
*****
retransmite y empieza a transmitir los cdigos
*****
*****
que representan a los dgitos menores que el
*****
*****
recibido de manera decreciente hasta el '0', y
*****
*****
con un tiempo de un segundo entre ellos.
*****
*****
*****
********************************************************************
********************************************************************

// *****

L I B R E R I A S

I N C L U I D A S

*****

G L O B A L E S

*****

#include <avr\io.h>
#include <avr\interrupt.h>
#include <avr\signal.h>
// *****

V A R I A B L E S

uint8_t dato_rx, dato_valido, cnt_int;

//
//
//
//
//
//

********************************************************************
*****
Interrupcin TIMER1 COMPA
*****
********************************************************************
*****
Configurada para que se ejecute cada 250ms.
*****
*****
Incrementamos el valor de "cuenta"
*****
********************************************************************

IEE206 LABORATORIO DE SISTEMAS DIGITALES

11

PONTIFICIA UNIVERSIDAD CATLICA DEL PER


SECCIN ELECTRICIDAD Y ELECTRNICA
rea de Circuitos y Sistemas Electrnicos
SIGNAL(SIG_OUTPUT_COMPARE1A)
{
cnt_int = cnt_int + 1;
}
//
//
//
//
//
//
//
//

********************************************************************
*****
Interrupcin USART RXC
*****
********************************************************************
*****
Se ejecuta cada vez que hay un dato recibido
*****
*****
por el puerto serial.
*****
*****
Recoge el dato recibido y verifica si est en el *****
*****
rango deseado ('0'...'9').
*****
********************************************************************

SIGNAL(SIG_UART_RECV)
{
dato_rx = UDR;
dato_valido = 0;
if ((dato_rx>='0')&&(dato_rx<='9'))
dato_valido = 1;
}

//
//
//
//
//
//
//
//
//

********************************************************************
*****
Funcin que Configura el TIMER1
*****
********************************************************************
*****
Pin OC1A desconectado:
COM1A1 COM1A0 <- 00
*****
*****
Modo CTC (tope OCCR1A):
*****
*****
WGM13 WGM12 WGM12 WGM10 < - 0100
*****
*****
Preescalamiento 1:1024:
CS12 CS11 CS10 <- 101 *****
*****
Habilitamos interrupcin TIMER1 COMPA: OCIE1A <- 1 *****
********************************************************************

void configura_TMR1(void)
{
TCCR1A = (0<<COM1A1 | 0<<COM1A0 | 0<<WGM11 | 0<<WGM10);
TCCR1B = (0<<WGM13 | 1<<WGM12 | 1<<CS12 | 0<<CS11 | 1<<CS10);
OCR1AH = 0x00;
OCR1AL = 0xF3;

// Valor asignado al registro OCR1A: 243 ($00F3)


// (1us)x(1024)x(243+1) = 249.8 ms

TIMSK = (TIMSK|1<<OCIE1A);

// Habilitamos interrupcin TIMER1 COMPA

//
//
//
//
//
//
//
//
//

********************************************************************
*****
Funcin que Configura el USART
*****
********************************************************************
*****
Velocidad 9600bps:
U2X <- 1, UBRR <- $000C
*****
*****
8 bits de datos:
UCSZ2 UCSZ1 UCSZ0 <- 011
*****
*****
Sin paridad:
UPM1 UPM0 <- 00
*****
*****
1 bit de parada:
USBS <- 0
*****
*****
Habilitamos la interrupcin USART RXC: RXCIE <- 1 *****
********************************************************************

void configura_USART(void)
{
UBRRH = 0x00;
UBRRL = 0x0C;
UCSRA = (1<<U2X | 0<<MPCM);
UCSRB = (1<<RXCIE | 1<<RXEN | 1<<TXEN | 0<<UCSZ2);
UCSRC = (1<<URSEL | 0<<UMSEL | 0<<UPM1 | 0<<UPM0 | 0<<USBS | 1<<UCSZ1 | 1<<UCSZ0);
}

//
//
//
//
//

********************************************************************
*****
Funcin envia_dato(dato)
*****
********************************************************************
***** Transmite por el puerto serial el parmetro de entrada *****
********************************************************************

IEE206 LABORATORIO DE SISTEMAS DIGITALES

12

PONTIFICIA UNIVERSIDAD CATLICA DEL PER


SECCIN ELECTRICIDAD Y ELECTRNICA
rea de Circuitos y Sistemas Electrnicos
void envia_dato(uint8_t dato)
{
while ( !( UCSRA & (1<<UDRE)) );
UDR = dato;
}

//
//
//
//
//

// Espera que el buffer de tx este vaco.

********************************************************************
********************************************************************
*****
PROGRAMA PRINCIPAL
*****
********************************************************************
********************************************************************

int main(void)
{
uint8_t dato_tx;
cli();

// Inhabilitamos las interrupciones

configura_TMR1();
configura_USART();

// Comfiguramos el Timer 1
// Configuramos el USART

sei();

// Habilitamos las interrupciones

while (1)
// LAZO INFINITO
{
dato_valido = 0;
while (!dato_valido);
// Esperamos que "dato_valido" sea 1

dato_tx = dato_rx;
do
{

// Transmitimos "dato_tx" hasta que sea '0'


envia_dato(dato_tx);
cnt_int = 0;
while (cnt_int<4);

// Esperamos 1 segundo (4 int de 250ms)

dato_tx = dato_tx-1;
} while (dato_tx != '0'-1);
}
}

Elaborado por:
Rolando Snchez Ponce
Email: rsanchez@pucp.edu.pe
Octubre 2005

IEE206 LABORATORIO DE SISTEMAS DIGITALES

13

You might also like