標(biāo)題: 關(guān)于單片機延時程序的問題 [打印本頁]

作者: 溧陽科燕    時間: 2017-12-29 16:36
標(biāo)題: 關(guān)于單片機延時程序的問題
#include<reg51.h>        //庫文件
#define uchar unsigned char//宏定義無符號字符型
#define uint unsigned int  //宏定義無符號整型


/********************************************************************
                            I/O定義
*********************************************************************/
sbit DOUT=P1^3;
sbit YOUT=P1^4;
sbit LED1=P3^7;
/********************************************************************
                            延時函數(shù)
*********************************************************************/
void delay()//延時程序
{
uchar m,n,s;
for(m=20;m>0;m--)
for(n=20;n>0;n--)
for(s=248;s>0;s--);
}
/********************************************************************
                            主函數(shù)
*********************************************************************/
void main()
{
        while(1)   //無限循環(huán)
        {
         if((DOUT==1&&YOUT==1))//當(dāng)DO輸出低電平時
         {
            delay();//延時抗干擾
                if((DOUT==1&&YOUT==1))//確定 DO口輸出低電平
            {
                   LED1=1;   //這個地方我想添加一個延時的程序 有大神知道怎么添加嗎? 延時6個小時左右
                                 
                }
          else
              {
                               LED1=0;

                }
         }
        }
}   


作者: luoluoluo136    時間: 2017-12-29 17:24
把需求說得清楚點~你要延時十天八天都是可以的。定時器計數(shù),然后判斷時間就可以了。
作者: wananzi    時間: 2017-12-29 20:48
通過定時器做延時是很好的
作者: 溧陽科燕    時間: 2017-12-30 07:42
luoluoluo136 發(fā)表于 2017-12-29 17:24
把需求說得清楚點~你要延時十天八天都是可以的。定時器計數(shù),然后判斷時間就可以了。

就是DOUT YOUT都為1的時候 LED1一直點亮六小時 如果中途DOUT YOUT有一個為0的時候就退出循環(huán) LED1熄滅 直到 DOUT YOUT 再次都為1  
作者: david888    時間: 2017-12-30 08:49
是可以用定時器做延時,多長時間都 可以的
作者: 立里    時間: 2017-12-30 09:36
#include<reg51.h>        //庫文件 #define uchar unsigned char//宏定義無符號字符型 #define uint unsigned int  //宏定義無符號整型   /********************************************************************                             I/O定義 *********************************************************************/ sbit DOUT=P1^3; sbit YOUT=P1^4; sbit LED1=P3^7; uint16   Timecount; /********************************************************************                             延時函數(shù) *********************************************************************/ void delay()//延時程序 {     uchar m,n,s;     for(m=20;m>0;m--)     for(n=20;n>0;n--)     for(s=248;s>0;s--); } /********************************************************************                             主函數(shù) *********************************************************************/ void main() {     Timer0_init();     //開啟定時器0產(chǎn)生1s的中斷     while(1)   //無限循環(huán)     {         if((DOUT==1&&YOUT==1))//當(dāng)DO輸出低電平時         {             delay();//延時抗干擾             if((DOUT==1&&YOUT==1))//確定 DO口輸出低電平             {                 LED1=1;   //這個地方我想添加一個延時的程序 有大神知道怎么添加嗎? 延時6個小時左右                 Timecoun = 0;                 while(Timecoun < 3600);             }             else             {                 LED1=0;             }         }     } } void timeint(void) interrupt 1 {     Timecount++; }
作者: 小淘淘餓了    時間: 2017-12-30 09:51
加個定時器
作者: 立里    時間: 2017-12-30 12:02
#include<reg52.h>        //庫文件
#define uchar unsigned char//宏定義無符號字符型
#define uint unsigned int  //宏定義無符號整型

#define DELAYTIME     (200)

typedef enum{false=0, true = 1}  bool;
/********************************************************************
                            I/O定義
*********************************************************************/
sbit DOUT=P1^3;
sbit YOUT=P1^4;
sbit LED1=P3^7;
unsigned short   Timecount;
bool   LedOffflag;
bool   KeyFlag;
/********************************************************************
                            延時函數(shù)
*********************************************************************/
void delay()//延時程序
{
    uchar m,n,s;
    for(m=20;m>0;m--)
    for(n=20;n>0;n--)
    for(s=248;s>0;s--);
}
/********************************************************************
                            主函數(shù)
*********************************************************************/
void Timer0_init()
{
    EA   = 1;
    ET0  = 1;
    TR0  = 1;
    TMOD = 0x01; //定時器0 計數(shù)模式 定時器1模式1
    TH0  = 0x0C;
    TL0  = 0xB0;
}

bool GetKey(void)
{
    if((DOUT==1&&YOUT==1))
         return true;
    else return false;
}


void main()
{
    Timer0_init();     //開啟定時器0產(chǎn)生1s的中斷
    while(1)   //無限循環(huán)
    {
        KeyFlag = GetKey();
        
        if(KeyFlag)
        {
            LED1 = 1;
            Timecount = 0;
            LedOffflag = false;
        }
        else if(LedOffflag)
        {
            LED1 = 0;
        }
    }
}
void timeint(void) interrupt 1
{
    TH0 = 0x00;
    TL0 = 0xB0;
    Timecount++;
    if(Timecount >= DELAYTIME)
    {
        Timecount = DELAYTIME;
        LedOffflag = true;
    }
}
這是重新寫的程序,需要延時多長時間,就修改宏DELAYTIME的值。
作者: 溧陽科燕    時間: 2018-1-5 14:42
立里 發(fā)表于 2017-12-30 12:02
#include        //庫文件
#define uchar unsigned char//宏定義無符號字符型
#define uint unsigned int ...

我的單片機是STC12C5204PWM的 外部晶振 12MHZ 照著你的程序燒錄后 只要一通電 LED就亮著 不管1.3 1.4是高電平還是低電平

作者: dayehetiantian    時間: 2018-1-5 15:47
可以設(shè)置定時中斷,定時6個小時的
作者: 56121    時間: 2018-1-5 17:23
用通用定時器
作者: cede64    時間: 2018-1-5 17:51
void delay(uint time)        //延時函數(shù)
{
        uint x,y;
        for(x=time;x>0;x--)
        for(y=110;y>0;y--);
作者: chengdeshi    時間: 2018-1-6 08:28
死循環(huán)前面加個
TMOD=0x01;
EA=ET0=TR0=1;

主函數(shù)后面加一個

time0() interrupt 1
{
     TL0=(65536-50000)%0X100;
     TH0=(65536-50000)/0X100;
     c++;
     if(c>=1200){
               c=0;
               if(t>0)t--;
      }
}
注意主函數(shù)那要定義uint c=0,t;
只要在你要延時的地方加一個t=6;就可以了

作者: chengdeshi    時間: 2018-1-6 08:31
[qq]1965546844[/qq]

作者: zjb879653946    時間: 2018-1-7 08:53
延時可以用定時器,自己寫的延時delay函數(shù)時間不太準(zhǔn)確
作者: 無量壽經(jīng)    時間: 2018-1-7 11:54
這里講解已經(jīng)非常詳細(xì)完整了
http://www.torrancerestoration.com/bbs/dpj-78271-1.html

作者: 甲殼蟲1號    時間: 2018-1-7 14:29
dayehetiantian 發(fā)表于 2018-1-5 15:47
可以設(shè)置定時中斷,定時6個小時的

定時器定時延遲比較準(zhǔn)確
作者: 賣梨的小紅帽    時間: 2018-1-7 23:16
#include<reg51.h>        //庫文件 #define uchar unsigned char//宏定義無符號字符型 #define uint unsigned int  //宏定義無符號整型   /********************************************************************                             I/O定義 *********************************************************************/ sbit DOUT=P1^3; sbit YOUT=P1^4; sbit LED1=P3^7; /********************************************************************                             延時函數(shù) *********************************************************************/ void delay()//延時程序 { uchar m,n,s; for(m=20;m>0;m--) for(n=20;n>0;n--) for(s=248;s>0;s--); } /********************************************************************                             主函數(shù) *********************************************************************/ void main() {         while(1)   //無限循環(huán)         {          if((DOUT==1&&YOUT==1))//當(dāng)DO輸出低電平時          {             delay();//延時抗干擾                 if((DOUT==1&&YOUT==1))//確定 DO口輸出低電平             {                    LED1=1;   //這個地方我想添加一個延時的程序 有大神知道怎么添加嗎? 延時6個小時左右                                                   }           else               {                                LED1=0;                  }          }         } }   




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