日韩在线不卡免费视频一区,日韩欧美精品一区二区三区经典,日产精品码2码三码四码区,人妻无码一区二区三区免费,日本feerbbwdh少妇丰满

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

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

C51_C語言編程控制流水燈

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

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

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

下面寫了個程序

#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;

//可否在此程序內加入如下語句(事實上試過會報錯)使得循環(huán)結束

//goto BESHIFT;

//return break;

//return goto BESHIFT;

}

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

當然可以在里面加多個IF,但這樣就不好玩了。

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

長見識了

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