欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 89C52單片機定時中斷里想輸出引腳低電平1秒后恢復高電平 求幫助 [打印本頁]

作者: xinrong86    時間: 2018-8-3 16:27
標題: 89C52單片機定時中斷里想輸出引腳低電平1秒后恢復高電平 求幫助
請問大俠們,89C52定時中斷里想輸出引腳低電平1秒后恢復高電平,要怎樣寫?

作者: diy1997    時間: 2018-8-3 20:16
設置定時多少時間觸發一次中斷,寫0后啟動定時器,在中斷里計時到1秒就IO置1......
作者: 帳外    時間: 2018-8-3 20:55
void timeinit()
作者: iyouone    時間: 2018-8-3 20:59
編程思想應該是   通過某種方式觸發中斷(外部中斷還是定時中斷或者串口中斷)以進入中斷函數——> 首先確定定時器初值然后拉低某個引腳通過某個寄存器記錄定時器循環定時的次數是否具有一秒如果有一秒釋放拉低的引腳退出中斷;也可以采用程序定時的方法;還有很多方法。
作者: skdbdk    時間: 2018-8-3 21:31
在定時器里設定1000ms的時間,通過進位標志位觸發中斷變為高電平
作者: skdbdk    時間: 2018-8-3 21:32
通過定時器中斷定時1000ms,到時間后進位標志位進位觸發中斷,變為高電平
作者: cts788    時間: 2018-8-3 22:51
用定時器先設置定時50MS吧,然后每進入一次計數一次,20次計數到,就是定時1S
作者: xinrong86    時間: 2018-8-4 11:03
串口3分鐘接收不到發送端送來的指定數據,就輸出(低電平)繼電器1秒后變回常態(高電平),如果又收到指定數據,繼電器還是(高電平),沒收到指定數據一直輸出知道怎樣寫,就是輸出后取反就不行
作者: angmall    時間: 2018-8-4 14:17
用定時器先設置定時50MS吧,然后用狀態機,用狀態邏輯實現
作者: xinrong86    時間: 2018-8-4 17:48
angmall 發表于 2018-8-4 14:17
用定時器先設置定時50MS吧,然后用狀態機,用狀態邏輯實現

大俠,我是新手,能給個例子嗎?
作者: 1648    時間: 2018-8-4 20:25
先配置好定時器50ms   進入中斷時候就計數和輸出低電平  計數達到20的時候說明時間到  輸出高電平即可
作者: 雨晨    時間: 2018-8-4 21:44
void configTimer1(unsigned int ms) //比如設置50ms
{        //此函數用來計算用戶需要的ms,然后轉化為定時器1進入中斷1的高8位和低8位數字
    unsigned long tmp;  
   
    tmp = 11059200 / 12;      
    tmp = (tmp * ms) / 1000;   //除1000是把秒轉化為ms
    tmp = 65536 - tmp;         //計算出y
    tmp = tmp + 12;           //補償

    T0RH = (unsigned char)(tmp>>8);   //取出y的高8位
    T0RL = (unsigned char)tmp;                  //取出y的低8位

    TMOD &= 0xf0;   
    TMOD |= 0x10;   //配置定時器模式

    TH0 = T0RH;     //給定時器1中斷賦初值
    TL0 = T0RL;
    ET0 = 1;        //定時器1中斷打開
    TR0 = 1;        //啟動T1
}


void interruptTimer0() interrupt 1
{
  unsigned char cnt=0;
TH0 = T0RH;
TL0 = T0RL;
        if(TF0==1)
                {TF0=0;cnt++;
             if(cnt>=20)
               {cnt=0;P1 = 0xff;}
}
               
               
}
框架大概這樣,可能會有點問題但是改改就行
作者: Tang_xiao    時間: 2018-8-4 23:11
做個定時器,在中斷中計數,1s后將引腳拉高
作者: dzj55    時間: 2018-8-5 00:45
用一個變量,每一秒加一,單數低雙數高
作者: xinrong86    時間: 2018-8-6 15:21
void Timer0() interrupt 1
{
        TH0 = 0xFC;
        TL0 = 0x66;
   TimeNo++;
   if(TimeNo >= 10000)
  {
   RELAY = 0;
  }
   TimeNo++;
  if(TimeNo >= 12000)
    {
   TimeNo = 12000;
   RELAY = 1;
   LED4 = 0;
}
}
請問這樣寫,繼電器恢復高電平后(釋放繼電器),聽到繼電器有吱吱響,觸發指示燈微亮,繼電器沒吸合,是什么問題啊?
作者: xinrong86    時間: 2018-8-6 16:26
請問大俠們,這樣寫,繼電器能復位,但是復位后,繼電器吱吱響,輸出燈有微光,是什么問題啊?
void Timer0() interrupt 1
{
        TH0 = 0xFC;
        TL0 = 0x66;
   TimeNo++;
   if(TimeNo >= 10000)
  {
   RELAY = 0;
  }
   TimeNo++;
  if(TimeNo >= 12000)
    {
   TimeNo = 12000;
   RELAY = 1;
   LED4 = 0;
}
}

作者: cyfdc51    時間: 2018-8-6 20:05
根據晶振的計數寫一個delay函數,通過計算可以確保時間的準確性
作者: xinrong86    時間: 2018-8-6 21:49
cyfdc51 發表于 2018-8-6 20:05
根據晶振的計數寫一個delay函數,通過計算可以確保時間的準確性

用delay當有串口信號來,跑不起來了




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