打印
[其它应用]

sh88f4串口通信的问题

[复制链接]
1250|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
啦啦新人|  楼主 | 2016-8-1 00:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通过串口发给PC可以  但是接收不到上位机的数据 是什么问题
沙发
啦啦新人|  楼主 | 2016-8-1 00:46 | 只看该作者
刚接触中颖  希望大神给点指点

使用特权

评论回复
板凳
yirongfu| | 2016-8-1 01:43 | 只看该作者
先检查接收通道的硬件是否有问题,再检查软件接收部分代码是否有问题,包括端口的配置。
88系列是51核,通讯程序你可以参考一些通用的51代码。或者参考中颖版块置顶帖“中颖8 Bit Flash MCU产品试用相关**汇总”(中颖8 Bit Flash MCU产品试用相关**汇总),里面有有关串行通讯的**。

使用特权

评论回复
地板
啦啦新人|  楼主 | 2016-8-1 09:27 | 只看该作者
haode   xie xie  我试试

使用特权

评论回复
5
啦啦新人|  楼主 | 2016-8-1 10:51 | 只看该作者
yirongfu 发表于 2016-8-1 01:43
先检查接收通道的硬件是否有问题,再检查软件接收部分代码是否有问题,包括端口的配置。
88系列是51核,通 ...

我之前用51做过 收发都可以的  下面是代码  什么地方有问题吗
// CLKCON = 0x00;
  PCON=0X00;
  SCON=0x50; //EUART0¹¤×÷·½Ê½Îª1 SMO=0 SM1=1 SM2=0 REN=1 TB8=0 RB8=0 TI=0 RI=0
        TMOD=0x20;
        RCAP2H=0xff; //                 Baudrate:9600 fc  115200  ca
        RCAP2L=0xfc;
        TH2=0xff;
        TL2=0xfc;
/*        TL1=0xca;
        TH1=0xca;
        TCON=0xd0; //¶¨Ê±Æ÷1Ϊ·¢ËͲ¨ÌØÂÊ
        TMOD=0x20; //¶¨Ê±Æ÷1 ·½Ê½2 8λÖØ×°ÔØ
        */
        T2CON=0x34; //TF2=0 EXF2=0 TCLK=1 RCLK=1 Ñ¡Ôñ¶¨Ê±Æ÷2Ϊ½ÓÊܲ¨ÌØʱÖÓÔEXEN2=0  TR2=1  C/T2=0 T20E=0
        T2MOD=0x03;
        // TH1=0XFd;
        // TL1=0XFd;

        ES0=1;
        EA=1;
//        IEN0=0xc8;  //ET2=1 ES0=1 EA=1       
//        TR1=1;
//        ES=1;
//        EA=1;

使用特权

评论回复
6
yirongfu| | 2016-8-2 01:04 | 只看该作者
本帖最后由 yirongfu 于 2016-8-2 01:05 编辑

这我看不出来问题,还有中断服务也有可能相关的,甚至程序结构都可能有影响。
建议你先看看接收时是否进接收中断了,如果有进中断,收到的sbuf内数据是否正确;如果没进中断,那就查查初始化配置。既然你这个代码以前在其它51上能用,那在这个MCU上应该是配置哪里还不对,或者就是硬件有问题。
我用的F54寄存器跟你这个有差异,你用的是F4051吧?我的初始化代码供你参考,485的控制可以不管它:
/**********************************************
功能:EUART1初始化程序
输入:
输出:
说明:9600,8,N,1
**********************************************/
void inituart1(void)
{
  SCON1 = 0x40;                //B0110.0000,方式1,检测停止位,RI1=0,SM12=0
  //T2MOD |= 0x20;        //允许EUART1中断,ESU2
  IEN1 |= 0x04;                //ES1允许EUART1中断
  PCON &= 0xDF;                //可省,SSTAT1
  SBRT1 = 0x7F;        //32768-4000kHz/(9.6kHz*16)
  SBRT0 = 0xE6;
  SBRT1 |= 0x80;                //SBRTEN,打开波特率发生器--时钟取自Fsys
  REN1 = 1;                //接收允许
  RI1 = 0;
  con485 = 0;//485接收允许
}




使用特权

评论回复
7
啦啦新人|  楼主 | 2016-8-2 22:28 | 只看该作者
yirongfu 发表于 2016-8-2 01:04
这我看不出来问题,还有中断服务也有可能相关的,甚至程序结构都可能有影响。
建议你先看看接收时是否进接 ...

我用的是88f54p   一直查不出问题  
这是串口初始化
void _UART_initlize(void) // ´®¿Ú³õʼ»¯UART
{
/*//51
//timer
        TMOD=0x20;
        TH1=0xfd;
        TL1=0xfd;
       
         PCON=0x00;       
         SCON=0X50;
             // EUART0¹¤×÷ÔÚ·½Ê½1
        // interrupt set
        TR1=1;
        ES=1;
        EA=1;
        */


        //timer1
        TMOD |=0x20;
        TL1=0xf7;
        TH1=0xf7;  
  PCON &=0Xdf;
  SCON=0x50; //EUART0¹¤×÷·½Ê½Îª1
//        TF1=0;
        TR1=1;
        ES0=1;
        EA=1;

}

这是主函数
{
_UART_initlize();
          
       
while(1)
{

  if(Flag)
        {
                Flag=0;       
                SBUF=Date[0];
                while(!TI);
                TI=0;
               
                }
        }
}


void USART_ISR() interrupt 4
{
        if(RI)
{
        Flag=1;
        RI=0;
Date[0]=SBUF;       
}

}
反复拔插TXD 那根线 或者有是拔插RXD那根线 就会有乱码传到上位机

使用特权

评论回复
8
yirongfu| | 2016-8-3 01:48 | 只看该作者
你用的是F54,你看看你标题写的是啥?!f4?稍微严谨些嘛
代码麽有注释,调试的具体数据也不说,让大家多花时间去揣摩你的思路去猜测你的调试数据吗?


你在接收中断里设个标志位或者驱动个外部的LED,看看是否进了中断,如果有进入看看收到的是什么数据。想办法缩小和定位问题区域呀。

你用的是EUART0,我用的是EUART1,EUART0我没试过,不过,你试试把接收中断里的这两行对调一下看看有没有效果:
RI=0;
Date[0]=SBUF;
改成:
Date[0]=SBUF;
RI=0;
另外,你看看F516的应用文档,里面有提到“为了避免发送或者接收错误,在EUART 发送初始化程序中,应该将TXD 和RXD 对应I/O 状态设为准双向结构;或者设置为开漏输出结构(此时必须外接上拉电阻)”,那么你的IO初始化部分都正确吧?

使用特权

评论回复
9
啦啦新人|  楼主 | 2016-8-3 08:58 | 只看该作者
yirongfu 发表于 2016-8-3 01:48
你用的是F54,你看看你标题写的是啥?!f4?稍微严谨些嘛
代码麽有注释,调试的具体数据也不说, ...

好的  我会注意的  谢谢

使用特权

评论回复
10
linxianyu77| | 2016-11-4 09:50 | 只看该作者
yirongfu 发表于 2016-8-2 01:04
这我看不出来问题,还有中断服务也有可能相关的,甚至程序结构都可能有影响。
建议你先看看接收时是否进接 ...

你好,我遇到一个问题:SH88F54初始化EUART1完后开启中断,只要串口一发送或者接收数据,单片机就复位重启,不知道是哪里的原因,还麻烦指导我一下,我的Q842941030

使用特权

评论回复
11
yirongfu| | 2016-11-5 15:55 | 只看该作者
linxianyu77 发表于 2016-11-4 09:50
你好,我遇到一个问题:SH88F54初始化EUART1完后开启中断,只要串口一发送或者接收数据,单片机就复位重 ...

复位可能两方面原因:
1. 程序跑飞。比如,你可以仿真跟踪一下,看看在哪一个语句开始出现异常,再分析该语句相关的影响。还有比如看门狗,不过估计你不是这个问题。你可以将部分程序注释起来,逐一排查各个代码段。
2. 硬件复位。在收发的时候是否引起外围电路的电源跌落,导致单片机复位,这个需要你自己观测单片机电源变化和结合电路进行排查。可以将串口收发线先断开来,然后程序跑到收或者发那里,看看是否复位。
一般来说,单片机本身不会因为开启收发而复位,只能是收发连带产生的变化引起硬件复位或者软件复位。

使用特权

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

本版积分规则

1

主题

6

帖子

0

粉丝