標(biāo)題: 奶爸業(yè)余單片機(jī)學(xué)習(xí)之:定時(shí)器使用方法——非中斷,TF0(TF1)值軟件重置法 [打印本頁(yè)]

作者: czf_gd    時(shí)間: 2014-8-29 08:42
標(biāo)題: 奶爸業(yè)余單片機(jī)學(xué)習(xí)之:定時(shí)器使用方法——非中斷,TF0(TF1)值軟件重置法
http://www.cnblogs.com/czf-gd/p/3929456.html
============定時(shí)器使用方法——非中斷,TF值軟件重置法========

第一:設(shè)置特殊功能寄存器TMOD,配置好工作模式。
第二:設(shè)置計(jì)數(shù)寄存器TH0和TL0的初值。
第三:設(shè)置TCON,通過(guò)TR0置1來(lái)讓定時(shí)器開(kāi)始計(jì)數(shù)。
第四:判斷TCON寄存器的TF0位,監(jiān)測(cè)定時(shí)器溢出情況。


實(shí)例:
//LED由三極管及73HC138控制
//用定時(shí)器0實(shí)現(xiàn)亮與滅之間的1秒時(shí)
# include <reg52.h>
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時(shí)的I/O狀態(tài)(根據(jù)譯碼器真值表)
  led2 = 0;//先點(diǎn)亮LED2

  TR0 = 1;//啟動(dòng)定時(shí)器0
  TMOD = 0x01;//定時(shí)器0、工作方式1
  TH0 = 0xB8;TL0 = 0x00;//已20ms定時(shí)時(shí),裝入的初值
  TF0 = 0;//單片機(jī)上電后,TF0/1默認(rèn)為0,因此此步可省略。

  while(1)//主程序大循環(huán)
  {
    if(TF0 == 1)//判斷TF0是否為1(溢出),若溢出則執(zhí)行if內(nèi)語(yǔ)句
    {
      TF0 = 0;//TF0軟件重置
      TH0 = 0xB8;TL0 = 0x00;//給定時(shí)器0存儲(chǔ)寄存器裝入計(jì)數(shù)值為20ms時(shí)的初值(初值=65536-計(jì)數(shù)值)
      time0++;//TF0每溢出一次(20ms),變量time0加1,
      if(time0 >= 50)        //當(dāng)time0從0變50時(shí),則1秒時(shí)間已到
      {
        time0 = 0;//time0清零,重新計(jì)數(shù)
        led2 = ~led2;//led2取反,實(shí)現(xiàn)亮滅之間1秒變化
      }
    }
  }
  return 0;
}



作者: admin    時(shí)間: 2014-8-29 18:34
很好 適合初學(xué)者
作者: czf_gd    時(shí)間: 2014-8-29 22:27
admin 發(fā)表于 2014-8-29 18:34
很好 適合初學(xué)者

謝謝管理員鼓勵(lì)!




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1