|
MAX6675早就調(diào)試出來,感覺沒有任何壓力,我就是參考下面的程序調(diào)試出來的:
#include <REGX52.H>
#include "intrins.h" //_nop_();延時(shí)函數(shù)用
#define uchar unsigned char
#define uint unsigned int
sbit SO = P0^6; //P3.6口與SO相連
sbit SCK = P0^4; //P3.4口與SCK相連
sbit CS = P0^5; //P3.5口與CS相連
static uchar tempture[4];
static unsigned int MAX6675_Temp;
const uchar DevID = 1; //本機(jī)設(shè)備ID
static uchar Flag_connect;
void DelayMs(unsigned int i);
unsigned int MAX6675_ReadReg(void)
{
unsigned char i;
unsigned int dat;
i = 0;
dat = 0;
SCK = 0;
CS = 0;
_nop_();
SCK = 1;
for(i=0; i<16; i++) //get D15-D0 from 6675
{
SCK = 0;
_nop_();
dat = dat<<1;
if( SO == 1 )
dat = dat | 0x01;
SCK = 1;
_nop_();
}
CS = 1;
return dat;
}
/*
* 功 能:延時(shí),若干毫秒
* 參 數(shù):毫秒數(shù)
* 返回值:無
*/
void DelayMs(unsigned int i) //一個(gè)延時(shí)函數(shù),這個(gè)函數(shù)在11.0592M晶振下的延時(shí)時(shí)間大概為1ms
{
unsigned int j,k;
for(j=i; j>0; j--)
for(k=114; k>0; k--);
}
/*
* 功 能:串口初始化
* 參 數(shù):無
* 返回值:無
*/
void init_serialcomm( void )
{
SCON = 0x50 ; //SCON: serail mode 1, 8-bit UART, enable ucvr
TMOD |= 0x20 ; //TMOD: timer 1, mode 2, 8-bit reload
PCON |= 0x80 ; //SMOD=1;
TH1=0XF3; //計(jì)數(shù)器初始值設(shè)置,注意波特率是4800的
TL1=0XF3;
IE |= 0x90 ; //Enable Serial Interrupt
TR1 = 1 ; // timer 1 run
// TI=1;
// ES=1; //打開接收中斷
// EA=1; //打開總中斷
// TR1=1; //打開計(jì)數(shù)器
}
//向串口發(fā)送一個(gè)字符
void send_char_com( unsigned char ch)
{
SBUF = ch;
while (TI == 0 );
TI = 0 ;
}
//向串口發(fā)送一個(gè)字符串,strlen為該字符串長度
void send_string_com( unsigned char *str, unsigned int strlen)
{
unsigned int k= 0 ;
do
{
send_char_com(*(str + k));
k++;
}
while (k < strlen);
}
void display(uint temp)
{
uchar *n;
tempture[0]=(temp % 10000)/1000 | 0x30;
tempture[1]=(temp % 1000)/100 | 0x30;
tempture[2]=(temp % 100)/10 | 0x30;
tempture[3]=temp % 10 | 0x30;
n= &tempture;
send_string_com( n , 4 );
}
void main(void)
{
unsigned int t=0,j=0;
unsigned int Temp=0;
unsigned int id=0;
P0=0x00;
init_serialcomm(); // 串口初始化
while(1)
{
t = MAX6675_ReadReg();
Flag_connect = t & 0x04; //讀出數(shù)據(jù)的D2位是熱電偶掉線標(biāo)志位,該位為1表示掉線,該位為0表示連接
Flag_connect = Flag_connect >> 2; //MAX6675是否在線
id = t & 0x02;
id = id >> 1;
if(Flag_connect==0)
{
t = t<<1; //讀出來的數(shù)據(jù)的D3~D14是溫度值
t = t>>4;
MAX6675_Temp = t/4; //測得的溫度單位是0.25,所以要乘以0.25(即除以4)才能得到以度為單位的溫度值
Temp = Temp + MAX6675_Temp;
j=j+1;
if(j==20)
{
Temp=Temp/20-32;
j=0;
send_string_com( "讀取的溫度值為:", 16);
display(Temp);
send_string_com( " ℃", 3); // ℃
Temp=0;
DelayMs(500);
}
}
else
{
send_string_com( "熱電偶未連接", 12);
DelayMs(500);
}
}
}
我調(diào)試成功之后讀16位數(shù)據(jù)的程序是這個(gè)樣子:
unsigned int MAX6675_ReadReg( void )
{
unsigned char i;
unsigned int dat;
i = 0;
dat = 0;
sck = 0;
cs = 0;
_nop_( ) ;
for(i=0; i<16; i++) //get D15-D0 from 6675
{
sck = 1;
_nop_( ) ;
dat <<= 1 ;
if ( so == 1 )
{
dat |= 0x01 ;
}
sck = 0 ;
}
cs = 1;
return dat;
}
|
|