单片机学习小组
直播中

彭瑾

7年用户 179经验值
私信 关注

STC15开发板串口不能收到数据

程序在51单片机上测试没有问题,现在我想在另一个板子(stc15w408as)上测试一下串口,程序做了相应的修改,这个板子是自己做的,程序下载都没有问题。
问题是这样:直接用USB转TTL模块测试串口,将模块的u***口用数据线连到电脑,模块上的收发引脚直接和单片机的下载口直连,晶振啥的都没有问题,就是串口助手上收不到数据,也找不出原因,很纳闷。
希望大家帮忙分析一下原因,不胜感激!

回帖(7)

刘宇

2019-5-13 08:37:04
好的,谢谢。问题已经解决,问题处在定时器的初始化部分。
举报

云静京

2019-5-13 08:49:11
我用了stc15F2k61s2的开发板,串口通信只能用原装的数据线,其它的数据线都下载不了程序,波特率要调好,接收数据是文本模式的。
举报

李艳婷

2019-5-13 08:59:39
51的开发板和15的开发板不一样,15的开发板运算速度更快,适当调一下波特率试一下。
例程:
/*-------------------------------------
UART1测试:使用波特率9600发送到单片机上
   单片机将收到的程序发回PC。
   可采用STC下载软件自带串口调试助手观察
---------------------------------------*/
#include "STC15F2K.h"
#include 
typedef unsigned char uchar;
typedef unsigned int  uint;
bit busy;
bit Flag;
uchar GetC;
void InitUART(void);
void SendData(uchar dat);
void SendString(uchar *s);
void main()
{
P2=0x01;
InitUART();
    SendString("IAP15F2K61S2rnUart Test !rn");
    while(1)
{
  if(Flag)
  {
 SendString("IAP15F2K61S2rnUart Test !rn");
     SendData(GetC);
 Flag=0;
  }
}
}
/*----------------------------
    UART1初始化
-----------------------------*/
void InitUART(void)
{
    SCON = 0x50;                //8位可变波特率
AUXR1= AUXR1 & 0x3F; 
    AUXR = 0x40;                //定时器1为1T模式
    TMOD = 0x20;                //定时器1为模式2(8位自动重载)
    TL1 = 0xDC;   //设置波特率重装值
    TH1 = 0xDC;
    TR1 = 1;                    //定时器1开始工作
    ES = 1;                     //使能串口中断
    EA = 1;
}
/*----------------------------
UART 中断服务程序
-----------------------------*/
void Uart() interrupt 4 using 1
{
    if (RI)
    {
        RI = 0;                 //清除RI位
        GetC = SBUF;              //P0显示串口数据
Flag=1;
    }
    if (TI)
    {
        TI = 0;                 //清除TI位
        busy = 0;               //清忙标志
    }
}
/*----------------------------
发送串口数据
----------------------------*/
void SendData(uchar dat)
{
    while (busy);               //等待前面的数据发送完成
    busy = 1;
    SBUF = dat;                 //写数据到UART数据寄存器
}
/*----------------------------
发送字符串
----------------------------*/
void SendString(uchar *s)
{
    while (*s)                  //检测字符串结束标志
    {
        SendData(*s++);         //发送当前字符
    }
}
举报

李妤欣

2019-5-13 09:16:54
帮顶....
举报

更多回帖

发帖
×
20
完善资料,
赚取积分