音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

請高手一定進(jìn)來,關(guān)于中斷

作者:zoupeng139 欄目:單片機(jī)
請高手一定進(jìn)來,關(guān)于中斷
請問IE1由0變?yōu)?再變?yōu)?是不是證明一定執(zhí)行過中斷了呢?
我用的外部中斷INT1,在我第一次運(yùn)行時(shí)中斷可以執(zhí)行,但當(dāng)我執(zhí)行完串行通訊(T1做波特率發(fā)生器)后,以后中斷程序就再也不起作用了,是不是串行通訊時(shí)波特率的設(shè)置對中斷的影響呢?可是我把控制定時(shí)和中斷的各個(gè)寄存器的值都設(shè)置為和第一次可以執(zhí)行中斷時(shí)的值完全一樣,還是不行,不知到底是什么原因???

2樓: >>參與討論
促狹鬼
51?
用作波特率發(fā)生器時(shí)就不能再作它用了。這好象是基本常識

3樓: >>參與討論
CXCHINA
檢查吧
外部中斷有兩種邊沿觸發(fā)和低電平方式,在低電平方式需要在中斷子程序中用軟件清零IE1,而且要在保證管腳的電平為1時(shí)才退出中斷子程序。
注意是否開放中斷EX1=1  EA=1。
硬件管腳加10K上拉電阻

4樓: >>參與討論
促狹鬼
不好意思
原來沒認(rèn)真看內(nèi)容。
進(jìn)入中斷后沒有軟件清中斷標(biāo)志,會使程序不斷進(jìn)中斷的,而不是進(jìn)不了。(如果你的設(shè)置是需要軟件清標(biāo)志)。
估計(jì)是在中斷程序里關(guān)了中斷允許,退出時(shí)忘了再次開放。

5樓: >>參與討論
zoupeng139
謝謝兩位大蝦
我的中斷程序?yàn)?br>{
EX1=0;
end=1;  //就是設(shè)置一個(gè)用于查詢的標(biāo)志
EX1=1;
}
所以感覺不是"促狹鬼"大俠所說的問題
請問"CXCHINA"大俠,硬件加上拉電阻是怎么回事?是往INT1上加嗎?
我在單步執(zhí)行過程中看IE1的變化是起初為0然后變?yōu)?再變?yōu)?,是不是證明我的中斷已經(jīng)執(zhí)行了呢?可是end的值卻仍然是0

6樓: >>參與討論
促狹鬼
?
原來你判斷執(zhí)行過一次中斷,是從“單步執(zhí)行過程中看IE1的變化是起初為0然后變?yōu)?再變?yōu)?”?這樣好象不行。中斷過程非常快,中斷與否一般不用單步執(zhí)行來檢查。也許你的程序從來就沒有進(jìn)過中斷里去。
如果方便,把程序帖出來

7樓: >>參與討論
zoupeng139
哦,謝謝 大蝦,
以下是我的那個(gè)程序請幫忙看一下,只寫了主要的部分
感覺好象中斷程序并未執(zhí)行,因?yàn)樵O(shè)置中斷斷點(diǎn)是也是只有第一次進(jìn)入中斷了,以后就進(jìn)不去了
void TransData()
{
    uchar j;
    uint idata Temp_Address;
    
     TMOD=0x20;  //T1工作在方式1
     TH1=0xFD;   //初始值,書上給的
     TL1=0xFD;   
     TR1=1;      //開啟T1定時(shí)器
     SCON=0x50;  //串行工作方式為方式1
     EA=1;ES=1;ET1=1;      //開總中斷、串行中斷、T1中斷    

    GetAddress();                 
    Current_Address--;
    Temp_Address=Current_Address;
    j=0;
    while( Current_Address>0x0004)    
     {  
      
      outbuf[2]= XBYTE[Current_Address];   
      
      outbuf[1]= XBYTE[Current_Address-1];  
      
      outbuf[0]= XBYTE[Current_Address-2];            
      send_string_com(outbuf,3);
      j++;
      Current_Address=Temp_Address-3*j;
      }     
     Current_Address=Temp_Address-3*j;  //片外存儲區(qū)末址
}

void Int1() interrupt 2 using 1
{    
  EX1=0;
  EndFlag=1;
  EX1=1;       
}

void main(void)
{

main1:
  EndFlag=0;
if(Auto==0)
{
     
    IE1=0;
    IT1=0;
    EA=1;EX1=1;             
auto_1:
      Delay400Ms();
                   
      Measure();//采集程序未寫
     
   while(EndFlag==1)
    {
     
      TransData();//發(fā)送數(shù)據(jù)程序未寫
      goto main1;
    }         
      goto auto_1;
}     
else
      goto main1;
  
}




8樓: >>參與討論
zoupeng139
當(dāng)不執(zhí)行串行通訊時(shí)就可以正常
當(dāng)不執(zhí)行串行通訊(程序中的transdata)時(shí)就可以正常 

9樓: >>參與討論
maxking
初始化部分怎么不是在main()完成的?
這個(gè)程序好像不能初始化啊。

10樓: >>參與討論
zoupeng139
可以的
在調(diào)用程序時(shí)初始化啊
這只是程序的一部分,有些沒用的我就沒寫了

11樓: >>參與討論
促狹鬼
my god!
我的回復(fù)沒有成功?
這個(gè)程序?qū)懙膲騺y的。也沒看出哪里不能執(zhí)行INT1中斷。還是檢查一下硬件。
沒猜透你的程序思路,隨便修改了一下你的程序。auto變量是干嘛的?在哪兒影響過它的取值?
void TransData(void)
{
    uchar j;
    uint idata Temp_Address;
    
     GetAddress();                 
    Current_Address--;
    Temp_Address=Current_Address;
    j=0;
    while( Current_Address>0x0004)    
    {       
        outbuf[2]= XBYTE[Current_Address];         
        outbuf[1]= XBYTE[Current_Address-1];    
        outbuf[0]= XBYTE[Current_Address-2];            
        send_string_com(outbuf,3);
        j++;
        Current_Address=Temp_Address-3*j;
    }     
    Current_Address=Temp_Address-3*j;  //片外存儲區(qū)末址
}

void Int1() interrupt 2 using 1
{    
    EX1=0;
    EndFlag=1;
    EX1=1;       
}

void main(void)
{
    init_system();
    for(;;)
    {
        if(auto==0)
        {    
            Delay400Ms();                 
            Measure();//采集程序未寫     
            if(EndFlag==1)
            {   
                TransData();//發(fā)送數(shù)據(jù)程序未寫
                EndFlag=0;
            }
            auto=1;    //auto干嘛用的?在哪里改變過它的值?//                
        }
    }    
}

void init_system(void)
{
    IT1=0;      //低電平中斷(硬件自動清0)
    IE1=0;      //清中斷標(biāo)志//
    TMOD=0x20;  //T1工作在方式1
         TH1=0xFD;   //初始值,書上給的
         TL1=0xFD;   
         TR1=1;      //開啟T1定時(shí)器
         SCON=0x50;  //串行工作方式為方式1
         ET1=1;      //開T1中斷、串行中斷、INT1中斷和總中斷
         ES=1;
         EX1=1;  
         EA=1;  
         EndFlag=0;
}

12樓: >>參與討論
zoupeng139
哦,謝謝 你 。對不起程序沒說明白
其中AUTO是由按鍵控制的 當(dāng)有鍵按下時(shí)為0
這是一部分程序
主要是只要執(zhí)行transdata后中斷就不能用了,請幫忙看看我那程序的初始化都對嗎?

13樓: >>參與討論
zoupeng139
問題解決了
呵呵
沒有設(shè)中斷優(yōu)先級
謝謝大蝦!!!
我的程序確實(shí)不怎樣,這是別人寫的,我在別人的基礎(chǔ)上改和調(diào)試,以后自己寫一定會好好考慮的,謝謝

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
有誰知道aduc單片機(jī)是那個(gè)公司代理的?
有關(guān)PCB設(shè)計(jì)
找DC-DC的IC
我想學(xué)單片機(jī),各位給點(diǎn)意見做什么電路比較好?
電路疑難,請高手指點(diǎn)!
免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號