实例讲解,51单片机常用延时控制子程序
单片机中常用的延时控制方式有两种。一种是采用编程的方式达到延时的目的,另一种方法则是通过单片机中的两个定时器T0和T1进行计时达到延时的目的。
本例通过具体实例说明单片机的两种延时控制方式在实际中的应用。
采用编程方式延时控制
通过编程使单片机分别产生约10ms和约0.5s的延时。单片机的晶振频率为12MHz。因为单片机的晶振频率为12MHz,所以单片机1个机器周期的时间为1μs。
(1)10ms延时程序。
此程序的实际延时时间为:1+(1+2×250+2)×20=10.061ms
(2)0.5s延时程序。
此程序实际延时时间为:251×66×5×6+66×5×2+5×2+1×2+5×6+66×5×6=499662μs=0.49662s。
采用定时器延时控制
1.问题的提出
利用单片机定时器使之产生10h的延时控制。
2.控制程序
说明:程序中用“;程序开始******”符号表示程序开始,用“;程序结束******”符号表示程序结束,用“;-------------”表示将程序中各阶段程序分隔开,以便程序的条理性和直观性,这些符号均可以同时输入到Keil μVision3软件中进行编译。以下各例程序均同。
单片机小制作,智能触摸延时开关
功能设计
图1.1 电路原理图
本智能开关的电路如图1.1所示,设计了两种工作模式,分别为静态模式和工作模式。静态模式下,红、绿、黄LED指示灯亮,点阵屏和节能灯都是熄灭状态;工作模式下,相应的LED指示灯熄灭,点阵屏和节能灯开启。
为了使用方便,本智能开关设计了3个触摸按键(见图1.2)。
图1.2 实际效果图(LED下方为触摸式开关,节能灯以220U指示灯代替)
绿键:在静态模式(上电即进入静态模式)下,触摸此键即进入工作模式,绿色指示灯熄灭,节能灯和点阵屏开启,延时1min后转入静态模式。
黄键:在静态模式下,触摸此键则进入工作模式,黄色指示灯熄灭,节能灯和点阵屏开启,延时2min后转入静态模式。
红键:在静态模式下,触摸此键则进入工作模式,红色指示灯熄灭,节能灯和点阵屏开启,延时4min后转入静态模式。
材料准备
表1.1 元器件清单
制作过程
1.测试点阵的行列引脚。因为点阵引脚排列不规则,所以我们需要先测其引脚,然后记录在纸上。注意,每一排引脚有行也有列,一定要耐心测试。
2.将排孔、铜线、LED焊接在万用板上。固定好之后,将点阵屏插到排孔上。注意I/O接口线要平行排列,且上端要做成按钮式,既美观大方又容易触发。
3.将余下的电子元器件焊接在另外一块板上。注意,元器件布局要以连线不交插、美观大方作为两个基本点。还要注意,继电器要远离单片机,防止其干扰单片机电路。
4.按照电路图将元器件连接起来,这个工作很是烦琐,一定要有耐心。注意尽量不要使导线交叉,点阵连接最好用不同颜色的排线连接。
5.用铜柱将两块板子固定在一起。至此,开关的硬件已完工。
软件设计
程序包括主程序、初始化程序、触摸键检测子程序、提醒显示子程序、定时器0溢出中断子程序。
初始化程序除了对继电器、3个LED指示灯、点阵屏进行设置外,还必须将P0置1设为高阻输入状态,这是实现触摸功能的前提。
触摸键检测子程序的任务是根据触摸键操作来执行相应的处理程序,例如,触摸了绿指示灯的触摸按键,接下来单片机要执行4个任务:(1)打开定时器中断;(2)打开继电器,开启节能灯;(3)熄灭绿指示灯;(4)调用提醒显示子程序。注意,触摸键检测子程序需检测单片机引脚高电平,跟普通按键正好相反,当然消抖延时也是必不可少的。
提醒显示子程序的任务是显示所在位置的楼层数。
定时器中断的任务是延时一段时间,然后关掉定时器中断、继电器及提醒显示子程序,打开对应指示灯。定时器延时时间的到来需用中断次数和标志位相与作为判定条件。
另外,要提醒大家几点,调试的时候应该根据出现的现象分析程序哪一部分有问题,程序尽量条理清晰、模块化,以节省调试时间。切记不要使用交流电源,那样对触摸键的干扰会很大。编程部分难度不大,我相信,只要用心编写,耐心调试,把错误一步一步改正过来,大家会很快享受到电子制作带给我们的快乐。
相关问答
51 单片机 C语言for循环 延时 程序时间计算设晶振12MHz,即一个机...[最佳回答]不可能的,是不是你的编译有错的啊我改的晶振12M,在KEIL4.0里面编译的,为你得出的结果最大也就是40ms,这是软件的原因,不可能出现100ms那么大的差...
单片机 微秒 延时 怎么设置?1.可以用_nop_()函数来实现微秒级的延时。2._nop_();//直接当成一条语句使用,产生一条NOP指令NOP指令为单周期指令,可由晶振频率算出延时时间,对于12M晶...
51 单片机延时 函数的作用?51单片机C语言定义延时函数主要通过无意义指令的执行来达到延时的目的。C程序中可使用不同类型的变量来进行延时设计。经实验测试,使用unsignedchar类型具有...
单片机 中的 延时 程序的 延时 时间怎样计算的?比如说:voiddelay(){intx;chary;for(x=1000;x>0;x--){for(y=100;y>0;y--)};}x每减一次,y减100次,x一共减...
单片机 编程里控制LED灯一闪一灭的 延时 语句工作原理是什么?单片机每执行一天机器码/语句,都是需要时间的。有机器周期,指令周期,时钟周期之分。那么单片机要延时就很简单了。就是做一些无关紧要的指令来达到消耗时间延...
单片机 延迟1秒怎么设置?单片机延迟1秒可以设置定时器,在定时器中断函数里进行计数,具体实现取决于单片机型号和使用的开发环境。因为单片机需要精确计时,通过定时器和中断可以实现更...
用汇编怎么写51 单片机 的 延时 程序?DEL1S:MOVR7,#10D1:MOVR6,#200D2:MOVR5,#250DJNZR5,$DJNZR6,D2DJNZR7,D1RET说明:1、如果不使用R5、R6、R7...
51 单片机 如何延迟到250纳秒?对于那些老型号51单片机,无论如何也搞不出来250nS程序延迟,因为它们最快的指令也需要1微秒。现在的主流51单片机都提高了主频,并且采用了流水线结构,所以,...
单片机 c语言带参数 延时 函数可自定义延迟时间?是的,表示的是延时多少个时钟周期是的,表示的是延时多少个时钟周期
单片机 可以同时进行2个不同的 延时 吗?这个很好控制,用定时器来控制就可以了,可以让两个步进电机速度不同,相互工作互不干扰。这个很好控制,用定时器来控制就可以了,可以让两个步进电机速度不同,相...