打印

串口调试

[复制链接]
1760|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
w2340|  楼主 | 2007-11-28 15:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大虾们帮我看看下面程序哪里出问题了
//-----------------------函数声明,变量定义--------------------------------------------------------
#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++);
    }
}
           
就是接收不到数据,单独发送是可以的

相关帖子

沙发
computer00| | 2007-11-29 10:43 | 只看该作者

是不是你发错数了?0x88不要发成十进制的88了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

49

帖子

0

粉丝