以下是我的程序,我使用了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);}
一周热门 更多>