с документацией если не не в совершенстве то хоть както я ознакомился. Насчет количества тем извеняюсь, согласен, что свой оследний вопрос нужно было задать в этой теме просто я недавний пользователь форума и подумал что если я напишу здесь то его никто не прочтет.
насчет вопроса я решил потренироваться во время перерыва между семестрами и написать программу для светофора перед этим посмотрев как он работает и я увидел что он мигает 3 раза в 3 секунды следовательно такт должен быть равен 500мС
вот что я написал предварительно:
CODE
#include <msp430x20x3.h>
#define u_char unsigned char
//-------------------------------------------------------------------
#define LED_R_1 0x02 // P1.1
#define LED_Y_1 0x04 // P1.2
#define LED_G_1 0x08 // P1.3
#define LED_R_2 0x10 // P1.4
#define LED_G_2 0x20 // P1.5
//begin ####################### main() ##############################
static u_char ct500ms;
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
P1DIR |= 0x00;
P1OUT |= 0xFF;
//P1DIR |= LED_R_1+LED_Y_1+LED_G_1+LED_R_2+LED_G_2;
//P1OUT &=~( LED_R_1+LED_Y_1+LED_G_1+LED_R_2+LED_G_2);
CCTL0 = CCIE;
CCR0=62500;
TACTL = TASSEL_2 + MC_1+ID_3;
_BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt
}
// Timer A0 interrupt service routine
#pragma vector = TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
switch (ct500ms)
{
case 0:
P1OUT |= LED_R_1; P1OUT |= LED_G_2;
break;
case 54:
P1OUT &= ~LED_G_2; P1OUT |= LED_R_2;
break;
case 60:
P1OUT &= ~LED_R_1;
break;
case 61:
P1OUT |= LED_R_1;
break;
case 62:
P1OUT &= ~LED_R_1;
break;
case 63:
P1OUT |= LED_R_1;
break;
case 64:
P1OUT &= ~LED_R_1;
break;
case 65:
P1OUT |= LED_R_1;
break;
case 66:
P1OUT &= ~LED_R_1;
P1OUT |= LED_Y_1;
break;
case 72:
P1OUT &= ~LED_Y_1; P1OUT |= LED_G_1;
break;
case 192:
P1OUT &= ~LED_G_1;
break;
case 193:
P1OUT |= LED_G_1;
break;
case 194:
P1OUT &= ~LED_G_1;
break;
case 195:
P1OUT |= LED_G_1;
break;
case 196:
P1OUT &= ~LED_G_1;
break;
case 197:
P1OUT |= LED_G_1;
break;
case 198:
P1OUT |= LED_Y_1;
break;
case 204:
P1OUT &= ~LED_Y_1; P1OUT &= ~LED_R_2;
break;
}
ct500ms++;
}
где переключатель я решил сделать когда таймер дойдет до нужношо мне значения, сдесь 0...204 это не времена а какбы интервалы которые я получил поделив к примеру время работы первого красного светодиода который работает 30000мС на 500 и получил 60 в данном светофоре от конца одного сигнала до его следующего появления пройдет 102000мС
и прочитав документацию я узнал, что тактовый сигнал можно изменить при помощи IDx (делением задающего тактового сигнала), но так как у меня как я понял 1МГЦ т.е. если я не ошибаюсь 1мС , а мне надо 500мС то я и спосил у вас как мне это реализовать
p.s. я решил использовать таймер в режиме пряиого счета