#include #ifndef TIMER0_A1_VECTOR #define TIMER0_A1_VECTOR TIMERA1_VECTOR #define TIMER0_A0_VECTOR TIMERA0_VECTOR #endif #define TORKONTAKT BIT4 #define SCHLUESSELSCHALTER BIT5 #define ALARM BIT7 #define LED_ROT BIT0 #define LED_GRUEN BIT6 void InitializePort(void); void InitializeClocks(void); void InitializeSine(void); int winkel=0; const int sinus_a[]={500, 512, 525, 537, 549, 561, 573, 585, 598, 610, 621, 633, 645, 657, 668, 680, 691, 703, 714, 725, 736, 746, 757, 767, 778, 788, 798, 808, 817, 827, 836, 845, 854, 862, 870, 879, 887, 894, 902, 909, 916, 922, 929, 935, 941, 947, 952, 957, 962, 966, 971, 975, 978, 982, 985, 988, 990, 993, 995, 996, 998, 999, 999, 1000, 1000, 1000, 999, 999, 998, 996, 995, 993, 990, 988, 985, 982, 978, 975, 971, 966, 962, 957, 952, 947, 941, 935, 929, 922, 916, 909, 902, 894, 887, 879, 870, 862, 854, 845, 836, 827, 817, 808, 798, 788, 778, 767, 757, 746, 736, 725, 714, 703, 691, 680, 668, 657, 645, 633, 621, 610, 598, 585, 573, 561, 549, 537, 525, 512, 500, 488, 475, 463, 451, 439, 427, 415, 402, 390, 379, 367, 355, 343, 332, 320, 309, 297, 286, 275, 264, 254, 243, 233, 222, 212, 202, 192, 183, 173, 164, 155, 146, 138, 130, 121, 113, 106, 98, 91, 84, 78, 71, 65, 59, 53, 48, 43, 38, 34, 29, 25, 22, 18, 15, 12, 10, 7, 5, 4, 2, 1, 1, 0, 0, 0, 1, 1, 2, 4, 5, 7, 10, 12, 15, 18, 22, 25, 29, 34, 38, 43, 48, 53, 59, 65, 71, 78, 84, 91, 98, 106, 113, 121, 130, 138, 146, 155, 164, 173, 183, 192, 202, 212, 222, 233, 243, 254, 264, 275, 286, 297, 309, 320, 332, 343, 355, 367, 379, 390, 402, 415, 427, 439, 451, 463, 475, 488}; void main(void) { WDTCTL = WDTPW + WDTHOLD; InitializeClocks(); InitializePort(); InitializeSine(); _BIS_SR(GIE); while (1) { if (LED_GRUEN&P1OUT) //Wartezeit bis Anlage scharf { if(SCHLUESSELSCHALTER&P1IN) __delay_cycles(160000000); } if (!(SCHLUESSELSCHALTER & P1IN)) //Anlage unscharf { P1SEL &= ~BIT2; P1OUT |= LED_GRUEN; P1OUT &= ~(ALARM+LED_ROT+BIT2); } else //Anlage scharf { P1OUT &= ~LED_GRUEN; P1OUT |= LED_ROT; if (TORKONTAKT & P1IN) //Torkontakt löst aus { __delay_cycles(160000000); //Wartezeit bis zur Alarmauslösung if (SCHLUESSELSCHALTER&P1IN) { P1SEL|=BIT2; P1OUT |= ALARM; while (SCHLUESSELSCHALTER & P1IN) //rote LED toggelt bei Alarm { P1OUT ^= LED_ROT; __delay_cycles(8000000); } } } } } } #pragma vector=TIMER0_A0_VECTOR __interrupt void Timer_A (void) { TACCR1 = sinus_a[winkel]; winkel = (winkel+32)&255; // index für sinustabelle } void InitializeClocks(void) { DCOCTL = CALDCO_16MHZ; BCSCTL1 = RSEL3+RSEL2+RSEL1+RSEL0; BCSCTL2= 0; } void InitializePort(void) // Configure Port 1 { P1DIR = ~(BIT4+BIT5); P1IN |= (BIT4+BIT5); P1REN |= (BIT4+BIT5); P1OUT = (BIT4+BIT5); P1IES = 0; P1IFG = 0; P1IE = 0; } void InitializeSine(void) { CCTL0 = CCIE+OUTMOD_7; // CCR0 interrupt enabled CCTL1 = OUTMOD_7; CCR0 = 1000; CCR1 = 500; TACTL = TASSEL_2 + MC_1; // SMCLK, up mode }