<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

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

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

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

if(key1==0)

keybreak();

}

這個(gè)程序上電后P0口顯示0x32;按下key2顯示0x3f;key1用于中斷,每20ms檢測是否有按下key1鍵,有的話(huà),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ì )執行 INT_0: PUSH ACC ;

由于p中1斷中1A被設為10所以5中7斷返回后對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é)習avrATmage 128 遇到問(wèn)題,中斷程序被忽略問(wèn)題,找不到原因。

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

程序如下

#include

#include

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

{

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

DDRE = 0xFF;

MCUCR |=(1

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

TIMSK|=(1

TCNT0 =155; //定時(shí)器賦初值

TCCR0 |= (1 CS01); //8分頻

while (1);

}

volatile unsigned int j =0;

#pragma interrupt_handler timer0_ovf_isr:17

void timer0_ovf_isr(void)

{

TCNT0 = 156; //設初值

j++;

if(j = 5000) //中斷5000次后 執行LED 電平翻轉

PORTE ^= 0xFF; //LED 電平翻轉

}

../lesson2.c:18: warning: ignoring #pragma interrupt_handler timer0_ovf_isr

上面是寫(xiě)的程序。還有編譯信息欄里的話(huà)。

答:

不是,你那句#pragma interrupt_handler timer0_ovf_isr:17是ICCAVR編譯軟件中寫(xiě)中斷的方式,而看你的頭文件#include 和#include 應該是用avr studio裝GCCavr編譯軟件的寫(xiě)法,你加上把中斷成

SIGNAL(SIG_OVERFLOW0)

{

TCNT0 = 156; //設初值

j++;

if(j = 5000) //中斷5000次后 執行LED 電平翻轉

PORTE ^= 0xFF; //LED 電平翻轉

}

看看,記住,這是GCCAVR 編譯軟件的寫(xiě)法

8新學(xué)的C51,編了個(gè)電平觸發(fā)式中斷程序,不知道為什么和跳變沿的一樣了,諸位幫忙看看.

#include

#define uchar unsigned char

#define uint unsigned int

sbit d1=P1^0;

sbit dula=P2^6;

sbit wela=P2^7;

void delay(uint z);

uchar code table[]={

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

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

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

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

void main()

{

EA=1;

EX0=1;

IT0=0;

while(1)

{ d1=1;

dula=1;

P0=table[1];

dula=0;

P0=0xff;

wela=1;

P0=0xfe;

wela=0;

delay(500);

dula=1;

P0=table[2];

dula=0;

P0=0xff;

wela=1;

P0=0xfd;

wela=0;

delay(500);

dula=1;

P0=table[3];

dula=0;

P0=0xff;

wela=1;

P0=0xfb;

wela=0;

delay(500);

dula=1;

P0=table[4];

dula=0;

P0=0xff;

wela=1;

P0=0xf7;

wela=0;

delay(500);

dula=1;

P0=table[5];

dula=0;

P0=0xff;

wela=1;

P0=0xef;

wela=0;

delay(500);

dula=1;

P0=table[6];

dula=0;

P0=0xff;

wela=1;

P0=0xdf;

wela=0;

delay(500);

}

}

void delay(uint z)

{

uint x,y;

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

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

}

void enter() interrupt 0

{

d1=0;

}

答: 你這個(gè)程序中設置IT0=0,說(shuō)明是低電平觸發(fā),所以只要P3^2口一直是低電平那么主程序停止,所以發(fā)光二極管點(diǎn)亮,如果P3^2口變?yōu)楦唠娖?,主程序繼續,發(fā)光二極管熄滅。另一種情況是當IT0=1的時(shí)候是負跳變觸發(fā),就是當P3^2口檢測到一個(gè)又高電平到低電平的跳變后,觸發(fā)中斷,在中斷函數中點(diǎn)亮燈,立即出中斷,執行到d1=1時(shí)熄燈??吹降默F象就是燈閃一下,直到又檢測到一個(gè)負跳變,燈又閃一下。兩種觸發(fā)方式的現象是不一樣的,如果你硬件沒(méi)問(wèn)題的話(huà)。你可以把中斷函數寫(xiě)成d1=!d1試試。

9、在C51單片機中,中斷服務(wù)程序怎么撤銷(xiāo)中斷引腳上的低電平?

我用的是,第一個(gè)單片機輸出低電平到第二個(gè)單片機的P3^2,第二個(gè)單片機是電平觸發(fā)方式中斷

低電平觸發(fā)方式:要求低電平保持到CPU實(shí)際響應為止,為了避勉CPU再次響應中斷,在中斷服務(wù)程序中應該撤除中斷引腳上的低電平。請問(wèn),怎么撤銷(xiāo)?在中斷服務(wù)程序中怎么寫(xiě)? 直接寫(xiě)P3^2=1;行嗎?

答:

第一個(gè)單片機的程序,是誰(shuí)來(lái)編寫(xiě)? 如果也是樓主,那就好辦了。

第二個(gè)單片機完成了中斷的功能,在退出之前,可以向第一個(gè)單片機回送一個(gè)脈沖;

第一個(gè)單片機收到這個(gè)脈沖,就應該撤消送到第二個(gè)單片機的中斷申請信號。

----

另外,如果能算出來(lái)完成中斷的時(shí)間,第一個(gè)單片機送來(lái)的申請信號,就不要超過(guò)這個(gè)時(shí)間,應該及時(shí)、自動(dòng)的撤消申請信號。



評論


相關(guān)推薦

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

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>