以下是我的程序,我使用了LED绿灯(4.7)检测程序运行情况,结果灯根本没亮,程序卡在了第一个初始化函数中??还有,我对F5529的时钟频率设置不太了解,所以延时函数延迟的时间不知道该怎么计算,延时函数的参数都是从网上参考来的,但是参考时钟没有进行设置,这样会不会有影响?
#include
#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;
{
_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);
}