-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathVisto2p2.c
More file actions
162 lines (127 loc) · 3.55 KB
/
Visto2p2.c
File metadata and controls
162 lines (127 loc) · 3.55 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
#include <msp430.h>
#include <stdio.h>
#define PARTIDA 14051 //PULSO
#define TOLMAX 14607 //13,9 ms
#define TOLMIN 13951 //13,3 ms
#define PERIODO 10485 //Período, 10 ms
#define PASSO 1047 // 1 ms
#define UM 0xBA
#define DOIS 0xB9
#define TRES 0xB8
#define QUATRO 0xBB
#define CINCO 0xBF
#define SEIS 0xBC
#define SETE 0xF8
#define OITO 0xEA
#define NOVE 0xF6
#define ZERO 0xE6
#define ASTRSK 0xE9
#define HSHT 0xF2
#define ARRUP 0xE7
#define ARRR 0xA5
#define ARRL 0xF7
#define ARRDOWN 0xAD
#define OK 0xE3
void debounce(long x){
volatile long i;
for(i = 0; i < x;i++);
}
void led(void){
P1DIR |= BIT0;
P1OUT &= ~BIT0;
P4DIR |= BIT7;
P4OUT &= ~BIT7;
}
void tb0_config(void){
TB0CTL = TBSSEL_2 | MC__UP;
TB0CCR0 = PERIODO;
TB0CCTL1 = OUTMOD_6;
P4DIR |= BIT7;
P4SEL |= BIT7;
PMAPKEYID = 0X02D52;
P4MAP7 = PM_TB0CCR1A;
}
void ta2_config(void){
TA2CTL = TASSEL_1 | MC__UP;
TA2CCR0 = 32767;
}
void ta1_config(void){
TA1CTL= TASSEL_2 | MC_2;
TA1CCTL1 = CM_2 | SCS | CAP; //Habilitar Modo Captura
TA1CCR0 = PARTIDA;
P2DIR &= ~BIT0; //P2.0 = entrada
P2SEL |= BIT0; //dedicada � captura
}
int main(void)
{
WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer
led();
ta1_config();
tb0_config();
ta2_config();
unsigned char BOTAO = 0;
int word[32];
unsigned int curr=0;
int edge= 0;
while(1){
while((TA1CCTL1 & CCIFG)==0);
TA1CTL |= TACLR;
TA1CCTL1 &= ~CCIFG;
while((TA1CCTL1 & CCIFG)==0);
edge = TA1CCR1;
if((edge > TOLMIN) && (edge < TOLMAX)){
TA1CCTL1 = CM_1 | SCS | CAP;
while((TA1CCTL1 & CCIFG)==0);
TA1CTL |= TACLR;
TA1CCTL1 &= ~CCIFG;
for(curr=0;curr<=31;curr++){
while((TA1CCTL1 & CCIFG)==0);
if(curr < 24){
TA1CTL |= TACLR;
TA1CCTL1 &= ~CCIFG;
continue;
}
word[curr] = TA1CCR1;
TA1CTL |= TACLR;
TA1CCTL1 &= ~CCIFG;
}
for(curr=24;curr<=31;curr++){
if(word[curr]>1120 && word[curr]<1320){
word[curr] = 0;
}
else{
if(word[curr]>2230 && word[curr]<2470){
word[curr] = 1;
}
}
}
for(curr=24;curr<=31;curr++){
BOTAO = BOTAO >> 1;
if(word[curr]==1){
BOTAO |=0x80L;
}
}
debounce(1000);
switch(BOTAO){
case UM: P1OUT |= BIT0; break;
case DOIS: P1OUT &= ~BIT0; break;
case TRES: P1OUT ^= BIT0; break;
case QUATRO: TB0CCR1= PASSO*10; break;
case CINCO: TB0CCR1= PASSO*0; break;
case SEIS: TB0CCR1 = (PASSO*10) - TB0CCR1; break;
case ARRUP: TB0CCR1= PASSO*0; break;//0
case HSHT: TB0CCR1= PASSO*1; break;//10%
case ASTRSK: TB0CCR1= PASSO*2; break;//20%
case ZERO: TB0CCR1= PASSO*3; break;//30%
case ARRL: TB0CCR1= PASSO*4; break;//40%
case NOVE: TB0CCR1= PASSO*5; break;//50%
case ARRR: TB0CCR1= PASSO*6; break;//60%
case OK: TB0CCR1= PASSO*7; break;//70%
case ARRDOWN: TB0CCR1= PASSO*8; break;//80%
case OITO: TB0CCR1= PASSO*9; break;//90%
}
}
TA1CCTL1 = CM_2 | SCS | CAP;
}
return 0;
}