请教为什么串口能发送不能接收

2020-01-26 12:55发布

以下是串口测试程序,我用串口助手测试,我的程序是接收到电脑发送数据则回传一个数据,但电脑发送数据后电脑收不到任何数据,但我让程序主动发送数据则电脑接收正常,下载程序也正常说明串口收发都是正常的,不明白为什么会这样,以前都试过可以的。
unsigned char test;
void UartInit(void);
void main(void)
{
  EA=1;
  test=0x12;
  UartInit();
  while(1)
  {
   ....
  }
}
void UartInit(void)        //4800bps@8MHz
{
    PCON &= 0x7F;        //波特率不倍速
    SCON = 0x50;        //8位数据,可变波特率
    AUXR |= 0x40;        //定时器1时钟为Fosc,即1T
    AUXR &= 0xFE;        //串口1选择定时器1为波特率发生器
    TMOD &= 0x0F;        //清除定时器1模式位
    TMOD |= 0x20;        //设定定时器1为8位自动重装方式
    TL1 = 0xCC;        //设定定时初值
    TH1 = 0xCC;        //设定定时器重装值
    ET1 = 0;        //禁止定时器1中断
    TR1 = 1;        //启动定时器1
    ES=1;   //打开口中断
}
void Uart_Isr(void) interrupt 4
{
    if(RI)
    {
        RI=0;
        SBUF=test;
    }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
szzyq
1楼-- · 2020-01-26 14:24
改成这样能不断发送数据。
unsigned char test;
void UartInit(void);
void main(void)
{
  EA=1;
  test=0x12;
  UartInit();
  while(1)
  {
     SBUF=test;
   ....
  }
}
void UartInit(void)        //4800bps@8MHz
{
    PCON &= 0x7F;        //波特率不倍速
    SCON = 0x50;        //8位数据,可变波特率
    AUXR |= 0x40;        //定时器1时钟为Fosc,即1T
    AUXR &= 0xFE;        //串口1选择定时器1为波特率发生器
    TMOD &= 0x0F;        //清除定时器1模式位
    TMOD |= 0x20;        //设定定时器1为8位自动重装方式
    TL1 = 0xCC;        //设定定时初值
    TH1 = 0xCC;        //设定定时器重装值
    ET1 = 0;        //禁止定时器1中断
    TR1 = 1;        //启动定时器1
    ES=1;   //打开口中断
}
void Uart_Isr(void) interrupt 4
{
    if(RI)
    {
        RI=0;
        //SBUF=test;
    }
}
szzyq
2楼-- · 2020-01-26 18:18
也试过用查询法也是收不到电脑发的数据。
lcw_swust
3楼-- · 2020-01-26 18:25
 精彩回答 2  元偷偷看……
祥子
4楼-- · 2020-01-26 19:07
是不是可以考虑在主程序里加个延时?
szzyq
5楼-- · 2020-01-27 00:07
sComassistant V2.2
szzyq
6楼-- · 2020-01-27 05:51
本来用的STC-ISP自带的串口助手,不行才用这个结果也是一样,以前调串口的时候也试过不行后来又行的,这次怎样都不行,难道是电脑问题?

一周热门 更多>