⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timer_counter.c

📁 单片机制作PLC
💻 C
字号:
 #include"IO.h"
 #include"timer_counter.h"

struct tim timer[10]={{0,0,0,0},
					  {0,0,0,0},
					  {0,0,0,0},
					  {0,0,0,0},
					  {0,0,0,0},
					  {0,0,0,0},
					  {0,0,0,0},
					  {0,0,0,0},
					  {0,0,0,0},
					  {0,0,0,0},};

struct ct counter[10]={{0,0,0,0},
					   {0,0,0,0},
					   {0,0,0,0},
					   {0,0,0,0},
					   {0,0,0,0},
					   {0,0,0,0},
					   {0,0,0,0},
					   {0,0,0,0},
					   {0,0,0,0},
					   {0,0,0,0},};

void interT0() interrupt 1
{
	  unsigned char i;
	  
	  TR0=0;
	  TH0=0x3c;
	  TL0=0xb0;
	
	  for(i=0;i<10;i++)			  //依次检查10个计数器,若计数器已经启动,则对其进行加1操作
	  {
		  if(timer[i].ST)
		  	timer[i].TC++;	
	  }
	
	  TR0=1;
}

void  time(unsigned char n,bit in)
{
	 if(in)
	 	{
			if(timer[n].ST)
			{
				if(timer[n].TC==timer[n].K)	  //当输入逻辑为1时,如果定时器已经启动,则需要检测定时器是否溢出
				{
					timer[n].DT=1;			  //一旦检测到定时器溢出,置定时器逻辑标志位,同时关闭定时器
					timer[n].ST=0;
					timer[n].TC=0;
				}
			}
			else
			{
				if(timer[n].DT!=1)
					timer[n].ST=1;	   //当输入逻辑为1时,如果定时器没有启动,也没有溢出,则启动该定时器
			}
		}
	 else
	 	{
			timer[n].DT=0;
			timer[n].ST=0;
			timer[n].TC=0;
		}
}


void count(unsigned char n,bit in)
{
	 if(!counter[n].RST)
	 	{
			if(in)
				{
					if(!counter[n].Cnt)
					{	
						counter[n].CT++;
					 	if(counter[n].CT==counter[n].PV)
					 	{
					 	 counter[n].Cnt=1;
						 counter[n].CT=0;
					 	}
					 }
				}
			else
			counter[n].Cnt=0;
		}
	 else
	 {
	 		counter[n].Cnt=0;
			counter[n].CT=0;
	 }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -