You are on page 1of 10

PiscarLEDa100HzusandointerrupodoTimer_A.

1. #include<msp430g2553.h>
2. #include<legacymsp430.h>
3.
4. #defineLEDBIT0
5.
6. void
main
(
void
)
7. {
8. WDTCTL
=
WDTPW
+
WDTHOLD
;

//StopWDT
9.

10. BCSCTL1
=
CALBC1_1MHZ
;

//MCLKeSMCLK@1MHz
11. DCOCTL
=
CALDCO_1MHZ
;

//MCLKeSMCLK@1MHz
12.

13. P1OUT
&=
~LED
;

//HabilitarLEDnaportaP1.0(Launchpad)
14. P1DIR
|=
LED
;

//LigarLEDnaportaP1.0
15.

16.
//Timer_Aemmodoup,com10000contagensde1us,
17.
//gerandoumainterrupoacada10ms(10000*(1/1MHz)=10ms)
18. TA0CCR0
=

10000

1
;
19. TA0CTL
=
TASSEL_2
+
ID_0
+
MC_1
+
TAIE
;
20.

21. _BIS_SR
(
LPM0_bits
+
GIE
)
;

//MododebaixoconsumocomSMCLKligado
22. }
23.
24. //FunodeinterrupodoTimer_A
25. interrupt
(
TIMER0_A1_VECTOR
)
TA0_ISR
(
void
)
26. {
27. P1OUT
^=
LED
;

//InvertevalordoLED
28. TA0CTL
&=
~TAIFG
;

//Apagaflagdeinterrupo
29. }

PiscarLEDdeacordocomosinalnopinodecapturadoTimer_A.

1. #include<msp430g2553.h>
2. #include<legacymsp430.h>
3.
4. #defineCAP_INBIT1
5. #defineLEDBIT0
6.
7. int
main
(
void
)
8. {
9. WDTCTL
=
WDTPW
+
WDTHOLD
;

//StopWDT
1

10.

11. BCSCTL1
=
CALBC1_1MHZ
;

//MCLKeSMCLK@1MHz
12. DCOCTL
=
CALDCO_1MHZ
;

//MCLKeSMCLK@1MHz
13.

14. P1OUT
&=
~LED
;

//HabilitarLEDnaportaP1.0(Launchpad)
15. P1DIR
|=
LED
;

//LigarLEDnaportaP1.0
16.

17. P1DIR
&=
~CAP_IN
;

//HabilitarcapturadesinalexternoviaTimer_A
18. P1SEL
|=
CAP_IN
;

//HabilitarcapturadesinalexternoviaTimer_A
19. P1SEL2
&=
~CAP_IN
;

//HabilitarcapturadesinalexternoviaTimer_A
20.

21.
//Mododecapturadocanal0:pinoexternoCCI0A,
22.
//capturadeambasasbordas,gerandointerrupo
23. TACCTL0
=
CCIS_0
+
CM_3
+
CAP
+
CCIE
+
SCS
;
24.
//Timer_Aemmodocontnuo,comSMCLK@1MHz
25. TACTL
=
TASSEL_2
+
ID_0
+
MC_2
;
26.

27.
//MododebaixoconsumocomSMCLKligado
28. _BIS_SR
(
LPM0_bits
+
GIE
)
;
29.
return

0
;
30. }
31.
32. interrupt
(
TIMER0_A0_VECTOR
)
TA0_ISR
(
void
)
33. {
34. P1OUT
^=
LED
;

//InvertevalordoLED
35. TACCTL0
&=
~CCIFG
;

//Apagaflagdeinterrupo
36. }

PiscaroLEDa100HzusandoomododecomparaodoTimer_A.

1. #include<msp430g2553.h>
2. #include<legacymsp430.h>
3.
4. #defineLEDBIT6
5. #definePERIODO10000
6. #defineDUTY_CYCLE1
7.
8. int
main
(
void
)
9. {
10. WDTCTL
=
WDTPW
+
WDTHOLD
;

//StopWDT
11.

12. BCSCTL1
=
CALBC1_1MHZ
;

//MCLKeSMCLK@1MHz
13. DCOCTL
=
CALDCO_1MHZ
;

//MCLKeSMCLK@1MHz
2

14.

15. P1DIR
|=
LED
;

//HabilitarondaquadradaviaTimer_Anestepino
16. P1SEL
|=
LED
;

//HabilitarondaquadradaviaTimer_Anestepino
17. P1SEL2
&=
~LED
;

//HabilitarondaquadradaviaTimer_Anestepino
18.

19.
//LimitedomodoupparaoTimer_A
20. TACCR0
=
PERIODO

1
;
21.
//Limitedocanal1,menordoqueolimitedomodo_up
22. TACCR1
=
PERIODO
/
(
100
/
DUTY_CYCLE
)

1
;
23.
//Canal1emmododesadareset/set:
24.
//LED=1para0<=TAR<TACCR1,LED=0paraTACCR1<=TAR<=TACCR0
25. TACCTL1
=
OUTMOD_7
;
26.
//Timer_Aemmodoup,com10000contagensde1us
27. TACTL
=
TASSEL_2
+
ID_0
+
MC_1
;
28.

29.
//EntraremLPM0.LEDautomaticamenteligadoedesligado
30.
//viahardwaredomododecomparaodoTimer_A
31. _BIS_SR
(
LPM0_bits
)
;
32.
return

0
;
33. }

PiscaroLEDnopinoP1.6usandoomododecomparao,eatualizarafrequnciacomqueo
LEDpiscausandoomododecapturanopinoP1.1.
Necessitadeumpotnciometro.ConecteVcceGNDaospinosdaesquerdaedadireitado
potencimetro,econecteopinocentraldopotencimetroaopinoP1.1doMSP430.

1. #include<msp430g2553.h>
2. #include<legacymsp430.h>
3.
4. //Paraestecodigofuncionar,
5. //utilizeumpotenciometro.
6. //ConecteVcceGNDaospinosdaesquerda
7. //edadireitadopotenciometro
8. //Conecteopinocentraldopotenciometro
9. //aopinoP1.1doMSP430
10.
11.//CapturaviaTimerApelopinoP1.1
12.#defineCAP_INBIT1
13.//TimerAemmododecomparacaoviapinoP1.6

14.#defineLEDBIT6
15.//PeriodoinicialparaTimerAemmododecomparacao
16.#definePERIODO0xFFFF
17.//MinimoperiodoinicialparaTimerAemmododecomparacao
18.#defineMIN_PERIODO0xFFFF/4
19.
20.int
main
(
void
)
21.{
22.
//DesligaWatchdogTimer
23.WDTCTL
=
WDTPW
+
WDTHOLD
;
24.

25.
//MCLKeSMCLK@1MHz
26.BCSCTL1
=
CALBC1_1MHZ
;
27.DCOCTL
=
CALDCO_1MHZ
;
28.

29.
//HabilitarondaquadradaviaTimer_AnopinodoLED
30.P1DIR
|=
LED
;
31.P1SEL
|=
LED
;
32.P1SEL2
&=
~LED
;
33.

34.
//HabilitarcapturadesinalexternoviaTimer_A
35.P1DIR
&=
~CAP_IN
;
36.P1SEL
|=
CAP_IN
;
37.P1SEL2
&=
~CAP_IN
;
38.

39.
//Configurarmododecomparacaoparacanal1doTimer_A
40.TA0CCR0
=
PERIODO

1
;
41.
//Dutycyclede50%
42.TA0CCR1
=
TA0CCR0
>>

1
;
43.TACCTL1
=
OUTMOD_7
;
44.

45.
//Configurarmododecapturaparacanal0doTimer_A
46.TACCTL0
=
CCIS_0
+
CM_3
+
CAP
+
CCIE
+
SCS
;
47.

48.
//LigarTimer_A
49.TACTL
=
TASSEL_2
+
ID_3
+
MC_1
;
50.

51.
//Entraremmododebaixoconsumo
52._BIS_SR
(
LPM0_bits
+
GIE
)
;
53.
return

0
;
54.}
55.
56.//Interrupcaodomododecaptura
57.interrupt
(
TIMER0_A0_VECTOR
)
TA0_ISR
(
void
)
58.{
59.
//Senoinstantedacaptura,TA0CCR0chegar
60.
//aovalorminimopermitido,atualizarTA0CCR0
61.
//paraovalormaximo.IssoimpedequeoLED
62.
//paredepiscar(TACCR0=0)
63.
if
(
TA0CCR0
<
MIN_PERIODO
)
TA0CCR0
=
PERIODO
;
64.
65.
//Dutycyclede50%
66.TA0CCR1
=
TA0CCR0
>>

1
;
67.

68.
//Apagaflagdeinterrupo
69.TACCTL0
&=
~CCIFG
;
70.}

Cdigoparacontarde0a9segundoscomumdisplayde7segmentos.OLEDDPpiscaa
cadaquartodesegundo.

1. #include<msp430g2553.h>
2. #include<legacymsp430.h>
3.
4. #definegBIT0
5. #definefBIT1
6. #defineaBIT2
7. #definebBIT3
8. #defineeBIT4

9. #definedBIT5
10.#definecBIT6
11.#defineDPBIT7
12.
13.#defineDISP_0(a+b+c+d+e+f)
14.#defineDISP_1(b+c)
15.#defineDISP_2(a+b+g+e+d)
16.#defineDISP_3(a+b+g+c+d)
17.#defineDISP_4(f+g+b+c)
18.#defineDISP_5(a+f+g+c+d)
19.#defineDISP_6(a+f+g+c+d+e)
20.#defineDISP_7(a+b+c)
21.#defineDISP_8(a+b+c+d+e+f+g)
22.#defineDISP_9(a+b+c+d+f+g)
23.
24.#definePERIODO10000
25.#defineMAX_COUNTER1000
26.#defineDIV_COUNTER100
27.#defineDP_COUNTER25
28.#defineMAX_DP_COUNTER2*DP_COUNTER
29.
30.volatile

unsigned

int
counter
=

0
,
dp_counter
=

0
;
31.volatile

char
numeros
[

{
DISP_0
,
DISP_1
,
DISP_2
,
DISP_3
,
DISP_4
,
32.DISP_5
,
DISP_6
,
DISP_7
,
DISP_8
,
DISP_9
}
;
33.int
main
(
void
)
34.{
35.WDTCTL
=
WDTPW
+
WDTHOLD
;
36.

37.BCSCTL1
=
CALBC1_1MHZ
;
38.DCOCTL
=
CALDCO_1MHZ
;
39.

40.P1OUT
=
a
+
b
+
c
+
d
+
e
+
f
+
g
+
DP
;
41.P1DIR
=
a
+
b
+
c
+
d
+
e
+
f
+
g
+
DP
;

42.

43.TA0CCR0
=
PERIODO

1
;
44.TA0CTL
=
TASSEL_2
+
ID_0
+
MC_1
+
TAIE
;
45.

46._BIS_SR
(
LPM0_bits
+
GIE
)
;
47.

48.
return

0
;
49.}
50.
51.interrupt
(
TIMER0_A1_VECTOR
)
TA0_ISR
(
void
)
52.{
53.
if
(
counter
%

2
)
54.
{
55.P1OUT
=
numeros
[
counter
/
DIV_COUNTER
]
;
56.
if
((
dp_counter
/
DP_COUNTER
)
==
0
)
57.
{
58.P1OUT
|=
DP
;
59.
}
60.
}
61.
else
62.
{
63.P1OUT
=

0
;
64.
}
65.

66.
if
(
counter
>=
MAX_COUNTER
)
counter
=

0
;
67.
else
counter
++;
68.

69.
if
(
dp_counter
>=
MAX_DP_COUNTER
)
dp_counter
=

0
;
70.
else
dp_counter
++;
71.

72.TA0CTL
&=
~TAIFG
;
73.}

Cdigoparacontarde0a9segundoscomumdisplayde7segmentos.OLEDDPpiscaa
cadaquartodesegundo.EstecdigoutilizadoisTimer_A.
7

1. #include<msp430g2553.h>
2. #include<legacymsp430.h>
3.
4. #definegBIT0
5. #definefBIT1
6. #defineaBIT2
7. #definebBIT3
8. #defineeBIT4
9. #definedBIT5
10.#definecBIT6
11.#defineDPBIT7
12.
13.#defineDISP_0(a+b+c+d+e+f)
14.#defineDISP_1(b+c)
15.#defineDISP_2(a+b+g+e+d)
16.#defineDISP_3(a+b+g+c+d)
17.#defineDISP_4(f+g+b+c)
18.#defineDISP_5(a+f+g+c+d)
19.#defineDISP_6(a+f+g+c+d+e)
20.#defineDISP_7(a+b+c)
21.#defineDISP_8(a+b+c+d+e+f+g)
22.#defineDISP_9(a+b+c+d+f+g)
23.
24.#definePERIODO_BLINK10000
25.#definePERIODO_CRON62500
26.#defineMAX_COUNTER9
27.#defineDP_COUNTER25
28.#defineMAX_DP_COUNTER2*DP_COUNTER
29.
30.volatile

char
counter
=

0
,
blink_counter
=

0
,
dp_counter
=

0
;
31.volatile

char
numeros
[

{
DISP_0
,
DISP_1
,
DISP_2
,
DISP_3
,
DISP_4
,
32.DISP_5
,
DISP_6
,
DISP_7
,
DISP_8
,
DISP_9
}
;
33.

34.int
main
(
void
)
35.{
36.WDTCTL
=
WDTPW
+
WDTHOLD
;
37.

38.BCSCTL1
=
CALBC1_1MHZ
;
39.DCOCTL
=
CALDCO_1MHZ
;
40.

41.P1OUT
=
a
+
b
+
c
+
d
+
e
+
f
+
g
+
DP
;
42.P1DIR
=
a
+
b
+
c
+
d
+
e
+
f
+
g
+
DP
;
43.

44.TA0CCR0
=
PERIODO_CRON
;
45.TA0CTL
=
TASSEL_2
+
ID_3
+
MC_3
+
TAIE
;
46.TA1CCR0
=
PERIODO_BLINK

1
;
47.TA1CTL
=
TASSEL_2
+
ID_0
+
MC_1
+
TAIE
;
48.

49._BIS_SR
(
LPM0_bits
+
GIE
)
;
50.

51.
return

0
;
52.}
53.
54.//Interrupochamadaacada1s
55.interrupt
(
TIMER0_A1_VECTOR
)
TA0_ISR
(
void
)
56.{
57.
if
(
counter
>=
MAX_COUNTER
)
counter
=

0
;
58.
else
counter
++;
59.

60.TA0CTL
&=
~TAIFG
;
61.}
62.
63.//Interrupochamadaacada10ms
64.interrupt
(
TIMER1_A1_VECTOR
)
TA1_ISR
(
void
)
65.{
66.
if
(
blink_counter
)
67.
{

68.P1OUT
=
numeros
[
counter
]
;
69.
if
((
dp_counter
/
DP_COUNTER
)
==
0
)
70.
{
71.P1OUT
|=
DP
;
72.
}
73.
}
74.
else
P1OUT
=

0
;
75.

76.blink_counter
^=

1
;
77.
if
(
dp_counter
>=
MAX_DP_COUNTER
)
dp_counter
=

0
;
78.
else
dp_counter
++;
79.

80.TA1CTL
&=
~TAIFG
;
81.}

10

You might also like