第一次调程序,一个很简单的程序调试了好久还是有问题,麻烦高手帮帮忙,看下是哪里的问题,谢啦!
ADS1.2 ,AXD仿真 用定时器采集500Khz的脉冲信号,但是断点执行的时候,每次定时器时间到的时候,读取的counter值都不对。。。
程序如下:
#include "config.h"
#include "math.h"
#include "ISR.H"
#define F_IO (1<<9) //P0.9控制F_IO
uint32 counter=0; //20ms采集到的脉冲个数
uint32 max;
int main (void)
{
uint32 f=0,v=0; //f为采集的脉冲宽度,v为实际电压值
uint32 i=0;
max=0;
PINSEL0 = 0x00000000; // 设置管脚连接GPIO
IO0DIR=(~F_IO); // 设置F_IO控制口输入
/* 定时器0初始化 */
//Fpclk=12Mhz
T0TC = 0; // 定时器设置为0
T0PR = 0; // 时钟不分频
T0MCR = 0x03; // 设置T0MR0匹配后复位T0TC,并产生
//中断标志
T0MR0 = Fpclk / 50; // 20ms定时
T0TCR = 0x03; //启动并复位定时器
T0TCR = 0x01; // 启动定时器
while (1)
{
if((IO0PIN)&F_IO)
{
counter++; //低电平时加1
while((IO0PIN)&F_IO); //p0.0为高电平一直等待
if((T0IR&(1<<0))==1) //查询方式检测定时器时间到
{
f=(1000*counter)/20; //计算采集到的脉冲频率
v=(10*f)/2000000; //计算实际电压值,0~2M对应0~10V,线性关系
if(counter>max)max=counter;
counter=0;
T0IR = 0x01; // 清除中断标志
}
}
}
}
|