日本a√视频在线,久久青青亚洲国产,亚洲一区欧美二区,免费g片在线观看网站

        <style id="k3y6c"><u id="k3y6c"></u></style>
        <s id="k3y6c"></s>
        <mark id="k3y6c"></mark>
          
          

          <mark id="k3y6c"></mark>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)常見(jiàn)延時(shí)與中斷問(wèn)題及解決方法

          單片機(jī)常見(jiàn)延時(shí)與中斷問(wèn)題及解決方法

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

          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通過(guò)兩個(gè)外部中斷P3.2和P3.3,來(lái)控制P1.0和P1.1的數(shù)碼管亮和滅,一定keil C

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

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

          #include

          sbit D1=P1^0;

          void main()

          {

          D1=1;

          EA=1;

          EX0=1;

          }

          void exter() interrupt 0

          {

          D1=0;

          }

          求高手幫我改改程序,改成兩個(gè)中斷的那種,功能要求都寫(xiě)在上面了~【希望能有程序注釋】3Q,我會(huì)去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點(diǎn)亮

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

          delay(10);//延時(shí)去抖動(dòng)

          P0=0xff;//LED0熄滅

          }

          void INT0_ROUTING() interrupt 2

          {

          P0=0xfd;//LED1點(diǎn)亮

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

          delay(10);//延時(shí)去抖動(dòng)

          P0=0xff;//LED1熄滅

          }

          void main()

          {

          EA=1;//中斷總開(kāi)關(guān)

          EX0=1;//外部中斷0開(kāi)

          EX1=1;//外部中斷1開(kāi)

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

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

          }

          6、,下面這段程序不知道為什么只進(jìn)一次中斷,就沒(méi)有反應(yīng)了呢?

          #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基準(zhǔn)延時(shí)程序

          {

          ;

          }

          }

          }

          void init()

          {

          EA=1; //開(kāi)總中斷

          ES=1; //開(kāi)串口中斷

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

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

          TH0=(65536-50000)/256;

          TL0=(65536-50000)%256;

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

          TL1= 0xfd;

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

          TR1= 1; //啟動(dòng)定時(shí)器T1

          TR0=1; //啟動(dòng)定時(shí)器T0

          ET0=1; //打開(kāi)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; //定時(shí)器T0的高8位重新賦初值

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

          if(key1==0)

          keybreak();

          }

          這個(gè)程序上電后P0口顯示0x32;按下key2顯示0x3f;key1用于中斷,每20ms檢測(cè)是否有按下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;

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

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

          還有,不清楚key1是什么中斷,貌似是鍵盤(pán)掃描吧,

          while(1)

          {

          key();

          P0=0x32;

          }

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

          7、新手學(xué)習(xí)avrATmage 128 遇到問(wèn)題,中斷程序被忽略問(wèn)題,找不到原因。

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

          程序如下

          #include

          #include

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

          {

          PORTE = 0xFF; //LED 關(guān) 端口高電平位關(guān)

          DDRE = 0xFF;

          MCUCR |=(1

          sei(); //開(kāi)啟全局中斷

          51單片機(jī)相關(guān)文章:51單片機(jī)教程


          c語(yǔ)言相關(guān)文章:c語(yǔ)言教程


          晶振相關(guān)文章:晶振原理

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

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉