<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)中斷問(wèn)題30例

          單片機(jī)中斷問(wèn)題30例

          作者: 時(shí)間:2013-05-07 來(lái)源:網(wǎng)絡(luò) 收藏

          26、我用51定時(shí)/計(jì)數(shù)器1計(jì)數(shù)為什么不計(jì)數(shù)?想讓它記數(shù)產(chǎn)生中斷讓蜂鳴器響。

          sbit fengming=P1^6;

          void main()

          {

          TMOD=0x50;

          EA=1;

          ET1=1;

          TH1=0xff;//來(lái)一次中斷記一次數(shù)

          TL1=0xff;

          TR1=1;

          }

          void time1(void) interrupt 3

          {

          fengming=0;

          }

          答:

          不知道是你在網(wǎng)頁(yè)上打錯(cuò)了,還是怎么回事。

          void time1(void) interrupt 3-------》void timer1(void) interrupt 3

          主程序最后,要加個(gè)死循環(huán):while(1){};

          還有,你在這用了方式1,這個(gè)方式在你進(jìn)中斷后,TH1和TL1會(huì)變成0000H。你不對(duì)他重新賦值,你要等FFFFH次計(jì)數(shù),才會(huì)進(jìn)中斷。

          27MCS-51 定時(shí)器/計(jì)數(shù)器1的中斷入口地址是: 一共有四個(gè)A. 0003H B. 000BH C. 0013H D. 001BH,到底是是哪一個(gè)?

          答:答案是D.1BH

          因?yàn)椋?P>外中斷0——03h

          定時(shí)器0——0bh

          外中斷1——13h

          定時(shí)器1——1bh

          串口———23h

          請(qǐng)背熟

          28、我看很多程序都是主程序進(jìn)入while(1),就死在while(1)里了,然后等待外中斷。那么現(xiàn)在的問(wèn)題是我想讓它進(jìn)入外中斷完事后,跳過(guò)while(1),執(zhí)行下邊的程序,該怎么辦?

          while里邊用break嗎?不知道好使不好使,還有標(biāo)志位我看是硬件自動(dòng)清零,查詢(xún)標(biāo)志應(yīng)該不能用吧,那該怎么辦呢?

          答:

          結(jié)束while(1)語(yǔ)句最好的方法就是使用break來(lái)跳出死循環(huán),關(guān)鍵就是選擇合適的flag(標(biāo)志位),如果說(shuō)中斷標(biāo)志位是硬件自動(dòng)清零的話,那么樓主不妨在中斷服務(wù)子程序中自己加入一個(gè)標(biāo)志位:如果用匯編語(yǔ)言的話,PSW中的F0位就可以很好的使用;如果用C的話,就可以隨便定義一個(gè)位變量,如bit a=0;。也就是說(shuō),樓主需要在程序中定義一個(gè)位變量a,在中斷服務(wù)子程序中將a置1,退出中斷后查詢(xún)a是否為1,例如:if(a) {a=0;break;}這樣就跳出了while語(yǔ)句了。

          比方說(shuō),如果樓主想寫(xiě)一個(gè)等待按鍵按下中斷的程序,就可以用while(!a);而不用while(1)語(yǔ)句了。

          29、我用外部中斷1,中斷一次顯示下一個(gè)數(shù),數(shù)碼管顯示沒(méi)問(wèn)題。但是我用P3-3口用導(dǎo)線連接,接觸一次地線,松開(kāi)一次,這時(shí)候數(shù)碼管顯示會(huì)亂跳,有時(shí)候加兩次數(shù),有時(shí)候加好多次數(shù),反正就是不穩(wěn)定。假如p3-3口通過(guò)按鍵接地的話,按一次按鍵一般情況會(huì)加一次數(shù),但有時(shí)候也是不穩(wěn)定,可能中斷好幾次。

          程序如下:

          #include

          #define uint unsigned int

          #define uchar unsigned char

          uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

          uchar times;

          uchar i=0;

          void delay(uint z)

          {

          uint x,y;

          for(x=z;x>0;x--)

          for(y=112;y>0;y--);

          }

          void main()

          {

          EA=1;

          EX1=1;

          IT1=1;

          while(1)

          {

          P1=table[i];

          P2=0x00;

          }

          }

          void into() interrupt 2

          { delay(1000);

          i++;

          if(i==10) i=1;

          }

          答:

          是抖動(dòng)的問(wèn)題。

          應(yīng)該采取消抖措施,硬件、軟件方法皆可。

          ----

          樓主在中斷函數(shù)中,延時(shí),時(shí)間看來(lái)很是不短!

          但是延時(shí)后,并沒(méi)有檢測(cè)按鍵是否還在按下,這就不能算是軟件消抖。

          30、 (1) 為什么有兩個(gè)外部中斷0允許位?有什么作用?

          (2)在51內(nèi)核單片機(jī)中,當(dāng)允許響應(yīng)外部中斷0的中斷請(qǐng)求時(shí),其特殊功能寄存器ie中的位必須為1 es exo ea et0?

          答:

          (1)兩個(gè)中斷是因?yàn)橐话愕膯纹瑱C(jī)有兩個(gè)中斷源,可以實(shí)現(xiàn)兩級(jí)中斷嵌套,在實(shí)現(xiàn)復(fù)雜功能上兩級(jí)中斷嵌套很有用。

          (2)

          EA--總中斷允許位,必須為1

          ES--串行中斷允許位,不必開(kāi),為0

          EX0--外部中斷0允許位,應(yīng)為1

          ET0--定時(shí)計(jì)數(shù)溢出中斷允許位,不必開(kāi),為0


          上一頁(yè) 1 2 3 4 5 6 7 8 下一頁(yè)

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();