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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5786|回復: 17
打印 上一主題 下一主題
收起左側

89C52單片機定時中斷里想輸出引腳低電平1秒后恢復高電平 求幫助

  [復制鏈接]
跳轉到指定樓層
樓主
ID:373124 發表于 2018-8-3 16:27 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
請問大俠們,89C52定時中斷里想輸出引腳低電平1秒后恢復高電平,要怎樣寫?
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:310519 發表于 2018-8-3 20:16 | 只看該作者
設置定時多少時間觸發一次中斷,寫0后啟動定時器,在中斷里計時到1秒就IO置1......
回復

使用道具 舉報

板凳
ID:382694 發表于 2018-8-3 20:55 | 只看該作者
void timeinit()
回復

使用道具 舉報

地板
ID:382689 發表于 2018-8-3 20:59 | 只看該作者
編程思想應該是   通過某種方式觸發中斷(外部中斷還是定時中斷或者串口中斷)以進入中斷函數——> 首先確定定時器初值然后拉低某個引腳通過某個寄存器記錄定時器循環定時的次數是否具有一秒如果有一秒釋放拉低的引腳退出中斷;也可以采用程序定時的方法;還有很多方法。

評分

參與人數 1黑幣 +10 收起 理由
yousunny + 10 很給力!

查看全部評分

回復

使用道具 舉報

5#
ID:382710 發表于 2018-8-3 21:31 | 只看該作者
在定時器里設定1000ms的時間,通過進位標志位觸發中斷變為高電平
回復

使用道具 舉報

6#
ID:382710 發表于 2018-8-3 21:32 | 只看該作者
通過定時器中斷定時1000ms,到時間后進位標志位進位觸發中斷,變為高電平
回復

使用道具 舉報

7#
ID:36299 發表于 2018-8-3 22:51 | 只看該作者
用定時器先設置定時50MS吧,然后每進入一次計數一次,20次計數到,就是定時1S
回復

使用道具 舉報

8#
ID:373124 發表于 2018-8-4 11:03 | 只看該作者
串口3分鐘接收不到發送端送來的指定數據,就輸出(低電平)繼電器1秒后變回常態(高電平),如果又收到指定數據,繼電器還是(高電平),沒收到指定數據一直輸出知道怎樣寫,就是輸出后取反就不行
回復

使用道具 舉報

9#
ID:155507 發表于 2018-8-4 14:17 | 只看該作者
用定時器先設置定時50MS吧,然后用狀態機,用狀態邏輯實現
回復

使用道具 舉報

10#
ID:373124 發表于 2018-8-4 17:48 | 只看該作者
angmall 發表于 2018-8-4 14:17
用定時器先設置定時50MS吧,然后用狀態機,用狀態邏輯實現

大俠,我是新手,能給個例子嗎?
回復

使用道具 舉報

11#
ID:373499 發表于 2018-8-4 20:25 | 只看該作者
先配置好定時器50ms   進入中斷時候就計數和輸出低電平  計數達到20的時候說明時間到  輸出高電平即可
回復

使用道具 舉報

12#
ID:381195 發表于 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;}
}
               
               
}
框架大概這樣,可能會有點問題但是改改就行
回復

使用道具 舉報

13#
ID:382993 發表于 2018-8-4 23:11 | 只看該作者
做個定時器,在中斷中計數,1s后將引腳拉高
回復

使用道具 舉報

14#
ID:62797 發表于 2018-8-5 00:45 | 只看該作者
用一個變量,每一秒加一,單數低雙數高
回復

使用道具 舉報

15#
ID:373124 發表于 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;
}
}
請問這樣寫,繼電器恢復高電平后(釋放繼電器),聽到繼電器有吱吱響,觸發指示燈微亮,繼電器沒吸合,是什么問題啊?
回復

使用道具 舉報

16#
ID:373124 發表于 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;
}
}
回復

使用道具 舉報

17#
ID:368940 發表于 2018-8-6 20:05 | 只看該作者
根據晶振的計數寫一個delay函數,通過計算可以確保時間的準確性
回復

使用道具 舉報

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

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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表