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

          新聞中心

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

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

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

          一、30例

          1、外中斷INT0為下降沿觸發(fā),當(dāng)中斷被觸發(fā)后cpu執(zhí)行中斷程序,若本次中斷的程序還未執(zhí)行完INT0又來了一個(gè)相同的下降沿中斷信號怎么辦?cpu會(huì)怎么處理?若是定時(shí)器中斷呢?串口中斷呢?求解釋

          答:再來一個(gè)不會(huì)執(zhí)行。相同的優(yōu)先級不會(huì)打斷正在執(zhí)行的中斷。

          一. 如果是高優(yōu)先級的中斷來了,會(huì)打斷低優(yōu)先級的正在執(zhí)行的中斷而執(zhí)行高優(yōu)先級的中斷。

          51的默認(rèn)(此時(shí)的IP寄存器不做設(shè)置)中斷優(yōu)先級為:

          外部中斷0 > 定時(shí)/計(jì)數(shù)器0 > 外部中斷1 > 定時(shí)/計(jì)數(shù)器1 > 串行中斷;

          當(dāng)同時(shí)有幾種中斷到達(dá)時(shí),高優(yōu)先級中斷會(huì)先得到服務(wù)。

          例如:當(dāng)計(jì)數(shù)器0中斷和外部中斷1(優(yōu)先級 計(jì)數(shù)器0中斷>外部中斷1)同時(shí)到達(dá)時(shí),會(huì)進(jìn)入計(jì)時(shí)器0的中斷服務(wù)函數(shù);但是在外部中斷1的中斷服務(wù)函數(shù)正在服務(wù)的情況下,這時(shí)候任何中斷都是打斷不了它的,包括邏輯優(yōu)先級比它高的外部中斷0計(jì)數(shù)器0中斷。

          51單片機(jī)的中斷優(yōu)先級控制寄存器IP可以把默認(rèn)的中斷優(yōu)先級設(shè)置為高或低級,

          例如默認(rèn)是外部中斷0 > 定時(shí)/計(jì)數(shù)器0 > 外部中斷1 > 定時(shí)/計(jì)數(shù)器1 > 串行中斷;

          現(xiàn)在設(shè)為定時(shí)1 和串行中斷為高優(yōu)先級 其它為低 ,那么中斷0執(zhí)行時(shí)會(huì)被定時(shí)器1 或串行中斷打斷,如果設(shè)定的兩個(gè)高優(yōu)先級定時(shí)/計(jì)數(shù)器1 和串行中斷同時(shí)響應(yīng),會(huì)再自然排隊(duì),先執(zhí)行定時(shí)1中斷再執(zhí)行串行中斷。

          2、單片機(jī),中斷3為什么不執(zhí)行,整個(gè)程序有什么不對的地方呢?

          #include

          #define uint unsigned int

          #define uchar unsigned char

          sbit p1_0=P1^0;

          sbit p1_1=P1^1;

          sbit p1_2=P1^2;

          sbit p1_3=P1^3;

          sbit p1_4=P1^4;

          sbit p1_5=P1^5;

          uchar PWM_T1 = 0;

          uchar PWM_T2 = 0;

          uint i,m;

          void delay(uint z)

          {

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

          for(m=0;m110;m++);

          }

          void PWM_value_left(int pwm_set)

          {

          PWM_T1=pwm_set;

          }

          void PWM_value_right(int pwm_set)

          {

          PWM_T2=pwm_set;

          }

          void main(void)

          {

          bit flag = 1;

          uint n;

          TMOD=0x22;

          TH0=241;

          TH1=241;

          TL0=241;

          TL1=241;

          TR0=1;

          TR1=1;

          ET0=1;

          ET1=1;

          EA=1;

          P1=0xf0;

          delay(20);

          PWM_value_left(7);

          PWM_value_right(10);

          delay(100);

          PWM_value_left(8);

          PWM_value_right(9);

          delay(100);

          PWM_value_left(9);

          PWM_value_right(8);

          delay(100);

          PWM_value_left(10);

          PWM_value_right(7);

          }

          timer0() interrupt 1 using 2

          {

          static uint t ;

          t++;

          if(t==10)

          {

          t=0;

          p1_0=1;

          p1_1=0;

          }

          if(PWM_T1==t)

          P1=P10xfc;

          }

          timer1() interrupt 3

          {

          static uint t1 ;

          t1++;

          if(t1==10)

          {

          t1=0;

          p1_2=1;

          p1_3=0;

          }

          if(PWM_T2==t1)

          P1=P10xf3;

          }

          答:沒有主循環(huán),

          沒有等到中斷3

          程序運(yùn)行一次就跑飛了!!!

          void main(void)

          {

          //...你的程序

          //在這里加 死循環(huán),等待中斷

          while(1)

          {

          ;

          }

          }

          而且,中斷響應(yīng)函數(shù)里必須要清中斷標(biāo)志位(你的沒有)!

          3、各位大俠幫我看一下我寫的51單片機(jī)C程序中斷有沒有問題,執(zhí)行中斷后不能繼續(xù)執(zhí)行主程序,注:P3.2口一直接

          注:P3.2口一直接地,程序如下:

          #include

          sbit dula=P2^6;

          sbit wela=P2^7;

          sbit d0=P1^0;

          sbit d1=P1^1;

          sbit d2=P1^2;

          sbit d3=P1^3;

          sbit d4=P1^4;

          sbit d5=P1^5;

          sbit d6=P1^6;

          sbit d7=P1^7;

          #define uchar unsigned char

          #define uint unsigned int

          uchar num;

          uchar code table[]={

          0x3f,0x06,0x5b,0x4f,

          0x66,0x6d,0x7d,0x07,

          0x7f,0x6f,0x77,0x7c,

          0x39,0x5e,0x79,0x71};

          void delay(uint z);

          void main()

          {

          EA=1;

          EX0=1;

          IT0=0;

          wela=1;

          P0=0xc0;

          wela=0;

          while(1)

          {

          for(num=0;num16;num++)

          {

          dula=1;

          P0=table[num];

          dula=0;

          delay(1000);

          }

          }

          }

          void delay(uint z)

          {

          uint a,b;

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

          for(b=110;b>0;b--);

          }

          void exter0() interrupt 0

          {

          uint c;

          for(c=0;c25000;c++);

          d0=0;

          for(c=0;c25000;c++);

          d0=1;

          for(c=0;c25000;c++);

          d1=0;

          for(c=0;c25000;c++);

          d1=1;

          for(c=0;c25000;c++);

          d2=0;

          for(c=0;c25000;c++);

          d2=1;

          for(c=0;c25000;c++);

          d3=0;

          for(c=0;c25000;c++);

          d3=1;

          for(c=0;c25000;c++);

          d4=0;

          for(c=0;c25000;c++);

          d4=1;

          for(c=0;c25000;c++);

          d5=0;

          for(c=0;c25000;c++);

          d5=1;

          for(c=0;c25000;c++);

          d6=0;

          for(c=0;c25000;c++);

          d6=1;

          for(c=0;c25000;c++);


          上一頁 1 2 3 4 5 6 7 8 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(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); })();