|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
關(guān)于外部中斷的一個(gè)問題 |
| 作者:hy1314 欄目:技術(shù)交流 |
我想用外部中斷INT0來采集46KHz的方波,通過計(jì)算低電平的個(gè)數(shù)來做的,并由串口輸出個(gè)數(shù)!我設(shè)置的是串口中斷優(yōu)先,我應(yīng)該如何來控制外部中斷的開關(guān)呢?是在串口中斷里面設(shè)置EX0=1嗎? |
| 2樓: | >>參與討論 |
| 作者: conwh 于 2006/10/16 23:10:00 發(fā)布:
看你的掃描時(shí)間,在UART輸出時(shí)關(guān)閉INTx的中斷 |
|
| 3樓: | >>參與討論 |
| 作者: hotpower 于 2006/10/16 23:14:00 發(fā)布:
沒必要吧~~~ |
|
| 4樓: | >>參與討論 |
| 作者: hy1314 于 2006/10/17 9:20:00 發(fā)布:
程序 我是這么想的:串口中斷優(yōu)先,并在串口中斷里面設(shè)置了IT0=1;EX0=1;先串口中斷后,應(yīng)該開始外部中斷,這個(gè)時(shí)候應(yīng)該開始計(jì)數(shù)了,然后再通過串口中斷輸出數(shù)據(jù) ,我沒有得到數(shù)據(jù)。大家?guī)臀铱纯!謝謝 外部中斷程序:void int0() interrupt 0 //using 2 { if(count<0xEA60) //小于60000加1 { count++; } else { j++; count=0; } } 串口中斷程序:serial() interrupt 4 //using 1 { if(RI) { RI=0; if((RB8)&(!(SBUF^0x96))&(i==0)) { SM2=0; sum=0x96; } else if(SM2==0) { r_output[i]=SBUF; sum+=r_output[i]; i++; if((i==5)&&(sum==0)) { if(r_output[0]==0x02) { IT0=1; EX0=1; } if(r_output[0]==0x06) { get_data_flag6 = 1 ; //LCU控制板CLK } SM2=1; //數(shù)據(jù)正確就將其放入數(shù)據(jù)區(qū) i=0; } else if((i==5)) { SM2 = 1; //數(shù)據(jù)出錯(cuò)就重新開始接收 i = 0; } } } } 接收數(shù)據(jù):if(get_data_flag6 ==1) { get_data_flag6 = 0 ; ES=0; ctrl485=1; sum=0x36; SBUF=0x36; while(TI==0); TI=0; sum+=r_output[0]; SBUF=r_output[0]; while(TI==0); TI=0; sum+=j ; SBUF=j ; while(TI==0); TI=0; sum+=count%256; //低位數(shù)據(jù) SBUF=count%256; while(TI==0); TI=0; sum+=count/256; //高位數(shù)據(jù) SBUF=count/256; while(TI==0); TI=0; SBUF=0xff-sum+1; while(TI==0); TI=0; ctrl485=0; ES=1; } |
|
| 5樓: | >>參與討論 |
| 作者: hotpower 于 2006/10/17 22:12:00 發(fā)布:
在接收程序里應(yīng)該關(guān)EX0而非ES~~~ 接收程序里使用count和j. 一般在接收程序里先關(guān)EX0后將count和j暫存后再開EX0,這個(gè)時(shí)間很短~~~ |
|
| 6樓: | >>參與討論 |
| 作者: hy1314 于 2006/10/18 8:12:00 發(fā)布:
外部中斷 昨天我把外部中斷優(yōu)先了,并把P1設(shè)成觀察口,可以進(jìn)入中斷。可惜的是不能進(jìn)入串口中斷!在外部中斷里面想通過判斷TF0來關(guān)中斷,好像只關(guān)了不到1秒的時(shí)間,我應(yīng)該如何關(guān)呢? |
|
| 7樓: | >>參與討論 |
| 作者: conwh 于 2006/10/18 15:54:00 發(fā)布:
NEXT hy1314 發(fā)表于 2006-10-16 21:07 技術(shù)交流 ←返回版面 關(guān)于外部中斷的一個(gè)問題 我想用外部中斷INT0來采集46KHz的方波,通過計(jì)算低電平的個(gè)數(shù)來做的,并由串口輸出個(gè)數(shù)!我設(shè)置的是串口中斷優(yōu)先,我應(yīng)該如何來控制外部中斷的開關(guān)呢?是在串口中斷里面設(shè)置EX0=1嗎? ===================================== 你不會(huì)總在數(shù)數(shù)吧?你有讓大家猜的時(shí)間,都能把你的設(shè)計(jì)(軟硬一起)做出來。耽誤工夫! |
|
| 8樓: | >>參與討論 |
| 作者: szzhengjin 于 2006/10/18 16:44:00 發(fā)布:
整理一下你的思路,我說一些,看是否有用 64K的方波,你的CPU若是24M,那INT0中斷里的程序在31.25個(gè)機(jī)器周期內(nèi)必須完成,若是22.1184M,那INT0中斷里的程序在28.8個(gè)機(jī)器周期內(nèi)必須完成 串行中斷,若方波是不停的進(jìn)來,那串行中斷接收數(shù)據(jù)處理時(shí)間得更短,否則根本沒辦法處理 具體的解決辦法得根據(jù)你的實(shí)際應(yīng)用,最好采用高效的單片機(jī),即單條指令不用這么長時(shí)間的 |
|
| 9樓: | >>參與討論 |
| 作者: hy1314 于 2006/10/18 16:57:00 發(fā)布:
解決了 問題解決了!由于外部中斷&定時(shí)中斷是同一優(yōu)先級(jí)的,導(dǎo)致了外部中斷不響應(yīng)。INT0里面的程序很短的!謝謝。。。 |
|
|
|
| 免費(fèi)注冊(cè)為維庫電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |