Tài Liệu Văn Bản Mới

You might also like

Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 2

#include <msp430.

h>

#define IN1 BIT2


#define IN2 BIT3
#define ON_OFF BIT0
#define UP BIT2
#define DOWN BIT1

volatile unsigned int pulseWidth = 0;


volatile unsigned char motorRunning = 0;

void ConfigurePWM() {
TA0CCR0 = 255; // Ð?t giá tr? t?i da cho chu k? PWM
TA0CCTL1 = OUTMOD_7; // Ch? d? PWM là Reset/Set
TA0CCR1 = pulseWidth; // S? d?ng pulseWidth cho giá tr? PWM ban d?u
TA0CTL = TASSEL_2 + MC_1; // S? d?ng Timer A, ch? d? d?m lên
TA0CCTL1 |= CCIE; // B?t ng?t so sánh cho kênh CCR1 c?a Timer A0
}

void main(void) {
WDTCTL = WDTPW | WDTHOLD; // T?t theo dõi
BCSCTL1 = CALBC1_1MHZ; // Ð?t t?n s? ho?t d?ng cho MSP430 là 1 MHz
DCOCTL = CALDCO_1MHZ;

P1SEL |= IN1 ; // B?t ch?c nang PWM cho các chân P1.2 (IN1) và P1.3 (IN2)
P1DIR |= (IN1 + IN2); // Ð?t chúng là d?u ra
P1OUT &= ~(IN1 + IN2); // T?t c? hai dèn LED ban d?u

P2DIR &= ~(ON_OFF + UP + DOWN); // C?u hình các chân P2 là d?u vào
P2REN |= (ON_OFF + UP + DOWN); // B?t resistor kéo lên cho chân P2
P2OUT |= (ON_OFF + UP + DOWN); // Ð?t chân kéo lên c?a P2 là cao

while (1) {
if (!(P2IN & ON_OFF)) {

ConfigurePWM();
if (!(P2IN & UP)) {
while (!(P2IN & UP));
if (pulseWidth < 255 ) {
pulseWidth += 10;
}
}
if (!(P2IN & DOWN))
{
while (!(P2IN & DOWN));
if (pulseWidth >= 10) {
pulseWidth -= 10;
}
}
motorRunning = 1; // Ðánh d?u r?ng d?ng co dang ch?y
}
else {
if (motorRunning) {
pulseWidth = 0; // Ð?t pulseWidth v? 0
P1OUT &= ~(IN1 + IN2); // T?t c? hai dèn LED ban d?u
motorRunning = 0; // Ðánh d?u r?ng d?ng co dã t?t
}
}
}
}

You might also like