4.2定时计数器分析.ppt

TH?=?=?0xf0 TL?=?=?0x0c   2. 定时/计数器的应用   【例2】 单片机系统晶体振荡器的频率为12 MHz,利用定时/计数器0实现在P3.6引脚上输出周期为500 μs的方波。   分析:要在P3.6引脚上输出周期为500 μs的方波,只要每半个周期即250 μs取反一次即可,因此只要利用定时/计数器实现定时250 μs,定时时间到取反就可以实现。   利用T0让其在工作方式2下实现定时,对应TMOD?=?0X01,TH0?=?TL0?=?256?-?250?=?6。   程序如下:     #includereg51.h     sbit P3_6=P3^6;     void main( ) { TMOD=0x02; // ?T0工作于方式2,用于定时  TH0=6; // 设置定时/计数器0的计数初值  TL0=6;  P3_6=1;  TR0=1; // 启动定时  while(1)  {   if(TF0==1) // 判断定时时间到了没有   {     P3_6=!P3_6; // 定时时间到了,波形取反     TF0=0; // 查询方式下用软件将溢出标志位清零  }  } } 程序如下: #includereg51.h sbit P3_6=P3^6; void timer0 (); void main( ) { TMOD=0x02; // ?T0工作于方式2,用于定时 TR0=1; // 启动定时 While(1) { P3_6=1; void timer0 (); P3_6=0; // 定时时间到了,波形取反 void timer0 (); } } void timer0 ()   // 定义定时函数 { TH06; // 设置定时/计数器0的计数初值,以确定定时时间250 us TL06; while(TF0==0) ; // 判断定时时间250 us到了没有,没有到则等待 TF0=0; // 溢出标志清零         }   【例3】 一交通路口设红、黄、绿三盏交通灯,当红灯亮2 s后,黄灯亮400 ms,绿灯亮1 s,试用单片机模拟交通灯控制。   分析:单片机采用发光二极管模拟交通灯控制,即利用P1.0~P1.2分别接红灯(LED0)、黄灯(LED1)、绿灯(LED2)三个发光二极管,电路如图所示。问题是这里用到三个不同定时时间(2 s、400 ms、1 s),是不是每个定时时间都编写不同的定时程序?其实不需要,可以采用软件定时器的方式,即找到这几个定时时间的公约数如50 ms,利用软件定时器就可以完成不同的延时。 图 单片机模拟交通灯控制   程序如下:     #include reg51.h     sbit P1_0=P1^0;     sbit P1_1=P1^1;     sbit P1_2=P1^2;     void timer0( ); // 声明定时的函数     void main( )     {     P1=0xff;      TMOD=0x01; // 设置定时/计数器0工作于方式1,用于定时      while (1) {   P1_0=0; // 红灯亮   timer0(40); // 延时2 s   P1_0=1; // 红灯灭   P1_1=0; // 黄灯亮   imer0(8); // 延时400 ms   P1_1=1; // 黄灯灭   P1_2=0; // 绿灯亮   timer0(20); // 延时1 s   P1_2=1; // 绿灯灭  } }   void timer0 (unsigned char n)  // 定义定时函数   { unsigned char i; i=0;     TH0=(65536-5000)/256; // 设置定时/计数器0的计数初值

文档评论(0)

1亿VIP精品文档

相关文档