Sie sind auf Seite 1von 13

INFORMTICA INDUSTRIAL. 3 ITI ELECTRNICA.

Tema 3: Microcontrolador C8051. Programacin en C.


Boletn de problemas resuelto.


Realice el cdigo en C para un C8051 que:

1. Active un LED conectado en el pin P1.6 e invierta su valor cada vez que reciba un pulso por el pin
P3.7.

/ *
I NFORMTI CA I NDUSTRI AL
3 I TI ELECTRNI CA.
EUP
DPTO. ARQUI TECTURA Y TECNOLOG A DE COMPUTADORES
UNI VERSI DAD DE SEVI LLA

Ej er ci ci o 1: I nver t i r el est ado de un LED cada vez que se pul se un bot on.
I mpl ement aci on por pol l i ng.

PROF. ALEJ ANDRO LI NARES BARRANCO
******************************************/

#i ncl ude <c8051f 040. h> / / Decl ar aci ones SFR

/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / Const ant es Gl obal es
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

sbi t LED = P1^6; / / LED=' 0' si gni f i ca encendi do
sbi t I NP = P3^7;

/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / Pr ot ot i pos de f unci ones gl obal es
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

voi d PORT_I ni t ( voi d) ;

/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / Rout i na pr i nci pal
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

voi d mai n ( voi d)
{
/ / di sabl e wat chdog t i mer
WDTCN = 0xde;
WDTCN = 0xad;

SFRPAGE = CONFI G_PAGE; / / Cambi a a l a pagi na F de l os SFR
PORT_I ni t ( ) ; / / I ni ci al i za Cr ossbar y GPI O

LED=1;
whi l e ( 1) { / / Bucl e i nf i ni t o.
whi l e( ! I NP) ;
LED = ! LED;
whi l e ( I NP) ;
}
}

/ / - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / PORT_I ni t
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / I ni ci al i zaci n de Puer t os
/ / - Conf i gur aci n del Cr ossbar y l os puer t os GPI O.
/ /
voi d PORT_I ni t ( voi d)
{
XBR2 = 0x40; / / Enabl e cr ossbar and weak pul l - ups
P1MDOUT | = 0x40; / / enabl e P1. 6 ( LED) as push- pul l out put
}

1

2. Active un LED conectado al pin P1.6 e invierta su valor por interrupcin externa cada vez que reciba
un pulso por el pin P0.0.
/ *
I NFORMTI CA I NDUSTRI AL
3 I TI ELECTRNI CA.
EUP
DPTO. ARQUI TECTURA Y TECNOLOG A DE COMPUTADORES
UNI VERSI DAD DE SEVI LLA

Ej er ci ci o 2: I nver t i r el est ado de un LED cada vez que se pul se un bot on.
I mpl ement aci on por i nt er r upci ones.

PROF. ALEJ ANDRO LI NARES BARRANCO
******************************************/

#i ncl ude <c8051f 040. h> / / Decl ar aci ones SFR
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / Const ant es Gl obal es
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

sbi t LED = P1^6; / / LED=' 0' si gni f i ca encendi do
sbi t I NP = P0^0; / / Mi smo pi n de l a I NT0

/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / Pr ot ot i pos de f unci ones gl obal es
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

voi d PORT_I ni t ( voi d) ;
voi d I NT_I ni t ( voi d) ;

/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / Rout i na pr i nci pal
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

voi d mai n ( voi d)
{
/ / di sabl e wat chdog t i mer
WDTCN = 0xde;
WDTCN = 0xad;

SFRPAGE = CONFI G_PAGE; / / Cambi a a l a pagi na F de l os SFR
PORT_I ni t ( ) ; / / I ni ci al i za Cr ossbar y GPI O
I NT_I ni t ( ) ;

LED=1;
whi l e ( 1) { / / Bucl e i nf i ni t o y vaci o.
}

}

/ / - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / PORT_I ni t
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / I ni ci al i zaci n de Puer t os
/ / - Conf i gur aci n del Cr ossbar y l os puer t os GPI O.
/ /
voi d PORT_I ni t ( voi d)
{
XBR2 = 0x40; / / Enabl e cr ossbar and weak pul l - ups
XBR1 = 0x04; / / Habi l i t a l a I NT0 en el Cr ossBar
P1MDOUT | = 0x40; / / enabl e P1. 6 ( LED) as push- pul l out put
}

voi d I NT_I ni t ( voi d)
{
EA=1; / / Enabl e gl obal de i nt er r upci ones
EX0=1; / / Enabl e i nt er r upci on ext er na I NT0
}

voi d ext er nal _i nt ( voi d) i nt er r upt 0
{
LED=! LED;
whi l e ( ! I NP) ;
I E0 = 0;
}

2
3. Active un LED conectado al pin P1.6 e invierta su valor cada 32,768ms. Usar el timer0 sin
interrupciones.
/ *
I NFORMTI CA I NDUSTRI AL
3 I TI ELECTRNI CA.
EUP
DPTO. ARQUI TECTURA Y TECNOLOG A DE COMPUTADORES
UNI VERSI DAD DE SEVI LLA

Ej er ci ci o 3: I nver t i r el est ado de un LED cada 32' 768 ms.
I mpl ement aci on por medi o del t i mer 0.

PROF. ALEJ ANDRO LI NARES BARRANCO
******************************************/
#i ncl ude <c8051f 040. h> / / Decl ar aci ones SFR
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / Const ant es Gl obal es
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
sbi t LED = P1^6; / / LED=' 0' si gni f i ca encendi do

/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / Pr ot ot i pos de f unci ones gl obal es
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
voi d SYSCLK_I ni t ( voi d) ;
voi d PORT_I ni t ( voi d) ;
voi d Ti mer 0_I ni t ( voi d) ;
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / Rout i na pr i nci pal
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
voi d mai n ( voi d)
{
/ / di sabl e wat chdog t i mer
WDTCN = 0xde;
WDTCN = 0xad;

SFRPAGE = CONFI G_PAGE; / / Cambi a a l a pagi na F de l os SFR
SYSCLK_I ni t ( ) ;
PORT_I ni t ( ) ; / / I ni ci al i za Cr ossbar y GPI O
SFRPAGE = TI MER01_PAGE;
Ti mer 0_I ni t ( ) ; / / I ni ci al i za el Ti mer 0

LED=1;
whi l e ( 1) { / / Bucl e i nf i ni t o.
TR0 = 1; / / Comi enza Ti mer 0
TF0 = 0;
whi l e ( ! TF0) ; / / Esper a a que se desbor de el t i mer
TR0 = 0; / / Det i ene el Ti mer 0
TL0 = 0x00;
TH0 = 0x80; / / Val or de r ecar ga
LED = ! LED;
}
}
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / PORT_I ni t
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / I ni ci al i zaci n de Puer t os
/ / - Conf i gur aci n del Cr ossbar y l os puer t os GPI O.
/ /
voi d PORT_I ni t ( voi d)
{
XBR2 = 0x40; / / Enabl e cr ossbar and weak pul l - ups
P1MDOUT | = 0x40; / / enabl e P1. 6 ( LED) as push- pul l out put
}

voi d SYSCLK_I ni t ( voi d)
{
OSCI CN = 0xC2; / / SYSCLK = 12 MHz
}

voi d Ti mer 0_I ni t ( )
{
TR0 = 0; / / Det ener Ti mer 0; Li mpi ar TF0;
TF0 = 0;
CKCON = 0x00; / / SYSCLK/ 12 como f uent e de r el oj del Ti mer 0
TMOD = 0x01; / / Ti mer 0 act i vo cuando TR0 = 1, si n i nt er r upci n
TL0 = 0x00;
TH0 = 0x80; / / Comi enzo de cuent a a l a mi t ad par a 32. 6 ms
}
3
4. Active un LED conectado al pin P1.6 e invierta su valor cada 32,768ms. Usar el timer0 con
interrupciones.
/ *
I NFORMTI CA I NDUSTRI AL
3 I TI ELECTRNI CA.
EUP
DPTO. ARQUI TECTURA Y TECNOLOG A DE COMPUTADORES
UNI VERSI DAD DE SEVI LLA

Ej er ci ci o 4: I nver t i r el est ado de un LED cada 32' 768 ms.
I mpl ement aci on por medi o del t i mer 0 e i nt er r upci ones

PROF. ALEJ ANDRO LI NARES BARRANCO
******************************************/
#i ncl ude <c8051f 040. h> / / Decl ar aci ones SFR
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / Const ant es Gl obal es
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
sbi t LED = P1^6; / / LED=' 1' si gni f i ca encendi do
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / Pr ot ot i pos de f unci ones gl obal es
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
voi d PORT_I ni t ( voi d) ;
voi d SYSCLK_I ni t ( voi d) ;
voi d Ti mer 0_I ni t ( voi d) ;
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / Rout i na pr i nci pal
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
voi d mai n ( voi d)
{
/ / di sabl e wat chdog t i mer
WDTCN = 0xde;
WDTCN = 0xad;

SFRPAGE = CONFI G_PAGE; / / Cambi a a l a pagi na F de l os SFR
PORT_I ni t ( ) ; / / I ni ci al i za Cr ossbar y GPI O
SYSCLK_I ni t ( ) ; / / I ni ci al i za osci l ador
SFRPAGE = TI MER01_PAGE;
Ti mer 0_I ni t ( ) ; / / I ni ci al i za el Ti mer 0
LED=1;
TR0 = 1; / / Comi enza Ti mer 0
whi l e ( 1) { / / Bucl e i nf i ni t o.
}
}
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / SYSCLK_I ni t
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / I ni ci al i zaci n de SYSLCK
/ / - I ni ci al i za el r el oj del si st ema.
/ /
voi d SYSCLK_I ni t ( voi d)
{
OSCI CN = 0xC2; / / SYSCLK = 12 MHz
}
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / PORT_I ni t
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / I ni ci al i zaci n de Puer t os
/ / - Conf i gur aci n del Cr ossbar y l os puer t os GPI O.
/ /
voi d PORT_I ni t ( voi d)
{
XBR2 = 0x40; / / Enabl e cr ossbar and weak pul l - ups
P1MDOUT | = 0x40; / / enabl e P1. 6 ( LED) as push- pul l out put
}
voi d Ti mer 0_I ni t ( ) {
TR0 = 0; / / Det ener Ti mer 0; Li mpi ar TF0;
TF0 = 0;
CKCON = 0x00; / / SYSCLK/ 12 como f uent e de r el oj del Ti mer 0
TMOD = 0x01; / / Ti mer 0 act i vo cuando TR0 = 1, si n i nt er r upci n
TL0 = 0x00;
TH0 = 0x80; / / Comi enzo de cuent a a l a mi t ad par a 32. 6 ms
ET0=1;
EA=1;
}
voi d t i mer 0_i nt ( voi d) i nt er r upt 1 {
LED=! LED;
TF0 = 0;
TL0 = 0x00;
TH0 = 0x80; / / Comi enzo de cuent a a l a mi t ad par a 32. 6 ms
}
4
5. Monitorice una entrada analgica en el pin P3.0 entre 0 y 3.3 voltios, y encienda un LED conectado
al pin P1.6 cuando la tensin est entre 2 y 2.1 voltios.
/ *
I NFORMTI CA I NDUSTRI AL
3 I TI ELECTRNI CA.
EUP
DPTO. ARQUI TECTURA Y TECNOLOG A DE COMPUTADORES
UNI VERSI DAD DE SEVI LLA

Ej er ci ci o 5: Moni t or i ce una ent r ada anal gi ca en el pi n P3. 0 ent r e 0 y 3. 3 vol t i os, y enci enda
un LED conect ado al pi n P1. 6 cuando l a t ensi n est ent r e 2 y 2. 1 vol t i os.

PROF. ALEJ ANDRO LI NARES BARRANCO
******************************************/
#i ncl ude <c8051f 040. h> / / Decl ar aci ones SFR
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / Const ant es Gl obal es
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
sbi t LED = P1^6; / / LED=' 1' si gni f i ca encendi do
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / Pr ot ot i pos de f unci ones gl obal es
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
voi d PORT_I ni t ( voi d) ;
voi d SYSCLK_I ni t ( voi d) ;
voi d ADC_I ni t ( voi d) ;
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / Rout i na pr i nci pal
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
voi d mai n ( voi d) {
/ / di sabl e wat chdog t i mer
WDTCN = 0xde;
WDTCN = 0xad;

SFRPAGE = CONFI G_PAGE; / / Cambi a a l a pagi na F de l os SFR
PORT_I ni t ( ) ; / / I ni ci al i za Cr ossbar y GPI O
SYSCLK_I ni t ( ) ; / / I ni ci al i za osci l ador
SFRPAGE = ADC0_PAGE;
ADC_I ni t ( ) ; / / I ni ci al i za el Ti mer 3
LED=1;
whi l e ( 1) { / / Bucl e i nf i ni t o.
AD0BUSY=1;
whi l e( AD0BUSY) ;
i f ( AD0WI NT) {
AD0WI NT=0;
LED=1;
} el se LED=0;
}
}
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / SYSCLK_I ni t
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / I ni ci al i zaci n de SYSLCK
/ / - I ni ci al i za el r el oj del si st ema.
voi d SYSCLK_I ni t ( voi d) {
OSCI CN = 0xC2; / / SYSCLK = 12 MHz
}
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / PORT_I ni t
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / I ni ci al i zaci n de Puer t os
/ / - Conf i gur aci n del Cr ossbar y l os puer t os GPI O.
voi d PORT_I ni t ( voi d) {
P3MDI N = 0xFE; / / P3. 0: Ent r ada anal gi ca
P3MDOUT = 0x00;
XBR2 = 0x40; / / Enabl e cr ossbar and weak pul l - ups
P1MDOUT | = 0x40; / / enabl e P1. 6 ( LED) as push- pul l out put
}
voi d ADC_I ni t ( ) {
ADC0GTH= 0x09; / / Fi j a el l mi t e super i or
ADC0GTL=0xB2;
ADC0LTH=0x0A; / / Fi j a el l mi t e i nf er i or
ADC0LTL=0x2E;
ADC0CN = 0x80; / / ADC0 di sabl ed; nor mal t r acki ng mode; ADC0 conver si ons ar e i ni t i at ed
/ / on AD0BUSY; ADC0 dat a i s r i ght - j ust i f i ed
AMX0PRT = 0x1; / / Sol o el puer t o P3. 0 es ent r ada anal gi ca cuando se sel ecci one el puer t o 3.
REF0CN = 0x07; / / enabl e t emp sensor , on- chi p VREF, and VREF out put buf f er
AMX0SL = 0x6; / / Sel ect TEMP sens as ADC mux out put
ADC0CF = ( SYSCLK/ 2500000) << 3; / / ADC conver si on cl ock = 2. 5MHz
EI E2 | = 0x02; / / enabl e ADC i nt er r upt s
}
5

6. Monitorice una entrada analgica en el pin P3.0 entre 0 y 3.3 voltios, y encienda un LED conectado
al pin P1.6 cuando la tensin est fuera del rango (2, 2.1) voltios.
/ *
I NFORMTI CA I NDUSTRI AL
3 I TI ELECTRNI CA.
EUP
DPTO. ARQUI TECTURA Y TECNOLOG A DE COMPUTADORES
UNI VERSI DAD DE SEVI LLA
Ej er ci ci o 6: Moni t or i ce una ent r ada anal gi ca en el pi n P3. 0 ent r e 0 y 3. 3 vol t i os, y enci enda
un LED conect ado al pi n P1. 6 cuando l a t ensi n est f uer a del r ango ( 2, 2. 1)
vol t i os.
PROF. ALEJ ANDRO LI NARES BARRANCO
******************************************/
#i ncl ude <c8051f 040. h> / / Decl ar aci ones SFR
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / Const ant es Gl obal es
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
sbi t LED = P1^6; / / LED=' 1' si gni f i ca encendi do
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / Pr ot ot i pos de f unci ones gl obal es
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
voi d PORT_I ni t ( voi d) ;
voi d SYSCLK_I ni t ( voi d) ;
voi d ADC_I ni t ( voi d) ;
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / Rout i na pr i nci pal
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
voi d mai n ( voi d) {
/ / di sabl e wat chdog t i mer
WDTCN = 0xde;
WDTCN = 0xad;

SFRPAGE = CONFI G_PAGE; / / Cambi a a l a pagi na F de l os SFR
PORT_I ni t ( ) ; / / I ni ci al i za Cr ossbar y GPI O
SYSCLK_I ni t ( ) ; / / I ni ci al i za osci l ador
SFRPAGE = ADC0_PAGE;
ADC_I ni t ( ) ; / / I ni ci al i za el Ti mer 3
LED=1;
whi l e ( 1) { / / Bucl e i nf i ni t o.
AD0BUSY=1;
whi l e( AD0BUSY) ;
i f ( AD0WI NT) {
AD0WI NT=0;
LED=1;
} el se LED=0;
}
}
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / SYSCLK_I ni t
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / I ni ci al i zaci n de SYSLCK
/ / - I ni ci al i za el r el oj del si st ema.
voi d SYSCLK_I ni t ( voi d) {
OSCI CN = 0xC2; / / SYSCLK = 12 MHz
}
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / PORT_I ni t
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / I ni ci al i zaci n de Puer t os
/ / - Conf i gur aci n del Cr ossbar y l os puer t os GPI O.
voi d PORT_I ni t ( voi d) {
P3MDI N = 0xFE; / / P3. 0: Ent r ada anal gi ca
P3MDOUT = 0x00;
XBR2 = 0x40; / / Enabl e cr ossbar and weak pul l - ups
P1MDOUT | = 0x40; / / enabl e P1. 6 ( LED) as push- pul l out put
}
voi d ADC_I ni t ( ) {
ADC0LTH= 0x09; / / Fi j a el l mi t e super i or
ADC0LTL=0xB2;
ADC0GTH=0x0A; / / Fi j a el l mi t e i nf er i or
ADC0GTL=0x2E;
ADC0CN = 0x80; / / ADC0 di sabl ed; nor mal t r acki ng mode; ADC0 conver si ons ar e i ni t i at ed
/ / on AD0BUSY; ADC0 dat a i s r i ght - j ust i f i ed
AMX0PRT = 0x1; / / Sol o el puer t o P3. 0 es ent r ada anal gi ca cuando se sel ecci one el puer t o 3.
REF0CN = 0x07; / / enabl e t emp sensor , on- chi p VREF, and VREF out put buf f er
AMX0SL = 0x6; / / Sel ect TEMP sens as ADC mux out put
ADC0CF = ( 4) << 3; / / ADC conver si on cl ock = 2. 5MHz => 12/ 2. 5- 1 ~= 4
}

6
7. Monitorice una entrada analgica en el pin P3.0 entre 0 y 3.3 voltios, y guarde en memoria externa
el valor digital resultado de la conversin por medio de una interrupcin que salta cada vez que la
conversin ha concluido.
/ *
I NFORMTI CA I NDUSTRI AL
3 I TI ELECTRNI CA.
EUP
DPTO. ARQUI TECTURA Y TECNOLOG A DE COMPUTADORES
UNI VERSI DAD DE SEVI LLA

Ej er ci ci o 7: Moni t or i ce una ent r ada anal gi ca en el pi n P3. 0 ent r e 0 y 3. 3 vol t i os,
y guar de en memor i a ext er na el val or di gi t al r esul t ado de l a conver si n por medi o
de una i nt er r upci n que sal t a cada vez que l a conver si n ha concl ui do.

PROF. ALEJ ANDRO LI NARES BARRANCO
******************************************/
#i ncl ude <c8051f 040. h> / / Decl ar aci ones SFR
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / Const ant es Gl obal es
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
sbi t LED = P1^6; / / LED=' 1' si gni f i ca encendi do
sf r 16 ADC0_dat o = 0xBE;
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / Pr ot ot i pos de f unci ones gl obal es
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
voi d PORT_I ni t ( voi d) ;
voi d SYSCLK_I ni t ( voi d) ;
voi d ADC_I ni t ( voi d) ;
voi d I NT_I ni t ( voi d) ;
voi d EXTRAM_I ni t ( voi d) ;
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / Var i abl es gl obal es
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
i nt xdat a dat os [ 512] ; / / Tamao t ot al de l a memor i a ext er na 1Kb => 512 muest r as
unsi gned i nt i ;
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / Rout i na pr i nci pal
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
voi d mai n ( voi d) {
/ / di sabl e wat chdog t i mer
WDTCN = 0xde;
WDTCN = 0xad;
SFRPAGE = CONFI G_PAGE; / / Cambi a a l a pagi na F de l os SFR
PORT_I ni t ( ) ; / / I ni ci al i za Cr ossbar y GPI O
SYSCLK_I ni t ( ) ; / / I ni ci al i za osci l ador
SFRPAGE = ADC0_PAGE;
ADC_I ni t ( ) ;
I NT_I ni t ( ) ;
SFRPAGE = EMI 0_PAGE;
EXTRAM_I ni t ( ) ;
LED=0;
SFRPAGE = ADC0_PAGE;
AD0BUSY=1;
i =0;
whi l e ( 1) { / / Bucl e i nf i ni t o.
}
}
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / SYSCLK_I ni t
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / I ni ci al i zaci n de SYSLCK
/ / - I ni ci al i za el r el oj del si st ema.
voi d SYSCLK_I ni t ( voi d) {
OSCI CN = 0xC2; / / SYSCLK = 12 MHz
}
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / PORT_I ni t
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / I ni ci al i zaci n de Puer t os
/ / - Conf i gur aci n del Cr ossbar y l os puer t os GPI O.
voi d PORT_I ni t ( voi d) {
P3MDI N = 0xFE; / / P3. 0: Ent r ada anal gi ca
P3MDOUT = 0x00;
XBR2 = 0x40; / / Enabl e cr ossbar and weak pul l - ups
P1MDOUT | = 0x40; / / enabl e P1. 6 ( LED) as push- pul l out put
}
voi d ADC_I ni t ( ) {
ADC0CN = 0x80; / / ADC0 di sabl ed; nor mal t r acki ng mode; ADC0 conver si ons ar e i ni t i at ed
/ / on AD0BUSY; ADC0 dat a i s r i ght - j ust i f i ed
AMX0PRT = 0x1; / / Sol o el puer t o P3. 0 es ent r ada anal gi ca cuando se sel ecci one el puer t o 3.
7
REF0CN = 0x07; / / enabl e t emp sensor , on- chi p VREF, and VREF out put buf f er
AMX0SL = 0x6; / / Sel ect bi t s par es del Puer t o 3 par a i nput anal ogi ca
ADC0CF = ( 4) << 3; / / ADC conver si on cl ock = 2. 5MHz => 12/ 2. 5- 1 ~= 4
}
voi d I NT_I ni t ( ) {
EA=1;
EI E2 | = 0x02; / / enabl e ADC i nt er r upt s
}
voi d EXTRAM_I ni t ( ) {
EMI 0CN = 0x0;
}
voi d ADC0_i nt ( voi d) i nt er r upt 15 {
AD0I NT = 0;
dat os[ i ] =ADC0_dat o;
i f ( i >=512) i =0;
el se i +=1;
AD0BUSY=1;
}
8. Transmita por la interfaz SPI el byte que se reciba por el puerto P2 cada vez que se recibe un pulso
por P3.7.
/ *
I NFORMTI CA I NDUSTRI AL
3 I TI ELECTRNI CA.
EUP
DPTO. ARQUI TECTURA Y TECNOLOG A DE COMPUTADORES
UNI VERSI DAD DE SEVI LLA

Ej er ci ci o 8: Tr ansmi t a por l a i nt er f az SPI el byt e que se r eci ba por el
puer t o P2 cada vez que se r eci be un pul so por P3. 7
PROF. ALEJ ANDRO LI NARES BARRANCO
******************************************/
#i ncl ude <c8051f 040. h> / / Decl ar aci ones SFR
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / Const ant es Gl obal es
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
sbi t LED = P1^6; / / LED=' 1' si gni f i ca encendi do / / 0^0
sbi t I NP = P3^7;
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / Pr ot ot i pos de f unci ones gl obal es
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
voi d PORT_I ni t ( voi d) ;
voi d SYSCLK_I ni t ( voi d) ;
voi d SPI _I ni t ( voi d) ;
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / Rout i na pr i nci pal
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
voi d mai n ( voi d) {
/ / di sabl e wat chdog t i mer
WDTCN = 0xde;
WDTCN = 0xad;
SFRPAGE = CONFI G_PAGE; / / Cambi a a l a pagi na F de l os SFR
PORT_I ni t ( ) ; / / I ni ci al i za Cr ossbar y GPI O
SYSCLK_I ni t ( ) ; / / I ni ci al i za osci l ador
SFRPAGE = SPI 0_PAGE; / / Swi t ch t o conf i gur at i on page
SPI _I ni t ( ) ; / / I ni ci al i za el SPI
LED=0;
whi l e ( 1) { / / Bucl e i nf i ni t o.
whi l e ( ! I NP) LED=1; / / Esper a un f l anco de subi da
SPI 0DAT = P2; / / Escr i be el dat o de P2 en el r egi st r o de t r ansmi si n SPI
whi l e ( ! TXBMT) ; / / Esper a a que el dat o pase al buf f er de t r ansmi si n SPI
whi l e ( I NP) LED=0; / / Esper a un f l anco de baj ada
}
}
voi d SYSCLK_I ni t ( voi d) {
OSCI CN = 0xC2; / / SYSCLK = 12 MHz
}
voi d PORT_I ni t ( voi d) {
XBR0 = 0x02; / / Habi l i t a l a SPI en el Cr ossbar
XBR2 = 0x40; / / Enabl e cr ossbar and weak pul l - ups
P1MDOUT | = 0x40; / / enabl e P1. 6 ( LED) as push- pul l out put
P3MDOUT | = 0x80; / / enabl e P3. 7 ( bot on) as push- pul l out put
P2MDOUT = 0xFF; / / P2. 0- P2. 7: push- pul l
}
voi d SPI _I ni t ( ) {
SPI 0CFG = 0x40;
SPI 0CN = 0x01; / / SPI act i va
SPI 0CKR = 0x04; / / Rel oj de 2, 4MHz
}
9. Transmita por la interfaz SPI el byte que se reciba por el puerto P2 cada vez que la entrada analgica
P3.1 est entre 2 y 2.1 voltio.
8
/ *
I NFORMTI CA I NDUSTRI AL
3 I TI ELECTRNI CA.
EUP
DPTO. ARQUI TECTURA Y TECNOLOG A DE COMPUTADORES
UNI VERSI DAD DE SEVI LLA
Ej er ci ci o 9: Tr ansmi t a por l a i nt er f az SPI el byt e que se r eci ba por el
puer t o P2 cada vez que l a ent r ada anal gi ca P3. 1 est ent r e 2 y 2. 1 vol t i os

PROF. ALEJ ANDRO LI NARES BARRANCO
******************************************/
#i ncl ude <c8051f 040. h> / / Decl ar aci ones SFR
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / Const ant es Gl obal es
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
sbi t LED = P1^6; / / LED=' 1' si gni f i ca encendi do / / 0^0
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / Pr ot ot i pos de f unci ones gl obal es
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
voi d PORT_I ni t ( voi d) ;
voi d SYSCLK_I ni t ( voi d) ;
voi d SPI _I ni t ( voi d) ;
voi d ADC_I ni t ( voi d) ;
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / Rout i na pr i nci pal
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
voi d mai n ( voi d)
{
/ / di sabl e wat chdog t i mer
WDTCN = 0xde;
WDTCN = 0xad;

SFRPAGE = CONFI G_PAGE; / / Cambi a a l a pagi na F de l os SFR
PORT_I ni t ( ) ; / / I ni ci al i za Cr ossbar y GPI O
SYSCLK_I ni t ( ) ; / / I ni ci al i za osci l ador
SFRPAGE = SPI 0_PAGE; / / Swi t ch t o conf i gur at i on page
SPI _I ni t ( ) ; / / I ni ci al i za el SPI
SFRPAGE = ADC0_PAGE;
ADC_I ni t ( ) ;

LED=0;

whi l e ( 1) { / / Bucl e i nf i ni t o.
AD0BUSY=1;
whi l e( AD0BUSY) ;
i f ( AD0WI NT) {
AD0WI NT=0;
SPI 0DAT = P2;
whi l e ( ! TXBMT) ; / / Esper a a que el dat o pase al buf f er SPI .
LED=1;
} el se LED=0;
}
}
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / SYSCLK_I ni t
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / I ni ci al i zaci n de SYSLCK
/ / - I ni ci al i za el r el oj del si st ema.
voi d SYSCLK_I ni t ( voi d) {
OSCI CN = 0xC2; / / SYSCLK = 12 MHz
}
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / PORT_I ni t
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / I ni ci al i zaci n de Puer t os
/ / - Conf i gur aci n del Cr ossbar y l os puer t os GPI O.
voi d PORT_I ni t ( voi d) {
XBR1 = 0x02; / / Habi l i t a l a SPI en el Cr ossbar
XBR2 = 0x40; / / Enabl e cr ossbar and weak pul l - ups
P1MDOUT | = 0x40; / / enabl e P1. 6 ( LED) as push- pul l out put
P2MDOUT = 0xFF; / / P2. 0- P2. 7: push- pul l
P3MDI N = 0xFD; / / P3. 1: Ent r ada anal gi ca
P3MDOUT = 0x00;
}
voi d SPI _I ni t ( ) {
SPI 0CFG = 0x40; / / Mast er habi l i t ado
SPI 0CN = 0x01; / / SPI act i va
SPI 0CKR = 0x04; / / Rel oj de 2, 4 MHz
}
voi d ADC_I ni t ( ) {
ADC0GTH= 0x09; / / Fi j a el l mi t e super i or
ADC0GTL=0xB2;
9
ADC0LTH=0x0A; / / Fi j a el l mi t e i nf er i or
ADC0LTL=0x2E;

ADC0CN = 0x80; / / ADC0 enabl ed; nor mal t r acki ng
/ / mode; ADC0 conver si ons ar e i ni t i at ed
/ / on AD0BUSY; ADC0 dat a i s
/ / r i ght - j ust i f i ed
AMX0PRT = 0x2; / / Sol o el puer t o P3. 1 es ent r ada anal gi ca cuando se sel ecci one el puer t o 3.
REF0CN = 0x07; / / enabl e t emp sensor , on- chi p VREF,
/ / and VREF out put buf f er
AMX0SL = 0x7; / / Sel ecci ona P3 i mpar como ent r ada del mux ADC
ADC0CF = ( 4) << 3; / / ADC conver si on cl ock = 2. 5MHz => 12/ 2. 5- 1 ~= 4
EI E2 | = 0x02; / / enabl e ADC i nt er r upt s
}
10. Transmita por la interfaz SPI el byte bajo y el byte alto (en este orden) del ADC justificado a la
derecha, cada vez que la entrada analgica P3.2 no est en el rango (2, 2.1) voltios.
/ *
I NFORMTI CA I NDUSTRI AL
3 I TI ELECTRNI CA.
EUP
DPTO. ARQUI TECTURA Y TECNOLOG A DE COMPUTADORES
UNI VERSI DAD DE SEVI LLA

Ej er ci ci o 10: Tr ansmi t a por l a i nt er f az SPI el byt e baj o y el byt e al t o
( en est e or den) del ADC j ust i f i cado a l a der echa, cada vez que l a ent r ada
anal gi ca P3. 2 no est en el r ango ( 2, 2. 1) vol t i os.

PROF. ALEJ ANDRO LI NARES BARRANCO
******************************************/
#i ncl ude <c8051f 040. h> / / Decl ar aci ones SFR
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / Const ant es Gl obal es
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
sbi t LED = P1^6; / / LED=' 1' si gni f i ca encendi do / / 0^0
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / Pr ot ot i pos de f unci ones gl obal es
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
voi d PORT_I ni t ( voi d) ;
voi d SYSCLK_I ni t ( voi d) ;
voi d SPI _I ni t ( voi d) ;
voi d ADC_I ni t ( voi d) ;
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / Rout i na pr i nci pal
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
voi d mai n ( voi d) {
/ / di sabl e wat chdog t i mer
WDTCN = 0xde;
WDTCN = 0xad;

SFRPAGE = CONFI G_PAGE; / / Cambi a a l a pagi na F de l os SFR
PORT_I ni t ( ) ; / / I ni ci al i za Cr ossbar y GPI O
SYSCLK_I ni t ( ) ; / / I ni ci al i za osci l ador
SFRPAGE = SPI 0_PAGE; / / Swi t ch t o conf i gur at i on page
SPI _I ni t ( ) ; / / I ni ci al i za el SPI
SFRPAGE = ADC0_PAGE;
ADC_I ni t ( ) ;

LED=0;
whi l e ( 1) { / / Bucl e i nf i ni t o.
AD0BUSY=1;
whi l e( AD0BUSY) ;
i f ( AD0WI NT) {
AD0WI NT=0;
SPI 0DAT = ADC0L;
whi l e ( ! TXBMT) ; / / Esper a a que el dat o pase al buf f er SPI .
SPI 0DAT = ADC0H;
whi l e ( ! TXBMT) ; / / Esper a a que el dat o pase al buf f er SPI .
LED=1;
} el se LED=0;
}
}
voi d SYSCLK_I ni t ( voi d) {
OSCI CN = 0xC2; / / SYSCLK = 12 MHz
}
voi d PORT_I ni t ( voi d) {
XBR0 = 0x02; / / Habi l i t a l a SPI en el Cr ossbar
XBR2 = 0x40; / / Enabl e cr ossbar and weak pul l - ups
P1MDOUT | = 0x40; / / enabl e P1. 6 ( LED) as push- pul l out put

P2MDOUT = 0xFF; / / P2. 0- P2. 7: push- pul l
P3MDI N = 0xFB; / / P3. 2: Ent r ada anal gi ca
10
P3MDOUT = 0x00;
}
voi d SPI _I ni t ( ) {
SPI 0CFG = 0x40; / / Mast er habi l i t ado
SPI 0CN = 0x01; / / SPI act i va
SPI 0CKR = 0x04; / / Rel oj de 200Khz
}
voi d ADC_I ni t ( ) {
ADC0LTH= 0x09; / / Fi j a el l mi t e super i or
ADC0LTL=0xB2;
ADC0GTH=0x0A; / / Fi j a el l mi t e i nf er i or
ADC0GTL=0x2E;
ADC0CN = 0x80; / / ADC0 enabl ed; nor mal t r acki ng
/ / mode; ADC0 conver si ons ar e i ni t i at ed
/ / on AD0BUSY; ADC0 dat a i s
/ / r i ght - j ust i f i ed
AMX0PRT = 0x4; / / Sol o el puer t o P3. 2 es ent r ada anal gi ca cuando se sel ecci one el puer t o 3.
REF0CN = 0x07; / / enabl e t emp sensor , on- chi p VREF,
/ / and VREF out put buf f er
AMX0SL = 0x6; / / Sel ect P3 as ADC mux i nput
ADC0CF = ( 4) << 3; / / ADC conver si on cl ock = 2. 5MHz => 12/ 2. 5- 1 ~= 4
EI E2 | = 0x02; / / enabl e ADC i nt er r upt s
}
11. Guarde en memoria Flash los datos SPI que van llegando. Cada 10 datos recibidos cambiar el
estado de un LED conectado al pin P1.6.
/ *
I NFORMTI CA I NDUSTRI AL
3 I TI ELECTRNI CA.
EUP
DPTO. ARQUI TECTURA Y TECNOLOG A DE COMPUTADORES
UNI VERSI DAD DE SEVI LLA
Ej er ci ci o 11: Guar de en memor i a Fl ash l os dat os SPI que van l l egando.
Cada 10 dat os r eci bi dos cambi ar el est ado de un LED conect ado al
pi n P1. 6.
PROF. ALEJ ANDRO LI NARES BARRANCO
******************************************/
#i ncl ude <c8051f 040. h> / / Decl ar aci ones SFR
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / Const ant es Gl obal es
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#def i ne FLASH_PAGE 0
sbi t LED = P1^6; / / LED=' 1' si gni f i ca encendi do / / 0^0
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / Pr ot ot i pos de f unci ones gl obal es
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
voi d PORT_I ni t ( voi d) ;
voi d SYSCLK_I ni t ( voi d) ;
voi d SPI _I ni t ( voi d) ;
voi d Er ase_Fl ash ( voi d) ;
voi d Wr i t e_Fl ash ( voi d) ;
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / Var i abl es gl obal es
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
i nt i ;
char xdat a f l ashmem[ 20] ;
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / Rout i na pr i nci pal
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
voi d mai n ( voi d) {
/ / di sabl e wat chdog t i mer
WDTCN = 0xde;
WDTCN = 0xad;
SFRPAGE = CONFI G_PAGE; / / Cambi a a l a pagi na F de l os SFR
PORT_I ni t ( ) ; / / I ni ci al i za Cr ossbar y GPI O
SYSCLK_I ni t ( ) ; / / I ni ci al i za osci l ador
SFRPAGE = SPI 0_PAGE; / / Swi t ch t o conf i gur at i on page
SPI _I ni t ( ) ; / / I ni ci al i za el SPI
LED=0;
Er ase_Fl ash( ) ;
i =0;
whi l e ( 1) { / / Bucl e i nf i ni t o.
whi l e ( SPI 0CFG&0x01) ; / / Esper o un dat o por SPI RXBMT=0
Wr i t e_Fl ash( ) ;
i ++;
i f ( i <10) LED=0;
el se LED=1;
i f ( i ==20) i =0;
}
}
voi d SYSCLK_I ni t ( voi d) {
OSCI CN = 0xC2; / / SYSCLK = 12 MHz
11
}
voi d PORT_I ni t ( voi d) {
XBR0 = 0x02; / / Habi l i t a l a SPI en el Cr ossbar
XBR2 = 0x40; / / Enabl e cr ossbar and weak pul l - ups
P1MDOUT | = 0x40; / / enabl e P1. 6 ( LED) as push- pul l out put
P2MDOUT = 0xFF; / / P2. 0- P2. 7: push- pul l
}
voi d SPI _I ni t ( ) {
SPI 0CFG = 0x00; / / Sl ave habi l i t ado
SPI 0CN = 0x01; / / SPI act i va
SPI 0CKR = 0x04; / / Rel oj de 2, 4MHz
}
voi d Er ase_Fl ash( voi d) {
EA = 0; / / Deshabi l i t a i nt er r upci ones
FLSCL| =0x01; / / FLWE = 1;
PSCTL| =0x06; / / PSEE = 1 y SFLE = 1
PSCTL| =0x01; / / PSWE = 1;
f l ashmem[ 0] =0;
PSCTL&=0xFE; / / PSWE = 0;
PSCTL&=0xF9; / / PSEE = 0 y SFLE=0
FLSCL&=0xFE; / / FLWE = 0;
EA=1;
}
voi d Wr i t e_Fl ash( ) {
EA = 0; / / Deshabi l i t a i nt er r upci ones
FLSCL| =0x01; / / FLWE = 1;
PSCTL| =0x05; / / PSWE = 1 y SFLE=1;
PSCTL&=0xFD; / / PSEE = 0;
f l ashmem[ i ] = SPI 0DAT;
PSCTL&=0xFA; / / PSWE = 0;
FLSCL&=0xFE; / / FLWE = 0;
EA=1;
}
12. Genere una seal peridica de 60 ms de periodo con 10 ms a nivel alto y 50 a nivel bajo. Suponga
que el reloj interno funciona a su mxima frecuencia.
/ *
I NFORMTI CA I NDUSTRI AL
3 I TI ELECTRNI CA.
EUP
DPTO. ARQUI TECTURA Y TECNOLOG A DE COMPUTADORES
UNI VERSI DAD DE SEVI LLA

Ej er ci ci o 11: Gener e una seal per i di ca de 60 ms de per i odo con 10 ms
a ni vel al t o y 50 a ni vel baj o. Suponga que el r el oj i nt er no f unci ona
a su mxi ma f r ecuenci a.

PROF. ALEJ ANDRO LI NARES BARRANCO
******************************************/
#i ncl ude <c8051f 040. h> / / Decl ar aci ones SFR
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / Const ant es Gl obal es
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
sbi t LED = P1^6; / / LED=' 1' si gni f i ca encendi do / / 0^0
sbi t I NP = P3^7;
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / Pr ot ot i pos de f unci ones gl obal es
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
voi d PORT_I ni t ( voi d) ;
voi d SYSCLK_I ni t ( voi d) ;
voi d PCA_I ni t ( voi d) ;
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / Rout i na pr i nci pal
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
voi d mai n ( voi d) {
/ / di sabl e wat chdog t i mer
WDTCN = 0xde;
WDTCN = 0xad;
SFRPAGE = CONFI G_PAGE; / / Cambi a a l a pagi na F de l os SFR
PORT_I ni t ( ) ; / / I ni ci al i za Cr ossbar y GPI O
SYSCLK_I ni t ( ) ; / / I ni ci al i za osci l ador
SFRPAGE = PCA0_PAGE; / / Swi t ch t o conf i gur at i on page
PCA_I ni t ( ) ; / / I ni ci al i za el SPI
whi l e ( 1) { / / Bucl e i nf i ni t o.
LED=I NP;
}
}
voi d SYSCLK_I ni t ( voi d) {
OSCI CN = 0xC2; / / SYSCLK = 12 MHz
}
voi d PORT_I ni t ( voi d) {
P1MDOUT | = 0x40; / / enabl e P1. 6 ( LED) as push- pul l out put
12
13
XBR0 = 0x08; / / Habi l i t a CEX0 dl e PCA en el Cr ossbar
XBR2 = 0x40; / / Enabl e cr ossbar and weak pul l - ups
}
voi d PCA_I ni t ( ) {
PCA0CN=0x40; / / Habi l i t ado
PCA0MD=0X00; / / y SYSCLK/ 12
PCA0CPM0=0xCA; / / PWM mode
PCA0CPL0=0xF0; / / Dut ycycl e
PCA0CPH0=0xD8;
}

13. Genere 4 seales peridicas de 30 ms de periodo con los siguientes tiempos a nivel alto: 1 ms, 5 ms,
10 ms, 15 ms. Suponga SYSCLK a su mxima frecuencia.
/ *
I NFORMTI CA I NDUSTRI AL
3 I TI ELECTRNI CA.
EUP
DPTO. ARQUI TECTURA Y TECNOLOG A DE COMPUTADORES
UNI VERSI DAD DE SEVI LLA

Ej er ci ci o 13: Gener e 4 seal es per i di cas de 30 ms de per i odo con l os
si gui ent es t i empos a ni vel al t o: 1 ms, 5 ms, 10 ms, 15 ms. Suponga SYSCLK
a su mxi ma f r ecuenci a.
PROF. ALEJ ANDRO LI NARES BARRANCO
******************************************/
#i ncl ude <c8051f 040. h> / / Decl ar aci ones SFR
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / Const ant es Gl obal es
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
sbi t LED = P1^6; / / LED=' 1' si gni f i ca encendi do / / 0^0
sbi t I NP = P3^7;
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / Pr ot ot i pos de f unci ones gl obal es
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
voi d PORT_I ni t ( voi d) ;
voi d SYSCLK_I ni t ( voi d) ;
voi d PCA_I ni t ( voi d) ;
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / Rout i na pr i nci pal
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
voi d mai n ( voi d) {
/ / di sabl e wat chdog t i mer
WDTCN = 0xde;
WDTCN = 0xad;
SFRPAGE = CONFI G_PAGE; / / Cambi a a l a pagi na F de l os SFR
PORT_I ni t ( ) ; / / I ni ci al i za Cr ossbar y GPI O
SYSCLK_I ni t ( ) ; / / I ni ci al i za osci l ador
SFRPAGE = PCA0_PAGE; / / Swi t ch t o conf i gur at i on page
PCA_I ni t ( ) ; / / I ni ci al i za el SPI
whi l e ( 1) { / / Bucl e i nf i ni t o.
LED=I NP;
}
}
voi d SYSCLK_I ni t ( voi d) {
OSCI CN = 0xC3; / / SYSCLK = 24 MHz
}
voi d PORT_I ni t ( voi d) {
P1MDOUT | = 0x40; / / enabl e P1. 6 ( LED) as push- pul l out put
P0MDOUT = 0x0;
XBR0 = 0x20; / / Habi l i t a CEX0 dl e PCA en el Cr ossbar
XBR2 = 0x40; / / Enabl e cr ossbar and weak pul l - ups
}
voi d PCA_I ni t ( ) {
PCA0CN=0x40; / / Habi l i t ado
PCA0MD=0x00; / / y si n Wat ch Dog
PCA0CPM0=0xCA; / / PWM mode
PCA0CPL0=0x30; / / Dut ycycl e
PCA0CPH0=0xF8;
PCA0CPM1=0xCA; / / PWM mode
PCA0CPL1=0xF0; / / Dut ycycl e
PCA0CPH1=0xD8;
PCA0CPM2=0xCA; / / PWM mode
PCA0CPL2=0xE0; / / Dut ycycl e
PCA0CPH2=0xB1;
PCA0CPM3=0xCA; / / PWM mode
PCA0CPL3=0xD0; / / Dut ycycl e
PCA0CPH3=0x8A;
}

Das könnte Ihnen auch gefallen