- #include<thermocouple.h>
- #include<stc15.h>
- #include<stdio.h>
- #include<intrins.h>
- sbit Max31856_CS= P1^2;
- sbit Max31856_SDO=P1^3;
- sbit Max31856_SDI=P1^4;
- sbit Max31856_CLK=P1^5;
- long WenDu_Dat;
- uint WenDu;
- uchar WenDu_Time,Error;
- void Max31856_Delay700ms() //@24.000MHz
- {
- unsigned char i, j, k;
- _nop_();
- _nop_();
- i = 183;
- j = 100;
- k = 225;
- do
- {
- do
- {
- while (--k);
- } while (--j);
- } while (--i);
- }
- void Max31856_Delay()
- {
- _nop_();
- _nop_();
- _nop_();
- }
- void Max31856_WriteByte(uchar Add,Dat)
- {
- uchar i;
- Max31856_CLK=1;
- Max31856_CS=0;
- Max31856_Delay();
- for(i=0;i<8;i++)
- {
- Max31856_CLK=0;
- Max31856_Delay();
- Add<<=1;
- Max31856_SDO=CY;
- Max31856_Delay();
- Max31856_CLK=1;
- Max31856_Delay();
- }
- for(i=0;i<8;i++)
- {
- Max31856_CLK=0;
- Max31856_Delay();
- Dat<<=1;
- Max31856_SDO=CY;
- Max31856_Delay();
- Max31856_CLK=1;
- Max31856_Delay();
- }
- Max31856_CS=1;
- }
- uchar Max31856_ReadByte(uchar Add)
- {
- uchar i,Dat;
- Max31856_CLK=1;
- Max31856_CS=0;
- Max31856_Delay();
- for(i=0;i<8;i++)
- {
- Max31856_CLK=0;
- Max31856_Delay();
- Add<<=1;
- Max31856_SDO=CY;
- Max31856_Delay();
- Max31856_CLK=1;
- Max31856_Delay();
- }
- for(i=0;i<8;i++)
- {
- Max31856_CLK=0;
- Max31856_Delay();
- Dat<<=1;
- Dat|=Max31856_SDI;
- Max31856_CLK=1;
- Max31856_Delay();
- }
- Max31856_CS=1;
- return Dat;
- }
- void Max31856_ReadTemp()
- {
- uchar i,Add;
- Max31856_CLK=1;
- Max31856_CS=0;
- Max31856_Delay();
- Add=0x0c;
- for(i=0;i<8;i++)
- {
- Max31856_CLK=0;
- Max31856_Delay();
- Add<<=1;
- Max31856_SDO=CY;
- Max31856_Delay();
- Max31856_CLK=1;
- Max31856_Delay();
- }
- for(i=0;i<24;i++)
- {
- Max31856_CLK=0;
- Max31856_Delay();
- WenDu_Dat<<=1;
- WenDu_Dat|=Max31856_SDI;
- Max31856_CLK=1;
- Max31856_Delay();
- }
- Max31856_CS=1;
- WenDu=WenDu_Dat*Hot+0.5;
- }
- void Max31856_Read_Error()
- {
- Error=Max31856_ReadByte(SR_Read);
- if(CJ_Range)
- {
- printf("热电偶超出正常工作范围
");
- }
- if(OVUV)
- {
- printf("热电偶过压或欠压
");
- }
- while(CJ_Open) //如果热电偶断开了,就一直等待热电偶连接
- {
- printf("热电偶已经断开
");
- Max31856_Delay700ms(); //等待温度转换完成
- Error=Max31856_ReadByte(SR_Read); //读取故障寄存器
- }
- }
- void Max31856_Init()
- {
- Max31856_WriteByte(CR1_Write,(AVGSEL&TC_Type_K)); //CR1寄存器16位采样,K型热电偶
- Max31856_WriteByte(MASK_Write,MASK_Set); //屏蔽所有故障输出
- Max31856_WriteByte(0x81,0x48); //开启转换
- Max31856_Delay700ms(); //等待温度转换完成
- }
复制代码
我用读寄存器数据完全正常,只要对哪个寄存器写数据,那个寄存器的数据就会变成0,就好像把数据给他写成0了一样,但是读数据的时候,先写地址,再读数据,也是正常的。哪位大神9命,难道是芯片有问题吗?写不了数据,
遇到什么问题?
1、 SPI通信模式一定设置正确;
2、 发送和读取寄存器的指令不一样;
3、 max31856工作在连续模式和多点采样平均效果最佳。
4、 MAX31856,热电偶接口的RFI滤波电路最好不要省掉,否则测温结果容易受干扰。
你遇到的问题是什么
一周热门 更多>