奶爸业余单片机学习之:定时器使用方法——非中断,TF0(TF1)值软件重置法

============定时器使用方法——非中断,TF值软件重置法========   第一:设置特殊功能寄存器TMOD,配置好工作模式。  第二:设置计数寄存器TH0和TL0的初值。  第三:设置TCON,通过TR0置1来让定时器开始计数。  第四:判断TCON寄存器的TF0位,监测定时器溢出情况。      实例:

//LED由三极管及73HC138控制
//用定时器0实现亮与灭之间的1秒时

# include

sbit led2 = P0^0;

sbit addr0 = P1^0;
sbit addr1 = P1^1;
sbit addr2 = P1^2;
sbit addr3 = P1^3;
sbit enled1 = P1^4;

int main()
{
  unsigned char time0 = 0;

  addr0 = 0, addr1= 1, addr2 = 1,addr3 = 1, enled1 = 0; //38译码器控制led2时的I/O状态(原理图)
  led2 = 0;//先点亮LED2

  TR0 = 1;//启动定时器0
  TMOD = 0x01;//定时器0、工作方式1
  TH0 = 0xB8;TL0 = 0x00;//已20ms定时时,装入的初值
  TF0 = 0;//单片机上电后,TF0/1默认为0,因此此步可省略。

  while(1)//主程序大循环
  {
 if(TF0 == 1)//判断TF0是否为1(溢出),若溢出则执行if内语句
 {
   TF0 = 0;//TF0软件重置
   TH0 = 0xB8;TL0 = 0x00;//给定时器0存储寄存器装入计数值为20ms时的初值(初值=65536-计数值)
   time0++;//TF0每溢出一次(20ms),变量time0加1,
   if(time0 >= 50) //当time0从0变50时,则1秒时间已到
   {
 time0 = 0;//time0清零,重新计数
 led2 = ~led2;//led2取反,实现亮灭之间1秒变化
   }
 }
  }
  return 0;
}

相关资源:SRTApp:学生投票追踪器-其它代码类资源-CSDN文库

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2014年7月16日
下一篇 2014年7月16日

相关推荐