Advertisement
Guest User

Untitled

a guest
May 23rd, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.78 KB | None | 0 0
  1. #include <in430.h>
  2. #include <intrinsics.h>
  3. #include <msp430f1611.h>
  4. #include <stdint.h>
  5.  
  6. #define DEBOUNCE_VALUE 20 // approx 20ms
  7. #define BUT_A 0x04
  8. #define BUT_B 0x02
  9. #define TXD BIT2
  10. #define RXD BIT1
  11.  
  12. #define PERIOD 64
  13. #define MIN_BRIGHTNESS 0
  14. #define MAX_BRIGHTNESS 7
  15.  
  16. volatile uint8_t buttonStates = 0;
  17.  
  18. volatile uint8_t buttonADebounce = 0;
  19. volatile uint8_t buttonBDebounce = 0;
  20.  
  21. volatile uint8_t brightness = MIN_BRIGHTNESS;
  22. volatile uint8_t digit = 0;
  23. volatile uint8_t string[8] = {0,1,2,3,9,5,6,8};
  24. volatile uint8_t brightnessMap[MAX_BRIGHTNESS] = {PERIOD-1, PERIOD*4/5, PERIOD*3/5, PERIOD/2, PERIOD/4, PERIOD/8, PERIOD/16};
  25.  
  26. volatile uint8_t shouldRefresh = 0;
  27.  
  28. void init();
  29. void handleDisplay();
  30.  
  31.  
  32. int main(void) {
  33. WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
  34. BCSCTL2 = SELM_3 | SELS;
  35. init();
  36. P2OUT = 0xFE;
  37. while(1) { }
  38. }
  39.  
  40.  
  41. inline void init() {
  42. TBCCR0 = 80; // approx 100 us
  43. //TBCCTL0 = CCIE; // enable ints
  44. TBCTL = TBSSEL_1 + MC_1 + ID_0; //wybieramy ACLK (32768Hz), tryb UP
  45. TBR = 0; // clear counting reg
  46.  
  47. TACCR0 = PERIOD; // 1kHz
  48. TACCR1 = brightnessMap[brightness];
  49. TACCTL0 = CCIE; // enable ints
  50. TACCTL1 = CCIE; // enable ints
  51. TACTL = TASSEL_1 + MC_1 + ID_0; //wybieramy ACLK (32768Hz), tryb UP
  52. TAR = 0; // clear counting reg
  53.  
  54. P2DIR = 0xFF; // digit select
  55. P1DIR = 0xFF; // value
  56.  
  57. P3SEL |= RXD | TXD; // P1.1 = RXD, P1.2=TXD
  58. P3DIR = 0x00;
  59.  
  60. U0CTL |= SWRST;
  61. U0CTL |= CHAR; // 8-bit characterUTCTL0 |= SSEL1;
  62. ME1 |= UTXE0 | URXE0; // Enabled USART0 TXD RXD
  63. IE1 |= URXIE0 | UTXIE0; //Wlaczenie przerwan dla modulu pobierajacego dane
  64. // Ustawienia dla 115200
  65. U0BR0 = 0x40;
  66. U0BR1 = 0x00;
  67. U0MCTL = 0x4A;
  68. U0CTL &= ~SWRST; // Wylaczenie software reset
  69.  
  70. _EINT();
  71. }
  72.  
  73. const char stringtosent[] = { "Hello World\r\n" };
  74. unsigned int i; //Counter
  75.  
  76. #pragma vector=USART0TX_VECTOR
  77. __interrupt void USCI0TX_ISR(void)
  78. {
  79. U0TXBUF = stringtosent[i++]; // TX next character
  80. if (i == sizeof stringtosent - 1) // TX over?
  81. IE1 &= ~UTXE0; // Disable USCI_A0 TX interrupt
  82. }
  83.  
  84. #pragma vector=USART0RX_VECTOR
  85. __interrupt void USCI0RX_ISR(void)
  86. {
  87. if (U0RXBUF == 'a') // 'a' received?
  88. {
  89. i = 0;
  90. IE1 |= UTXE0; // Enable USCI_A0 TX interrupt
  91. U0TXBUF = stringtosent[i++];
  92. }
  93. }
  94.  
  95. #pragma vector=TIMERA0_VECTOR
  96. __interrupt void Timer_A0 (void)
  97. {
  98. P2OUT = 0xFF;
  99. P1OUT = (string[7-digit] & 0x0F) | 0xF0;
  100. P2OUT = ~(1 << digit);
  101. digit = (digit+1) & 0x07;
  102. }
  103.  
  104. #pragma vector=TIMERA1_VECTOR
  105. __interrupt void Timer_A1 (void)
  106. {
  107. switch(TAIV) {
  108. case 0x00:
  109. break;
  110. case 0x02:
  111. P2OUT = 0xFF;
  112. break;
  113. default:
  114. break;
  115. }
  116. }
  117.  
  118. #pragma vector=TIMERB0_VECTOR
  119. __interrupt void Timer_B0 (void)
  120. {
  121. __bic_SR_register_on_exit(CPUOFF);
  122. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement