温度传感器DS18B20在MSP430F5529单片机上工作程序,运行没问题但是没有反应?

2019-07-15 07:28发布

以下是我的程序,我使用了LED绿灯(4.7)检测程序运行情况,结果灯根本没亮,程序卡在了第一个初始化函数中??还有,我对F5529的时钟频率设置不太了解,所以延时函数延迟的时间不知道该怎么计算,延时函数的参数都是从网上参考来的,但是参考时钟没有进行设置,这样会不会有影响?
#include<msp430.h>#define PD P6DIR|=BIT0#define PO P6OUT|=BIT0#define P_D P6DIR&=~BIT0#define P_O P6OUT&=~BIT0#define PIR P6IN&BIT0
int error;int n;int j;int i;unsigned int temp=0;unsigned char temp_low;unsigned char temp_high;unsigned int T=0;float ssd = 0;int TC =0;
int tiNIT(void){        _DINT();        //一个时钟周期为0.04us(25MHz)??不确定!此处存疑        PD;        PO;        __delay_cycles(8);//延时        P_O;        __delay_cycles(4000);//        P_D; //方向改为输入        PO;        __delay_cycles(320);        if(PIR==1)        {                error=1;//初始化错误                P1DIR|=BIT0;                P1OUT|=BIT0; //LED红灯提示初始化错误        }        else        {                error=0;                __delay_cycles(1120);                PD;                PO;        }        _EINT();        return error;}
void Write(char unsigned Bdata){        _DINT();        for(i=0;i<8;i++)        {                P_O;                __delay_cycles(375);                if(Bdata&0x01) PO;//如果二进制这一位是1,那么输出高电平,换言之告诉传感器,这一位是1                else P_O;//如果二进制这一位是0,那么输出低电平,换言之告诉传感器,这一位是0                __delay_cycles(1125);//45us                PO;                Bdata >>= 1;                //__delay_cycles(250); //延时10us(百度上说这一步不需要,看情况)        }        _EINT();}
unsigned char READ(void)//数据读取,一个字节{        unsigned char mid=0;        _DINT();        for(j=0;j<8;j++)        {                mid>>=1;                P_O;                __delay_cycles(75);                PO;                __delay_cycles(125);                P_D;//改端口方向为接收数据                if(PIR)                        mid|=0x80;//如果温度传感器传回来是高电平(或者1),那么mid(二进制)最高位先置为1.                PD;//改方向为输出                __delay_cycles(1500);        }        _EINT();        return mid;}
void Skip(void){  Write(0XCC);}
void Convert(void){  Write(0x44);}
void Read_SP(void){  Write(0xbe);}
unsigned int ReadTemp(void){  temp_low = READ(); //读低位  temp_high = READ(); //读高位  temp = (temp_high<<8) | temp_low;//合并高低8位  return temp;}
void Init_DS(){          short int r=1;          while(r)          {                  r=TINIT();//初始化传感器 并进行检测是否初始化成功          }          for(n = 20;n > 0;n--)                  __delay_cycles(20000000);//延时16秒          Skip(); //向温度传感器发送跳过读取ID号指令          Convert(); //向温度传感器发送温度转换指令}
void main(void){        Init_DS();        while(TINIT());//再次初始化传感器 并进行检测是否初始化成功        P4DIR|=BIT7;//通过LED绿灯检测程序的执行情况        P4OUT|=BIT7;        for(n = 20;n > 0;n--)                __delay_cycles(20000000);//延时16秒        Skip(); //向温度传感器发送跳过读取ID号指令        Read_SP();         T=ReadTemp();         ssd = T*0.0625;//计算摄氏度        TC=(int)(ssd*10+0.5);        while(1);}

0条回答

一周热门 更多>