标题:
给大家提供一个产生38k信号的程序,问一下其中的原理
[打印本页]
作者:
hackerbc
时间:
2020-4-16 19:11
标题:
给大家提供一个产生38k信号的程序,问一下其中的原理
while(1) //38KHz脉冲,占空比5:26
{
IR = 0;
if(TF0)break;
if(TF0)break;
IR = 1;
if(TF0)break;
if(TF0)break;
if(TF0)break;
if(TF0)break;
if(TF0)break;
if(TF0)break;
if(TF0)break;
if(TF0)break;
if(TF0)break;
if(TF0)break;
}
程序环境是stc89c51单片机,频率12M,对于这个程序我的推测是,IR=0这样的赋值语句用时1us,
if(TF0)break这样的语句用时2us,然后while语句跳转到开头用时2us,有没有懂软件延时的大佬看一下我说的对不对?
作者:
csmyldl
时间:
2020-4-16 21:13
不一定是这样,C语言通过编译转换成汇编语言的语句不是固定的
作者:
权威人物
时间:
2020-4-17 09:28
38KHz为1/38K约26us一个周期,占空比5:26则 5/(26+5)*26约为4us,根据你的程序大概就是IR=0的时间为4us,IR=1的时间为22us,这个程序没啥实际应用价值,一般用定时器做,不过对于stc89c51单片机要使用定时器估计速度跟不上。
作者:
wulin
时间:
2020-4-17 09:54
与这样写等效
while(1)
{
IR = 0;
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
IR = 1;
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
}
作者:
红尘有你
时间:
2020-4-17 10:51
while(1) //38KHz脉冲,占空比5:26
{
IR = 0;
if(TF0)break;
if(TF0)break;
IR = 1;
if(TF0)break;
if(TF0)break;
if(TF0)break;
if(TF0)break;
if(TF0)break;
if(TF0)break;
if(TF0)break;
if(TF0)break;
if(TF0)break;
if(TF0)break;
}
这个程序 if(TF0)break;重复毫无意义。TF0是定时器0的标志位,当产生溢出时,硬件自动置1,要软件清零的。深度怀疑这个可以产生38KHZ
作者:
红尘有你
时间:
2020-4-17 10:55
while(1) //38KHz脉冲,占空比5:26
{
if(TF0)break; //定时器0 5
IR = 0;
if(TF1)break; //定时器1 26
IR = 1
}//中断程序里TF0,tf1清零
这样才行吧!兄弟
作者:
kzzk
时间:
2025-4-20 19:03
程序放到stc单片上逻辑仪显示是20k
作者:
a399288395
时间:
2025-4-20 21:02
想用软件模拟产生38KHZ 发射红外信号对吧, 可以去B站 搜一下金善愚老师的视频; 红外遥控那一篇 值得学习。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1