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