51单片机外部中断问题 50
刚学不久,有些表述可能不太专业。片子用的是89c52rc以及12c5a60s2。程序如图功能很简单,main就是八位数码管0-7流水显示,外部中断0(低电平触发)驱动蜂鸣...
刚学不久,有些表述可能不太专业。
片子用的是89c52rc以及12c5a60s2。
程序如图
功能很简单,main就是八位数码管0-7流水显示,外部中断0(低电平触发)驱动蜂鸣器和另一组二极管。
但实际使用时,表现为不中断时,蜂鸣器响八次之后(也就是执行一次touch函数),八位数码管流水显示一次,然后蜂鸣器再响八次。
如果这时候将外部中断口接地的话,八位数码管停止,但蜂鸣器却继续工作。
当时就理解不了问题出在哪里,猜测会不会因为某些原因,使得单片机没有正确识别中断程序touch,并由此反复执行main和touch,但main本身就是个while循环,后面还补了一个while(1),照理说未中断情况下,程序是绝对不可能跑偏到touch上的。
拿去给老师看了看,猜测是片子的问题。但换了12c5a60s2问题依旧。
这时候,突然考虑到,外部中断0不行,那改成外部中断1呢?结果修改以后,居然可以了!
那这诡异的结果是什么道理?没可能两块片子的外部中断0都出问题了吧…… 展开
片子用的是89c52rc以及12c5a60s2。
程序如图
功能很简单,main就是八位数码管0-7流水显示,外部中断0(低电平触发)驱动蜂鸣器和另一组二极管。
但实际使用时,表现为不中断时,蜂鸣器响八次之后(也就是执行一次touch函数),八位数码管流水显示一次,然后蜂鸣器再响八次。
如果这时候将外部中断口接地的话,八位数码管停止,但蜂鸣器却继续工作。
当时就理解不了问题出在哪里,猜测会不会因为某些原因,使得单片机没有正确识别中断程序touch,并由此反复执行main和touch,但main本身就是个while循环,后面还补了一个while(1),照理说未中断情况下,程序是绝对不可能跑偏到touch上的。
拿去给老师看了看,猜测是片子的问题。但换了12c5a60s2问题依旧。
这时候,突然考虑到,外部中断0不行,那改成外部中断1呢?结果修改以后,居然可以了!
那这诡异的结果是什么道理?没可能两块片子的外部中断0都出问题了吧…… 展开
2个回答
展开全部
如果是下降沿触发(it0=1)就只会执行一次中断程序。电平触发(it0=1)的话每次执行完中断里面的程序(只要不关闭中断)就又跳进中断里去了,不断的循环执行。
循环的频率跟晶振有关,晶振的频率直接关系到单片机执行指令的速度。频率越高速度也就越快。
循环的频率跟晶振有关,晶振的频率直接关系到单片机执行指令的速度。频率越高速度也就越快。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
看程序,我怎么觉得应该是:
不中断时,蜂鸣器一直响,八位数码管流水显示;
中断时,八位数码管停止,蜂鸣器响8次。
不中断时,蜂鸣器一直响,八位数码管流水显示;
中断时,八位数码管停止,蜂鸣器响8次。
更多追问追答
追问
蜂鸣器beep只在中断程序touch里改变过……main里没有再改变beep的值……所以按程序,不中断的时候,蜂鸣器是绝对不响的才对吧?
追答
我不知道你的蜂鸣器是高电平响,还是低电平响,如果是高电平响,那么在main中beep=1,则一直响,否则就一直不响(非中断时)。也不应该是你说的那样非中断时是会响8次
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询