智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2898|回复: 9
打印 上一主题 下一主题

[编程类] 定时测速程序,始终找不到原因

[复制链接]

0

主题

15

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
221
QQ
威望
189
贡献
22
兑换币
0
注册时间
2008-12-17
在线时间
5 小时
跳转到指定楼层
1#
发表于 2009-5-2 22:34:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1贡献
谁能帮我看看我下面这个程序错在哪里?一直找不到原因,加了中断后用BDM观察发现进不到PWMout子程序里,所以电机始终不转。愁啊,望高手指点,谢谢!
#include <hidef.h>      /* common defines and macros */
#include <MC9S12XS128.h>     /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12xs128"

unsigned char PulseCnt;
static int sudu;

void SetBusblock()
{
REFDV=0x01;                  //initiate PLL clock  
SYNR =0x02;                  // system clock 24M
while (!(CRGFLG & 0x08)){}   // 稳定到24MHz
CLKSEL=0x80;                  // 选定所相环时钟  
}

/*******************************************************
                   ECT输入捕捉初始化
*******************************************************/
void ECT_init(void)            //中断初始化
{
  
  TIOS=0x08;                    //通道2输入捕捉,通道3定时
  TSCR1=0x80;                   //定时器使能
  TSCR2=0x07;                   //禁止定时器溢出中断,预分频系数为128
  TCTL4=0x30;                   //捕捉上下沿
  TIE=0x0c;                     //允许ECT通道2,3中断
  TFLG1=0x0c;                  
  PulseCnt=0x00;                //计数初始化
}   

void pwm_init()                 //pwm初始化函数
{  
  PWME=0xA8;                    //通道23,45,67使能  
  PWMPOL=0xA8;                  //通道23,45,67输出波形开始极性为1
  PWMCTL=0xE0;                  //通道23,45,67级联
  PWMCLK=0x08;
  PWMSCLB=12;
  PWMPER23=20;                 
  PWMPER45=12000;               //设定通道45频率为2KHz
  PWMPER67=12000;               //设定通道67频率为2KHz                                       
}

void Speedout()
{
PWMDTY23=sudu;
PWMDTY45=4000;
PWMDTY67=0;
}


void main(void)
{
  SetBusblock();
  pwm_init();
  ECT_init();   
  EnableInterrupts;
  for(;;)
  {
   Speedout();
  }
}

/*******************************************************
                  中断服务函数
                  返回sudu
*******************************************************/
#pragma CODE_SEG NON_BANKED
void interrupt 10 IC2_ISR(void)
{
PulseCnt++;                      //采集脉冲
TFLG1=0x04;
}
#pragma CODE_SEG NON_BANKED
void interrupt 11 IC3_ISR(void)
{
TC3=TCNT+1875;                        //10ms
TFLG1=0x08;
sudu=PulseCnt;                        // 采集速度
PulseCnt=0x00;
}
#pragma CODE_SEG DEFAULT

0

主题

29

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
426
威望
288
贡献
80
兑换币
58
注册时间
2009-1-12
在线时间
29 小时
2#
发表于 2009-5-3 11:17:21 | 只看该作者
程序进不了
中断程序
回复

使用道具 举报

0

主题

9

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
352
威望
246
贡献
68
兑换币
44
注册时间
2009-2-19
在线时间
19 小时
3#
发表于 2009-5-3 18:06:49 | 只看该作者
给TC3一定初值试试,当TCNT=TC3时,才会进入中断
回复

使用道具 举报

0

主题

15

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
221
QQ
威望
189
贡献
22
兑换币
0
注册时间
2008-12-17
在线时间
5 小时
4#
 楼主| 发表于 2009-5-3 18:40:25 | 只看该作者
刚才试了你说的方法,但还是不行,不过谢谢你的帮忙! 3# 空间荒人
回复

使用道具 举报

0

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
389
威望
276
贡献
71
兑换币
34
注册时间
2009-2-11
在线时间
21 小时
5#
发表于 2009-5-17 21:30:58 | 只看该作者
用BDM调试用程序单步执行,看问题出在哪!!!
回复

使用道具 举报

4

主题

241

帖子

0

精华

高级会员

Rank: 4

积分
602
QQ
威望
478
贡献
66
兑换币
2
注册时间
2010-1-18
在线时间
29 小时
6#
发表于 2010-4-11 21:08:12 | 只看该作者
是的  你先检查硬件  没有问题的话单步运行
回复

使用道具 举报

1

主题

132

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
438
威望
358
贡献
42
兑换币
0
注册时间
2010-3-26
在线时间
19 小时
7#
发表于 2010-6-12 20:53:42 | 只看该作者
你先检查硬件  没有问题的话单步运行
回复

使用道具 举报

1

主题

132

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
438
威望
358
贡献
42
兑换币
0
注册时间
2010-3-26
在线时间
19 小时
8#
发表于 2010-6-12 20:53:49 | 只看该作者
你先检查硬件  没有问题的话单步运行
回复

使用道具 举报

1

主题

132

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
438
威望
358
贡献
42
兑换币
0
注册时间
2010-3-26
在线时间
19 小时
9#
发表于 2010-6-12 20:53:54 | 只看该作者
你先检查硬件  没有问题的话单步运行
回复

使用道具 举报

1

主题

132

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
438
威望
358
贡献
42
兑换币
0
注册时间
2010-3-26
在线时间
19 小时
10#
发表于 2010-6-12 20:53:59 | 只看该作者
你先检查硬件  没有问题的话单步运行
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-21 12:45 , Processed in 0.046477 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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