下载此文档

定时器延时.doc


文档分类:通信/电子 | 页数:约5页 举报非法文档有奖
1/5
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/5 下载此文档
文档列表 文档介绍
voidTimer0_Delay(intms){inti;//毫秒计数器TCON&=~0x30;//停止定时器T0并清除溢出标志TMOD&=~0x0f;//配置定时器T0为16位模式TMOD|=0x01;CKCON|=0x08;//定时器T0计数系统时钟for(i=0;i<ms;i++){//数毫秒TR0=0;//停定时器T0TH0=(-SYSCLK/1000)>>8;//设置定时器T01ms溢出TL0=-SYSCLK/1000;TR0=1;//启动定时器T0while(TF0==0);//等待溢出TF0=0;//清除溢出标志}}===================================================================,那么5ms就要n=5000/(1/)次,向定时器(若是16位)初值就是65536-n.===================================================================voidTimer0Ebable(void){EA=0;TMOD=(TMOD&0xF0)|0x01;TL0=(65535-2000)%256;TH0=(65536-2000)/256;TR0=1;ET0=1;EA=1;}voidTimer0Int(void)interrupt1using0{Count++;}====================================================================定时器延时程序//定时器0模式1的延时程序#include<>voiddelay(unsignedinti);main(){TMOD=0x01;//设定定时器0模式1for(;;)//无限循环{P0=0X00;delay(100);P0=0xFF;delay(100);}}voiddelay(unsignedinti){TR0=1;//启动定时器i=100;//设定溢出中断的次数while(i!=0)//检查次数是否到了。i!=0时,次数没到,循环;i=0时,次数到了,跳出循环,关闭定时器;{TH0=0xd8;TL0=0xf0;while(TF0!=1);//TF0!=1时,循环等待(空语句);TF0=1时,跳出循环,执行TF0=0;TF0=0;//溢出后马上清TF0;i--;}TR0=0;//关闭定时器==================================================================== 因为你用while循环延时时,循环了100,000次。已知CPU晶振为12M赫兹,则1个机器周期为1us。而100,000次等于100,。定时器中断时高8位TH0≈c3(十六进制)低8位TL0≈c3(十六进制),十六进制c3c3等于十进制50015,也就是你说的50,000。而使用定时中断时,CPU也是采用的12M赫兹的晶振,则计数频率位1M赫兹,即每微秒(us)计数器加1。50,000等于50,000微秒等于50毫秒(ms)再乘以200则等于50ms*200=10000毫秒

定时器延时 来自淘豆网m.daumloan.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数5
  • 收藏数0 收藏
  • 顶次数0
  • 上传人wxc6688
  • 文件大小17 KB
  • 时间2019-11-11
最近更新