智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1545|回复: 7
打印 上一主题 下一主题

求指教!

[复制链接]

3

主题

20

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
285
QQ
威望
216
贡献
59
兑换币
24
注册时间
2011-5-22
在线时间
5 小时
跳转到指定楼层
1#
发表于 2013-3-20 16:37:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人在调一块开发板,遇到一个很奇怪的问题,程序编写定时器1S灯闪烁1次,点仿真器上的运行、复位完全正确运行,可是同样的程序按板子上的复位键,定时不准,大概到了2S,再按软件上的复位、运行又对,为什么这样呢?

1

主题

86

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
QQ
威望
241
贡献
123
兑换币
97
注册时间
2012-8-10
在线时间
38 小时
2#
发表于 2013-3-20 18:34:01 | 只看该作者
板子是你自己焊接的吗?
回复 支持 反对

使用道具 举报

3

主题

20

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
285
QQ
威望
216
贡献
59
兑换币
24
注册时间
2011-5-22
在线时间
5 小时
3#
 楼主| 发表于 2013-3-20 20:10:09 | 只看该作者
一棵小草 发表于 2013-3-20 18:34
板子是你自己焊接的吗?

不是!
回复 支持 反对

使用道具 举报

3

主题

20

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
285
QQ
威望
216
贡献
59
兑换币
24
注册时间
2011-5-22
在线时间
5 小时
4#
 楼主| 发表于 2013-3-20 20:12:41 | 只看该作者
而且是涉及到定时器的程序都这样,如果程序编的是1S,执行时就会变2S,反正就是会变慢!但是软件仿真时运行完全正确!
回复 支持 反对

使用道具 举报

3

主题

20

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
285
QQ
威望
216
贡献
59
兑换币
24
注册时间
2011-5-22
在线时间
5 小时
5#
 楼主| 发表于 2013-3-20 20:13:50 | 只看该作者
有程序,大家可以看看!

#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */
#include "cpu.h"


/**********************************************************************/

//实现1秒精确定时,4个LED灯1S亮。1S灭

/**********************************************************************/

void main(void) {
   

    CPMU_PEE_8MHz();                                        //设置fbus=4MHz
    TIM0_TSCR1_TEN=1;                                       //允许定时器正常工作
    TIM0_TSCR2_PR2=1;
    TIM0_TSCR2_PR1=1;
    TIM0_TSCR2_PR0=1;                                       //设置ftc=fbus/128=32us  
    TIM0_TSCR2_TOI=1;                                       //允许溢出
    TIM0_TCNTHi=0x85;
    TIM0_TCNTLo=0xED;
    DDRR = 0x0F;                                             /* PORTR 0~3 = output */
    PTR = 0x0F;                                              //刚开始的时候让灯灭         
                                                            //设置初值十进制为34285,增加一次32us   
                                                            /*故65535-34285=31250 31250X32=1000000us=1s */
EnableInterrupts;                                           //开总中断


  for(;;) {
                                                            //_FEED_COP(); /* feeds the dog */
  }                                                         /* loop forever */
                                                             /* please make sure that you never leave main */
}


#pragma CODE_SEG __NEAR_SEG NON_BANKED                      //定时器中断服务程序
interrupt VectorNumber_Vtim0ovf void timer0(void){


    TIM0_TCNTHi = 0x85;
    TIM0_TCNTLo = 0xED;   
    PTR = ~PTR ;
    TIM0_TFLG2_TOF = 1 ;                                       //清空标志
}
  
//#pragma CODE_SEG DEFAULT
回复 支持 反对

使用道具 举报

1

主题

86

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
QQ
威望
241
贡献
123
兑换币
97
注册时间
2012-8-10
在线时间
38 小时
6#
发表于 2013-3-20 21:01:49 | 只看该作者
定时中断里面写的程序有点复杂,超出了定时的时间
回复 支持 反对

使用道具 举报

3

主题

20

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
285
QQ
威望
216
贡献
59
兑换币
24
注册时间
2011-5-22
在线时间
5 小时
7#
 楼主| 发表于 2013-3-22 16:03:59 | 只看该作者
一棵小草 发表于 2013-3-20 21:01
定时中断里面写的程序有点复杂,超出了定时的时间

呵呵,问题已经找出,是那个定时器写初值的时候只能用于仿真,实际运行不支持初值的写入,不可对TCNT寄存器进行写操作!
谢谢您的热心帮助!希望您也能从中学到一些知识!
回复 支持 反对

使用道具 举报

1

主题

86

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
QQ
威望
241
贡献
123
兑换币
97
注册时间
2012-8-10
在线时间
38 小时
8#
发表于 2013-3-24 15:41:57 | 只看该作者
不客气,大家相互学习,共同进步
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-20 22:53 , Processed in 0.044665 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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