3、 厂里有一款遥控的振荡电阻是4.7M欧。
用公式
振荡频率f=2*1000*16/Rosc(单位k欧) kHz 其中Rosc为振荡电阻
求得:f=6.8085kHz 约等于 6.8kHZ。
周期为:1.468752294e-4 s 0.000146875s 即a=147us
现在就搞不明白了,:
看了别人的程序是这样的
郁闷中,这里为什么是3471,和3983
if( ( 0x0D8F /*3471*/ < temp ) && ( temp < 0x0F8F /*3983*/) ) //检测到同步头
这是怎么来的?
具体是怎么算出来的
还有
TL0 = 0 ; //11.0592 最大值 71111us
最大值 71111us
是怎么算出来的
如果是STC12系列的单片机,这又如何算呢?
void INT0_ISR(void) interrupt 0 using 1
{
unsigned char i = 0 ;
unsigned char j = 0 ;
unsigned int temp = 0x0000;
EA = 0 ;
TH0 = 0 ;
TL0 = 0 ; //11.0592 最大值 71111us
while( !RemPin) ; //等待高电平的到来,检测同步头
TR0 = 1 ; //启动定时器0,开始测量高电平的宽度
while( RemPin)
{
if( TF0 == 1 )
{
goto RemExit; //定时器超时溢出则退出
}
}
TR0 = 0 ;
temp = TH0 ;
temp = temp << 8 ;
temp = temp + TL0 ; //取得高电平的宽度
///////////////////////////////////////////////////////////////////////////////
郁闷中,这里为什么是3471,和3983
if( ( 0x0D8F /*3471*/ < temp ) && ( temp < 0x0F8F /*3983*/) ) //检测到同步头
{
for( j = 0 ; j < 3 ; j ++) //循环3次
{
for( i = 0 ; i < 8; i ++ )
{
TH0 = 0 ;
TL0 = 0 ;
while( !RemPin); //等待高电平到来
TR0 = 1 ; //开启定时器0 ,测量高电平的宽度
while( RemPin)
{
if( TF0 == 1 )
{
goto RemExit; //定时溢出则退出
}
}
TR0 = 0 ;
temp = TH0 ;
temp = temp << 8 ;
temp = temp + TL0 ; //取得高电平的宽度
if( ( 0x60 /*96*/ < temp ) && (temp< 0x90 /*144*/ ) ) //判断得窄脉冲:1表示
{
Receive[j] = Receive[j] << 1 ;
Receive[j] = Receive[j] + 0x01 ;
}
else if( ( 0x0100 /*256*/ <temp) && (temp< 0x0200 /*512*/) ) //判断得宽脉冲:0表示
{
Receive[j] = Receive[j] << 1 ;
}
else return;
}
}
flag = 1 ; //表示已解码完毕
return;
}
else
{
goto RemExit;
}
RemExit:
{
TR0 = 0 ;
EA = 1 ;
TF0 = 0 ;
RemPin = 1 ;
return;
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>