搜索
bottom↓
回复: 11

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

[复制链接]

出0入0汤圆

发表于 2013-10-16 08:45:40 | 显示全部楼层 |阅读模式
以下是串口测试程序,我用串口助手测试,我的程序是接收到电脑发送数据则回传一个数据,但电脑发送数据后电脑收不到任何数据,但我让程序主动发送数据则电脑接收正常,下载程序也正常说明串口收发都是正常的,不明白为什么会这样,以前都试过可以的。
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;
    }
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2013-10-16 08:48:12 | 显示全部楼层
改成这样能不断发送数据。
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;
    }
}

出0入0汤圆

 楼主| 发表于 2013-10-16 08:50:00 | 显示全部楼层
也试过用查询法也是收不到电脑发的数据。

出0入0汤圆

发表于 2013-10-16 09:39:29 | 显示全部楼层
我这试了下,一楼那个程序能返回数据。
不知楼主用的哪个串口助手软件?

出0入0汤圆

发表于 2013-10-16 09:47:44 | 显示全部楼层
是不是可以考虑在主程序里加个延时?

出0入0汤圆

 楼主| 发表于 2013-10-16 09:48:03 | 显示全部楼层
sComassistant V2.2

出0入0汤圆

 楼主| 发表于 2013-10-16 09:51:18 | 显示全部楼层
本来用的STC-ISP自带的串口助手,不行才用这个结果也是一样,以前调串口的时候也试过不行后来又行的,这次怎样都不行,难道是电脑问题?

出0入0汤圆

发表于 2013-10-16 10:07:34 | 显示全部楼层
szzyq 发表于 2013-10-16 09:51
本来用的STC-ISP自带的串口助手,不行才用这个结果也是一样,以前调串口的时候也试过不行后来又行的,这次 ...

我这是可以的,是不是串口号弄错了?
或者把串口助手的波特率调高些试试?
或者直接将单片机TXD引脚短暂的接GND看是否收到数据。

出0入0汤圆

 楼主| 发表于 2013-10-16 10:22:25 | 显示全部楼层
串口号不可能搞错,因为单试发送是没问题的。

出0入0汤圆

 楼主| 发表于 2013-10-16 10:30:04 | 显示全部楼层
这样看来不是程序问题了

出0入0汤圆

 楼主| 发表于 2013-10-16 11:11:09 | 显示全部楼层
lcw_swust 发表于 2013-10-16 10:07
我这是可以的,是不是串口号弄错了?
或者把串口助手的波特率调高些试试?
或者直接将单片机TXD引脚短暂 ...

终于搞清楚是怎么回事了,原来是将串口定义成强推挽模式了,变成不能接收信号了        P3M1=0xbc;    //B10111100
        P3M0=0x01;    //B00000001
谢谢你帮我试了下程序,否则我都不知道原因出在哪里。

出0入0汤圆

发表于 2013-10-16 11:21:58 | 显示全部楼层
szzyq 发表于 2013-10-16 11:11
终于搞清楚是怎么回事了,原来是将串口定义成强推挽模式了,变成不能接收信号了        P3M1=0xbc;    //B101111 ...

哦,这倒是没有想到。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 16:12

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表