红外测温MLX90614BAA +STC89LE52!从机无响应
//************************************#defineuintunsigned int
#defineuchar unsigned char
#defineNack_number10
#defineIIC_counter60
//**************端口定义**************
sbit FM=P2^7;//蜂鸣器位定义
//mlx90614端口定义
sbitSCK=P1^1;//时钟线
sbitSDA=P1^0;//数据线 P10
void start(void);
void stop(void);
void SendByte(uchar number);
void send_bit(void);
uchar ReadByte(void);
void read_bit(void);
uint readtemp(void);
void delay(uint n);
void main(void)
{
SCK=1;
SDA=1;
delay(4);
SCK=0;
delay(10000);
SCK=1;
while(1)
{
Tem=readtemp();
// CALTEMP(Tem);
LCD_putc(0,0,Tem/10000+'0');
LCD_putc(1,0,Tem/1000%10+'0');
LCD_putc(2,0,Tem/100%10+'0');
LCD_putc(3,0,Tem/10%10+'0');
LCD_putc(4,0,Tem%10+'0');
_Tem = Tem;
_Tem *= 10;
_Tem = _Tem/50 - 2731;
LCD_putc(6,5,_Tem/1000+'0');
LCD_putc(7,5,_Tem/100%10+'0');
LCD_putc(8,5,_Tem/10%10+'0');
LCD_putc(9,5,_Tem%10+'0');
}
}
void start(void) //停止条件是 SCK=1时,SDA 由1到0
{
SDA=1;
delay(4);
SCK=1;
delay(4);
SDA=0;
delay(4);
SCK=0;
delay(4);
}
//------------------------------
void stop(void) //停止条件是 SCK=1时,SDA 由0到1
{
SCK=0;
delay(4);
SDA=0;
delay(4);
SCK=1;
delay(4);SDA=1;
}
//---------发送一个字节---------
void SendByte(uchar number)
{
uchar i,n,dat;
n=Nack_number; //可以重发次数
Send_again:
dat=number;
for(i=0;i<8;i++) //8 位依次发送
{
if(dat&0x80) //取最高位
{
bit_out=1; //发 1
}
else
{
bit_out=0; //发 0
}
send_bit(); //发送一个位
dat=dat<<1; //左移一位
}
read_bit(); //接收1 位 应答信号
if(bit_in==1) //无应答时重发
{ stop();
if(n!=0)
{
n--; //可以重发Nack_number=10 次
goto Repeat; //重发
}
else
{
goto exit; //退出
}
}
else
{
goto exit;
}
Repeat:
start(); //重新开始
goto Send_again; //重发
exit: ; //退出
}
//-----------发送一个位---------
void send_bit(void)
{
if(bit_out==1)
{ SDA=1; //发 1
}
else
{
SDA=0; //发 0
}
_nop_();
SCK=1; //上升沿
delay(4);delay(4);
SCK=0;
delay(4);delay(4);
}
//----------接收一个字节--------
uchar ReadByte(void)
{
uchar i,dat;
dat=0; //初值为 0
for(i=0;i<8;i++)
{
dat=dat<<1; //左移
read_bit(); //接收一位
if(bit_in==1)
{
dat=dat+1; //为1 时对应位加1
} }
SDA=0; //发送应答信号 0
send_bit();
return dat; //带回接收数据
}
//----------接收一个位----------
void read_bit(void)
{
SDA=1; //数据端先置 1
bit_in=1;
SCK=1; //上升沿
delay(4);delay(4);
bit_in=SDA; //读数据
_nop_();
SCK=0;
delay(4);delay(4);
}
//------------------------------
uint readtemp(void)
{
SCK=0;
start(); //开始条件
SendByte(0x00); //发送从地址 00SendByte(0x07); //发送命令
start(); //开始条件
SendByte(0x01); //读从地址 00
bit_out=0;
tempL=ReadByte(); //读数据低字节
bit_out=0;
tempH=ReadByte(); //读数据高字节
bit_out=1;
err=ReadByte(); //读错误信息码
stop(); //停止条件
return(tempH*256+tempL);
}
//------------延时--------------
void delay(uint n)
{
uint j;
for(j=0;j<n;j++)
{
_nop_();
}
}
有哪位大神写过!求指导啊。。。。
我是将官网的PIC例子下载下来,稍微修改了下IO口这些控制,在STM32上正常工作了。
看了上面STC的例子,跟PIC的基本也是一样 网上有现成的STC的例子 调试出来没?这个玩意有什么需要注意的地方?老是不行
页:
[1]