Skip to content

Instantly share code, notes, and snippets.

Created June 27, 2011 16:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/1049184 to your computer and use it in GitHub Desktop.
Save anonymous/1049184 to your computer and use it in GitHub Desktop.
msp430 anoyatron
#include "msp430g2211.h"
#define PIEZO BIT6
#define LED1 BIT0
unsigned short lfsr = 0xACE1u;
unsigned int getRnd (void);
void playSound (void);
void playRattle(void);
int i=0;
int j=0;
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P1DIR |= PIEZO + LED1; // P1.5 output
CCTL0 = CCIE; // CCR0 interrupt enabled
CCR0 = 32767;
TACTL = TASSEL_1 + MC_1; // ACLK, upmode
P1OUT = 0x00;
unsigned int delay = 5;
while(1)
{
if (i>delay)
{
playRattle();
playSound();
i=0;
delay = getRnd() >> 8; // for a resonable amount this "should" be 7
}
_BIS_SR(LPM3_bits + GIE);
// Enter LPM3 w/ interrupt
}
}
// Timer A0 interrupt service routine
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
i++;
// P1OUT ^= LED1; // this is for testing
_BIC_SR_IRQ(LPM3_bits);
}
unsigned int getRnd () {
lfsr = (lfsr >> 1) ^ (-(lfsr & 1u) & 0xB400u);
return lfsr;
}
void playRattle(void) {
for ( j = 0; j < 25; j++) {
P1OUT ^= PIEZO; // Toggle P1.5
long z = 1300; // Delay
do (z--);
while (z != 0);
P1OUT ^= PIEZO;
}
}
void playSound(void) {
for ( j = 0; j < 8000; j++) {
P1OUT ^= PIEZO; // Toggle P1.5
long z = 2; // Delay
do (z--);
while (z != 0);
P1OUT ^= PIEZO;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment