性无码一区二区三区在线观看,少妇被爽到高潮在线观看,午夜精品一区二区三区,无码中文字幕人妻在线一区二区三区,无码精品国产一区二区三区免费

  • 回復(fù)
  • 收藏
  • 點(diǎn)贊
  • 分享
  • 發(fā)新帖

【討論】51C語言編程可否用中斷令循環(huán)結(jié)束提前結(jié)束

C51_C語言編程控制流水燈

硬件電路 p0 接 led 8 個(gè),P33 接按鍵使用中斷2

開機(jī)燈按1~8逐位閃爍,并循環(huán)

按鍵后改為 兩燈亮 的流水燈

下面寫了個(gè)程序

#include

#include

#define uchar unsigned char

#define uint unsigned int

uchar ucTemp,ucTimes,ucShift=0;

void DelayMS(uint x)

{

uchar t;

while(x--)

for(t=120;t>0;t--);

}

void main()

{

ucTemp=0x0FE;

IT1=1;

EX1=1;

EA=1;

while(!ucShift)

{

for (ucTimes=0;ucTimes<7;ucTimes++)

{

P0=ucTemp;

DelayMS(250);

P0=0x0FF;

DelayMS(250);

}

ucTemp=_cror_(ucTemp,1);

}

//BESHIFT:

while (ucShift)

{

P0=ucTemp;

DelayMS(500);

ucTemp=_cror_(ucTemp,1);

}

// goto BESHIFT;

}

void P33_INT1() interrupt 2

{

ucTemp=0x0FD;

ucShift=1;

//可否在此程序內(nèi)加入如下語句(事實(shí)上試過會(huì)報(bào)錯(cuò))使得循環(huán)結(jié)束

//goto BESHIFT;

//return break;

//return goto BESHIFT;

}

問題是有什么辦法可以在調(diào)用中斷函數(shù)之后使得第一個(gè)while循環(huán)提前結(jié)束,

當(dāng)然可以在里面加多個(gè)IF,但這樣就不好玩了。

全部回復(fù)(7)
正序查看
倒序查看
001a
LV.3
2
2014-02-20 23:43
我是想在不改主函數(shù)和延時(shí)函數(shù)的情況下,實(shí)現(xiàn)按鍵后立馬跳轉(zhuǎn),但還沒見到過真這么作的,大家有什么巧妙的方法,懇請(qǐng)分享下
0
回復(fù)
matou
LV.3
3
2014-02-20 23:45
@001a
我是想在不改主函數(shù)和延時(shí)函數(shù)的情況下,實(shí)現(xiàn)按鍵后立馬跳轉(zhuǎn),但還沒見到過真這么作的,大家有什么巧妙的方法,懇請(qǐng)分享下
用匯編試試?在發(fā)生中斷后,把棧里面的返回地址改為循環(huán)指令塊
0
回復(fù)
001a
LV.3
4
2014-02-20 23:47
@matou
用匯編試試?在發(fā)生中斷后,把棧里面的返回地址改為循環(huán)指令塊
嗯值得一試,果然高階編程是匯編與c相結(jié)合的
0
回復(fù)
matou
LV.3
5
2014-02-20 23:48
@001a
嗯值得一試,果然高階編程是匯編與c相結(jié)合的
匯編雖然復(fù)雜,但學(xué)會(huì)了就可以逆天了,你甚至可以邊從網(wǎng)絡(luò)上下載代碼邊運(yùn)行
0
回復(fù)
001a
LV.3
6
2014-02-20 23:50
@matou
匯編雖然復(fù)雜,但學(xué)會(huì)了就可以逆天了,你甚至可以邊從網(wǎng)絡(luò)上下載代碼邊運(yùn)行

長見識(shí)了

0
回復(fù)
kcfoo1
LV.5
7
2014-02-28 09:19
@001a
我是想在不改主函數(shù)和延時(shí)函數(shù)的情況下,實(shí)現(xiàn)按鍵后立馬跳轉(zhuǎn),但還沒見到過真這么作的,大家有什么巧妙的方法,懇請(qǐng)分享下
好好看看51c ,goto 只能用在同一函數(shù)內(nèi),你只要把兩函數(shù)合并為一函數(shù),就可以,當(dāng)然不用goto也可以實(shí)現(xiàn),方法多是,但是如果用匯編混合編寫,那你出錯(cuò)幾率會(huì)大得多,尤其是改變程序地址指針,是非常不可取的
0
回復(fù)
xinzha
LV.1
8
2014-03-12 23:03
初始化term = 0,在中斷中term = 1,然后的你的while循環(huán)寫成while(0 == term){}。如果用標(biāo)準(zhǔn)c這樣寫的話需要將term聲明為volatile以防止優(yōu)化,c51是否需要不清楚。
0
回復(fù)
發(fā)