sck 时钟引脚
so 数据输出
cs 片选
uint 无符号整型
read2(void)
{
uint j;
r2=adh2=adl2=0;
///////////////////////数据复位
cs2=1;
sck=1;
so=1;
//////////////////////读无用位
cs2=0;
sck=0;
sck=1;
/////////////////////读高4位数据
for(j=0;j<4;j++)
{
sck=0;
adh2<<=1;
if(so)
adh2=adh2|0x01;
else
adh2=adh2&0xfe;
sck=1;
}
/////////////////////读低8位数据
for(j=0;j<8;j++)
{
sck=0;
adl2<<=1;
if(so)
adl2=adl2|0x01;
else
adl2=adl2&0xfe;
sck=1;
}
/////////////////////读断偶位
sck=0;
flag2=so;
sck=1;
/////////////////////读标识符
sck=0;
sck=1;
sck=0;
sck=1;
/////////////////////
cs2=1;
/////////////////////输出数据
r2=(adh2<<8)|adl2;
r2=r2*0.25; //得到真实十进制温度值,因为MAX6675可以精确到0.25度,所以读回数据的最低位代表的是0.25度。
r2=(r2*1023.75)/4096;//放大十倍,这样做的目的将小数点后第一位也转换为可显示数字,同时进行一个四舍五入操作
return(r2);
}
目前用proteus在做仿真,实际问题不用考虑,能给出你认为正确的程序吗
追答这个是很久以前用实物做的(当时还没有PROTEUS),如果没记错的话,它是SPI接口的,在接收数据时有个前导0,你要注意这个问题,还有,要注意时钟的极性!!!
追问有程序吗?
追答当时用的是汇编,不同的单片机程序不同,也找不到了。。。
本回答被提问者和网友采纳