|
虽然软件设了开漏,但上电瞬间还是会上拉5V的,实在不放心可以再加个齐纳管钳位。
分享个定时器+外部中断捕获PWM的代码。(104E硬件有BUG为什么还是有人用?货存太多都是被坑的吗。。)
void TimerInit(void) {
TMOD=0x08; //设定定时器0为16位Gate控制模式,脉宽捕获用。
TL0=TH0=0;
// ET0=1; //打开定时器0中断
TR0=1; //定时器0开始计时
IT0=1; //下降沿中断
EX0=1; //允许中断
// PX0=1; //中断优先级
}
void Int0(void) interrupt 0 { //接收机脉宽捕获完成
union {
BYTE b[2];
uint16 ui;
int16 i;
} RecPW;
TR0=0;
RecPW.b[0]=TH0;
RecPW.b[1]=TL0;
TH0=TL0=0;
TR0=1;
if(RecPW.ui>500) { //防脉冲干扰,小于500ns则丢弃
//这里处理接收机PWM信号:RecPW.ui的值为1500=中点,1100最低点,1900最高点
}
}
|
|