#include #include unsigned long int w_repeat = 0; //Aktuelle Halbwelle unsigned long int w_repeat_stop = 0; //Maximale Anzahl von Halbwellen int w_SetCCR = 0; //Variable zum Setzen der Capture/Compare Register von Timer B unsigned long int w_Periode = 1; //Anzahl Perioden gleicher Frequenz unsigned long int w_PeriodCOUNT = 0; unsigned long int w_StartFRQ; //Startfrequenz in kHz unsigned long int w_StopFRQ; //Stopfrequenz in kHz unsigned long int w_StartCOUNT; //Zählerstand bei Startfrequenz unsigned long int w_StopCOUNT; //Zählerstand bei Stopfrequenz long int i = 1; int i2 = 0; int h = 0; int b = 0; int t = 0; long int j = 0; long int w = 100; //DAC-Werte long int a[200] = {2047, 2112, 2177, 2241, 2305, 2368, 2432,2495, 2557, 2619, 2681, 2742, 2802, 2861, 2920, 2978, 3035, 3091, 3145, 3199, 3253, 3303, 3353, 3402, 3450, 3496, 3541, 3584, 3626, 3666, 3705, 3742, 3777, 3811, 3843, 3873, 3901, 3928, 3952, 3975, 3996, 4015, 4032, 4047, 4060, 4071, 4080, 4087, 4092, 4095, 4095, 4092, 4087, 4080, 4071, 4060, 4047, 4032, 4015, 3996, 3975, 3952, 3928, 3901, 3873, 3843, 3811, 3777, 3742, 3705, 3666, 3626, 3584, 3541, 3496, 3450, 3402, 3353, 3303, 3253, 3199, 3145, 3091, 3035, 2978, 2920, 2861, 2802, 2742, 2681, 2619, 2557, 2495, 2432, 2368, 2305, 2241, 2177, 2112, 2048, 1984, 1919, 1855, 1791, 1728, 1664, 1601, 1539, 1477, 1415, 1354, 1294, 1235, 1176, 1118, 1061, 1005, 951, 897, 844, 793, 743, 694, 656, 600, 555, 512, 470, 430, 391, 354, 318, 285, 253, 223, 195, 168, 143, 121, 100, 81, 64, 49, 36, 25, 16, 9, 4, 1, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 143, 168, 195, 223, 253, 285, 318, 354, 391, 430, 470, 512, 655, 600, 656, 694, 743, 793, 844, 897, 951, 1005, 1061, 1118, 1176, 1235, 1294, 1354, 1415, 1477, 1539, 1601, 1664, 1728, 1791, 1855, 1919, 1984, 2044, 2047}; int r[6]; //***********************Initialization**************************************************************************** void start() { _EINT(); //***********************Basic Clock Modul Setting***************************************************************** DCOCTL = DCO0 + DCO1 + DCO2 ; BCSCTL1 = RSEL0 + RSEL1 + RSEL2 + RSEL3 + XT2OFF + XTS + DIVA_0; BCSCTL2 = DIVM_0 + DIVS_0 + +SELS + SELM_2; BCSCTL3 = LFXT1S_2 + XCAP_3 + XT2S_2; //***********************Port 1 Initialization********************************************************************* P1OUT = 0x00; P1DIR = 0x0f; //Enable Port1.0 - Port1.3 as output, Port1.4 - Port1.7 as input P1IES = 0x00; P1SEL = 0x00; //***********************Port 2 Initialization********************************************************************* P2OUT = 0x00; P2DIR = 0x0f; //Enable Port2.0 - Port2.3 as output, Port2.4 - Port2.7 as input P2IES = 0x00; P2SEL = 0x00; //***********************Port 3 Initialization********************************************************************* P3OUT = 0x00; P3DIR = 0xff; //Enable Port3 as output P3SEL = 0x00; //***********************Port 5 Initialization********************************************************************* P5OUT = 0x00; P5DIR = 0xff; //Enable Port3 as output P5SEL = 0x70; //***********************Port 6 Initialization********************************************************************* P6DIR = 0xf0; //Enable Port6.0 - Port6.3 as input, Port2.4 - Port2.7 as output P6SEL = 0xff; //***********************Watchdog Timer Initialization************************************************************* WDTCTL = WDTPW + WDTHOLD; //Stop Watchdog Timer // IE1 |= WDTIE; // Watchdog Interrupt Enable //***********************Timer A*********************************************************************************** /*TACTL = TASSEL_1 + MC_1 + TAIE; TACCR0 = 500;*/ //***********************Timer B*********************************************************************************** w_repeat_stop=2*w_Periode; w_StartCOUNT = 16000; w_StopCOUNT = 6333; w_PeriodCOUNT = w_StartCOUNT; TBCTL = TBCLGRP_0 + CNTL_0 + TBSSEL_2 + ID_0 + MC_1 + TBIE + TBIFG; TBCCTL0 = SCS + CCIE + CLLD_0; TBCCTL1 = SCS + CCIE + CLLD_0; TBCCR0 = w_PeriodCOUNT; TBCCR1 = w_PeriodCOUNT/w; //***********************DAC12************************************************************************************* DAC12_0CTL = DAC12SREF_0 + DAC12LSEL_0 + DAC12AMP_7 + DAC12IR; DAC12_1CTL = DAC12SREF_0 + DAC12LSEL_0 + DAC12AMP_7 + DAC12IR; //***********************ADC12************************************************************************************* ADC12CTL0 = SHT1_1 + SHT0_1 + REF2_5V + REFON + ADC12ON ; //2,5V Reference on, ADC12 ON ADC12CTL1 = CSTARTADD_0 + SHS_0 + ADC12DIV_1 + ADC12SSEL_2 + SHP; ADC12MCTL0 = EOS + SREF_0 + INCH_0; ADC12IE = 0x0001; } //***********************MAIN************************************************************************************** void main() { start(); while(1) { if(w_SetCCR == 1) { TBCCR1 = i*w_PeriodCOUNT/w; } w_SetCCR = 0; } } #pragma vector=TIMERB0_VECTOR __interrupt void Timer_B0_INTERRUPT (void) { j++; if (j % 2 == 0) { P3OUT ^= 0x01; w_PeriodCOUNT = w_PeriodCOUNT - 2; TBCCR0 = w_PeriodCOUNT; TBCCR1 = w_PeriodCOUNT/w; } if (w_PeriodCOUNT <= w_StopCOUNT) { w_PeriodCOUNT = w_StartCOUNT; TBCCR0 = w_PeriodCOUNT; TBCCR1 = w_PeriodCOUNT/w; } } #pragma vector=TIMERB1_VECTOR __interrupt void Timer_B1_INTERRUPT (void) { if(TBIV == 0x02 | 0x0E) { t++; w_SetCCR = 1; DAC12_0DAT = a[t-1]; if(t == 50) { P1OUT ^= 0x01; } if(t == 100) { P1OUT ^= 0x02; i = 0; } if(t == 150) { P1OUT ^= 0x01; } if(t == 199) { P1OUT ^= 0x02; t = 0; i = 0; } i++; } } //***********************END***************************************************************************************