本帖最后由 samsunghellome 于 2013-10-9 18:56 编辑
自己做的红外模块,需要38k调制,本来想用单片机中断直接产生38k,结果38k要独占一格定时器才行,相应中断服务程序里就只能放一句话,i/o口反转,胆敢放些其他语句,用示波器测量出来的波形与38k相差甚远。求坐过红外这块的师傅们帮帮我吧,提供几个产生精准38k载波信号的方案,万分感激!以下是程序部分!一段时间低电平,一段时间38k信号,程序如下,附带我想要产生的波形!
#include <reg51.h>
bit t3;
bit t4;
static unsigned int value3;
static unsigned int value4; //Auxiliary register
sbit P32 = P3^2;
void time0init()
{
TMOD|= 0x02;
TH0 = 0xF3; //初始化计时值
TL0 = 0xF3;
TR0 = 1; //定时器0开始计时
ET0 = 1; //使能定时器0中断
EA = 1;
}
void time0() interrupt 1
{
/*if(t3==1)
{value3--;
if(value3==0)
{t3=0;
t4=1;
value4=50;
}
P32=0;
}
if(t4==1)
{value4--;
if(value4==0)
{t4=0;
t3=1;
value3=50;
}*/
P32=!P32;
} //将测试口取反
//}
//-----------------------------------------------
void main()
{
t3=1;
t4=0;
P32=0;
value3=50;
time0init();
while(1);
}
我想产生的波形
|