
你的外部中断应该是属于下降沿触发,当有一个下降沿到来时外部中断请求标志IE0或IE1(外部中断0或外部中断1请求中断标志,下面简称为IEx)就会置1,当进入中断
程序后IEx由硬件归零。也就是说
单片机当检测到IEx为1的时候就会进入到外部中断程序。\x0d\x0a现在来分析一下为什么你的程序会执行两次中断。\x0d\x0a当单片机外部中断引脚第一次接收到一个下降沿时,IEx被置1,进入中断程序,随即IEx被硬件清零。然而由于你用杜邦线接触P3.2口存在抖动(你感觉不到),外部中断引脚再次接受到一个下降沿,IEx又被置1,单片机又要响应中断,但此时由于上一个中断程序未执行完,单片机将等待外部中断程序执行完(你可以理解为有两个中断事件,但这两个事件优先级相同,所有按顺序响应)。在这个过程中,你的接触仍然会产生很多下降沿,但因为IEx只有响应了中断事件后才会清零,因此IEx一直为1。当第一次的中断程序执行结束后,单片机检测到IEx又是1,马上又再次进入中断。因为你的接触时间远远小于你的中断程序执行时间,因此在第二次执行中断程序前已不存在下降沿,所以进入第二次中断程序后,IEx就被清零了,这样执行完第二次中断程序后就不会再次进入中断了。\x0d\x0a说了那么多希望你能明白吧。不明白可以翻查相关单片机外部中断相关资料。因为S52片内已经有2000h也就是8kB的程序
存储器,而程序寻址空间只有64kB,所以外扩程序存储器再大也只能用到56kB。
不过,借助分页技术,51单片机能很容易地实现超过64kB的程序空间,例如Keil默认支持的分页就能实现最大 64 kB × 256 Pages = 16 MB 的外部程序存储器。
对于51系列单片机,将ea引脚接地,则运行片外程序存储器;ea接vcc,则运行片内程序存储器。当然,即使ea接vcc,如果程序运行时指令地址超过了片内程序存储器地址范围,也还会自动转到片外程序存储器空间的。另外要说明的是,用指令是无法控制单片机访问的是片内还是片外程序存储器。单片机是通过psen引脚控制访问片外程序存储器的。
评论列表(0条)