各位大虾们帮我看看下面程序哪里出问题了<br />//-----------------------函数声明,变量定义--------------------------------------------------------<br />#include <reg51.h><br />sbit RE_DE=P1^0;<br />//sbit testpoint=P1^1;<br />unsigned char buffer[]={0x05,0x15,0x25,0x35,0x45}; //定义接收缓冲区<br />unsigned char RECEIVR_buffer;<br /><br />void UART_init(); //串口初始化函数<br />void COM_send(void); //串口接收函数<br />void VariableDelay(unsigned char delay);<br /><br /><br />//--------------------------------------------------------------------------------------------------<br />// 函数名称: UART_init()串口初始化函数<br />// 函数功能: 在系统时钟为11.059MHZ时,设定串口波特率为9600bit/s<br />// 串口接收中断允许,发送中断禁止<br />//--------------------------------------------------------------------------------------------------<br />void UART_init()<br />{<br /> //初始化串行口和波特率发生器<br /> SCON =0x50; //选择串口工作方式,打开接收允许<br /> TMOD|=0x20; //定时器1工作在方式2,定时器0工作在方式1<br /> PCON=0;<br /> TH1 =0xfd; //实现波特率9600(系统时钟11.0592MHZ)<br /> REN=1;<br /> TR1 =1; //启动定时器T1<br /> ET1 =0;<br /> ES=1; //允许串行口中断<br /> EA =1; //单片机中断允许<br /> }<br />//--------------------------------------------------------------------------------------------------<br />// 函数名称: com_interrup()串口接收中断处理函数<br />// 函数功能: 接收包括起始5位数据到数据缓冲区<br />//--------------------------------------------------------------------------------------------------<br />void recive(void) interrupt 4 using 3<br />{<br /><br /> if(RI) //处理接收中断<br /> {<br /> RI=0; //清除中断标志位<br /><br /> RECEIVR_buffer=SBUF; //接收串口数据<br /> } <br /><br />}<br />//--------------------------------------------------------------------------------------------------<br />// 函数名称: COM_send()串口发送函数<br />// 函数功能: 把数据缓冲区的5位数据发送出去<br />//--------------------------------------------------------------------------------------------------<br />void COM_send(void)<br />{<br /> int point;<br /> EA=0;<br /><br /> RE_DE=1; <br /> for(point=0;point<5;point++) //连续发送5位数据<br /> //把缓存区的数据都发送到串口<br /> {<br /> SBUF=buffer[point];<br /> while(TI==0);<br /> TI=0;<br /> }<br /> RE_DE=0; <br /> point=0;<br /> EA=1;<br />}<br /><br />//--------------------------------------------------------------------------------------------------<br />// 函数名称: 主函数<br />// 函数功能: 调度个子函数,完成通信过程<br />//--------------------------------------------------------------------------------------------------<br /> void main(void)<br /> {<br /> <br /> UART_init(); <br /> RE_DE = 0;<br /> // testpoint=0;<br /> VariableDelay(1000);<br /> while(1)<br /> {<br /> if(RECEIVR_buffer==0x88)<br /> {<br /> RECEIVR_buffer=0;<br /> // testpoint=1;<br /> COM_send(); //调用发送程序通知主机<br /> }<br /> <br /> }<br /> <br /> }<br /> void VariableDelay(unsigned char delay)<br />{<br /> unsigned char i;<br /><br /> for (;delay>0;delay--)<br /> {<br /> for (i=0;i<50;i++);<br /> }<br />}<br /> <br />就是接收不到数据,单独发送是可以的 |
|