标题: 点亮一个LED后在这LED灯有频闪,10微秒闪一下是怎样加入程序中求大神指指点点 [打印本页]

作者: lan2821139    时间: 2016-10-18 01:13
标题: 点亮一个LED后在这LED灯有频闪,10微秒闪一下是怎样加入程序中求大神指指点点
在以事下的程序中,我想做一个工程文件,点亮一个LED后在这LED灯有频闪,10微秒闪一下是怎样加入程序中????????????????

#include<reg51.h>   

sbit  LED0=P2^0;   

void  main()
{
//    P2=0x00;
  while(1);
  {
    P2=0xff;

//    LED0=0;
  }
}


作者: zl2168    时间: 2016-10-18 12:26
10微妙闪一下,什么意思?人眼对10微妙无感觉。
作者: yzwzfyz    时间: 2016-10-18 13:03
本帖最后由 yzwzfyz 于 2016-10-18 13:25 编辑

"10微秒闪一下"
时间太短,不宜用C写程序实现。
作者: yzwzfyz    时间: 2016-10-18 13:13
本帖最后由 yzwzfyz 于 2016-10-18 13:14 编辑

设晶振是12MHz,则一个机器周期是1us, 10个机器周期就是10us.

LOOP:      CPL  P1.1        ;2个机器周期,LED闪动切换
               NOP               ;1个机器周期
               JMP LOOP       ;2个机器周期


作者: yzwzfyz    时间: 2016-10-18 13:18
为了能退出以上的死循环,可以改为:

LOOP:      CPL  P1.1                      ;2个机器周期,LED闪动切换
               NOP                             ;1个机器周期
               JNB  B_STOP, LOOP       ;2个机器周期

B_STOP:是个标记位(位标记),可以在中断程序中,设置为1,以使程序退出LOOP循环。
作者: yzwzfyz    时间: 2016-10-18 13:20
P1.1接LED灯,一亮一暗各占5个机器周期。
如果一亮一暗各10us,可以再增加5个NOP。
作者: yzwzfyz    时间: 2016-10-18 13:24
如果用C语言写,由于你无法预料,C是如何编译你的程序的,所以不太好控制准时间。
当然你可以在C编译后,检查其编译的结果,再作修改。

作者: yzwzfyz    时间: 2016-10-18 13:40
提示一下:
如果是改进型的51单片机,则其执行指令的时间,不一定需要12个振荡周期(流水取指架构,有预取指功能),则需要另作处理,稍复杂一点,不在此详述了。如STC的51芯片。
作者: ahshmj    时间: 2016-10-18 15:10
10微秒能看得出来?老式的日光灯(带电感镇流器的)也是闪烁的,周期是20000微秒,也就是20毫秒。
作者: yzwzfyz    时间: 2016-10-18 15:13
人看不出来,如果用仪器呢?用LED灯来传信息,是有这样的做法的。
作者: yzwzfyz    时间: 2016-10-18 15:13
不过不是10微秒!
作者: 注册专用账号    时间: 2016-10-18 16:04
10us你都能分辨出来??你程序每次执行循环都会亮一次灭一次,肉眼几乎无法识别
作者: lan2821139    时间: 2016-10-18 22:56
回各位,
我的主程序是以5只红外LED取代,以流水灯方式点动周期性(C程)。从中加入在点亮LED红外上以10us--100us间隔频闪次数加载接收上。
作者: Davinc    时间: 2016-10-19 00:53
加入一个延时函数delay
作者: lan2821139    时间: 2016-10-20 00:02
Davinc 发表于 2016-10-19 00:53
加入一个延时函数delay

例举一下,怎样加入延时函数delay在C程中运行?
作者: wuxingling    时间: 2016-10-20 10:04
10微妙人眼看不出来的
作者: xixi123    时间: 2016-10-20 13:32
根据晶振,算周期




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1