找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1342|回复: 6
收起左侧

求帮助啊,stc15W413单片机串口通讯没数据

[复制链接]
回帖奖励 2 黑币 回复本帖可获得 2 黑币奖励! 每人限 1 次(中奖概率 40%)
ID:813153 发表于 2020-10-13 09:59 | 显示全部楼层 |阅读模式
以下是程序用的串口代码,检查了好久,是查看了很多代码,真的真不出问题所在。用串口助手发送数据后就没有数据回来过。

#define S1_S0 0x40              //P_SW1.6
#define S1_S1 0x80              //P_SW1.7
bit busy;
char temp,rec_flag = 0;

/***************************************************************************
** Function name: void InitUart1(void)
** Descriptions: uart初始化
** input parameters:
** output parameters:
** Returned value:
***************************************************************************/
void InitUart1(void)                     //9600
{         
        EA    = 0;
    ACC   = P_SW1;
    ACC  &= ~(S1_S0 | S1_S1);    //S1_S0=0 S1_S1=1
    ACC  |= S1_S1;               //(P1.6/RxD_3, P1.7/TxD_3)
    P_SW1 = ACC;  
    SCON  = 0x50;                //8位数据,可变波特率
    AUXR |= 0x01;                //串口1选择定时器2为波特率发生器
    AUXR |= 0x04;                //定时器2时钟为Fosc,即1T
    T2L   = 0xE0;                //设定定时初值
    T2H   = 0xFE;                //设定定时初值
    AUXR |= 0x10;                //启动定时器2
           ES    = 1;                   //中断允许
           EA    = 1;   
}

/***************************************************************************
** Function name: void SendData(BYTE dat)
** Descriptions: 发送字节
** input parameters:
** output parameters:
** Returned value:
***************************************************************************/
void SendData(BYTE dat)
{
    while(busy);
    busy = 1;
    SBUF = dat;
}
/***************************************************************************
** Function name: void SendString(char *s)
** Descriptions: 发送字符串
** input parameters:
** output parameters:
** Returned value:
***************************************************************************/
void SendString(char *s)
{
    while (*s)                  //检测字符串结束标志
    {
        SendData(*s++);         //发送当前字符
    }
}

/***************************************************************************
** Function name: void Uart() interrupt 4
** Descriptions: uart初始化
** input parameters:
** output parameters:
** Returned value:
***************************************************************************/
void Uart() interrupt 4
{
    if (RI)
    {
        RI = 0;                 //清除RI位
        temp = SBUF;            //数据
        uart_receive_input(temp);
    }
    if (TI)
    {
        TI = 0;                 //清除TI位
        busy = 0;               //清忙标志
    }
}
回复

使用道具 举报

ID:827243 发表于 2020-10-13 15:37 | 显示全部楼层
检查办法,上电后就用串口发一串码,如果没收到,说明是初始化和硬件问题了。调好这个再调收发。
回复

使用道具 举报

ID:798631 发表于 2020-10-13 21:58 | 显示全部楼层
耐心调试,很简单的东西。先调试接收数据,程序仿真没问题再说其他
回复

使用道具 举报

ID:822755 发表于 2020-10-14 10:36 | 显示全部楼层
检查计算的波特率设置,检查与计臬机的连接线(计算机的TX接单片机的RX, RX-TX)
回复

使用道具 举报

ID:813153 发表于 2020-10-15 10:31 | 显示全部楼层
daemondong 发表于 2020-10-13 15:37
检查办法,上电后就用串口发一串码,如果没收到,说明是初始化和硬件问题了。调好这个再调收发。

初始化的代码就是上面的代码了,硬件的话串口就接RX-TX,TX-RX,GND-GND,这没有问题吧
回复

使用道具 举报

ID:813153 发表于 2020-10-15 10:32 | 显示全部楼层
KongQuan 发表于 2020-10-14 10:36
检查计算的波特率设置,检查与计臬机的连接线(计算机的TX接单片机的RX, RX-TX)

波特率设置的是9600,用的是内部晶振,接线的话RX-TX,TX-RX,GND-GND
回复

使用道具 举报

ID:813153 发表于 2020-10-15 10:33 | 显示全部楼层
15830266185 发表于 2020-10-13 21:58
耐心调试,很简单的东西。先调试接收数据,程序仿真没问题再说其他

主要是调试很久了,功能现在我就是直接串口的收发,用的例程是官网的,然后修改
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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