:'( 最近做个小板子,用的LPC213X系列捕获功能,输入信号为标准PWM方波,周期20ms,占空比为10%-20%(高电平宽度为1ms-2ms),
板子的功能就是1ms时候LED1亮,2ms时候LED2亮(并且状态切换过程中LED变换平滑迅速,不出现LED1或2同时亮或者同时灭的情况。)。晶振为32768Hz。
一直工作不成功,因为是新手,在此向各位大神求解,感谢。
#include "config.h"
const uint32 LED1 = 0x01 << 8; // P0.8控制LED1
const uint32 LED2 = 0x01 << 9; // P0.9控制LED1
const uint32 CAP0 = 0x02 << 4; // P0.2做CAP0.0
const uint32 CAP1 = 0x03 << 10; // P0.21做CAP1.3
int main (void)
{
uint32 i;
uint32 u;
PINSEL0 =(PINSEL0 & (~CAP0)|CAP0)|(PINSEL0 & (~(0x00<< 16))|(0x00<< 16))|(PINSEL0 & (~(0x00<< 18))|(0x00<< 18)) ;// P0.2为CAP0.0以及P0.8为LED1
PINSEL1 =(PINSEL0 & (~CAP1)|CAP1);
IO0DIR = LED1+LED2; // 设置LED1控制口为输出
T0PR = 0;
T1PR = 0; // 设置时钟计数频率=Fpclk
T0CCR =(T0CCR & (~0x01)|0x01);
T1CCR =(T1CCR & (~0x400)|0x400); // 设置CAP0.0上升沿捕获,设置CAP1.3为下降沿捕获
T0TC = 0; // 设置定时计数器TC初始值
T1TC = 0;
delay(200); // 等待输入稳定
T0TCR = 0x01; // 启动定时器
T1TCR = 0x01;
while(1)
{
while (T0CR0<T1CR3) // 计数状态判断
{
T1TCR = 0x00;
T0TCR = 0x00; // 停止计数器
i=T1CR3-T0CR0; // 读计数器值
T0TCR = 0x02;
T1TCR = 0x02; // 计数器清零
if(i<=35)
u=1;
else u=2;
switch (u)
{
case 1:
IO0SET =LED1; // LED1点亮
T0TCR = 0x01; // 启动定时器
T1TCR = 0x01;
delay(1000);
IO0CLR =LED1; // LED1熄灭
break;
case 2:
IO0SET =LED2;
T0TCR = 0x01; // 启动定时器
T1TCR = 0x01; // LED1点亮
delay(1000);
IO0CLR =LED2; // LED1熄灭
break;
}
//T0TCR = 0x01; // 启动定时器
//T1TCR = 0x01;
}
}
return 0;
} |