基於51微控制器的定時器

ssd風格發表於2020-10-07

定時器查詢方式

選用晶片:AT89S52
注意:定時器查詢方式使用時記得標誌位需要軟體清零
此程式主要展示定時器的查詢方法設計,主程式很簡單,可以根據自己需要自行設計,主要是學會用定時器查詢方式,學習設計思路。這樣自己拿到任何型號的51微控制器,只要有原理圖,都可以自主設計。
博主剛接觸微控制器,才疏學淺,可能會出現設計不足和錯誤,歡迎大家評論區交流。^ _ ^

/***********************************************************
此函式功能為:定時器T0的查詢方式,時間每過一秒在數碼管的顯示
值加一,從0——F迴圈顯示。
作者:Crazy Wind     
日期:2020.10.1
version:1.0.0
***********************************************************/
#include "reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;

u8 code smgduan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};		//數碼管顯示0-F
u8 code smgwei[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};			//位碼

void dsq()						 //定時器
{
	TMOD=0x01;                   //定時器T0的模式1
	TH0=0x4C;					 //定時器T0的高8位賦初值	(11.0592MHz)
	TL0=0x00;					 //定時器T0的低8位賦初值
	TR0=1;						 //啟動定時器T0
	TF0=0;						 //溢位標誌位  清零
}

void main()
{
	u16 i,k;
	i=0;
	P2=smgwei[0];				 //賦位碼  
	P0=smgduan[0];				 //賦段碼	(初值為0)
	dsq();						 //定時器
	while(1)					 //迴圈查詢檢測
	{							 
		while(TF0==1)			 //當記滿溢位  TF0為1
		{
			TF0=0;				 //查詢方式  *標誌位需要軟體清零
			i++;
			TH0=0x3C;			 //再次賦初值
			TL0=0xB0;
			if(i==20)			 //1秒(20個50ms)
			{	
				i=0;
				k++;
				if(k==16)
				{	
					k=0;
				}
				P0=smgduan[k];
			}
		}
	}
}

相關文章