用户登陆 用户注册
您的位置:首页> 技术文章>内容正文
PIC单片机16F84的内部硬件资源(五)
[正文]: 7   延时和定时  在设计单片机应用系统时,经常会遇到需要使某一过程(如加温、加压等)持续一段时间的情况,如连续加压1分钟,通电2分钟等。
单片机如何正确确定这段时间呢?这里可通过两种方式,即延时和定时来实现。
试看下例。
  在应用系统中要求pic16f84的rao端控制一个发光二极管按一定频率闪亮,可通过右图的电路来实现。
同时还必须为16f84编制一个程序。
由电路图可知,要使发光二极管led按一定的频率闪亮,只要使rao端输出一个变化的高→低→高……电平即可。
由此设计出如下的源程序(清单1):  list p=16f84,f=inhx8m;……     org   0     movlw 0 ;主程序开始     tris  5   ;置ra口为输出     bcf   5,0   ;ra口0位清零  loop:call  delay;闪动延时     comf 5   ;ra口求反,亮—灭交替     goto loop   ;循环  ;……  delay      ;以下为延时子程序      movlw  d′50      movwf   8  loop1:movwf   9  loop2:decfsz   9,f      goto   loop2     decfsz   8,f     goto    loop1  retlw       0  由清单1可知,当主程序开始时,首先将工作寄存器w清零,然后将w寄存器的内容送trisa寄存器,使其清零,以设置ra口为输出。
接着又将ra口的第5位清零,使led开始时处于熄灭状态。
随之持续一段时间,即执行延时子程序,再将ra口取反,变为高电平输出,led发光,再延时,又使ra口取反,led熄灭……。
这样,led就一暗一亮,持续交替进行。
  在这里,使led亮、暗持续一段时间是通过单片机执行延时子程序delay来实现的。
此延时程序的核心就是让单片机的cpu反复执行使寄存器内容减1的指令decfsz。
即将十进制数50分别装入通用寄存器f8、f9,以进行50×50=2500次的减1操作。
如果执行一次decfsz指令需1个指令周期(跳转时需2个周期),若设振荡频率为100khz,即指令周期为40μs,则延时时间为2500×40=100000μs=100ms,即01秒。
实际上还略为大些。
此延时时间已超过人眼的视觉保留时间。
因而能看清led的明、暗交替变化。
  如果我们需要更长的延时时间,可仿照上例,装入更大的数或引入多重循环。
因此,在原则上,延时时间可根据需要任意延长。
  不过,采用延时程序来持续某一过程的方式有缺陷。
延时就是使cpu在某几条指令上“转圈”,延时越长,“转圈”数越多,这时,cpu不能再去执行其它操作,如监视温度、湿度等。
这在某些实时控制系统中,不允许这样做。
为此,在单片机16f84中,专门设置了一个“闹钟”——定时器tmr0。
需要某过程延续多长时间,可将其“拨入”tmr0,到时它会发生“中断”,告诉cpu定时时间到。
要cpu暂停其它工作,转过来执行“中断子程序”,完成输出开、关信号之类的任务后,再回去执行其中断的工作。
这样,就使cpu的工作效率提高。
因而,延时的使用有局限性,采用定时器tmr0则可用于各种场合中。



网站首页 培训课程 维修指南
技术文章 家电专栏 供应信息
求购信息 培训资讯 展会信息
电脑专栏 教程下载 资料下载
常用软件 PLC教程 PLC资料
变频伺服 低压电器 维修资料
人机界面 自控仪表 工控机类
文章标题: 搜文章
中国工控资源网手机版 2012
电话:010-67577139 13811659603
培训咨询QQ:657167934 471895637 销售咨询QQ:623769457
联系邮箱:zggkzyw@163.com
 京ICP备11002135号
报时(2026-04-06 11:50:34) 流量统计