#include "W78E354.H" #define COUNT 4 //定义接收缓冲区的大小// #define uchar unsigned char /*数据采集部分管脚定义*/ /*串口输出部分管脚定义*/ sbit RE_DE=P1^4;//485控制引脚// sbit Key_3=P0^4; sbit Key_4=P0^5; sbit ALARM=P0^3; /*7219管脚定义*/
uchar idata displ[COUNT]={3,6,8};/*定义发送缓冲区*/ void COM_inter(void);/*声明函数变量*/ void Timer_ini(void); main() { RE_DE=0;/*485准备接收*/ Timer_ini(); while(1) { } }
void Timer_ini(void) //定时器的初始化// { TMOD=0x20;/*定时器0工作于方式2,定时器1工作于方式2, 0010 0010*/ TH1=0xb7;//实现数据传输率9600// TL1=0xb7; SCON=0x50;//选择串口工作方式1,打开接收允许// PCON=0x00;//波特率倍增设置// TR1=1;//启动定时器T1// ES=1;EA=1;//允许串口中断// }
//-------------------------------------------------------- //函数名称:COM_send();串口发送函数 //函数功能:把数据缓冲区的4位数据发送出去 //-------------------------------------------------------- void COM_send(void) { uchar point; for(point=0;point<COUNT;point++) //连续发送4位数据,将数据发送到缓冲口// { SBUF=displ[point];//发送数据// while(TI!=1); TI=0; } ES=1; }
//-------------------------------------------------------- //函数名称:com_interrup()串口接收中断处理函数 //函数功能:接收包括起始位0xFE,地址位和终止位0xEF在内的10bit数据到数据缓冲区 // ,地址不匹配,则接收到的是无效数字,不写到接收缓冲区 //-------------------------------------------------------- void COM_inter(void) interrupt 4 using 1//串口处理函数// { uchar a;/*串口标志*/ RI=0; ES=0; RE_DE=0; a=SBUF; switch(a) { case 0x01:RI=0;ES=1;break;/*调用函数实现泵的控制*/ case 0x02:RI=0;ES=1;break;/*调用函数实现阀的控制*/ default:RE_DE=1;TI=0; ES=0;COM_send();break;/*使485处于发送状态,发送数据*/ } } 我的程序在keil里 仿真 是能发送数据的 但是在串口调试助手里,就不能发送数据到上位机 ,请各位看看 我在线等 谢谢 |