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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3308|回復(fù): 13
收起左側(cè)

單片機(jī)系統(tǒng)的暫停與恢復(fù)問(wèn)題

[復(fù)制鏈接]
ID:811381 發(fā)表于 2022-5-16 21:24 | 顯示全部樓層 |閱讀模式
我想做個(gè)系統(tǒng),要求單片機(jī)在任意時(shí)刻,按下按鍵系統(tǒng)暫停,再次按下按鍵的時(shí)候恢復(fù)繼續(xù)執(zhí)行。我用了2種方法都有問(wèn)題。
方法一:中斷和按鍵用的同一個(gè)引腳(部分程序,中斷開(kāi)啟在初始化中做了)
bit temp;
sbit key=P3^2;
void int0() interrupt 0
{
       temp=1;
       while(temp==1)
       {
               if(key==0)
              {
                      delay(10);
                      if(key==0)
                     {
                            temp=0;
                            while(key==0);
                     }
              }
       }
}
方法二:掉電模式
void int0() interrupt 0      
{   
        uint x=0;
        IT0=0;
        EX0=0;
        while(k1==0)
        {
                x++;
                delay(10);
                if(x>=1000)
                {
                         PCON=0;
                }                  
        }
        if(x<1000)
        {
                IT0=1;
                EX0=1;
                PCON=0x02;
                delay(10);
        }              
}
回復(fù)

使用道具 舉報(bào)

ID:811381 發(fā)表于 2022-5-16 21:43 | 顯示全部樓層
方法二是參考的其他朋友的程序
回復(fù)

使用道具 舉報(bào)

ID:123289 發(fā)表于 2022-5-17 10:28 | 顯示全部樓層
做個(gè)奇偶控制器,為奇CPU進(jìn)行休眠,為偶CPU退出休眠。
奇偶控制器的奇偶,由按鍵產(chǎn)生中斷的奇偶次數(shù)控制。
回復(fù)

使用道具 舉報(bào)

ID:584814 發(fā)表于 2022-5-17 13:47 | 顯示全部樓層
什么問(wèn)題呢 ? 是按下鍵后沒(méi)人送茶么 ?
回復(fù)

使用道具 舉報(bào)

ID:624769 發(fā)表于 2022-5-17 13:54 | 顯示全部樓層
單片機(jī), 是不存在暫停的, 要起到看上去"暫停"的效果, 要么讓他 在一個(gè)地方 傻跑, 要么休眠。你的兩個(gè)思路都對(duì),但是代碼都有問(wèn)題。

方法一:中斷和按鍵用的同一個(gè)引腳(部分程序,中斷開(kāi)啟在初始化中做了)
注意: IT0 =1
sbit key=P3^2;
void int0() interrupt 0
{

       unsigned char i;
       while((IE0) || (!key))
       {
               IE0 = 0;
               i = 200;
               while(--i);
       }  //消抖 & 釋放按鍵
       while(!IE0);        //暫停現(xiàn)象
       while((IE0) || (!key))
       {
               IE0 = 0;
               i = 200;
               while(--i);
       }  //消抖 & 釋放按鍵
}


方法二:掉電模式    注意: IT0 =1
由于,STC15系列,部分機(jī)型 中斷中用PCON = 0x02; 會(huì)有意外,所以,掉電模式最好配合主程序使用。

bit Pause_Stats;
sbit key=P3^2;


void int0() interrupt 0      //必須要有
{   

               EX0 = 0;   //關(guān)中斷
}

void main()
{
       unsigned char i;
     IT0 = 1;
     EX0 = 0;   //關(guān)中斷
     EA  = 1;
  while(1)
  {
         if(IE0)
         {
               while((IE0) || (!key))
              {
                       IE0 = 0;
                       i = 200;
                       while(--i);
               }  //消抖 & 釋放按鍵
                EX0 = 1;     //開(kāi)中斷
                 PCON=0x02;      //休眠           
                _nop_();
                _nop_();
                while((IE0) || (!key))
               {
                       IE0 = 0;
                       i = 200;
                       while(--i);
                }  //消抖 & 釋放按鍵
           }
}
回復(fù)

使用道具 舉報(bào)

ID:811381 發(fā)表于 2022-5-17 16:06 | 顯示全部樓層
188610329 發(fā)表于 2022-5-17 13:54
單片機(jī), 是不存在暫停的, 要起到看上去"暫停"的效果, 要么讓他 在一個(gè)地方 傻跑, 要么休眠。你的兩個(gè)思路都 ...

謝謝,我研究下
回復(fù)

使用道具 舉報(bào)

ID:811381 發(fā)表于 2022-5-25 14:18 | 顯示全部樓層
188610329 發(fā)表于 2022-5-17 13:54
單片機(jī), 是不存在暫停的, 要起到看上去"暫停"的效果, 要么讓他 在一個(gè)地方 傻跑, 要么休眠。你的兩個(gè)思路都 ...

您好,您的方法一,進(jìn)入中斷后標(biāo)志位不是自動(dòng)清零的么?為什么還要手動(dòng)IE0=0呢?然后當(dāng)IE0=0時(shí)就原地等待,那么再次按下按鍵時(shí),怎么退出中斷返回繼續(xù)執(zhí)行的呢?沒(méi)太懂,您的程序我驗(yàn)證了,就是沒(méi)太明白您的設(shè)計(jì)思想
回復(fù)

使用道具 舉報(bào)

ID:811381 發(fā)表于 2022-5-25 14:28 | 顯示全部樓層
188610329 發(fā)表于 2022-5-17 13:54
單片機(jī), 是不存在暫停的, 要起到看上去"暫停"的效果, 要么讓他 在一個(gè)地方 傻跑, 要么休眠。你的兩個(gè)思路都 ...

請(qǐng)教您下,方法二中, 中斷喚醒的時(shí)候自動(dòng)對(duì)PCON清零么?不需要手動(dòng)對(duì)PCON清零么?
回復(fù)

使用道具 舉報(bào)

ID:624769 發(fā)表于 2022-5-25 14:30 | 顯示全部樓層
的事發(fā)生的 發(fā)表于 2022-5-25 14:18
您好,您的方法一,進(jìn)入中斷后標(biāo)志位不是自動(dòng)清零的么?為什么還要手動(dòng)IE0=0呢?然后當(dāng)IE0=0時(shí)就原地等待 ...

是的,IE0 會(huì)自動(dòng)清0,但是98%以上的按鍵會(huì)有 “抖動(dòng)” 所以 IE0 會(huì)又被置1,所以手動(dòng) 清IE0 ,以及 判斷IE0 都是為了一個(gè)目的,那就是“消抖”, 大多數(shù)牽涉到按鍵的代碼,如果能確保 按鍵 不會(huì)有 “抖動(dòng)”, 那么,代碼都會(huì)簡(jiǎn)潔的多。
回復(fù)

使用道具 舉報(bào)

ID:624769 發(fā)表于 2022-5-25 14:35 | 顯示全部樓層
的事發(fā)生的 發(fā)表于 2022-5-25 14:28
請(qǐng)教您下,方法二中, 中斷喚醒的時(shí)候自動(dòng)對(duì)PCON清零么?不需要手動(dòng)對(duì)PCON清零么?

PCON = 0x02; 即給 PCON.1   位 置1 這個(gè)動(dòng)作,只有1瞬間,作用是讓單片機(jī)休眠,但是,PCON.1 永遠(yuǎn)不會(huì)變成1, 即任何時(shí)候,你讀 PCON.1 得到的 都是0, 所以,不存在給 PCON.1 清零的問(wèn)題。
回復(fù)

使用道具 舉報(bào)

ID:811381 發(fā)表于 2022-5-26 17:54 | 顯示全部樓層
188610329 發(fā)表于 2022-5-25 14:30
是的,IE0 會(huì)自動(dòng)清0,但是98%以上的按鍵會(huì)有 “抖動(dòng)” 所以 IE0 會(huì)又被置1,所以手動(dòng) 清IE0 ,以及 判斷I ...

中斷中while(!IE0);這條語(yǔ)句是等待 ,就死到中斷里面了,再次按下按鍵,IE0還是為零,怎么實(shí)現(xiàn)的再次按下按鍵跳出中斷返回繼續(xù)執(zhí)行程序的呢?
回復(fù)

使用道具 舉報(bào)

ID:811381 發(fā)表于 2022-5-26 17:55 | 顯示全部樓層
明白了,非常感謝您的解惑
回復(fù)

使用道具 舉報(bào)

ID:624769 發(fā)表于 2022-5-26 20:02 | 顯示全部樓層
的事發(fā)生的 發(fā)表于 2022-5-26 17:54
中斷中while(!IE0);這條語(yǔ)句是等待 ,就死到中斷里面了,再次按下按鍵,IE0還是為零,怎么實(shí)現(xiàn)的再次按下 ...

=>中斷中while(!IE0);這條語(yǔ)句是等待 ,就死到中斷里面了,再次按下按鍵,IE0還是為零,怎么實(shí)現(xiàn)的再次按下按鍵跳出中斷返回繼續(xù)執(zhí)行程序的呢?
程序死在 while(!IE0);  達(dá)到你要的“暫停”效果,直到你再次按下按鍵后,打破這個(gè)死循環(huán),然后進(jìn)行后面的消抖后,跳出中斷。程序恢復(fù)運(yùn)行。
回復(fù)

使用道具 舉報(bào)

ID:811381 發(fā)表于 2022-5-27 16:55 | 顯示全部樓層
188610329 發(fā)表于 2022-5-26 20:02
=>中斷中while(!IE0);這條語(yǔ)句是等待 ,就死到中斷里面了,再次按下按鍵,IE0還是為零,怎么實(shí)現(xiàn)的再次按 ...

哦,我以為第一次進(jìn)入中斷暫停死到里面了,下次按鍵打斷中斷,進(jìn)去后IE0仍為0,還退不出來(lái)中斷。看起來(lái)是我對(duì)具體的過(guò)程理解有誤,非常感謝您的解惑
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表