基于AT89C52使用MAX6675通过串口通信读取温度值的程序
时间: 2023-07-31 18:11:09 浏览: 209
以下是基于AT89C52使用MAX6675通过串口通信读取温度值的示例程序,供参考:
```c
#include <reg52.h>
#include <stdio.h>
#define FOSC 11059200L
#define BAUD 9600
#define TIMER_1_VALUE (65536UL - (FOSC / 12UL / BAUD))
sbit CS = P1^0; //MAX6675片选引脚
sbit SCK = P1^1; //MAX6675时钟引脚
sbit SO = P1^2; //MAX6675数据输出引脚
void InitSerial() //串口初始化函数
{
TMOD &= 0x0F;
TMOD |= 0x20;
TH1 = TIMER_1_VALUE / 256;
TL1 = TIMER_1_VALUE % 256;
TR1 = 1;
SM0 = 0;
SM1 = 1;
REN = 1;
EA = 1;
ES = 1;
}
void SendByte(unsigned char dat) //串口发送一个字节函数
{
SBUF = dat;
while (!TI);
TI = 0;
}
void SendString(char* s) //串口发送一个字符串函数
{
while (*s)
SendByte(*s++);
}
void delay_us(unsigned int t) //微秒级延时函数
{
unsigned char i;
while (t--)
for (i = 0; i < 12; i++);
}
unsigned int ReadTemp() //读取温度函数
{
unsigned int data = 0;
unsigned char i;
CS = 0; //拉低片选引脚
delay_us(1); //等待一段时间
for (i = 0; i < 16; i++) //读取16位数据
{
SCK = 0; //拉低时钟引脚
data <<= 1;
if (SO)
data |= 0x01;
SCK = 1; //拉高时钟引脚
}
CS = 1; //拉高片选引脚
return data >> 3; //返回温度值
}
void main()
{
unsigned int temp;
char buffer[16];
InitSerial(); //串口初始化
while (1)
{
temp = ReadTemp(); //读取温度值
sprintf(buffer, "Temp: %d.%d°C\r\n", temp / 4, (temp % 4) * 25); //格式化字符串
SendString(buffer); //发送字符串
delay_us(1000000); //延时1秒
}
}
```
注意:该示例程序仅供参考,具体实现还需要根据实际情况进行调整。
阅读全文