基于51单片机智能电表将电压电流等数据用MAX487发送至VT显示的串口通信程序
时间: 2024-05-13 12:18:35 浏览: 8
以下是基于51单片机智能电表将电压电流等数据用MAX487发送至VT显示的串口通信程序的代码:
```c
#include <reg52.h>
sbit RS485_EN = P1^0; // MAX487片选使能引脚
void delay(unsigned int i) // 延时函数
{
while(i--);
}
void initUART() // 初始化串口
{
TMOD |= 0x20; // 设置为定时器1工作方式2,8位自动重装载模式
SCON = 0x50; // 设置串口工作方式1,8位数据,无校验位,1位停止位,允许接收
TH1 = 0xFD; // 定时器1初值,波特率9600bps
TL1 = 0xFD;
ET1 = 0; // 禁止定时器1中断
TR1 = 1; // 启动定时器1
}
void sendUART(unsigned char dat) // 发送单个字节数据到串口
{
SBUF = dat;
while(TI==0);
TI = 0;
}
void main()
{
unsigned char voltage = 220; // 电压数据
unsigned char current = 5; // 电流数据
unsigned char power = voltage * current; // 功率数据
initUART(); // 初始化串口
RS485_EN = 0; // MAX487片选使能
sendUART(voltage); // 发送电压数据
sendUART(current); // 发送电流数据
sendUART(power); // 发送功率数据
RS485_EN = 1; // MAX487片选禁止
while(1);
}
```
在上述代码中,我们首先定义了MAX487片选使能引脚为P1^0,并在初始化串口函数中设置了串口工作方式、波特率等参数。然后,我们使用sendUART函数发送电压、电流、功率数据到串口,并在发送数据前和发送数据后通过RS485_EN控制MAX487片选引脚的电平,以控制数据的发送和接收。最后,我们使用一个死循环来保持程序运行。