智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1584|回复: 2
打印 上一主题 下一主题

新人急求救!!!请大神看一下我这个实验程序(SCI收发)

[复制链接]

2

主题

17

帖子

0

精华

注册会员

Rank: 2

积分
169
威望
81
贡献
50
兑换币
50
注册时间
2012-12-9
在线时间
19 小时
毕业学校
天津大学
跳转到指定楼层
1#
发表于 2013-1-24 17:07:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我的单片机是MC9S08JM60,有两个SCI(SCI1和SCI2),现在想SCI1接一个ASCII码字符串,SCI2发出去结果程序老不通,求大神门看一眼指导一下,小弟先行谢过!!!
字符串如:$GPGGA,123.436..........
程序如下:
#include <hidef.h> /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */
byte a;
byte i=0;

unsigned char Msg[];
         void  SendMsg(unsigned char msg[])
         

2

主题

17

帖子

0

精华

注册会员

Rank: 2

积分
169
威望
81
贡献
50
兑换币
50
注册时间
2012-12-9
在线时间
19 小时
毕业学校
天津大学
2#
 楼主| 发表于 2013-1-24 17:16:17 | 只看该作者
程序没贴完:
从这里看:

#include <hidef.h> /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */
byte a;
byte i=0;

unsigned char Msg[];
         void  SendMsg(unsigned char msg[])
                         {
                                 byte  ix=0;            // String pointer
                                  byte  dummy;           // 读取SCI1S1
                                  byte  nxt_char;
                                  SCI2C2_TE = 1;          //允许发送器
                                  dummy = SCI2S1;                 // 清除TDRE
                                  nxt_char = msg[ix++];                //取出要发送的数据
                                  while(nxt_char != 0x00) {        //如果没有到字符串结尾
                                    SCI2D = nxt_char;                 // 清除TDRE第二步
                                    nxt_char = msg[ix++];        //数据送缓冲区后,取下一个
                                    while(!SCI2S1_TDRE){ ;} //等待缓冲区空
                                  }
                                  while(!SCI2S1_TC){ ;}                //等待最后一个字符发送完成
                                  SCI2C2_TE = 0;
                         }

void main(void){
       
SCI1BD =9500000/16/9600;   //  设置波特率
                            //   
SCI2BD=9500000/16/9600;

SCI2C2=0X00;  
SCI1C2=0X00;  

for(;;){
SCI1C2_RE=1;
while(1)
    {       
      while(SCI1S1_RDRF==0){};  
a=SCI1D;
        while(a!=0x24){};

      Msg[i]=SCI1D;        //接收数据寄存器满之后接收数据,并存到msg[]中
   
      if((Msg[i-2]==0x26))
        {i=0;SCI1C2_RE=0;break;}            
      i++;
      
    }
SendMsg(Msg[i]);
}}

错误是“SendMsg(Msg[i])” type mismatch(expected“unsigned *char”given“unsigned char”)
回复 支持 反对

使用道具 举报

15

主题

828

帖子

1

精华

版主

Rank: 9Rank: 9Rank: 9

积分
24361

论坛元老奖章活跃会员奖章优秀会员奖章在线王奖章资源大师奖章

QQ
威望
7092
贡献
11943
兑换币
3570
注册时间
2010-11-13
在线时间
2663 小时
3#
发表于 2013-1-24 19:14:16 | 只看该作者
粗略看了下

第一、void  SendMsg(unsigned char msg[])   哪有这样定义指针的。 void  SendMsg(unsigned char *msg)

第二、SendMsg(Msg[i]); 数组名实质是地址,但加了[i]表示变量,所以,要SendMsg(&Msg[i]);

其他的就不说了。
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-11-6 05:13 , Processed in 0.081772 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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