⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds18b20.txt

📁 又一个国外的一个关于msp430f449开源项目资料---源码之五
💻 TXT
字号:

/*POLITECHNIKA OPOLSKA
;PROGRAM DLA CZUJNIKA DS18B20 
;PRACA DYPLOMOWA 
;MARCIN BAROWSKI
;JANUSZ SZYMANSKI
;  2006/2007 */





#include  <msp430x44x.h>


#define kwarc 32768

void wait(int x) 
{
  int t;  for (t = 0;t<x;t++);
}


int ow_reset(void)
{
 unsigned char presence;
 P1OUT &=~16; // zeroj bit na porcie P1.4
 wait(75); // czekaj przez 480us
 P1OUT |=16; // ustaw bit na porcie P1.4 
 wait(10); // czekaj na odpowiedz
 P1DIR &=~16; // ustaw jako wejscie
 presence = P1IN & 16 /16;  //czytaj port i przypisz presence
 P1DIR |=16; // ustaw jako wejscie
 wait(14);  //czekaj 14 cykli
 return(presence); // zwroc presence
} // 0=presence, 1 = no part


int czytaj_bit(void)
{
unsigned char bit;
int ilosc;
 P1OUT &=~16; //ustaw ZERO na wyjsciu 
 P1OUT |=16; //ustaw jeden na wyjsciu
 for (ilosc=0;ilosc<1;ilosc++);
 P1DIR &=~16;   //ustaw jako wyjscie
 bit = P1IN & 16 ;  // pobierz wartosc z portu i umiesc ja pod zmienna i
 P1DIR |=16; // ustaw jako wyjscie
 if (bit) return 1; else return 0;
 return (bit); // zwroc wartosc ze zmiennej i
}

void wypisz_bit(int bitwartosc)
{
 P1OUT &=~16; //stan niski na porcie P1.4
 if(bitwartosc==1) P1OUT |=16;; // ustaw na H jesli jest jedyka
 wait(18); //czekaj 18 cykli
 P1OUT |=16;  //ustaw niski na porcie P1.4
}// Delay provides 16us per loop, plus 24us. Therefore delay(5) = 104us

int czytaj_byte(void)
{
unsigned char ilosc;
unsigned char value = 0;
for (ilosc=0;ilosc<8;ilosc++)
  {
  if(czytaj_bit()) value|=0x01<<ilosc; //zczytaj bit
  wait(1); //czekaj na koniec slotu
  }
  return(value);
}


void wypisz_byte(unsigned char val)
{
unsigned char ilosc;
unsigned char temp;
for (ilosc=0; ilosc<8; ilosc++) // writes byte, one bit at a time
 {
  temp = val>>ilosc; // przesun val o wartosc i
  temp &= 0x01; // maskuj pierwszy bit
  wypisz_bit(temp); // wypisz bit z temp
 }
wait(1); //czekaj 
}

int i;
void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;             // Stop WDT
  LCDCTL = LCDSG0_7 + LCD4MUX + LCDON; //Ustawienia wyswietlacza
  BTCTL = BT_fLCD_DIV128;              // Czestotliwosc taktowania LCD
  P5SEL = 0xFC;                        //Ustawienia do Rx i Comx
  CCTL0 = CCIE;                  //interrupt enabled
  CCR0 = kwarc;            
  P1DIR |=16;                   //ustaw linie Q jako wyjscie
  P1OUT |=16;                   // ustaw linie Q na H
 

TACTL = TASSEL_1 + MC_1;              // ACLK, upmode
_BIS_SR(  LPM3_bits +GIE);             // Enter LPM3 w/ interrupt
// 
 for (;;); //petla nieskonczona
}


int Read_Temperature(void);
int licz = 0;

#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A0 (void)
{
licz++;;
if (licz==1) { Read_Temperature(); licz=0;}
}

int Read_Temperature(void)
{
 char get[10];
 char lsb,msb;
 
 int temp;
 

ow_reset();
wypisz_byte(0xCC); // Skip ROM
wypisz_byte(0xBE); // Read Scratch Pad
lsb = czytaj_byte();  //czytaj mlodsza czesc bajtu
msb = czytaj_byte();  //czytaj ostatnia czesc bajtu
temp = msb*256+lsb; //utworz jedna cala dana z LSB i MSB
temp = temp >>1;  //podziel wynik przez 2
temp = temp + 30 ;  // poprawka o 3 stopnie 
LCD_czysc();  //wyczysc LCD
LCD_dana();   //wyslij dana do LCD
ow_reset(); //wywolaj reset
wypisz_byte(0xCC); //Skip ROM
wypisz_byte(0x44); // Start Conversion
}




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -