#include<msp430x14x.h>
#define CLR_DQ P1OUT&=~BIT4;
#define SET_DQ P1OUT|=BIT4;
#define DQ_OUT P1DIR|=BIT4;
#define DQ_IN P1DIR&=~BIT4;
#define DQ P1IN&BIT4
void delayus3(uint i)
{
// do{
// _NOP();_NOP();_NOP();_NOP();
// _NOP();_NOP();_NOP();_NOP();
// }while(i--);
CCR0 = i;
TACTL |= MC_1; //增计数到CCR0
while(!(TACTL & BIT0)); //等待
TACTL &= ~MC_1; //停止计数
TACTL &= ~BIT0; //清除中断标志
}
void delayus(uchar i)
{
do{
_NOP();_NOP();_NOP();_NOP();
_NOP();_NOP();_NOP();_NOP();
}while(i--);
}
uchar DS_Ready()
{
uchar ack;
DQ_OUT;
_DINT();
SET_DQ;
_NOP();
CLR_DQ;
delayus(45);
SET_DQ;
delayus(4);
DQ_IN;
ack=DQ;
_EINT();
delayus(35);
return ack;
}
void DSWrite(uchar dat)
{
uchar mask;
DQ_OUT;
_DINT(); //关闭中断
for(mask=0x01;mask!=0;mask<<=1)
{
CLR_DQ;
_NOP();
_NOP();
if(mask&dat)
{
SET_DQ;
}
else
{
CLR_DQ;
}
delayus(4);
SET_DQ;
delayus(1);
}
_EINT();
}
uchar DSRead()
{
uchar mask;
uchar dat=0;
DQ_OUT;
_DINT(); //关闭中断
for(mask=0x01;mask!=0;mask<<=1)
{
_NOP();
CLR_DQ;
_NOP();
_NOP();
SET_DQ;
_NOP();
_NOP();
DQ_IN;
_NOP();
if(DQ)
{
dat|=mask;
}
else
{
dat&=~mask;
}
delayus(4);
DQ_OUT;
SET_DQ;
delayus(1);
}
_EINT();
return dat;
}
void DSStart()
{
uchar ack;
ack=DS_Ready();
if(!ack)
{
DSWrite(0xcc);
DSWrite(0x44);
}
}
uchar GetTemp(int *temp)
{
uchar ack;
uchar LSB,MSB;
ack=DS_Ready();
if(!ack)
{
DSWrite(0xcc);
DSWrite(0xbe);
LSB=DSRead();
MSB=DSRead();
*temp=((int)MSB<<8)+LSB;
}
return ack;
}
你稍微改一下就可以了
|