1、直接用软件延时,如纯喊蚂用以下的DELAY()延时子程序,如要延时5ms,直接调用DELAY(5)就好了,做埋但这种是纯软件的延时。
//======延时(n)ms,在4MHz晶振下!!!
void DELAY(uint n)
{ uint j
uchar k
for (j=0j<nj++)
for (k=246k>0k--) NOP()
}
2、用定时器延时,要通过计算延时渗岩的时间来确定延时的常数(分频比和定时器初值)。
PIC单片机没玩过,倒是用过51单片机。申请一个定时败粗器(一定要计算好时间,也就是初始值的设定),闹枯中然后控制I/O引脚让一个LED亮,维持30s,在控制I/O口让另一个灯亮60s。
注意寄存液山器的配置。
你应该去找PIC16F873的数据说明书来看看(电子版免费可下载的梁族)。说含配明书里连样例程序都有。
就如图可以看出:这是873的定时器1的结构图。当4Mhz的晶振时候,则单个指令周期谈渣指为1uS,而定时器1的TMR1是16位的,如果预分频1:1,则从0计算到0xffff溢出时间需要65536个指令周期,也就是65mS多点。而当TMR1里存有0x3CAF时候,TMR1就会易拓为初值自加到0xFFFF。
就是0xFFFF-0x3CAF=OxC350=50000.
所以程序就是:
MOVLW 0xAF
MOVWF TMR1L
MOVLW 0x3C
MOVWF TMR1H
并且要开中断和设置中断服务子程序。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)