作者fmdjyl (小D(滴))
看板Electronics
标题Re: [问题] (8051 C语言) 外部中断问题。
时间Wed Feb 14 20:48:21 2007
不好意思~~因为看了你第一次的解答~~我也明白~~我应该让你会错意了!!!
我的停止是回到最初~~并非在原地停止不动~~
至於那return 我是要跳出while回圈~回到最初~~ 我想是否改为下列这样写比较好呢?
51和c才刚开始学~所以很多想法不太确定不对~~ 得实际跑过才能确定~~
非常谢谢你的指教~~
----------------------------------------------------------------------------
void stop() interrupt 0
{
fg=1;
}
main()
{
while(1)
{
init() //做一些初始化
data()
}
}
data()
{
if(start == 0)
{
switch(temp)
{
case 1:
........
break;
case 2:
........
break;
}
if(fg == 1)
{
fg=0;
return;
{
}
}
※ 引述《Magicx (270度的鸟顾之相)》之铭言:
: ※ 引述《fmdjyl (小D(滴))》之铭言:
: : 经由下午看书和前辈的指导後~给予我自己答案~
: : 我原本1的意思是.我进入 "外部中断0"时,因为我是要停止(让程式跑回最初状态)
: : 如果用goto的话~怕会让暂存器会一直堆叠我未完成的资料.
: : 但经由前辈指点说: 如果是有WatchDog的IC~就能让软体RESET...
: : 否则方法也就如Magicx前辈所说:就在"外部中断0"设一个旗标.
: : 然後在主程式再做判断..
: : 只是方法2的不好的地方在於~我是按STOP键就要让整个程式跑回最初~
: 倒也不是不好啦...可能你前面没把问题讲清楚..."你的stop是要重置"
: "而不是暂停在那..一但按下start..程式继续执行" <--这是我原来的意思
: : 但何时会按STOP不知道~~所以得再每个主程式都得一直加判断有无进入"外部中断0"
: : 但用於 switch case:的话~~好像就不用一直狂写判段式~
: : 只要在最後面写一段就ok~~
: : 想法如下: 如有错误请高手指教~
: : ----------------------------------------------
: : void stop() interrupt 0
: : {
: : fg=1;
: : }
: : main()
: : {
: : init()
: : while(1)
: : {
: : switch(temp)
: : {
: : case 1:
: : ........
: : break:
: : case 2:
: : ........
: : break:
: : }
: : if(fg=1)
: : {
: : fg=0;
: : return;
: ^^^^^^^
: 我还是不太懂你switch的用意...?
: 而你这个return ...应该是会跳出while(1)..继续往下执行喔
: 这样应该没有重置...而是结束...所以你的reset应该是写在本来的
: int0中断函式里
: : {
: : }//while
: : }//main
: : ---------------------------------------------
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.135.117.4