查看: 2763|回复: 2

[S12] 飞思卡尔S12HY64 SCI通信接收函数问题

[复制链接]

该用户从未签到

4

主题

30

帖子

0

注册会员

Rank: 2

积分
106
最后登录
1970-1-1
发表于 2013-7-12 09:10:36 | 显示全部楼层 |阅读模式
 

            
飞思卡尔S12HY64芯片SCI通信接收函数问题
 
                                                
                         本来SCI通信程序例程很多,应该不难,但是我这个问题出的很怪异,两个关于字节接收子函数,一个直接返回的数据寄存器的值,另一个将数据寄存器的值放入*p的空间中,接收条件都一样,但是调用将数据放入*p空间的那个字节接收子函数,程序接收的数据是不对的,而直接返回数据寄存器的值得子函数,程序运行时正确的,代码如下:
                         
                        //SCIre1:串行收一个字节数据------------------------------------------------*
                        //功能:从串行口接收1个字节的数据 
                        //-------------------------------------------------------------------------* 
                        char GetChar(void) 
                        {  
                        /* check SCI0 transmit data register is empty */
                        while(SCISR1_RDRF == 0)
                        {
                        }
                        return(SCIDRL);
                        }
                        这是运行正确的子函数,下面的运行就不正确了:
                                                byte SCIre1(byte *p)
                        {
                            word k;
                            byte  i;
                            
                            //SCIsend1(SCISR1_RDRF);
                            //ReStatusR第ReTestBit位为1表示可接收数据
                            for(k=0; k < 0xfbbb; k++) {
                              
                           if(SCISR1_RDRF ==1)
                                 {
                                 
                                 i=  SCIDRL;
                                 //SCIsend1(i);
                                 *p = 0x00; 
                                 
                                 break;
                                 }      
                         
                           }
                            //接受失败
                            if (k >= 0xfbbb)
                            {
                           i  = 0xff;
                           *p = 0x01;
                            }
                            
                            return i;
                        }
                        
                        
                        
                        
            
我知道答案 目前已有1人回答
回复

使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2013-7-12 10:27:27 | 显示全部楼层

    RE:飞思卡尔S12HY64 SCI通信接收函数问题

    你这个直接就给 *p = 0x00; 了。P的值应该是00啊。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4

    主题

    30

    帖子

    0

    注册会员

    Rank: 2

    积分
    106
    最后登录
    1970-1-1
     楼主| 发表于 2013-7-12 19:05:48 | 显示全部楼层

    回复:飞思卡尔S12HY64 SCI通信接收函数问题

     *p=0x00应该是对该空间的一个初始化,具体放入p空间是在接收字符串的子函数,结果一直错误的程序,刚刚又写一遍,结果竟然对了...很费解...
    byte SCIren(byte n, byte ch[])
    {
        int m;
        byte fp;
        m = 0;
        while (m < n)
        {
                ch[m] = SCIre1(&fp);
                if (fp == 1)
                {
                    return 1;
                }
                m++;
        }
        return 0;
    }
    但是现在还有一个问题是,我如何判断一个字符串接收完成呢?因为在这个接收字符串的函数中,变量n的值是定义的数组长度,一般这个长度是固定的,但是程序接收的数据长度是不确定的,如果无法判断字符串接收完成,程序会一直等待数据直到将这个数组填满,这就造成数据的错误传输...........如果我给每个接受的数组加一个固定的结束字符,有可能这个字符会出现在我接收的数据中,同样会造成数据的错误...现在就是想找一个确定接收字符串长度的方法。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-22 12:15 , Processed in 0.089503 second(s), 23 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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