-
Notifications
You must be signed in to change notification settings - Fork 0
2019_2020_deeltoets_2_3
baroy edited this page Apr 7, 2025
·
7 revisions
De opgaven kun je vinden op: https://bitbucket.org/HR_ELEKTRO/ems10/wiki/Toetsen/2019-2020_Deeltoets_2_3.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 ^= BIT5; // Toggle P2.5
P2IFG &= ~BIT3; // Reset P2.3 interrupt flag
}
// 2
#pragma vector = TIMER0_A1_VECTOR
__interrupt void timer0_cc0__isr(void)
{
P2OUT ^= BIT5; // Toggle P2.5
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_12MHZ;
DCOCTL = CALDCO_12MHZ;
// 1A
P2DIR |= BIT4; // P2.4 output
P2DIR &= ~BIT3; // P2.3 input
P2REN |= BIT3;
P2OUT &= ~BIT3; // Pull down op P2.3
// 1B
P2DIR |= BIT5; // P2.5 output
P2IE |= BIT3; // Pin change interrupt op P2.3
P2IES |= BIT3; // 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_5 // /6 of hoger
| 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 = 78;
UCA0BR1 = 0;
UCA0MCTL = UCBRS_0 | UCBRF_2 | 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 & BIT3) == BIT3)
{
P2OUT |= BIT4;
}
else
{
P2OUT &= ~BIT4;
}
}
return 0;
}