智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 9106|回复: 18
打印 上一主题 下一主题

串口发回来的数据是乱码,怎么办啊?

  [复制链接]

2

主题

32

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1143
威望
268
贡献
827
兑换币
0
注册时间
2009-3-6
在线时间
24 小时
跳转到指定楼层
1#
发表于 2010-5-15 11:04:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <hidef.h>      /* common defines and macros */
#include <MC9S12XS128.h>     /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12xs128"
#define ROW_END 270  //最后采集的一行
#define ROW_START 45  //最先采集的一行
#define Row 46 //采集的图像行数
#define Line 46 //采集的图像列数

unsigned char row;         //行变量
unsigned char line;        //列变量
unsigned int rowcount;     //行计数器
unsigned char video[Row][Line];       //采集的图像信息


void init_PLL(void)  //CPU总线时钟60M
{
  SYNR=0xce;
                           
  REFDV=0x43;           
                     
  POSTDIV=0x00;  //bus period=16Mhz*(SYNDIV+1)/(REFDIV+1)=60M

  while(0==CRGFLG_LOCK);  //wait for VCO to stablize

  CLKSEL=0x80;  //open PLL
}

void init_PORT(void)  //端口初始化
{
  DDRT_DDRT0=0; //PT0作为奇偶场信号输入
  IRQCR_IRQE =1; //下降沿触发   
  IRQCR_IRQEN=0; //禁止外部IRQ使能
}

void init_AD(void)
{  
  ATD0CTL1=0x00;      //External trigge source is AN0,
                      //8-bit data,No discharge before sampling
  ATD0CTL2=0x60;    //quick clear CCFx,
                    //contine to transform under wait mode,
                    //Disable external trigger,
                    //ATD Sequence Complete interrupt requests are disabled,
                    //ATD Compare interrupt requests are disabled   
  ATD0CTL3=0x88;      //one transform in one sequence,
                      //No FIFO,Right justied,
                      //contine to transform under freeze mode   
  ATD0CTL4=0x01;    //four clocks,ATDCLK=[BusClock*0.5]/[PRS+1]=15M
  ATD0CTL5=0x20;      //Continuous Conversion Sequence Mode,
                      //Analog Input Channel is AN0
  ATD0DIEN=0x00;    //inhibit digital input  
}

void init_SCI(void)
{
  SCI0BDL=0x86;         //9600bps
  SCI0BDH=0x01;
  SCI0CR1=0x00;         //正常8位模式,无奇偶校验
  SCI0CR2=0x0c;         //允许查询方式收发
}

void SCI_Transmit(unsigned char ch)       //发送函数
{   
        //等待发送缓冲区空
        while (!(SCI0SR1&0x80));
        SCI0DRL=ch;
}

void image_change(void)
{
  char m;
  char n;
  for(m=0;m<Row;m++)
  {
    for(n=0;n<Line;n++)
    {
      if(video[m][n]>235) video[m][n]=235;
      SCI_Transmit(video[m][n]);
    }   
  }
}

void main(void)
{
  init_PLL();
  init_PORT();
  EnableInterrupts;
  for(;;)
  {  
    if(PTIT_PTIT0==1)
    {  
      while(PTIT_PTIT0==1);
      row=0;
      rowcount=0;
      IRQCR_IRQEN=1;
      while(rowcount<=ROW_END)
      {}      
      IRQCR_IRQEN=0;
      image_change();
    }
    else
    {
      while(PTIT_PTIT0==0);
      row=0;
      rowcount=0;
      IRQCR_IRQEN=1;
      while(rowcount<=ROW_END)
      {}
      IRQCR_IRQEN=0;
      image_change();
    }
  }
}
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 6 IRQ_ISR()
{
  rowcount++;
  if((rowcount>=ROW_START)&&(rowcount%5==0)&&(row<Row))
  {
    init_AD();
    for(line=0;line<Line;line++)                                       
    {
      while(!ATD0STAT2_CCF0);  
      video[row][line]= ATD0DR0L;
      //SCI_Transmit(video[row][line]);

    }  
    row++;
    ATD0CTL2=0x00;                 //清除AD缓存的数据,等待下一行的到来   
  }        
}

30

主题

477

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4940

论坛元老奖章

威望
705
贡献
4087
兑换币
0
注册时间
2009-6-14
在线时间
74 小时
2#
发表于 2010-5-15 11:37:24 | 只看该作者
不知道你是不是串口的设置有问题?
在就看看你的上位机软件设置的是asii显示还是hex显示啊
我估计应该是你没有设置成hex显示

在就是你往回发是数据转换成asii在显示
回复 支持 反对

使用道具 举报

2

主题

32

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1143
威望
268
贡献
827
兑换币
0
注册时间
2009-3-6
在线时间
24 小时
3#
 楼主| 发表于 2010-5-17 11:55:51 | 只看该作者
#include <hidef.h>      /* common defines and macros */
#include <MC9S12XS128.h>     /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12xs128"
#define ROW_END 270  //最后采集的一行
#define ROW_START 45  //最先采集的一行
#define Row 46 //采集的图像行数
#define Line 46 //采集的图像列数

unsigned char row;         //行变量
unsigned char line;        //列变量
unsigned int rowcount;     //行计数器
unsigned char video[Row][Line];       //采集的图像信息


void init_PLL(void)  //CPU总线时钟60M
{
  SYNR=0xce;
                           
  REFDV=0x43;           
                     
  POSTDIV=0x00;  //bus period=16Mhz*(SYNDIV+1)/(REFDIV+1)=60M

  while(0==CRGFLG_LOCK);  //wait for VCO to stablize

  CLKSEL=0x80;  //open PLL
}

void init_PORT(void)  //端口初始化
{
  DDRT_DDRT0=0; //PT0作为奇偶场信号输入
  IRQCR_IRQE =1; //下降沿触发   
  IRQCR_IRQEN=0; //禁止外部IRQ使能
}

void init_AD(void)
{  
  ATD0CTL1=0x00;      //External trigge source is AN0,
                      //8-bit data,No discharge before sampling
  ATD0CTL2=0x60;    //quick clear CCFx,
                    //contine to transform under wait mode,
                    //Disable external trigger,
                    //ATD Sequence Complete interrupt requests are disabled,
                    //ATD Compare interrupt requests are disabled   
  ATD0CTL3=0x88;      //one transform in one sequence,
                      //No FIFO,Right justied,
                      //contine to transform under freeze mode   
  ATD0CTL4=0x01;    //four clocks,ATDCLK=[BusClock*0.5]/[PRS+1]=15M
  ATD0CTL5=0x20;      //Continuous Conversion Sequence Mode,
                      //Analog Input Channel is AN0
  ATD0DIEN=0x00;    //inhibit digital input  
}

void init_SCI(void)
{
  SCI0BDL=0x86;         //9600bps
  SCI0BDH=0x01;
  SCI0CR1=0x00;         //正常8位模式,无奇偶校验
  SCI0CR2=0x0c;         //允许查询方式收发
}

void SCI_Transmit(unsigned char ch)       //发送函数
{   
        //等待发送缓冲区空
        while (!(SCI0SR1&0x80));
        SCI0DRL=ch;
}

void image_change(void)
{
  char m;
  char n;
  for(m=0;m<Row;m++)
  {
    for(n=0;n<Line;n++)
    {
      if(video[m][n]>235) video[m][n]=235;
      SCI_Transmit(video[m][n]);
    }  
    SCI_Transmit('\n');
  }
}

void main(void)
{
  init_PLL();
  init_PORT();
  EnableInterrupts;
  for(;;)
  {  
    if(PTIT_PTIT0==1)
    {  
      while(PTIT_PTIT0==1);
      row=0;
      rowcount=0;
      IRQCR_IRQEN=1;
      while(rowcount<=ROW_END)
      {}      
      IRQCR_IRQEN=0;
      image_change();
    }
    else
    {
      while(PTIT_PTIT0==0);
      row=0;
      rowcount=0;
      IRQCR_IRQEN=1;
      while(rowcount<=ROW_END)
      {}
      IRQCR_IRQEN=0;
      image_change();
    }
  }
}
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 6 IRQ_ISR()
{
  rowcount++;
  if((rowcount>=ROW_START)&&(rowcount%5==0)&&(row<Row))
  {
    init_AD();
    for(line=0;line<Line;line++)                                       
    {
      while(!ATD0STAT2_CCF0);  
      video[row][line]= ATD0DR0L;
      //SCI_Transmit(video[row][line]);

    }  
    row++;
    ATD0CTL2=0x00;                 //清除AD缓存的数据,等待下一行的到来   
  }        
}

对!我没有设置为HEX显示,但是我需要SCI_Transmit('\n');这样来换行显示嘛,在单步调试程序时发现程序一直停在while (!(SCI0SR1&0x80));这里,不知道是什么原因了?
还有当我用单板做串口回显程序实验,实验结果是OK的,怎么我想把采集回来的数据发送回PC时就不行了?
回复 支持 反对

使用道具 举报

7

主题

78

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
457
QQ
威望
307
贡献
120
兑换币
0
注册时间
2010-5-3
在线时间
15 小时
4#
发表于 2010-5-17 16:13:31 | 只看该作者
检查下硬件吧,
有可能是电平不配
回复 支持 反对

使用道具 举报

9

主题

12

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
202
威望
183
贡献
19
兑换币
0
注册时间
2010-5-19
在线时间
0 小时
5#
发表于 2010-5-19 17:34:26 | 只看该作者
漫画009www.manhua009.com
最新最全的在线漫画网站--漫画009上线啦!
火影忍者,死神,海贼王,诛仙,妖精的尾巴等等最热门的漫画应有尽有.
每日更新,速度快,收录全,大家再也不用为喜欢的漫画到处找啦,就锁定漫画009吧!
更新预告:火影忍者495预计5月20日更新;
            :海贼王585预计5月20日更新;
            :死神404预计5月20日更新;
当然还有更多更新内容,大家不妨来看看吧!
更多精彩,尽在www.manhua009.com
回复 支持 反对

使用道具 举报

22

主题

242

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2785

优秀会员奖章

威望
534
贡献
1925
兑换币
20
注册时间
2009-10-12
在线时间
163 小时
6#
发表于 2010-6-14 21:08:36 | 只看该作者
乱码应该是波特率啥的设置错了吧,或者字符类型,我们以前也出现过
回复 支持 反对

使用道具 举报

5

主题

114

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
431
威望
355
贡献
20
兑换币
6
注册时间
2010-3-19
在线时间
28 小时
7#
发表于 2010-7-1 18:58:49 | 只看该作者
谢谢啊
回复 支持 反对

使用道具 举报

5

主题

113

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1064
威望
430
贡献
532
兑换币
6
注册时间
2009-12-5
在线时间
51 小时
8#
发表于 2010-7-1 21:14:29 | 只看该作者
波特率的问题,我原来是乱码,后来改了波特率就好了。
回复 支持 反对

使用道具 举报

1

主题

18

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
309
QQ
威望
270
贡献
21
兑换币
0
注册时间
2009-12-8
在线时间
9 小时
9#
发表于 2010-7-11 22:47:12 | 只看该作者
上位机十六进制显示就好了
回复 支持 反对

使用道具 举报

1

主题

71

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
QQ
威望
212
贡献
67
兑换币
0
注册时间
2011-11-7
在线时间
17 小时
10#
发表于 2011-12-8 19:15:35 | 只看该作者
学习中
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-2 08:46 , Processed in 0.183281 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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