3个外部中断是一个一个来的,第1个为低电平有效,后面两个为负跳变有效,当进入第一个中断,P0.0口输出低电平,P0.1口输出高电平,延时1.5S后P0.0口输出高电平。当进入第二个中断,延时1.11S后P0.2口输出低电平,然后高0.15S,低0.3S,高0.3S,低0.58S,高0.12S,低1.08S,高2.55S,低0.47S,高0.075S,高低电平很多次这样。当进入第三个中断,P0.1口输出低电平。如此循环。还有一点需要说明的是。第一个中断低电平有效,会有好几次低电平。而中断只能第一次低电平时进入。后面再有低电平不能再进入中断。如果说进入第一次中断时就关闭第一个中断,那什么时候再打开?是循环的。如不打开,下次又怎么进入第一个中断?QQ:229809984
还是麻烦哪位高手帮我编好这个程序发给我吧!我是初学者,根本就不会编这样的程序,先谢过了。程序可用,再加分!
您的程序我下到开发板里试了第一个中断是进入了没问题,我再按K2 K3按键LED灯都没反应,应该是没有进入中断吧!第三个中断执行完了第一个中断源还会最后发生一次,这次也是不能进入中断的。看能不能就是第三个中断执行完了,第一个中断源发生的时候只是打开第一个中断,而不是进入第一个中断,这样就可以循环了我是这样想的。三个中断也不是要全部只执行一次,只是第一个中断只能执行一次。直到又重新开始时第一个中断才再次执行
追答添上一行:
void main(void)
{
TMOD = 01; //T0定时方式1
TH0 = (65536 - 10000) / 256;
TL0 = (65536 - 10000) % 256; //定时10ms@12MHz
TR0 = 0; //暂时不启动.
ET0 = 1;
PT0 = 1; //在这里加上这一句
…… //后面的不变
另外,你说:第一个中断只能执行一次。直到又重新开始时第一个中断才再次执行....
请说明:什么是重新开始?
还有:第二个,第三个,是先后发生吗?,是各出现一次吗?
重新开始是这样的,就是第三个中断执行完了,第一个中断源过几S或几十S还会最后发生一次,而这最后一次也不能进入中断的,我们可以把这最后一次做结束的标志,如第一个中断源最后发生一次之后,过段时间又发生了第一个中断源,那就是重新开始了。第一中断也可以负跳变有效的。
第二个 第三个是先后发生的。是各出现一次。
再稍做修改即可。
不是很明白,我是初学者,这个程序我也根本就不会写。
追答那你就坐等人给人发程序吧!我已经不用单片机好长时间了,电脑上也没有装这些软件了。
追问那也谢您了,我再等等吧!
高电平再打开,那当他又进入低电平了,那不是又要进入第一个中断了,那个口也支持边沿中断,问题就是3个中断的工作过程当中,第一个中断源的电平是经常高低变化的,当进入第三个中断,P0.1口输出低电平,过几S后,也有时十几S第一个中断源还会低电平一次。最后才结束,再重新开始。如此循环的。
追答你是想,一个循环三个中断都只能分别中断一次吗?那你就在每次循环结束后再打开嘛。
追问第三个中断程序结束后,过几S,也有时十几S,第一个中断还会低电平一次,才再次循环的,可在没循环之前第一个中断是不能再次进入的。如在第三个中断程序结束后第一个中断打开,那不是第一个中断又进入了。
追答如果说,第三个中断完成后,过几或十几S 第一个中断口上必定会低电平一次,那么你可以做个标志位把这必来一次中断放弃,就是进入后,标志为1则把标志清零后,直接跳出来。(中断还是设成边沿的好)等下次再来低电平就可以正常运行了,也就再次进入一次循环。
也可以这么说,收到哪个信号再控制哪个输出,按顺序来。可收到哪个信号再控制,应该是要进入中断的吧!我只知道两个外部中断,INT0, INT1.而输入有三个,还有一个引脚我也不知道怎么弄,该用什么引脚。