||
//LPC2214。通过查询p0.2管脚电平测量PWM的正脉冲长,通过查询发送串口
#include "config.h"
uint32 DUTY;
//延时
void DelayNS(uint32 dly)
{ uint32 i;
for(; dly>0; dly--)
for(i=0; i<5000; i++);
}
//用查询的方式测量
void PWM_Measure(void)
{
T0TC = 0x00;
while((IO0PIN&0x00000004) == 0); //检测p0.2的电压信号
T0TCR = 0x01;
while((IO0PIN&0x00000004) != 0);
T0TCR = 0x00;
if(T0TC <30000)
DUTY = T0TC;
}
//串口初始化
# define U0_BR 115200
void UART0_Init()
{ uint16 Div;
U0LCR = 0x83;
Div = (Fpclk >> 4) / U0_BR;
U0DLL = Div & 0XFF;
U0DLM = Div >> 8;
U0LCR = 0x03;
}
//串口发送
void SendBuf(uint8 *pdata)
{ uint8 i;
for (i=0; i<4; i++)
{ U0THR = *(pdata++);
while((U0LSR & 0x20) == 0); //判断THRE位是否为1?
}
}
int main(void)
{ uint8 data[4];
PINSEL0 = 0X00000005; //设置i/o连接到UART0
IO0DIR = 0X00000000;
UART0_Init();
T0PR = 0;
while(1)
{
PWM_Measure();
data[0] = DUTY >> 24;
data[1] = DUTY >> 16;
data[2] = DUTY >> 8;
data[3] = DUTY;
SendBuf(data);
DelayNS(10);
}
return(0);
}