# 2019-2020 Deeltoets 2 versie 2 ## Opgaven De opgaven kun je vinden op: [https://bitbucket.org/HR_ELEKTRO/ems10/wiki/Toetsen/2019-2020_Deeltoets_2_2.pdf](https://bitbucket.org/HR_ELEKTRO/ems10/wiki/Toetsen/2019-2020_Deeltoets_2_2.pdf) ## Uitwerkingen ```c #include #include void zendGetal(uint16_t getal) { char tekst[7]; tekst[0] = (getal / 10000) + '0'; tekst[1] = ((getal / 1000) % 10) + '0'; tekst[2] = ((getal / 100) % 10) + '0'; tekst[3] = ((getal / 10) % 10) + '0'; tekst[4] = (getal % 10) + '0'; tekst[5] = '\r'; tekst[6] = '\n'; int i; for (i = 0; i < 7; i++) { while (!(IFG2 & UCA0TXIFG)); UCA0TXBUF = tekst[i]; } } // 1B #pragma vector = PORT2_VECTOR __interrupt void port2_isr(void) { P2OUT ^= BIT1; // Toggle P2.1 P2IFG &= ~BIT0; // Reset P2.0 interrupt flag } // 2 #pragma vector = TIMER0_A1_VECTOR __interrupt void timer0_cc0__isr(void) { P2OUT ^= BIT1; // Toggle P2.1 TA0CTL &= ~TAIFG; // Reset interrupt flag // 3 ADC10CTL0 |= ADC10SC; // Start ADC } // 3 uint16_t spanning_in_mv; #pragma vector = ADC10_VECTOR __interrupt void adc_to_mv(void) { spanning_in_mv = ADC10MEM * (3600 / 1023.0); } int main(void) { WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer // 2 BCSCTL1 = CALBC1_8MHZ; DCOCTL = CALDCO_8MHZ; // 1A P2DIR |= BIT2; // P2.2 output P2DIR &= ~BIT0; // P2.0 input P2REN |= BIT0; P2OUT &= ~BIT0; // Pull down op P2.0 // 1B P2DIR |= BIT1; // P2.1 output P2IE |= BIT0; // Pin change interrupt op P2.0 P2IES |= BIT0; // Neergaande flank (loslaten knop) // 2 TA0CTL = TASSEL_2 // SMCLK | ID_3 // /8 | MC_1 // Up mode | TAIE // enabele interrupt ; TA0CCR0 = 59999; // 3 ADC10CTL1 = INCH_5 // pin P1.5 | SHS_0 // ADC10SC bit = default | ADC10DIV_7 // /8 | ADC10SSEL_3 // SMCLK | CONSEQ_0 // Single-channel-single-conversion = default ; ADC10CTL0 = SREF_0 // V_R+ = V_CC and V_R- = V_SS = default | ADC10ON // ADC10on | ADC10IE // Interrupt enabled | ENC // ADC10 enabled ; // 4 UCA0CTL1 |= UCSWRST; // USCI logic held in reset state UCA0CTL0 = 0; UCA0CTL1 = UCSSEL_2 // SMCLK of UCSSEL_3 idem | UCSWRST; // USCI logic held in reset state // Set baudrate 9600 UCA0BR0 = 52; UCA0BR1 = 0; UCA0MCTL = UCBRS_0 | UCBRF_1 | UCOS16; // Configure ports. P1SEL |= BIT2 | BIT1; P1SEL2 |= BIT2 | BIT1; UCA0CTL1 &= ~UCSWRST; // 1B __enable_interrupt(); while (1) { // 4 if ((IFG2 & UCA0RXIFG) == UCA0RXIFG) { if (UCA0RXBUF == '!') { zendGetal(spanning_in_mv); } } // 1A if ((P2IN & BIT0) == BIT0) { P2OUT |= BIT2; } else { P2OUT &= ~BIT2; } } return 0; } ```