在线时间0 小时
UID329789
注册时间2011-11-21
NXP金币0
该用户从未签到
新手上路

- 积分
- 13
- 最后登录
- 1970-1-1
|
想用一个double timer 进行计时,但是我把这句 ******** timer1= vTmpPIT2*0.65535+vTmpPIT*0.00001;********放进去编译是通过的,连接板子点击dubug按钮时候会提示link error,把上面这句注释掉运行是没有问题的.
怀疑是不是定义有问题,或者头文件里面还要包含什么文件?请大家指点
程序如下
#include
#include
#include /* common defines and macros */
#include /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12xs128"
#define PITTIME 60
unsigned int vTmpPIT=0,vTmpPIT2=0;
unsigned int flag=0;
double timer1=0;
void pllclk(void)//24MHz,外部时钟为 16MHz
{
CLKSEL=0X00;
PLLCTL=0xe1;
SYNR=2;//PLLCLK=2*OSCCLK*(SYNR +1)/(REFDV +1)
REFDV=1;
PLLCTL=0X60;
asm NOP;
asm NOP;
asm NOP;
while((CRGFLG&0X08)==0);//时钟校正同步
CLKSEL=0X80;
}
//输入捕捉通道ECT0初始化
void ECT0_INIT()
{
TSCR1=0X80; //开启总定时器中断
TSCR2=0X00; //关闭溢出中断且64分频
TIOS_IOS0=0; //定通道0为输入捕捉,1为输出比较IOC0
TCTL4=0X01; //上升沿捕捉 0x02为下降沿捕捉
TIE_C0I=1; //通道0中断使能
TFLG1_C0F=1; //标志位清零
}
//ECT0中断程序
#pragma CODE_SEG __NEAR_SEG NON_BANKED //分配内存空间
void interrupt 8 timer_onput() //输入捕捉通道0的中断向量为8
{
flag++; //中断次数标志位
if(flag == 1)
{
TFLG1_C0F=1; //标志位清零
//TIE_C0I=0; // 禁止通道0中断使能,使中断只响应一次
asm sei; //关总中断
PTM_PTM0=~PTM_PTM0;
PITCFLMT_PITE=1; //开启PIT模块
PITINTE_PINTE0=1;
asm cli; //开总中断
} else
{
******** timer1= vTmpPIT2*0.65535+vTmpPIT*0.00001;********
TFLG1_C0F=1; //标志位清零
//TIE_C0I=0; // 禁止通道0中断使能,使中断只响应一次
asm sei; //关总中断
PTM_PTM0=~PTM_PTM0;
PITCFLMT_PITE=0; //关闭PIT模块
PITINTE_PINTE0=1;
asm cli; //开总中断
}
}
//IO口初始化,B口为输出
void initIOBoutput(void)
{
DDRM=0XFF;
PTM=0XFF;
}
void initPIT(void)//定时中断初始化函数 50MS定时中断设置
{
PITCFLMT_PITE=0;//定时中断通道0关
PITCE_PCE0=1;//定时器通道 0使能
//PITMTLD0=40-1;//8位定时器初值设定。40*60=2400分频,在 24MHzBusClock下,为 0.01MHz。定时长度即 100us=0.1ms
PITMTLD0=4-1;//8位定时器初值设定。4*60=240分频,在 24MHzBusClock下,为 0.1MHz。定时长度即 10us=0.01ms
PITLD0=PITTIME-1;//16位定时器初值设定。PITTIME*0.01MS
PITINTE_PINTE0=1;//定时器中断通道 0中断使能
//PITCFLMT_PITE=1;//定时器通道0使能
}
void main(void)
{
ECT0_INIT();
pllclk();
initIOBoutput();
initPIT();
PTM=0B11111110;
EnableInterrupts;
for(;;){}/*wait forever*/
/*please make sure thatyou neverleave this function */
}
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 66 PIT0(void)
{
vTmpPIT++;
if(vTmpPIT==65535)
{
vTmpPIT2++;
}
PITTF_PTF0=1;//清中断标志位
}
|
|