作者Magicx (270度的鸟顾之相)
看板Electronics
标题Re: [问题] (8051 C语言) 外部中断问题。
时间Wed Feb 14 21:25:57 2007
※ 引述《fmdjyl (小D(滴))》之铭言:
: 不好意思~~因为看了你第一次的解答~~我也明白~~我应该让你会错意了!!!
: 我的停止是回到最初~~并非在原地停止不动~~
: 至於那return 我是要跳出while回圈~回到最初~~ 我想是否改为下列这样写比较好呢?
: 51和c才刚开始学~所以很多想法不太确定不对~~ 得实际跑过才能确定~~
: 非常谢谢你的指教~~
: ----------------------------------------------------------------------------
: void stop() interrupt 0
: {
: fg=1;
: }
: main()
: {
: while(1)
: {
: init() //做一些初始化
: data()
: }
//嗯...首先..假设你没按start....那麽你的程式会一直执行init()
//再来你按下start後..你的程式会不断执行init()然後data()
//这样你做一次data後下次进来会做一次init()?? 怪怪的? 这是你的原意吗?
//再来...如果你按下reset...return应该会让你跳出while...程式结束....
//因为我不知道你到底是要做怎样的东西...所以就只是讲一下你的程式将会如何执行
我是觉得应该是这样写:
void start() interrupt 2
{
start_flag =1;
}
void reset() interrupt 0
{
reset_flag =1;
}
init()
{
.............//其他重置
start_flag =0;
reset_flag =0;
}
main()
{
while(1)
{
init() //做一些初始化
while(start_flag==0); //START=1才开始执行
while(reset!=1)
data();
}
}
//这样一来...不会重复无谓的重置....重置做一次就好..之後等中断函式START的执行
//没按下reset的话会一直执行data()...
//按下去的话会执行一次重置然後停在 while(start_flag==0); 等使用者
参考看看~
: }
: data()
: {
: if(start == 0)
: {
: switch(temp)
: {
: case 1:
: ........
: break;
: case 2:
: ........
: break;
: }
: if(fg == 1)
: {
: fg=0;
: return;
: {
: }
: }
: ※ 引述《Magicx (270度的鸟顾之相)》之铭言:
: : 倒也不是不好啦...可能你前面没把问题讲清楚..."你的stop是要重置"
: : "而不是暂停在那..一但按下start..程式继续执行" <--这是我原来的意思
: : ^^^^^^^
: : 我还是不太懂你switch的用意...?
: : 而你这个return ...应该是会跳出while(1)..继续往下执行喔
: : 这样应该没有重置...而是结束...所以你的reset应该是写在本来的
: : int0中断函式里
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.175.204.164
1F:推 fmdjyl:非常谢谢你的指导~~让我受益良多!!谢谢你~~~ 02/14 22:05
2F:推 Magicx:呵..不客气~ 02/16 17:01