微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 基于51单片机的定时系统,定时器程序到底该怎么加

基于51单片机的定时系统,定时器程序到底该怎么加

时间:10-02 整理:3721RD 点击:
以下是我的主函数,现在能实现的功能是,时间、温度、湿度交替显示。现在想实现的功能是当湿度条件到达时,使继电器动作闭合四个小时,谁能讲一下定时器程序应该怎么加,谢谢!
void main()
{
unsigned char i,j,k;
unsigned char *datPtr;
unsigned int temp,temp1,s,m;

a=0;
// S_Time  RTC={0x00,0x33,0x23,0x04,0x21,0x05,0x15}; //初始化时间结构体变量(设置时间:2014年11月12日 14:59:55  星期一)
//           55秒 59分 14时 周一 10日 11月 14年
LEDA=0;
LEDB=0;
LEDC=0;
UartInit();
MAX7219_Init ();//初始化MAX7219
MAX7219_SetBrightness (5) ;//亮度设置 1-15 min-max
adcinit();
     
while(1)
{
  TIME_Dsip();//显示时间
  Delay(100);
  adcinit(1);
  temp=adcmea(1);
  Temp_Dsip((char)temp);
  Delay(100);
  adcinit(0);
  temp=adcmea(0);
  Temp_Dsip((char)temp);
  Delay(100);
  Read_RT();//显示温度
  temp=TMP_BCD();
  temp=temp>>4;
  Temp_Dsip((char)temp);   


  Delay(100);
  temp=RH_BCD();//显示湿度
  temp=temp>>4;  
  Hum_Dsip((char)temp);


  Delay(100);
  InitADC();
  s= GetADCResult(1);
  m=s/1000;
  MAX7219_DisplayChar (0x01,  m);
  m=(s%1000)/100;
  MAX7219_DisplayChar (0x02,  m);
  m=(s%100)/10;
  MAX7219_DisplayChar (0x03,  m);
  m=s%10;
  MAX7219_DisplayChar (0x04,  m);
  
  Delay(100);
  Uart_Send(UART_DataBuff);
}
}

//配置为双8位定时器,主函数
{
        TMOD =  0x01;
        TH0 = (65536 - 45872) / 256 ;
        TL0 = (65536 - 45872) % 256 ;
        EA = 1;
        ET0 = 1;
        TR0 = 1;
}
//下面为一分钟计时,自己去改后加入继电器程序
void T0_Time() interrupt 1
        {
                TH0 = (65536-45872)/256 ;   
                TL0 = (6556-45872)%256 ;       
                num1++;       
                if (num1 == 20)
                {
                      num1==0;
                }       
     }

加在哪里呢,主要我有一个湿度达到一定值才开启计时四小时的条件

首先要配置相关的定时器寄存器和中断寄存器:TMOD,TCON,IE,具体的配置位请查询相应资料。
第二,在文件的任何位置(不是头文件之前和其他函数里面)添加下面函数
void Time_SER()  interrupt  1//定时器0中断程序
{
         TL1 = 0;        //这两句是初值重装 ,可以是其他的比如50mS中断一次
        TH1 = 0;        if(湿度值==湿度条件)
       {
               继电器关闭;
              计数条件=1;
       }
      if(计数条件) Count++;
      if(Count>=20)//50mS中断一次20次就刚好一秒
      {
               Count=0;//清零,等待下一次计满20
               Sec++;//秒增加
                if(Sec>59)
               {
                        MIN++;
                        if(MIN>240)//四小时
                         {
                                  继电器开启;
                                  MIN = 0;//等待下一次
                                  计数条件 = 0;
                          }
}
}
}

就是达到后把TR0=0,变成TR0=1,打开定时器,就开启4小时了,之后在中断函数使TR0=0,就行了,希望有帮助。

能留个QQ么,后期有问题向您咨询,谢谢了

                    2582008417

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top