智能车制作
标题:
求指教!
[打印本页]
作者:
709632728
时间:
2013-3-20 16:37
标题:
求指教!
本人在调一块开发板,遇到一个很奇怪的问题,程序编写定时器1S灯闪烁1次,点仿真器上的运行、复位完全正确运行,可是同样的程序按板子上的复位键,定时不准,大概到了2S,再按软件上的复位、运行又对,为什么这样呢?
作者:
一棵小草
时间:
2013-3-20 18:34
板子是你自己焊接的吗?
作者:
709632728
时间:
2013-3-20 20:10
一棵小草 发表于 2013-3-20 18:34
板子是你自己焊接的吗?
不是!
作者:
709632728
时间:
2013-3-20 20:12
而且是涉及到定时器的程序都这样,如果程序编的是1S,执行时就会变2S,反正就是会变慢!但是软件仿真时运行完全正确!
作者:
709632728
时间:
2013-3-20 20:13
有程序,大家可以看看!
#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
作者:
一棵小草
时间:
2013-3-20 21:01
定时中断里面写的程序有点复杂,超出了定时的时间
作者:
709632728
时间:
2013-3-22 16:03
一棵小草 发表于 2013-3-20 21:01
定时中断里面写的程序有点复杂,超出了定时的时间
呵呵,问题已经找出,是那个定时器写初值的时候只能用于仿真,实际运行不支持初值的写入,不可对TCNT寄存器进行写操作!
谢谢您的热心帮助!希望您也能从中学到一些知识!
作者:
一棵小草
时间:
2013-3-24 15:41
不客气,大家相互学习,共同进步
欢迎光临 智能车制作 (http://111.231.132.190/)
Powered by Discuz! X3.2