本帖最后由 cl234583745 于 2014-6-18 16:36 编辑
引脚电路如图,max6675的so和sck是连一起的,用不用的引脚来控制cs。
问题是:cs2=0,cs1=1时候能够正常的读出来热电偶的温度数值。
但当cs2=1,cs1=0时候就读不出来,用表测量cs1的引脚电压1v多点。其实就是单片机的cs1引脚输出不对。不知道是为什么?后来我把cs1换到PTG3后,不同片选时候电压都是对的,但两路都不能读回来温度数值了。so引脚读不出来数据。奇怪死了。是不是与PE口那几个引脚的第二功能有关系呢?
程序如下(开始能正确读第二路的温度,程序应该没有大问题)
uint R_MAX6675(uchar abc)//
{
uchar i,TongDao;
uint wd_data;
MAX_SCK=0;DelayNS(10);
TongDao=abc;
if(TongDao==1)
{
MAX_CS1=0;
MAX_CS2=1;
}
else if(TongDao==2)
{
MAX_CS1=1;
MAX_CS2=0;
}
else
{
MAX_CS1=1;
MAX_CS2=1;
}
DelayNS(10);
//15
MAX_SCK=1;DelayNS(10);
MAX_SCK=0;DelayNS(10);
wd_data=0;
//14~3 0-4095 0-1023.75c 温度值=1023.75*转换后的数字量/4095
for(i=0;i<12;i++)
{
MAX_SCK=1;DelayNS(10);
wd_data = wd_data << 1;
if(MAX_SO==1) wd_data++;
MAX_SCK=0;DelayNS(10);
}
//2
MAX_SCK=1;DelayNS(10);
MAX_SCK=0;DelayNS(10);
//1
MAX_SCK=1;DelayNS(10);
MAX_SCK=0;DelayNS(10);
//0
MAX_SCK=1;DelayNS(10);
MAX_SCK=0;DelayNS(10);
MAX_CS1=1;
MAX_CS2=1;
DelayNS(10);
return wd_data;
}
/////////////////////////////////////////////////////////////
uint www,xxx,ii,jj;
//制冷温度
www=0;
for(ii=0;ii<25;ii++)
{
www += R_MAX6675(1);
}
ZLWD=www/10;//cs1=0,cs2=1时候
// //制热温度
xxx=0;
for(jj=0;jj<25;jj++)
{
xxx += R_MAX6675(2);
}
ZRWD=xxx/10;//cs1=1,cs2=1.时候 |