#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("热电偶超出正常工作范围\n"); } if(OVUV) { printf("热电偶过压或欠压\n"); } while(CJ_Open) //如果热电偶断开了,就一直等待热电偶连接 { printf("热电偶已经断开\n"); 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命,难道是芯片有问题吗?写不了数据,
举报
您需要 登录 才可以下载或查看,没有账号?注册
yuankecien 发表于 2018-10-13 22:53 楼主,请问您问题解决了吗,是什么原因呢?
本版积分规则 发表回复 回帖并转播 回帖后跳转到最后一页
发帖类勋章
时间类勋章
等级类勋章
人才类勋章
16
83
3
扫码关注 21ic 官方微信
扫码关注嵌入式微处理器
扫码关注电源系统设计
扫码关注21ic项目外包
扫码浏览21ic手机版
本站介绍 | 申请友情链接 | 欢迎投稿 | 隐私声明 | 广告业务 | 网站地图 | 联系我们 | 诚聘英才
京公网安备 11010802024343号