|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
請高手一定進(jìn)來,關(guān)于中斷 |
| 作者:zoupeng139 欄目:單片機(jī) |
請問IE1由0變?yōu)?再變?yōu)?是不是證明一定執(zhí)行過中斷了呢? 我用的外部中斷INT1,在我第一次運(yùn)行時(shí)中斷可以執(zhí)行,但當(dāng)我執(zhí)行完串行通訊(T1做波特率發(fā)生器)后,以后中斷程序就再也不起作用了,是不是串行通訊時(shí)波特率的設(shè)置對中斷的影響呢?可是我把控制定時(shí)和中斷的各個(gè)寄存器的值都設(shè)置為和第一次可以執(zhí)行中斷時(shí)的值完全一樣,還是不行,不知到底是什么原因??? |
| 2樓: | >>參與討論 |
| 作者: 促狹鬼 于 2005/10/21 11:01:00 發(fā)布:
51? 用作波特率發(fā)生器時(shí)就不能再作它用了。這好象是基本常識 |
|
| 3樓: | >>參與討論 |
| 作者: CXCHINA 于 2005/10/21 11:05:00 發(fā)布:
檢查吧 外部中斷有兩種邊沿觸發(fā)和低電平方式,在低電平方式需要在中斷子程序中用軟件清零IE1,而且要在保證管腳的電平為1時(shí)才退出中斷子程序。 注意是否開放中斷EX1=1 EA=1。 硬件管腳加10K上拉電阻 |
|
| 4樓: | >>參與討論 |
| 作者: 促狹鬼 于 2005/10/21 12:35:00 發(fā)布:
不好意思 原來沒認(rèn)真看內(nèi)容。 進(jìn)入中斷后沒有軟件清中斷標(biāo)志,會使程序不斷進(jìn)中斷的,而不是進(jìn)不了。(如果你的設(shè)置是需要軟件清標(biāo)志)。 估計(jì)是在中斷程序里關(guān)了中斷允許,退出時(shí)忘了再次開放。 |
|
| 5樓: | >>參與討論 |
| 作者: zoupeng139 于 2005/10/21 14:16:00 發(fā)布:
謝謝兩位大蝦 我的中斷程序?yàn)?br>{ EX1=0; end=1; //就是設(shè)置一個(gè)用于查詢的標(biāo)志 EX1=1; } 所以感覺不是"促狹鬼"大俠所說的問題 請問"CXCHINA"大俠,硬件加上拉電阻是怎么回事?是往INT1上加嗎? 我在單步執(zhí)行過程中看IE1的變化是起初為0然后變?yōu)?再變?yōu)?,是不是證明我的中斷已經(jīng)執(zhí)行了呢?可是end的值卻仍然是0 |
|
| 6樓: | >>參與討論 |
| 作者: 促狹鬼 于 2005/10/21 14:25:00 發(fā)布:
? 原來你判斷執(zhí)行過一次中斷,是從“單步執(zhí)行過程中看IE1的變化是起初為0然后變?yōu)?再變?yōu)?”?這樣好象不行。中斷過程非常快,中斷與否一般不用單步執(zhí)行來檢查。也許你的程序從來就沒有進(jìn)過中斷里去。 如果方便,把程序帖出來 |
|
| 7樓: | >>參與討論 |
| 作者: zoupeng139 于 2005/10/21 15:08:00 發(fā)布:
哦,謝謝 大蝦, 以下是我的那個(gè)程序請幫忙看一下,只寫了主要的部分 感覺好象中斷程序并未執(zhí)行,因?yàn)樵O(shè)置中斷斷點(diǎn)是也是只有第一次進(jìn)入中斷了,以后就進(jìn)不去了 void TransData() { uchar j; uint idata Temp_Address; TMOD=0x20; //T1工作在方式1 TH1=0xFD; //初始值,書上給的 TL1=0xFD; TR1=1; //開啟T1定時(shí)器 SCON=0x50; //串行工作方式為方式1 EA=1;ES=1;ET1=1; //開總中斷、串行中斷、T1中斷 GetAddress(); Current_Address--; Temp_Address=Current_Address; j=0; while( Current_Address>0x0004) { outbuf[2]= XBYTE[Current_Address]; outbuf[1]= XBYTE[Current_Address-1]; outbuf[0]= XBYTE[Current_Address-2]; send_string_com(outbuf,3); j++; Current_Address=Temp_Address-3*j; } Current_Address=Temp_Address-3*j; //片外存儲區(qū)末址 } void Int1() interrupt 2 using 1 { EX1=0; EndFlag=1; EX1=1; } void main(void) { main1: EndFlag=0; if(Auto==0) { IE1=0; IT1=0; EA=1;EX1=1; auto_1: Delay400Ms(); Measure();//采集程序未寫 while(EndFlag==1) { TransData();//發(fā)送數(shù)據(jù)程序未寫 goto main1; } goto auto_1; } else goto main1; } |
|
| 8樓: | >>參與討論 |
| 作者: zoupeng139 于 2005/10/21 15:39:00 發(fā)布:
當(dāng)不執(zhí)行串行通訊時(shí)就可以正常 當(dāng)不執(zhí)行串行通訊(程序中的transdata)時(shí)就可以正常 |
|
| 9樓: | >>參與討論 |
| 作者: maxking 于 2005/10/21 16:01:00 發(fā)布:
初始化部分怎么不是在main()完成的? 這個(gè)程序好像不能初始化啊。 |
|
| 10樓: | >>參與討論 |
| 作者: zoupeng139 于 2005/10/21 16:09:00 發(fā)布:
可以的 在調(diào)用程序時(shí)初始化啊 這只是程序的一部分,有些沒用的我就沒寫了 |
|
| 11樓: | >>參與討論 |
| 作者: 促狹鬼 于 2005/10/21 16:42:00 發(fā)布:
my god! 我的回復(fù)沒有成功? 這個(gè)程序?qū)懙膲騺y的。也沒看出哪里不能執(zhí)行INT1中斷。還是檢查一下硬件。 沒猜透你的程序思路,隨便修改了一下你的程序。auto變量是干嘛的?在哪兒影響過它的取值? void TransData(void) { uchar j; uint idata Temp_Address; GetAddress(); Current_Address--; Temp_Address=Current_Address; j=0; while( Current_Address>0x0004) { outbuf[2]= XBYTE[Current_Address]; outbuf[1]= XBYTE[Current_Address-1]; outbuf[0]= XBYTE[Current_Address-2]; send_string_com(outbuf,3); j++; Current_Address=Temp_Address-3*j; } Current_Address=Temp_Address-3*j; //片外存儲區(qū)末址 } void Int1() interrupt 2 using 1 { EX1=0; EndFlag=1; EX1=1; } void main(void) { init_system(); for(;;) { if(auto==0) { Delay400Ms(); Measure();//采集程序未寫 if(EndFlag==1) { TransData();//發(fā)送數(shù)據(jù)程序未寫 EndFlag=0; } auto=1; //auto干嘛用的?在哪里改變過它的值?// } } } void init_system(void) { IT1=0; //低電平中斷(硬件自動清0) IE1=0; //清中斷標(biāo)志// TMOD=0x20; //T1工作在方式1 TH1=0xFD; //初始值,書上給的 TL1=0xFD; TR1=1; //開啟T1定時(shí)器 SCON=0x50; //串行工作方式為方式1 ET1=1; //開T1中斷、串行中斷、INT1中斷和總中斷 ES=1; EX1=1; EA=1; EndFlag=0; } |
|
| 12樓: | >>參與討論 |
| 作者: zoupeng139 于 2005/10/21 18:50:00 發(fā)布:
哦,謝謝 你 。對不起程序沒說明白 其中AUTO是由按鍵控制的 當(dāng)有鍵按下時(shí)為0 這是一部分程序 主要是只要執(zhí)行transdata后中斷就不能用了,請幫忙看看我那程序的初始化都對嗎? |
|
| 13樓: | >>參與討論 |
| 作者: zoupeng139 于 2005/10/21 20:03:00 發(fā)布:
問題解決了 呵呵 沒有設(shè)中斷優(yōu)先級 謝謝大蝦!!! 我的程序確實(shí)不怎樣,這是別人寫的,我在別人的基礎(chǔ)上改和調(diào)試,以后自己寫一定會好好考慮的,謝謝 |
|
|
|
| 免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |