在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

    
    
    <address id="vxupu"><td id="vxupu"></td></address>

      <pre id="vxupu"><small id="vxupu"></small></pre>
      <dfn id="vxupu"></dfn>
      <div id="vxupu"><small id="vxupu"></small></div>
    1. 新聞中心

      EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 單片機常見延時與中斷問題及解決方法

      單片機常見延時與中斷問題及解決方法

      作者: 時間:2013-06-06 來源:網(wǎng)絡 收藏

      ORG 0000H

      AJMP AG

      ORG 0030H

      AG:MOV A,#11111110B

      MOV R0,#8

      AG1:RL A

      MOV P0,A

      ACALL DELAY

      DJNZ R0,AG1

      ACALL DELAY

      MOV A,#11111111B

      MOV P1,A

      ACALL DELAY

      MOV P0,#00000000B

      ACALL DELAY

      MOV P0,#11111111B

      ACALL DELAY

      MOV P0,#00000000B

      ACALL DELAY

      MOV P0,#11111111B

      ACALL DELAY

      SJMP AG

      DELAY:MOV R3,#10

      D3:MOV R2,#200

      D1:MOV R1,#250

      D2JNZ R1,D2

      DJNZ R2,D1

      DJNZ R3,D3

      RET

      END

      5、STC89C52通過兩個外部中斷P3.2和P3.3,來控制P1.0和P1.1的數(shù)碼管亮和滅,一定keil C

      說明:通過外部中斷0【P3.2】,P1.0的數(shù)碼管亮,中斷結束后,數(shù)碼管滅;再由外部中斷1【P3.3】,P1.1的數(shù)碼管亮,次中斷結束后,數(shù)碼管滅;簡言之就是一個中斷只控制一個數(shù)碼管,中斷之間在功能上沒有必然的聯(lián)系,編程環(huán)境keil C51。P1.0和P1.1口上接的都是普通LED小燈,數(shù)碼管=LED小燈。

      以下是我編的程序,就是一個中斷控制一個數(shù)碼管,但是當有兩個中斷時,我就抓瞎了

      #include

      sbit D1=P1^0;

      void main()

      {

      D1=1;

      EA=1;

      EX0=1;

      }

      void exter() interrupt 0

      {

      D1=0;

      }

      求高手幫我改改程序,改成兩個中斷的那種,功能要求都寫在上面了~【希望能有程序注釋】3Q,我會去keil里面模擬的~~o()^))o

      答:

      /*模塊低電平有效、外部中斷0、1為低電平出發(fā)*/

      #include "reg52.h"

      void delay( char i)

      {

      unsigned char t;

      while(i--)

      {

      for(t=0;t108;t++);

      }

      }

      void INT0_ROUTING() interrupt 0//外部中斷0子程序

      {

      P0=0xfe;//LED0點亮

      while((P3|0xfb)==0xff);//等待外部中斷0口(P3^2松開)

      delay(10);//延時去抖動

      P0=0xff;//LED0熄滅

      }

      void INT0_ROUTING() interrupt 2

      {

      P0=0xfd;//LED1點亮

      while((P3|0xf7)==0xff);//等待外部中斷1口(P3^3松開)

      delay(10);//延時去抖動

      P0=0xff;//LED1熄滅

      }

      void main()

      {

      EA=1;//中斷總開關

      EX0=1;//外部中斷0開

      EX1=1;//外部中斷1開

      /*默認低電平觸發(fā)*/

      while(1);//死循環(huán) 防止跑飛

      }

      6、,下面這段程序不知道為什么只進一次中斷,就沒有反應了呢?

      #include // 包含51寄存器定義的頭文件

      #define uint unsigned int

      sbit key1=P1^4;

      sbit key2=P1^5;

      void delay1ms(uint i)

      {

      uchar j;

      while(i--)

      {

      for(j=0;j125;j++) //1ms基準延時程序

      {

      ;

      }

      }

      }

      void init()

      {

      EA=1; //開總中斷

      ES=1; //開串口中斷

      TMOD= 0x21; //定時器1定時方式2,定時器1工作于8位自動重載模式, 用于產(chǎn)生波特率

      SCON = 0x50; // 設定串行口工作方式1 允許接收

      TH0=(65536-50000)/256;

      TL0=(65536-50000)%256;

      TH1= 0xfd; //11.0592M 波特率9600

      TL1= 0xfd;

      PCON =0x00; // 波特率不倍增

      TR1= 1; //啟動定時器T1

      TR0=1; //啟動定時器T0

      ET0=1; //打開T0中斷

      }

      void key()

      {

      if(key2==0)

      P0=0x3f;

      delay1ms(5000);

      P0=0xf3;

      }

      void mainxh()

      {

      while(1)

      {

      key();

      P0=0x32;

      }

      }

      void keybreak()

      {

      P0=0xf1;

      delay1ms(5000);

      P0=0x1f;

      mainxh();

      }

      void main(void)

      {

      init();

      mainxh();

      }

      void Time0(void) interrupt 1

      {

      TH0=(65536-50000)/256; //定時器T0的高8位重新賦初值

      TL0=(65536-50000)%256; //定時器T0的高8位重新賦初值

      if(key1==0)

      keybreak();

      }

      這個程序上電后P0口顯示0x32;按下key2顯示0x3f;key1用于中斷,每20ms檢測是否有按下key1鍵,有的話,P0口顯示0xf1。

      答 :

      ORG 0000H AJMP MAIN ORG 0001H LJMP INT_0 ORG 30H MAIN:MOV SP,#8FH MOV P0,#0FFH MOV P3,#0FFH SETB IT0 SETB EA SETB EX0 LJMP START START: MOV A,#10000000B LOOP: MOV P0,A RLC A LCALL DELAY LCALL DELAY LJMP LOOP LJMP START;

      這句是多余的 根本不會執(zhí)行 INT_0: PUSH ACC ;

      由于p中1斷中1A被設為10所以5中7斷返回后對A移位沒有意義,o A一e直為10 ,并不d是只能中斷一1次 .

      還有,不清楚key1是什么中斷,貌似是鍵盤掃描吧,

      while(1)

      {

      key();

      P0=0x32;

      }

      都進入死循環(huán)了,所以跳不出來,就一次中斷了。

      7、新手學習avrATmage 128 遇到問題,中斷程序被忽略問題,找不到原因。

      avr studio 4 軟件仿真時,編譯通過了,單在編譯信息欄卻看到中斷程序被忽略。在軟件仿真時也發(fā)現(xiàn)中斷程序沒有執(zhí)行。不知道問題出在哪里,我用的是avr studio 4 ATmage 128 單片機.

      程序如下

      #include

      #include

      void main() //用的是TC0 溢出中斷,來控制八位LED 一秒閃爍

      {

      PORTE = 0xFF; //LED 關 端口高電平位關

      DDRE = 0xFF;

      MCUCR |=(1

      sei(); //開啟全局中斷

      51單片機相關文章:51單片機教程


      c語言相關文章:c語言教程


      晶振相關文章:晶振原理

      上一頁 1 2 3 4 5 下一頁

      評論


      相關推薦

      技術專區(qū)

      關閉