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 ******************************************/
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.
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - / / 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
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.
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
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.
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; }