智能车制作

标题: XS128串口通信 [打印本页]

作者: qi亚    时间: 2012-12-5 16:38
标题: XS128串口通信
大侠!为什么向计算机发送‘1’,但是却接收的是‘1C E0’,而且波特率应该没算错!但是调节不同的波特率会出现不同的乱码?
求解???????
?????????
#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */
/*************  锁相环24M  **************/
void PLL_Init()
{
    CLKSEL=0x00;                //初始时还没有PLL
    PLLCTL=0xe1;                //时钟监控使能,PLL允许,VCOCLK调频2%,禁止快速苏醒,禁止自给时钟,伪停止下禁止实时中断和看门狗
    SYNR=2;
    REFDV=1;                    //PLLCLK=2*OSCCLK*(SYNR+1/((REFDV+1))=48M;
    asm NOP;asm NOP;asm NOP;    //等待锁相环稳定
    while(!(CRGFLG&0x08));      //锁相环稳定标志位
    CLKSEL=0x80;                //时钟选择寄存器,Bus Clock=PLLCLK/2,停止模式下振荡器、系统时钟、锁相环、内核时钟、看门狗继续工作
}
/*************  SCI设定9600波特  ***************/
void SCI_Init()
{
    SCI0BDH=0x00;
    SCI0BDL=0x9a;       //9600bps BaudRate=BusClock/(16*SCIBD)
    SCI0CR2=0x2C;       //发送允许 接受中断允许
}
void delay(void)
{
  unsigned int loop_i,loop_j;
  for(loop_i=0;loop_i<500;loop_i++)
  {
    for(loop_j=0;loop_j<500;loop_j++)
    {
    ;}
  }

  }
/*********** 串口发送程序:此部分为网上下载************/
void uart_putchar ( unsigned char c)
{

  while(!(SCI0SR1&0x80)) ;       //keep waiting when not empty  
  SCI0DRL=c;
}


void main(void) {
  /* put your own code here */
  unsigned char loop_index;
   SCI_Init();
    uart_putchar ('1');
/*for(loop_index=0;loop_index<100;loop_index++)
  {
    while(!SCI0SR1_TDRE);
    SCI0DRL=loop_index;
    delay();

  }
     */


作者: 早安,徐威    时间: 2012-12-5 16:38
串口线的问题

作者: mxj1005071012    时间: 2012-12-6 14:48
好用
作者: qi亚    时间: 2012-12-6 17:37
谢了,硬件连错了

作者: mxj1005071012    时间: 2013-1-3 14:23
早安,徐威 发表于 2012-12-5 16:38
串口线的问题

怎么解决的  我也是同样的问题
作者: 早安,徐威    时间: 2013-1-3 14:27
mxj1005071012 发表于 2013-1-3 14:23
怎么解决的  我也是同样的问题

上位机不要用十六进制显示 。我们的是串口线的问题 后来用51单片机的P3.1 做中介就可以了 通过五一的串口功能来解的

作者: mxj1005071012    时间: 2013-1-3 14:28
qi亚 发表于 2012-12-6 17:37
谢了,硬件连错了

我和你的程序基本一样 硬件好像没有问题 可是串口助手收不到数据时怎么回事  你是怎么解决的
作者: mxj1005071012    时间: 2013-1-3 14:30
早安,徐威 发表于 2013-1-3 14:27
上位机不要用十六进制显示 。我们的是串口线的问题 后来用51单片机的P3.1 做中介就可以了 通过五一的串口 ...

我用的是51开发板上的RS232  没有用51单片机 求详解 谢谢了 不知道怎么搞啊  发愁
作者: qi亚    时间: 2013-1-3 18:55
把单片机的数据发送端TXD 连接到单片机的TXD ,这里仅仅用到单片机的硬件结构,然后连接PC机,用上位机接受就行了。
作者: houhongyi    时间: 2013-1-21 01:46
你看看是不是因为波特率不匹配造成误码率太高。我也是弄了一下午,现在数据流稳定了。。。你用PLL变频到26M再用9600的波特率,可实现0.76%的误码率。效果不错。只不过我现在发00,单片机返回80。。。不过误码率几乎可以忽视了。。。24M在9600下的误码率在6.9%左右,太高了,发00 回的数据都不一样,通讯就是不可靠的。。。。
都是新手,如有不妥之处还请包涵哦~~~
作者: 理论先行    时间: 2013-3-4 13:29
houhongyi 发表于 2013-1-21 01:46
你看看是不是因为波特率不匹配造成误码率太高。我也是弄了一下午,现在数据流稳定了。。。你用PLL变频到26M ...

总线32兆PLL变频到64兆,配多少的波特率为佳?
作者: 理论先行    时间: 2013-3-4 13:34
直接用XS128接蓝牙,蓝牙再接PC,这样是不是不行?当发送'1'时,无论用上位机或串口助手收回的数据都是一个很奇葩的字符,十六进制的80。
求各位指教!
作者: 丶_SHOPONG__    时间: 2013-5-2 21:47
qi亚 发表于 2013-1-3 18:55
把单片机的数据发送端TXD 连接到单片机的TXD ,这里仅仅用到单片机的硬件结构,然后连接PC机,用上位机接受 ...

请问那RXD端口也需要连接单片机什么端口么?上位机就简单的用51单片机的串口通讯软件就可以了是么?
作者: qi亚    时间: 2013-5-3 19:08
其实就是利用51开发板的串口通信硬件,TXD接TXD、RXD接RXD。如果手边有UART转TTL的串口模块也是可以的!

作者: 空有一人    时间: 2014-7-28 16:32
学习了
作者: Desert_eagle    时间: 2014-10-25 13:12
我也不会,同求




欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2