ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
28 ноября
182557
zx_ (22.02.2010 17:11, просмотров: 3587) MBedder
не получается настроить прерывания по таймеру. iar+msp Ножка по прерыванию дёргается, иногда прогамма сбрасывается на reset, иногда переполняется стек. Недавно начал изучать С, поэтому ошибка, наверное, простейшая. :) #include "io430.h" #include <intrinsics.h> //port1 #define SCLK (0x0008) #define SD (0x0004) #define XCLR (0x0002) #define POW_LOW (0x0001) //port2 #define POW_PRESS (0x0010) #define POW_LOSK (0x0004) #define BEEPER (0x0008) int main( void ){ //STUP(begin) WDTCTL = WDTPW + WDTHOLD; do{ BCSCTL1 = 0; BCSCTL2 = SELM1 + SELM0 + SELS; IFG1 &= !OFIFG; volatile unsigned int i; i = 100; do i--; while (i != 0); } while ((IFG1 & OFIFG) == 0); P2DIR = POW_LOSK + BEEPER; //P2.2, P2.3 out P2OUT = POW_LOSK; //timer(begin) TACCTL0=CCIE; //разрешение прерывания TACCR0=50; TACTL = TASSEL_1+MC_1+TAIE; //ACLK, Режим «вверх», Разрешение прерывания //timer(end) //STUP(end) __enable_interrupt(); P2OUT ^= BEEPER; for (;;){ } return 0; } #pragma vector=TIMERA0_VECTOR __interrupt void Timer_A (void){ P2OUT ^= BEEPER; }