在实验使用MAX6675这一款芯片来实现K型热电偶的数据读取时,实验时发现一个问题,MAX6675的时序完全是按照datasheet来的,可是却不能再while(1)语句下实现循环,也就是读取一次温度后,MAX6675就再也无法正确的传输温度数据了,只有复位单片机之后才能读取当前的温度,检查程序和硬件多次未果,最后崩溃的无法压抑,你妹。。。。于是乎用一个延时函数在while()后ctrl C ctrl V了n次之后,惊喜来了,能循环读了!终于亮了!激动不已。还好没有拆焊啊!28RMB一块的MAX6675伤不起啊!
放下程序,
#include <reg52.h>
#include "intrins.h"
#define uint unsigned int
#define uchar unsigned char
unsigned char i;
unsigned char temp;
unsigned char a,b;
uint gsw,dbw,flag;
sbit so=P3^5;
sbit cs=P3^6;
sbit sck=P3^7;
void Delay(unsigned int time)//延时函数
{
while( time-- );
}
void main(void)
{
uchar i;
P0=0X00;
P1=0X00;
P2=0X00;
P3=0X00;
P2=0XFF;
Delay(10000);
while(1) {
Delay(10000);
Delay(10000);
Delay(10000);
Delay(10000);
Delay(10000);
Delay(10000);
Delay(10000);
Delay(10000);
Delay(10000);
Delay(10000);
Delay(10000);
Delay(10000);
Delay(10000);
Delay(10000);
Delay(10000);
Delay(10000);
Delay(10000);
_nop_();
cs=0;
_nop_();
sck=1;
_nop_();
sck=0; /*输出第一位D15 */
_nop_();
sck=1;
for(i=4;i>=1;i--)
{
sck=0;
_nop_();
gsw=gsw|so;
gsw=gsw<<1;
sck=1;
_nop_();
}
for(i=8;i>=1;i--)
{
sck=0;
_nop_();
dbw=dbw|so;
dbw=dbw<<1;
sck=1;
_nop_();
}
sck=0;
_nop_();
sck=1;
_nop_();
sck=0;
_nop_();
sck=1;
_nop_ ();
sck=0;
_nop_();
cs=1;
_nop_();
gsw=gsw<<8;
gsw=gsw/4;
_nop_();
if(gsw>1000) //500度
{ P2=0X00;}
else P2=0XFF;
}
}
gsw=1000,好像对应的是475°C,大家可以用仿真调试一下。
用户377235 2013-12-11 14:46
用户377235 2013-2-25 20:17
用户377235 2013-1-24 18:54
我也遇到同样的问题、请问是什么原因导致的呢?