#include<reg52.h>
void init();
/* 这里表示光强 温度 湿度 CH4 CO 气压 加热炉温度 */
char data_res[32]={'A',' ',0x30,0x30,0x30,' ','+',0x30,0x30,0x30,' ',0x30,0x30,0x30,' ',0x30,0x30,0x30,' ',0x30,0x30,0x30,' ',0x30,0x30,0x30,' ',0x30,0x30,0x30,' '}; //数据返回形式1
void COM_send(char *str)
{
unsigned char a = 0;
while(str[a] != '\0') //发送字符串直到空为止
{
SBUF = str[a]; //将要发送的数据送缓冲区
while(!TI); //直到发送完闭
TI=0; //清零,以便下一次发送
a++;
}
}
void main()
{
init(); //串口初始化
while(1); //等待中断
}
void init()
{
TMOD=0x20; //设置T1工作方式为方式2
TH1=0xFA; //给定时器高位装初值
TL1=0xFA; //给定时器低位装初值
PCON = 0x80;//波特率加倍
SCON = 0x50;//串口方式1且允许接收数据
TR1=1; //开定时器
ET1=0; //禁止定时器中断
ES=1; //允许串口中断
PS=1; //串口中断设置为高优先级
EA=1; //允许所有中断
}
void com_interrupt(void) interrupt 4 //4为串行中断
{//0为外部中断0 //1为定时器中断0 //2为外部中断1 //3为定时器中断1
char receive;
ES=0; //禁止串口中断
if(TI) TI=0; //判断是发送中断还是接收中断,二者共用一个中断源
else
{
receive = SBUF; //读取接收缓冲区中的数据
if(receive == 'A') COM_send(data_res);
}
RI=0; //清零接收标志位,以便下次接收
ES=1; //允许串口中断
}