找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3941|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)定時(shí)器實(shí)驗(yàn)例程

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:206822 發(fā)表于 2017-6-1 19:20 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式

#include <reg52.h>
#include <intrins.h>
#define FOSC 11059200L //晶振設(shè)置,默認(rèn)使用11.0592M Hz
//#define FOSC 12000000L //晶振設(shè)置,使用12M Hz
//#define FOSC 24000000L //晶振設(shè)置,使用24M Hz
#define TIME_MS 10 //設(shè)定定時(shí)時(shí)間 ms ,在11.0592M晶振下,不易超過(guò)60ms
//IO接口定義
sbit LED = P1^0;
//全局變量定義
unsigned char count=0;
/*******************************************************************************
* 函 數(shù) 名 :Delayms
* 函數(shù)功能 :實(shí)現(xiàn) ms級(jí)的延時(shí)
* 輸    入 :ms
* 輸    出 :無(wú)
*******************************************************************************/
void Delayms(unsigned int ms)
{
unsigned int i,j;
for(i=0;i<ms;i++)
#if FOSC == 11059200L
  for(j=0;j<114;j++);
#elif FOSC == 12000000L
   for(j=0;j<123;j++);
#elif FOSC == 24000000L
  for(j=0;j<249;j++);
#else
  for(j=0;j<114;j++);
#endif
}
/*******************************************************************************
* 函 數(shù) 名 :Timer0Init
* 函數(shù)功能 :定時(shí)器0初始化
* 輸    入 :無(wú)
* 輸    出 :無(wú)
*******************************************************************************/
void Timer0Init()
{
TMOD=0x01; //設(shè)置定時(shí)器0工作方式為1
TH0=(65536-FOSC/12/1000*TIME_MS)/256;
TL0=(65536-FOSC/12/1000*TIME_MS)%256;
ET0=1; //開(kāi)啟定時(shí)器0中斷
TR0=1; //開(kāi)啟定時(shí)器
EA=1;  //打開(kāi)總中斷
}
/*******************************************************************************
* 函 數(shù) 名 :main
* 函數(shù)功能 :主函數(shù)
* 輸    入 :無(wú)
* 輸    出 :無(wú)
*******************************************************************************/
void main()
{
Timer0Init();

while(1)
{
}
}
/*******************************************************************************
* 函 數(shù) 名 :Timer0Int
* 函數(shù)功能 :定時(shí)器0中斷函數(shù) , 每隔TIME_MS ms進(jìn)入
* 輸    入 :無(wú)
* 輸    出 :無(wú)
*******************************************************************************/
void Timer0Int() interrupt 1
{
TH0=(65536-FOSC/12/1000*TIME_MS)/256;
TL0=(65536-FOSC/12/1000*TIME_MS)%256;
count++;
if(count == 100)//1s
{
  LED = !LED;//LED燈閃速
  count = 0;
}
}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表