Advertisement
Guest User

Untitled

a guest
Nov 23rd, 2017
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.29 KB | None | 0 0
  1. #include <msp430x14x.h>
  2. #include <stdio.h>
  3. #include "LCD.h"
  4.  
  5. /*
  6. WDTCTL = WDTPW + WDTHOLD;
  7.  
  8. BCSCTL1 |= XTS; // ACLK = LFXT1 = HF XTAL 8MHz
  9. do {
  10. IFG1 &= ~OFIFG; // Czyszczenie flgi OSCFault
  11. for (int i = 0xFF; i > 0; --i); // odczekanie
  12. }
  13. while ((IFG1 & OFIFG)); // dopóki OSCFault jest ciągle ustawiona
  14. BCSCTL2 |= SELM1+SELM0 ; // MCLK =LFXT1
  15.  
  16.  
  17.  
  18.  
  19. */
  20. #define CALADC12_15V_30C *((unsigned int *)0x1A1A) // Temperature Sensor Calibration-30 C
  21. //See device datasheet for TLV table memory mapping
  22. #define CALADC12_15V_85C *((unsigned int *)0x1A1C) // Temperature Sensor Calibration-85 C
  23.  
  24.  
  25. #define INTERVAL 50000 //okres licznika 0,5s
  26. #define _5s 1 //okres pomiarów
  27.  
  28.  
  29. unsigned int cntr;
  30.  
  31. void show(int temp, char jednostka);
  32.  
  33. int main (void)
  34. {
  35. WDTCTL = WDTPW+WDTHOLD;
  36. ini_display(); //inicjalizacja LCD
  37.  
  38. ADC12CTL0=ADC12ON|REFON|SHT0_15; //w3. rdzenia, w3.gen. nap. odniesienia, wybór nap. odniesienia
  39. ADC12CTL1=SHP|CSTARTADD_0; //próbkowanie impulsowe, wynik sk3adany w ADC12MEM0
  40. ADC12MCTL0=INCH_10|SREF_1; //kana3 10, Yród3o nap. odniesienia - wew. generator (1,5V)
  41.  
  42. for(unsigned int k=0; k<0x3600; k++); //czas na ustabilizowanie generatora nap. odniesienia
  43.  
  44. CCR0=INTERVAL; //ustala nowy okres licznika
  45. TACTL=TASSEL_2|ID_3|MC_1; //Yród3o taktowania SMCLK, dzielone przez 8,tryb UP
  46. CCTL0=CCIE; //uaktywnienie przerwania od TACCR0 CCIFG
  47. _BIS_SR(GIE); //w3aczenie przerwan
  48.  
  49. ADC12CTL0 |= ENC; //uaktywnienie konwersji
  50.  
  51. char ile;
  52. int suma=0, temp=0;
  53.  
  54.  
  55. while(1)
  56. {
  57. P2OUT^=BIT1;
  58. ADC12CTL0 |= ADC12SC; //start konwersji
  59. while((ADC12CTL1&ADC12BUSY)==1); //czekanie na koniec konwersji
  60.  
  61. suma+=10*(ADC12MEM0*1.0318-2777.464788732394); //wartooa temperatury z dok. 1-miejsce po przecinku
  62. ++ile;
  63.  
  64. if(ile==3)
  65. {
  66. LCD_cmd(CLR_LCD);
  67.  
  68. LCD_char('#');
  69.  
  70. temp=suma/4;
  71.  
  72. show(temp, 'C');
  73. LCD_char(' ');
  74. LCD_char(' ');
  75. show(temp*1.8+3200, 'F');
  76. ile=0;
  77. suma=0;
  78. }
  79.  
  80. _BIS_SR(LPM0_bits); //wejocie w tryb oszczedny
  81. }
  82. }
  83.  
  84. void show(int temp, char jednostka)
  85. {
  86. int cyfra, waga=10;
  87.  
  88. if(temp<0)
  89. {
  90. LCD_char('-');
  91. temp*=-1;
  92. }
  93. if(temp<10)
  94. LCD_char('0');
  95.  
  96. if (temp >= 10000)
  97. {
  98. LCD_char('?');
  99. return;
  100. }
  101. while (waga <= temp)
  102. {
  103. waga*=10;
  104. }
  105. while ((waga/=10)>10)
  106. {
  107. cyfra = temp / waga;
  108. LCD_char((int)('0'+cyfra));
  109. temp-=cyfra*waga;
  110. }
  111. LCD_char('.');
  112. LCD_char((char)('0'+(temp/10)));
  113. LCD_char((char)('0'+(temp%10)));
  114.  
  115. LCD_char(jednostka);
  116. }
  117.  
  118. #pragma vector=TIMERA0_VECTOR
  119. __interrupt void Timer_A (void)
  120. {
  121. if(++cntr==_5s)
  122. {
  123. _BIC_SR_IRQ(LPM0_bits); //wyjocie z trybu oszczednego
  124. cntr=0;
  125. }
  126. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement