智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2388|回复: 2
打印 上一主题 下一主题

[编程类] 在线仿真正常,重启后定时就延长了

[复制链接]

1

主题

34

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
302
威望
223
贡献
31
兑换币
10
注册时间
2009-2-13
在线时间
24 小时
跳转到指定楼层
1#
发表于 2009-4-3 19:25:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1贡献
本帖最后由 hellozj 于 2009-4-3 19:27 编辑
  1. ///////////////////////////////////////////////////////////////////
  2. //TCNT标准计时器 周期1s
  3. //2009-4-02 chowjun
  4. ///////////////////////////////////////////////////////////////////
  5. #include <hidef.h>      /* common defines and macros */
  6. #include <mc9s12dg128.h>     /* derivative information */
  7. #pragma LINK_INFO DERIVATIVE "mc9s12dg128b"
  8. int count=0;
  9. void Start_PLL(void)   //busCLK=16M
  10. {
  11.   REFDV=0x01;          // PLLCLK =2*OSCCLK*(SYNR + 1)/(REFDV + 1)
  12.   SYNR=0x01;          //        =2*16M*2/2=32M
  13.   asm{
  14.     BRCLR CRGFLG,#$08,*
  15.     BSET CLKSEL,#$80
  16.     }               
  17. }
  18. /*************************************************
  19. 定时器初始化程序
  20. *************************************************/
  21. void Timer_init(void)
  22. {
  23.   TSCR2_PR=0x04;      // 预分频系数为4  16M/16 = 1M
  24.   //TSCR1_TFFCA=1;      // 快速清除标志位
  25.   TSCR2_TOI=1;        // TOF置1时申请硬件中断
  26.                       //(1/1M)=1um 机器周期
  27.   TCNT=0xffff-0x2710; // 设置定时计数器初值 2710H = 10000
  28.   TSCR1_TEN=1;        // 禁止定时器
  29.   //0.01s
  30. }
  31. /************************************************
  32. 主程序main
  33. ************************************************/
  34. void main(void)
  35. {
  36.   DisableInterrupts;
  37.   Start_PLL();
  38.   Timer_init();
  39.   DDRB=0xff;   //OUT
  40.   PORTB=0xaa;
  41.   for(;;)
  42.       {
  43.         EnableInterrupts;
  44.       }
  45. }
  46. /*************************************************
  47. 定时器溢出中断程序
  48. *************************************************/
  49. #pragma CODE_SEG __NEAR_SEG NON_BANKED
  50. interrupt 16 void TimerOverflow_ISR(void)
  51. {
  52.   DisableInterrupts;
  53.   TCNT=0xffff-0x2710; // 重新载入定时计数器初值
  54.   count++;
  55.   if(count == 50) {
  56.     PORTB = ~PORTB;
  57.     count=0;
  58.   }
  59.   TFLG2_TOF=1; // 写1清标志位
  60. }
  61. #pragma CODE_SEG DEFAULT
复制代码
这个程序bdm烧录后运行正常,但是我重启一次定时就明显延长了,用TBDML软件复位再运行又恢复正常,非常奇怪?希望有人解答下

1

主题

34

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
302
威望
223
贡献
31
兑换币
10
注册时间
2009-2-13
在线时间
24 小时
2#
 楼主| 发表于 2009-4-3 21:21:43 | 只看该作者
我把TCNT的值给0xffff-0xe710 重启会正常 , 好像跟这个值有关系  ,不知道有没有人能解答下
回复

使用道具 举报

1

主题

34

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
302
威望
223
贡献
31
兑换币
10
注册时间
2009-2-13
在线时间
24 小时
3#
 楼主| 发表于 2009-4-3 21:21:50 | 只看该作者
我把TCNT的值给0xffff-0xe710 重启会正常 , 好像跟这个值有关系  ,不知道有没有人能解答下
回复

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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