📄 ds18b20.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 + -