реклама на сайте
подробности

 
 
> сторожевой таймер, watchdog
chainikru
сообщение Jan 20 2012, 10:24
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 5-12-11
Пользователь №: 68 682



Подскажите пожалуйста как задать интервал для сторожевого таймера равным 500мС
WDTCTL = WDT_MDLY_32; // Set Watchdog Timer interval to ~30ms
WDTCTL = (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS1); // Set Watchdog Timer interval 0,5ms
WDTCTL = .................................................................; // Set Watchdog Timer interval 500ms
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
chainikru
сообщение Jan 22 2012, 23:22
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 5-12-11
Пользователь №: 68 682



с документацией если не не в совершенстве то хоть както я ознакомился. Насчет количества тем извеняюсь, согласен, что свой оследний вопрос нужно было задать в этой теме просто я недавний пользователь форума и подумал что если я напишу здесь то его никто не прочтет.
насчет вопроса я решил потренироваться во время перерыва между семестрами и написать программу для светофора перед этим посмотрев как он работает и я увидел что он мигает 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. я решил использовать таймер в режиме пряиого счета

Сообщение отредактировал chainikru - Jan 23 2012, 11:15
Причина редактирования: [codebox]!!!
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 19:33
Рейтинг@Mail.ru


Страница сгенерированна за 0.01385 секунд с 7
ELECTRONIX ©2004-2016