📄 communication.c
字号:
#include <Communication.h>
float ZeroData; //零点数据
float CheckData[5];
void Rs232Init()
{
TMOD=0x21; //定时器0工作方式1,定时器1工作方式2(自动重装载)
TL1=0xFA;
TH1=0xFA; //设定波特率9600bps,晶振为11059200hz
PCON=0X80;
SCON=0x50;
TR1=1;
}
//发送上位机控制字
void SendMessureWord()
{
// unsigned char temp;
unsigned char i;
unsigned CheckWord;
//量程信息: _4000.0kpa 06 08,量程4000kPa,当前模块能转换的单位个数为6,校验点为8个
unsigned char MessureWord[13]={0X20,0X31,0X36,0X30,0X30,0X2E,0X30,0X6B,0X50,0X61,0X06,0X08};
//校验和变量赋初值
CheckWord = 0;
while(!RI){;}RI=0;
if(SBUF==0x55)
{
for(i=0;i<12;i++)
{
SBUF=MessureWord[i];while(!TI);TI=0;
CheckWord+=MessureWord[i];
}
SBUF=CheckWord;while(!TI);TI=0;
}
}
//接收上位机校验命令
void ReceiveCheckWord()
{
unsigned char temp;
unsigned char i;
unsigned CheckWord[5];
CheckWord[0]=temp;
for(i=1;i<=4;i++)
{
while(!RI);RI=0;
CheckWord[i] = SBUF;
}
if(CheckWord[1]!=0xAA)
return;
if((CheckWord[3]>=0x05)&&(CheckWord[2]<=0x10))//上位机要求进行当前校验点校验
{
}
if(CheckWord[4]&0xf0==0x00) //上位机要求压力清零,将当前压力值作为压力零点
ZeroData = 0;
if(CheckWord[4]&0x0f<0x06) //上位机要求进行压力转换。
{
}
}
//发送上位机测量数据
void SendMessureData()
{
unsigned char temp;
union
{
long Data_long ;
unsigned char Data_char[4];
}MessureDatatemp;
while(!RI){;}RI=0;
temp = SBUF ;
// MessureDatatemp.Data_long = MessureData;
if(temp==0x13)
{
}
}
void Rs232interrupt() interrupt 4 using 2 //串口接收中断
{
unsigned char ReceiveData;
if(RI==1)
{
EA = 0;
ES = 0;
RI=0;
ReceiveData = SBUF;
if(ReceiveData==0x11)
{
SendMessureWord();
}
if(ReceiveData==0x22)
{
ReceiveCheckWord();
}
if(ReceiveData==0x12)
{
}
ES = 1;
EA = 1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -