打印
[技术问答]

赛元单片机串口能用么?SC92F7251_SOP16

[复制链接]
1335|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
21HU|  楼主 | 2020-7-30 15:38 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
这个字符串初始化好怪异,我定义并初始化一个字符串:uchar str[] = "uchar str: hello world test.\r\n";
使用SendString(str);输出的数据都是0,若修改str[],再打印字符串就能正常显示。
包括串口接收,我的串口功能是收到什么就发什么,但第一次通信赛元接收不到数据无输出,第二次开始才能发送本次已接收数据。
第一次接触赛元单片机,看不出哪儿有毛病,是硬件缺陷么?
以下是我的代码:
1、串口中断
void UartInt(void) interrupt 4
{
        static uchar rx_counter = 0;
        if(TI)
        {
                TI = 0;
                UartSendFlag = 1;        
        }
        if(RI)
        {
                RI = 0;        
                UartReceiveFlag = 1;
                rx_buf[rx_counter++] = SBUF;
                if((rx_buf[rx_counter-1]==13)||(rx_counter)==RX_LEN)                //  \r 结束符
                {
                        command = 1;                //  收到指令待处理
                        rx_buf[rx_counter] = 0;
                        rx_counter = 0;
                }
        }
}

2、串口发送
void SendByte(uchar tx_data)
{
                SBUF = tx_data;
                while(!UartSendFlag);
                UartSendFlag = 0;
}
void SendString(uchar *s)
{
    while (*s)              //Check the end of the string
      SendByte(*s++);     //Send current char and increment string ptr
}


3、主函数
void main(void)
{
    uchar str[] = "uchar str: hello world test.\r\n";  // code存放在ROM不可修改,const存放在RAM不可修改

  MyIO_Init();
  Uart0_Init();
  BTM_Init();
  while(1)
  {
        if(command)
           {
              SendString(rx_buf);
              command = 0;
           }
         if(BTM_Counter==1000)
           {
              SendString(str);
              BTM_Counter = 0;
           }

  }
}


已检测调试,串口可以收发,故串口配置没问题,这里就不贴代码了。

使用特权

评论回复

相关帖子

沙发
赛元MCU3| | 2020-7-31 15:24 | 只看该作者
您好,附件是一个UART接收到什么就发送什么的程序,主频选择12M,波特率是9600,您可以烧录这个程序试一下看看是否正常。

7251串口调试.rar

408.68 KB

使用特权

评论回复
评论
赛元MCU3 2020-8-3 18:13 回复TA
@21HU :单看你这个程序没看出来什么问题,方便的话您可以把程序打包发出来我们试试看。 
21HU 2020-8-1 08:47 回复TA
这个是你们官网的demo程序,我就是在这个的基础上修改的。 此程序只适用于每次收发一个字符 我需要的功能是收完一组字符串再转发出来。问题已反应在开头。 
板凳
21HU|  楼主 | 2020-8-4 16:09 | 只看该作者
@赛元MCU3 程序见附件,刚开始初始化一个字符串,打印出来的都是0,帮忙找找问题

SC92F7251.zip

35.76 KB

使用特权

评论回复
地板
赛元MCU3| | 2020-8-4 17:30 | 只看该作者
21HU 发表于 2020-8-4 16:09
@赛元MCU3 程序见附件,刚开始初始化一个字符串,打印出来的都是0,帮忙找找问题 ...

我这边直接烧录你的程序测试,打印出来的数据是正常的,不是00,你看一下是不是硬件方面存在问题。

1596533324(1).jpg (46.11 KB )

1596533324(1).jpg

使用特权

评论回复
5
21HU|  楼主 | 2020-8-6 10:16 | 只看该作者
赛元MCU3 发表于 2020-8-4 17:30
我这边直接烧录你的程序测试,打印出来的数据是正常的,不是00,你看一下是不是硬件方面存在问题。
...

首先硬件的问题不大,串口可以收发只是不能输出初始化的字符串,烧录了两块PCB现象一样
先描述下我的情况
1、编译软件 Keil C51 5.27版本,安装了Keil_C插件,正常烧录  (硬件3.3V 12MHz)
2、先初始化了一个字符串 uchar str_x1[] = {"uchar str: hello world test.\r\n"};
3、打印字符串 SendString(str_x1);   无输出
4、for(p=0;p<28;p++)   SendByte(str_x1[p]);   依次打印单字符输出都是 0
5、向字符串内写入数据 q = 65;  for(p=0;p<28;p++)   str_x1[p] = q++;
6、再打印字符串 SendString(str_x1);   输出了写入的数据

如何解决字符串初始化值是0的问题?

C:\Users\Administrator\Desktop\串口截图.jpgC:\Users\Administrator\Desktop\配置截图.jpg

串口截图.jpg (215.01 KB )

串口截图.jpg

配置截图.jpg (71.56 KB )

配置截图.jpg

使用特权

评论回复
6
赛元MCU3| | 2020-8-6 10:50 | 只看该作者
21HU 发表于 2020-8-6 10:16
首先硬件的问题不大,串口可以收发只是不能输出初始化的字符串,烧录了两块PCB现象一样
先描述下我的情况
...

我这边测试的时候是用的单芯片去测试的,测试出来数据都是正常的,你那边试一下也用单芯片,不在板测试看一下是什么情况。

使用特权

评论回复
7
21HU|  楼主 | 2020-8-6 14:56 | 只看该作者
问题找到了
uchar str[] = "uchar str: hello world test.\r\n";
改为 uchar idata str[] = "uchar str: hello world test.\r\n";

使用特权

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

本版积分规则

1

主题

5

帖子

0

粉丝