熱門(mén): 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂(lè)園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2017-8-20 10:31
正文摘要:為啥一有while循環(huán) 串口中斷就接不到數(shù)據(jù)了 只要前進(jìn) 就停止不了了 只要一前進(jìn) 任何操作都執(zhí)行不了了 求大神幫助 完整程序代碼: #include<reg5 ... |
樓主:你能證明打不斷嗎?(樓主9樓問(wèn)題)。 進(jìn)入?yún)R編級(jí)調(diào)試: 在中斷處設(shè)斷點(diǎn),改單步運(yùn)行,執(zhí)行到中斷返回RETI后,看是不是回到你的程序中去了。 |
中斷高的,只是進(jìn)去了你這程序體現(xiàn)不出來(lái),程序沒(méi)寫(xiě)好。 |
hkoos 發(fā)表于 2017-8-21 10:22 這樣寫(xiě)當(dāng)然不會(huì)跳出循環(huán)了,串口中斷是執(zhí)行了,但是程序一直還在run函數(shù)的while(1)里面。。。沒(méi)有執(zhí)行到case語(yǔ)句那里。兩種方法,把串口處理那部分語(yǔ)句寫(xiě)進(jìn)run函數(shù)while里面;或者,你把所有的轉(zhuǎn)動(dòng)程序?qū)懺谝粋(gè)函數(shù)里面,設(shè)置同一個(gè)變量,不要有循環(huán),然后把這個(gè)函數(shù)放主函數(shù)while里面運(yùn)行,串口命令去改變這個(gè)變量就好了。 |
oo0o_11 發(fā)表于 2017-8-20 15:49 void run(){//前進(jìn) while(1){ P1=0x7b; if(rw==0){ break; } } } case '0': rw=0;break;//停止 case '1': rw=1;run();break;//前進(jìn) 我改成這樣還是不行啊 只要一執(zhí)行ruin 其他的任何操作都執(zhí)行不了了 |
中斷高 |
yzwzfyz 發(fā)表于 2017-8-21 01:12 可是打斷不了啊 |
如果WHILE不在一個(gè)更高級(jí)或等級(jí)的中斷服務(wù)程序中,必被串口中斷打斷。 |
oo0o_11 發(fā)表于 2017-8-20 15:49 可是怎么在外部中斷這個(gè)while啊 |
問(wèn)題出在你這個(gè)run函數(shù)里面,里面的while循環(huán)跳不出來(lái),不能那么寫(xiě)。 void run(uint r){//前進(jìn) while(r){ P1=0x7b; } } 前進(jìn)過(guò)程中來(lái)串口中斷,需要做其他動(dòng)作需要在這個(gè)while里面講你的r置0 跳出循環(huán) |
參與人數(shù) 1 | 黑幣 +50 | 收起 理由 |
---|---|---|
![]() | + 50 | 回帖助人的獎(jiǎng)勵(lì)! |
常沉 發(fā)表于 2017-8-20 13:00 可是while一循環(huán) 串口中斷里就沒(méi)法接受藍(lán)牙數(shù)據(jù)了是咋回事啊 |
一個(gè)中斷,一個(gè)主循環(huán),沒(méi)有比較價(jià)值啊 |
參與人數(shù) 1 | 黑幣 +20 | 收起 理由 |
---|---|---|
![]() | + 20 | 回帖助人的獎(jiǎng)勵(lì)! |
yzwzfyz 發(fā)表于 2017-8-20 12:17 不是語(yǔ)句 是串口中斷 串口中斷好像不能中斷while循環(huán) |
語(yǔ)句無(wú)優(yōu)先級(jí)之分,看你把哪個(gè)寫(xiě)在前面,哪個(gè)就先被執(zhí)行。 |
參與人數(shù) 1 | 黑幣 +20 | 收起 理由 |
---|---|---|
![]() | + 20 | 回帖助人的獎(jiǎng)勵(lì)! |
Powered by 單片機(jī)教程網(wǎng)