智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2591|回复: 8
打印 上一主题 下一主题

[软件类] 小弟用串口时遇到一个问题,请各位指教~~

[复制链接]

9

主题

57

帖子

0

精华

高级会员

Rank: 4

积分
628
QQ
威望
372
贡献
132
兑换币
10
注册时间
2011-11-4
在线时间
62 小时
跳转到指定楼层
1#
发表于 2012-6-28 10:56:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
写XS128的程序时,用了一下串口,部分代码如下:
/*************  锁相环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 uart_putchar ( unsigned char c)
{
  
  while(!(SCI0SR1&0x80)) ;       //keep waiting when not empty  
  SCI0DRL=c;
}

void uart_putstr(char ch[])
{
  unsigned char ptr=0;
  while(ch[ptr]){
      uart_putchar((unsigned char)ch[ptr++]);
  }
}
unsigned char uart_getchar(void)
{
//printf("uart_getchar\n");

  byte res=0;
   while(!(SCI0SR1&0x80)) ;    //keep waiting when not empty  
   return (SCI0DRL);
}
unsigned short CRC_CHECK(unsigned char *Buf, unsigned char CRC_CNT)
{
    unsigned short CRC_Temp;
    unsigned char i,j;
    CRC_Temp = 0xffff;
    for (i=0;i<CRC_CNT; i++){      
        CRC_Temp ^= Buf;
       for (j=0;j<8;j++) {
            if (CRC_Temp & 0x01)
                CRC_Temp = (CRC_Temp >>1 ) ^ 0xa001;
            else
                CRC_Temp = CRC_Temp >> 1;
        }
    }
    return(CRC_Temp);
}
void OutPut_Data(void)
{
  int temp[4] = {0};
  unsigned int temp1[4] = {0};
  unsigned char databuf[10] = {0};
  unsigned char i;
  unsigned short CRC16 = 0;
  for(i=0;i<4;i++)
   {
   
    temp  = (int)OutData;
    temp1 = (unsigned int)temp;
   
   }
   
  for(i=0;i<4;i++)
  {
    databuf[i*2]   = (unsigned char)(temp1%256);
    databuf[i*2+1] = (unsigned char)(temp1/256);
  }
  
  CRC16 = CRC_CHECK(databuf,8);
  databuf[8] = CRC16%256;
  databuf[9] = CRC16/256;
  
  for(i=0;i<10;i++)
    uart_putchar(databuf);
}
void Sent_Data()
{
    OutData[0]=g_fGravityZAxis;
    OutData[1]=g_fAngle;
    OutData[2]=g_fAngularVelocity+100;   
    OutPut_Data();
}
用示波器观察此段程序执行时间为8.4ms,远超过1ms中断。我们加上这个函数所有控制的执行频率为88Hz,去掉这个中断,程序执行频率为200Hz,即5ms的循环控制执行。用的软件是:

请问各位用的都是这个软件吗?用的过程中出现过这个问题没啊???现在极度郁闷中。。。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

2

主题

30

帖子

0

精华

高级会员

Rank: 4

积分
833
威望
419
贡献
186
兑换币
8
注册时间
2012-3-13
在线时间
114 小时
2#
发表于 2012-7-2 14:40:04 | 只看该作者
咋知道的8.4ms
回复 支持 反对

使用道具 举报

2

主题

30

帖子

0

精华

高级会员

Rank: 4

积分
833
威望
419
贡献
186
兑换币
8
注册时间
2012-3-13
在线时间
114 小时
3#
发表于 2012-7-2 14:40:30 | 只看该作者

回复 支持 反对

使用道具 举报

9

主题

57

帖子

0

精华

高级会员

Rank: 4

积分
628
QQ
威望
372
贡献
132
兑换币
10
注册时间
2011-11-4
在线时间
62 小时
4#
 楼主| 发表于 2012-7-2 15:18:25 | 只看该作者
Alliswall 发表于 2012-7-2 14:40
咋知道的8.4ms

我在进入函数之前置高PB口,出函数时置低,然后用示波器看波形,看高电平的长度。加了串口后整个函数的执行周期就变了,我们现在都不敢用串口。搞的我们想观察一下运行过程中的动态参数都不行,这个怎么办啊??你们怎么弄得啊???
回复 支持 反对

使用道具 举报

17

主题

284

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1549

活跃会员奖章优秀会员奖章

威望
781
贡献
396
兑换币
89
注册时间
2012-5-26
在线时间
236 小时
5#
发表于 2012-7-2 20:30:50 | 只看该作者
你们把这个放中断里了?
回复 支持 反对

使用道具 举报

9

主题

57

帖子

0

精华

高级会员

Rank: 4

积分
628
QQ
威望
372
贡献
132
兑换币
10
注册时间
2011-11-4
在线时间
62 小时
6#
 楼主| 发表于 2012-7-2 20:34:22 | 只看该作者
在路上520 发表于 2012-7-2 20:30
你们把这个放中断里了?

难道不用放中断里面吗??不放中断里,时间也是很长的啊
回复 支持 反对

使用道具 举报

17

主题

284

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1549

活跃会员奖章优秀会员奖章

威望
781
贡献
396
兑换币
89
注册时间
2012-5-26
在线时间
236 小时
7#
发表于 2012-7-2 20:36:25 | 只看该作者
夜尽天明211 发表于 2012-7-2 20:34
难道不用放中断里面吗??不放中断里,时间也是很长的啊

好像不能放中断里,它运行的时间太长了,会把中断搞乱的
回复 支持 反对

使用道具 举报

9

主题

57

帖子

0

精华

高级会员

Rank: 4

积分
628
QQ
威望
372
贡献
132
兑换币
10
注册时间
2011-11-4
在线时间
62 小时
8#
 楼主| 发表于 2012-7-2 20:40:50 | 只看该作者
在路上520 发表于 2012-7-2 20:36
好像不能放中断里,它运行的时间太长了,会把中断搞乱的

是啊,我也是这么觉得,那不放中断里,每次更新的数据不就不能及时发回来嘛!!你们是怎么做的啊??
回复 支持 反对

使用道具 举报

17

主题

284

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1549

活跃会员奖章优秀会员奖章

威望
781
贡献
396
兑换币
89
注册时间
2012-5-26
在线时间
236 小时
9#
发表于 2012-7-2 20:46:29 | 只看该作者
放在主程序for里就好了
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-27 19:36 , Processed in 0.048660 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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