智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 5206|回复: 13
打印 上一主题 下一主题

mc9x12xs128mal 串口通讯 乱码

  [复制链接]

2

主题

4

帖子

0

精华

注册会员

Rank: 2

积分
56
威望
116
贡献
30
兑换币
0
注册时间
2012-5-14
在线时间
5 小时
毕业学校
绯红军校
跳转到指定楼层
1#
发表于 2012-5-16 14:10:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
mc9x12xs128mal 串口回显 数据错误
十六进制
02 60 3F 02
PC发送02返回60 发送60返回3F 发送3F返回02
03 20 7E 03
发送03返回20 发送20返回7E 发送7E返回03
04 70 1F 04
发送04返回70 发送70返回1F 发送1F返回04
这种规律代表什么 如何得到正确的数据返回

代码如下:
#include <hidef.h>      /* com
mon defines and macros */
#include <MC9S12XS128.h>     /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12xs128"

#define CS PTM_PTM2     //测试
#define CS_dir DDRM_DDRM2
#define CS1 PTM_PTM1     //测试
#define CS1_dir DDRM_DDRM1
unsigned char Msg;
/*************************************************************/
/*                      初始化锁相环                         */
/*************************************************************/
void INIT_PLL(void)
{
  CLKSEL=0X00; // 初始化PLL前先使用外部晶振
  PLLCTL_PLLON=1; // 开启 PLL
  SYNR =0x40 | 0x04; // pllclock=2*osc*(1+SYNR)/(1+REFDV)=80MHz;
  REFDV=0x80 | 0x01;
  POSTDIV=0x00;
  _asm(nop); // BUS CLOCK=40M
  _asm(nop);
  while(!(CRGFLG_LOCK==1)); //等待PLL稳定
  CLKSEL_PLLSEL =1; //fBUS采用根据PLL频率设定
}
/*************************************************************/
/*                        初始化SCI0                         */
/*************************************************************/
void INIT_SCI0(void)
{
  SCI0BDH =0x01;
  SCI0BDL =0x04; //将波特率设置为9600,注意这是在fBUS为40M的情况下设定的
  SCI0CR1 = 0x64; //设置串口接收端连接到外部;
  SCI0CR2 = 0x2C;//启用接收中断;发送使能和接收使能
}
/*************************************************************/
/*                       串口发送函数                        */
/*************************************************************/
void SCI0_send(unsigned char data)
{
  while(!(SCI0SR1&0X80));        //等待发送数据寄存器(缓冲器)为空
  //SCI0DRH=0;
  SCI0DRL = data;
  CS1=0;
}
/*************************************************************/
/*                       串口接收函数                        */
/*************************************************************/
unsigned char SCI0_receive()
{
  if(SCI0SR1_RDRF==1)     //表明数据从位移寄存器传输到SCI数据寄存器
  {
    while(!SCI0SR1_RDRF); //等待发送数据寄存器满
    SCI0SR1_RDRF=1;       //读取数据寄存器会将RDRF清除  重新置位
    return SCI0DRL;       //返回数据寄存器的数据
  }
}
//-------------------- 串口中断函数----------------------//
#pragma CODE_SEG NON_BANKED
void interrupt 20 Senrial(void)
{
  unsigned char temp;
  temp= SCI0_receive();  
  CS=0;
Msg=temp;
if(Msg==9)
{
   
   SCI0_send(2);
}  
  /*if(Msg==0)   
else
{
  switch(Msg)
  {
    case 0x01: SD=temp;break;     //锁定   0 & 1
    case 0x02: ZFZ=temp;break;    //正反转 1 & 0
    case 0x03: ZS=temp;break;     //转速   0x00 ~ 0x64
    case 0x04:
      if(ZS>0)
        setPWM(ZS*20480,temp);    //启动传送带
      break;
  }
  Msg=0;
}          */
  SCI0_send(Msg);
}
//--------------I/O初始化-------------------------------------//
void Init_IO(void)  
{
  //DDRB=0xFF;
  CS=1;
  CS_dir=1;
  CS1=1;
  CS1_dir=1;  
}
void main(void)
{
  /* put your own code here */
  INIT_PLL();
  INIT_SCI0();
  Init_IO();
  SCI0_send(8);
EnableInterrupts;
  for(;;)
  {
    _FEED_COP(); /* feeds the dog */
  } /* loop forever */
  /* please make sure that you never leave main */
}



补充内容 (2012-5-16 17:20):

PC发送0E 单片机收到的是60 然后将60回发 PC收到的是18

为什么会这样 求救啊 急 谢谢

5

主题

18

帖子

0

精华

高级会员

Rank: 4

积分
661
威望
392
贡献
159
兑换币
21
注册时间
2011-11-9
在线时间
55 小时
2#
发表于 2012-5-21 00:01:36 | 只看该作者
向单片机发数据能连续发的吗?还是说发一次单片机要复位一次?
回复 支持 反对

使用道具 举报

5

主题

38

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
410
威望
254
贡献
92
兑换币
0
注册时间
2012-4-30
在线时间
32 小时
毕业学校
浙江农林大学
3#
发表于 2012-5-21 21:16:26 | 只看该作者
你的串口是怎么接的?
回复 支持 反对

使用道具 举报

2

主题

4

帖子

0

精华

注册会员

Rank: 2

积分
56
威望
116
贡献
30
兑换币
0
注册时间
2012-5-14
在线时间
5 小时
毕业学校
绯红军校
4#
 楼主| 发表于 2012-5-24 12:07:21 | 只看该作者
谢谢两位 问题已解决 硬件连接搞错了 用了TTL电平
回复 支持 反对

使用道具 举报

4

主题

68

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
359
威望
257
贡献
44
兑换币
5
注册时间
2012-4-6
在线时间
29 小时
毕业学校
中南大学
5#
发表于 2012-5-26 15:44:46 | 只看该作者
回复 支持 反对

使用道具 举报

32

主题

387

帖子

1

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4627
威望
2290
贡献
1181
兑换币
924
注册时间
2012-2-13
在线时间
578 小时
6#
发表于 2012-12-28 08:41:20 | 只看该作者
复仇的绯红 发表于 2012-5-24 12:07
谢谢两位 问题已解决 硬件连接搞错了 用了TTL电平

我遇到了和你差不多的问题,发出的数据域接受到的数据完全不同,我用k60,你能说说你具体是怎么样解决的吗?
回复 支持 反对

使用道具 举报

21

主题

892

帖子

0

精华

常驻嘉宾

爱板者

Rank: 8Rank: 8

积分
3857

活跃会员奖章优秀会员奖章在线王奖章论坛元老奖章

威望
1833
贡献
1048
兑换币
736
注册时间
2012-12-4
在线时间
488 小时
7#
发表于 2012-12-28 10:32:39 | 只看该作者
我也是乱码
回复 支持 反对

使用道具 举报

21

主题

892

帖子

0

精华

常驻嘉宾

爱板者

Rank: 8Rank: 8

积分
3857

活跃会员奖章优秀会员奖章在线王奖章论坛元老奖章

威望
1833
贡献
1048
兑换币
736
注册时间
2012-12-4
在线时间
488 小时
8#
发表于 2012-12-28 10:54:10 | 只看该作者
我的乱码更严重
回复 支持 反对

使用道具 举报

32

主题

387

帖子

1

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4627
威望
2290
贡献
1181
兑换币
924
注册时间
2012-2-13
在线时间
578 小时
9#
发表于 2012-12-28 17:33:25 | 只看该作者
mxj1005071012 发表于 2012-12-28 10:32
我也是乱码

你的问题解决了吗?我的QQ13349877861  求交流
回复 支持 反对

使用道具 举报

21

主题

892

帖子

0

精华

常驻嘉宾

爱板者

Rank: 8Rank: 8

积分
3857

活跃会员奖章优秀会员奖章在线王奖章论坛元老奖章

威望
1833
贡献
1048
兑换币
736
注册时间
2012-12-4
在线时间
488 小时
10#
发表于 2012-12-28 18:01:12 | 只看该作者
没有呢 如果解决了就回答你了
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-26 02:15 , Processed in 0.083709 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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