-
Notifications
You must be signed in to change notification settings - Fork 0
2019_2020_deeltoets_2_2
baroy edited this page Apr 7, 2025
·
6 revisions
De opgaven kun je vinden op: https://bitbucket.org/HR_ELEKTRO/ems10/wiki/Toetsen/2019-2020_Deeltoets_2_2.pdf
#include <msp430.h>
#include <stdint.h>
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;
}