久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9267|回復(fù): 8
打印 上一主題 下一主題
收起左側(cè)

[求助]又一個關(guān)于單片機中斷的問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:7020 發(fā)表于 2008-11-22 19:21 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

剛學(xué)單片機,在中斷這塊我總是遇見問題,下面這段程序我想現(xiàn)實的效果是:開機時兩端的LED燈閃爍,當(dāng)我給單片機一個外部中斷的時候,小燈熄滅一段時間后,第二個LED燈和倒數(shù)第二個LED燈閃爍,持續(xù)2秒(用定時器中斷實現(xiàn))然后所有的燈熄滅。可是當(dāng)我給單片機一個外部中斷后,小燈確實滅了一段時間,可是過了一段時間后并沒有出現(xiàn)第二個LED燈和倒數(shù)第二個LED燈閃爍持續(xù)2秒,然后熄滅的情況,而是返回了開始兩端LED燈閃爍的情況!(好像下面代碼紅色的部分沒執(zhí)行)我都改了N+1遍了都沒有出現(xiàn)我想要的情況,都快絕望了!請大家?guī)蛶兔Γ鉀Q一下。(LED燈接P0口)

#include<reg52.h>
int n,a;
void delaytime(int ms) //控制小燈的閃爍
{
 int x,y;
 for(x=ms;x>0;x--)
 for(y=200;y>0;y--);
}

void forword()   //使p0.0和P0.7口閃爍(兩端的小燈閃爍)
{
  while(1)
    {
      P0=0x7e;
      delaytime(20);
      P0=0xff;
      delaytime(20);
    }
}

void back()  //P0.1和P0.6口燈閃爍(第二個燈和倒數(shù)第二個燈閃爍)2秒后熄滅
{
 TMOD=0x01; //定時器工作在方式1
 TH0=(65536-50000)/256;  // 50ms定時
 TL0=(65536-50000)%256;
 ET0=1; //允許定時器中斷
 TR0=1; //開啟定時器
 while(1)
 {
  if(n==40)  //判斷是否到了兩秒(40*50ms),到了  關(guān)閉所有燈
  {
      P0=0xff; // 燈滅
      while(1);
  }
      P0=0xbd; //P0.1和P0.6口燈亮
      delaytime(20);
      P0=0xff;
      delaytime(20);
 }
}

void main()
{
 a=0;
 IT0=1; //外部0中斷,跳沿觸發(fā)方式
 EA=1;  // 開總中斷
 EX0=1; //允許外部0中斷
 if(a!=0) //判斷a==1?,不等于則調(diào)用back(),使P0.6和P0.2口燈閃爍2秒后滅掉
 back();
 else
 forword(); //否則調(diào)用forward(),使p0.0和P0.7口燈閃爍
}


void extinter() interrupt 0 //外部中斷0函數(shù)
{
 a++; 
 P0=0xff;  //所有的燈滅
 delaytime(100); // 延時 
}

void timer0() interrupt 1 //定時器0中斷函數(shù)
{
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 n++;
}
起初我以為是因為中斷優(yōu)先級的問題,可是當(dāng)我把外部中斷0改為外部中斷1時還是不行。
當(dāng)我把 back()函數(shù)放在外部中斷函數(shù)里調(diào)用的時候,它的確被調(diào)用了,但是出現(xiàn)了 P0.1和P0.6口燈一直在閃爍(第二個燈和倒數(shù)第二個燈閃爍)的情況,而并沒有出現(xiàn)持續(xù)兩秒后自動熄滅的效果,好像并沒有調(diào)用定時器中斷;當(dāng)我在forward()中加入
if(a!=0) back();時出現(xiàn)的情況還是跟我提出的問題一樣,并沒有調(diào)用back()函數(shù)

[此貼子已經(jīng)被作者于2008-11-23 11:02:05編輯過]
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:7167 發(fā)表于 2008-11-24 15:07 | 只看該作者
你的主函數(shù)里,if語句不對,back函數(shù)里,定時安排不對,都沒考慮返回語句,只能執(zhí)行一種情況。我修改一下,延時只能用一次,以后都使用外部中斷。編程時,要把思路搞清楚。程序如下:
#include<reg52.h>
int n,a;
void delaytime(int ms) //控制小燈的閃爍
{
 int x,y;
 for(x=ms;x>0;x--)
 for(y=200;y>0;y--);
}
void back()  //P0.1和P0.6口燈閃爍(第二個燈和倒數(shù)第二個燈閃爍)2秒后熄滅
{
 TMOD=0x01; //定時器工作在方式1
 TH0=(65536-50000)/256;  // 50ms定時
 TL0=(65536-50000)%256;
 ET0=1; //允許定時器中斷
 TR0=1; //開啟定時器
 while(1)
 {
  if(n==40)  //判斷是否到了兩秒(40*50ms),到了  關(guān)閉所有燈
  {
      P0=0xff; // 燈滅
      delaytime(2000);
  }
      P0=0xbd; //P0.1和P0.6口燈亮
      delaytime(20);
      P0=0xff;
      delaytime(20);
 }
}
void forword()   //使p0.0和P0.7口閃爍(兩端的小燈閃爍)
{
  while(1)
    {
      P0=0x7e;
      delaytime(20);
      P0=0xff;
      delaytime(20);
   if(a!=0) //判斷a==1?,不等于則調(diào)用back(),使P0.6和P0.2口燈閃爍2秒后滅掉
      back();
    }
}
void main()
{
 a=0;
 IT0=1; //外部0中斷,跳沿觸發(fā)方式
 EA=1;  // 開總中斷
 EX0=1; //允許外部0中斷
 forword(); //否則調(diào)用forward(),使p0.0和P0.7口燈閃爍
}
void extinter() interrupt 0 //外部中斷0函數(shù)
{
 a++;
 P0=0xff;  //所有的燈滅
 delaytime(100); // 延時
}
void timer0() interrupt 1 //定時器0中斷函數(shù)
{
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 n++;
}
回復(fù)

使用道具 舉報

板凳
ID:7020 發(fā)表于 2008-11-25 20:02 | 只看該作者

真的是太感謝你了!以前我對當(dāng)中斷程序返回后返回的地址不是很了解,通過這次的這個程序我對這個問題相對以前有了更加深刻的理解!

[此貼子已經(jīng)被作者于2008-11-25 20:04:23編輯過]
回復(fù)

使用道具 舉報

地板
ID:7228 發(fā)表于 2008-11-26 12:48 | 只看該作者
IF  語句 有什么問題嗎?  我看他程序只是 中斷跟定時混亂了  菜鳥請教
回復(fù)

使用道具 舉報

5#
ID:7020 發(fā)表于 2008-11-27 23:33 | 只看該作者
按照我以前的寫法當(dāng)外部中斷返回的時候,返回到的是forward()函數(shù)里面,而不是返回到 if 判斷的位置?因為外部中斷響應(yīng)前,程序一直在執(zhí)行forward()函數(shù),當(dāng)中斷響應(yīng)的時候只把forward()函數(shù)的地址壓入棧內(nèi)了,而并未保存if()的地址.
回復(fù)

使用道具 舉報

6#
ID:7228 發(fā)表于 2008-12-4 15:09 | 只看該作者
     你的這個意思我知道  其實就是中斷 的處理 有問題    但是IF語句本身沒問題的  只不過IF語句位置不對   是這樣的吧
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 成人小视频在线 | 九九热精品视频 | 中文字幕在线观看视频一区 | 精品乱码一区二区三四区视频 | 精品国产一区二区三区免费 | 国产色网站 | 在线视频 亚洲 | 国产精品精品 | 亚洲视频在线观看免费 | 亚洲午夜精品一区二区三区他趣 | 九九久久精品视频 | 中文字幕在线播放不卡 | 涩涩视频网站在线观看 | 99re在线视频精品 | 插插插干干干 | 一区二区三区四区视频 | 久草在线| 国产一区 | 国产一级电影网 | 精品视频一区二区 | 91久久精品日日躁夜夜躁国产 | 亚洲日日操 | 少妇一级淫片免费放播放 | 国产精品久久久久久久久久免费看 | 欧美午夜一区 | 欧美一级大片 | 成人在线视频观看 | 久久夜视频 | 精品区 | 日本黄色大片免费 | 精品视频导航 | 毛片网站在线观看 | 四虎伊人| 夜夜操天天操 | 亚洲精品www | 国产精品久久久久久久一区二区 | 国产精品美女久久久 | 亚洲国产精品第一区二区 | 91小视频| 精品国产一区二区三区久久 | 国产一级片在线观看视频 |