智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2908|回复: 4
打印 上一主题 下一主题

[编程类] 脉冲输入捕捉

[复制链接]

1

主题

2

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
304
威望
217
贡献
71
兑换币
28
注册时间
2009-11-12
在线时间
8 小时
跳转到指定楼层
1#
发表于 2009-11-24 15:02:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1贡献
下面的程序是用來捕捉脉冲输入, 但是输出到電腦的數據不是一個恆定的溢出的數, 是什麼地方出了問題呢?
  1. #include <hidef.h>      /* common defines and macros */
  2. #include <mc9s12xdp512.h>     /* derivative information */
  3. #pragma LINK_INFO DERIVATIVE "mc9s12xdp512"

  4. #include "Includes.h"    //×ÜÍ·Îļþ


  5. /*//-----------------------------------------------------
  6. void setbusclock(void)
  7. {   
  8.     CLKSEL=0X00;                                //disengage PLL to system
  9.     PLLCTL_PLLON=1;                        //turn on PLL
  10.     SYNR=1;                                                                               
  11.     REFDV=1;                        //pllclock=2*osc*(1+SYNR)/(1+REFDV)=32MHz;
  12.     _asm(nop);          //BUS CLOCK=16M
  13.     _asm(nop);
  14.     while(!(CRGFLG_LOCK==1));          //when pll is steady ,then use it;
  15.     CLKSEL_PLLSEL =1;                        //engage PLL to system;
  16. }

  17. //-----------------------------------------------------
  18.   */
  19. ////////////////////////////////////////////
  20. //PLL  :×ÜÏßʱÖÓ±¶Æµ
  21. void SetPll() //ͨ¹ýÉèÖÃÎå¸ö¼Ä´æÆ÷
  22. {
  23.   CLKSEL &= 0x7f;
  24. //  CLKSEL=0x00;
  25.   PLLCTL &= 0xbf;
  26.   SYNR=2;     //ʱÖӺϳɼĴæÆ÷ 00-63
  27.   REFDV=1;    //ʱÖÓ·ÖƵ¼Ä´æÆ÷ 00-15     PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1)
  28.               //=48MHZ     BUS CLOCK=0.5*CORE CLOCK=24MHZ
  29.   PLLCTL |= (1<<6);
  30.   asm NOP;
  31.   asm NOP;
  32.   asm NOP;
  33.   while(0==(CRGFLG&0x08)); //JUDGE THE LOCK BIT, =1 CLOCK STABLE
  34.   CLKSEL=0x80; //SELECT PLL clock

  35. }



  36. #define BAUD_9600    0x009c
  37. #define BAUD_19200   0x004e
  38. #define BAUD_38400   0x0027
  39. #define BAUD_43000   0x0023
  40. #define BAUD_56000   0x001b
  41. #define BAUD_57600   0x009c
  42. #define BAUD_115200  0x000D

  43. void Sci0Ini(unsigned int baudrate)
  44. {
  45.   SCI0BDH=baudrate>>8; //SCIÄ£¿éʱÖÓ=24M
  46.   SCI0BDL=baudrate;//SCI²¨ÌØÂÊ=SCIÄ£¿éʱÖÓ/16/BR
  47.   SCI0CR2=0x2c; //#ifdef SCI_REC_INT  
  48. }
  49.    
  50. void PutChar0(unsigned char c)   // SENDING FUNCTION   pass
  51. {
  52.      while((SCI0SR1&0x80) == 0){}
  53.      SCI0DRL = c;
  54. }

  55. void Delay_1ms(unsigned int n_ms)
  56. {
  57.   unsigned int dd; //scope proof right :1.0025ms
  58.   while(n_ms--)
  59.    {
  60.       dd=3000;
  61.       while(dd--) ;
  62.    }   
  63. }




  64. void TimerInit(void)
  65. {
  66.     //½ûÖ¹¶¨Ê±Æ÷Òç³öÖжÏ,·ÖƵÒò×Óp=8
  67.     //ÖжÏÒ»´Îʱ¼ä¼ÆË㣺t=n/(fbus/p)=1/38Ãë,ÆäÖÐn=65535,fbus=19.6608MHZ
  68.    
  69.     TIOS = ~(1<<0);      //ÉèÖÃͨµÀ0ΪÊäÈ벶׽¹¦ÄÜ
  70.           TCTL4 = 0x02;        //ÉèÖÃÉÏÉýÑغÍϽµÑØÊäÈ벶׽
  71.           TIE = 0x01;
  72.                     //ÔÊÐíͨµÀ0ÖжÏ
  73. //    TSCR2 = 0x80;   
  74. //    TSCR1 = 0x80;    //ÔÊÐíÖ÷¶¨Ê±Æ÷¿ªÊ¼¼ÆÊý
  75. }


  76. int TimeInterCount;
  77. Bool isBeginTimer;

  78. void main(void) {
  79.   /* put your own code here */
  80.   DisableInterrupts;
  81.   //MCUInit();
  82.   
  83.   Sci0Ini(BAUD_9600);  //´®¿Ú³õʼ»¯ 9600bps
  84.   PutChar0(0xfb);
  85.   
  86.   DDRB=0xFF;
  87.   DDRA=0xFF;
  88.   DDRD=0xFF;
  89.   PORTA=0xFF;
  90.   PORTD=0xFF;
  91.   
  92.   PORTB=0xFF;  //LED control
  93.   PUCR_PUPBE=1;  
  94.   
  95.   SetPll();
  96.   ICInit();
  97.   TimerInit();
  98.   TimeInterCount=0;
  99.   
  100.   isBeginTimer=0;
  101.   EnableInterrupts;
  102.   

  103.   
  104.   

  105.   for(;;) {Delay_1ms(1000);} /* wait forever */
  106.   /* please make sure that you never leave this function */
  107. }


  108. //isrTimOver:¶¨Ê±Æ÷Òç³öÖжϴ¦Àí³ÌÐò----------------------------------------*
  109. __interrupt 16 void isrTimOver(void)
  110. {
  111.   asm("sei");    //¹Ø×ÜÖжÏ
  112.   TimeInterCount++;
  113.   PORTD=~PORTD;  
  114.             
  115. //  PutChar0(TimeInterCount);
  116.   TFLG2 = 0x80;          //Çå³ý¶¨Ê±Æ÷Òç³ö±ê־λ
  117.   EnableInterrupts;     //¿ª×ÜÖжÏ
  118. }

  119. __interrupt 8 void ISR_TimerChan0(void)
  120. {
  121.    unsigned char ByteH,ByteL,value;
  122.   // unsigned int value;
  123.    //unsigned float value1
  124.    DISABLE_INTERRUPTS;   //‰ÛÜš¸œ½Ë
  125.    //LEDDrive();
  126.    PORTB=~PORTB;
  127.    TSCR2 = 0x00;
  128.    TSCR1 = 0x00;
  129.    
  130.   // ByteH=(TimeInterCount&0xff00)>>8;
  131.   // ByteL=TimeInterCount&0x00ff;
  132.    
  133.     PutChar0(TimeInterCount);
  134.     //PutChar0(ByteH);
  135.      //PutChar0(ByteL);
  136.               
  137.      TimeInterCount=0;
  138.       
  139.    TSCR2 = 0x80;
  140.    TSCR1 = 0x80;
  141.     TFLG1 |= (1<<C0F); //Çå³ýÊäÈ벶׽±ê־λ
  142.     ENABLE_INTERRUPTS;    //¿ª×ÜÖжÏ
  143. }

  144. void ICInit(void)
  145. {
  146.         TSCR1 = 0;           //½ûֹʱÖÓ
  147.         TIOS = ~(1<<0);      //ÉèÖÃͨµÀ0ΪÊäÈ벶׽¹¦ÄÜ
  148.         TCTL4 = 0x03;        //ÉèÖÃÉÏÉýÑغÍϽµÑØÊäÈ벶׽
  149.         TIE = 0x01;          //ÔÊÐíͨµÀ0ÖжÏ
  150.         TSCR2 = 0x06;        //²»ÔÊÐíÒç³öÖжϣ¬·ÖƵÒò×ÓΪ64
  151.         TSCR1 |=(1<<TEN);    //ʱÖÓ¼ÆÊý
  152. }
复制代码

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

22

主题

518

帖子

0

精华

版主

Rank: 9Rank: 9Rank: 9

积分
6442
QQ
威望
943
贡献
5041
兑换币
99
注册时间
2008-2-26
在线时间
229 小时
2#
发表于 2009-11-24 17:48:36 | 只看该作者
你先测试下各个中断进去了没
回复

使用道具 举报

40

主题

79

帖子

0

精华

高级会员

Rank: 4

积分
584
威望
393
贡献
123
兑换币
0
注册时间
2009-11-24
在线时间
34 小时
3#
发表于 2009-11-24 22:02:33 | 只看该作者
这个太麻烦了,用PE来做,串口只要写波特率,脉冲只要写下降沿上升沿中断就可以
回复

使用道具 举报

1

主题

2

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
304
威望
217
贡献
71
兑换币
28
注册时间
2009-11-12
在线时间
8 小时
4#
 楼主| 发表于 2009-11-25 11:48:46 | 只看该作者
回复 3# jakerroo

能帮我改一改吗? 十分赶急, 谢谢你
回复

使用道具 举报

40

主题

79

帖子

0

精华

高级会员

Rank: 4

积分
584
威望
393
贡献
123
兑换币
0
注册时间
2009-11-24
在线时间
34 小时
5#
发表于 2009-11-26 12:07:44 | 只看该作者
用PE工作方式配置脉冲捕捉的bean已经发给你了,你配置一些bean,能用简单的为什么要去用寄存器,飞思卡尔很大的优势就是在PE上,做项目很快
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-29 02:05 , Processed in 0.538161 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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