你问的是关于IT0(P3^2)、IT1(P3^3)口输入吧
IT0=0,为电平触发方式,一脚INT0上低电平有效
IT0=1,为跳沿触发方式,引脚INT0上的电平从高到低的负跳变有效。
IT1,设置与IT0类似
1、设置TI=1,是人为的设置了串行发送请求完毕的中断请求标志。但是你并没有致能(es=1)串口中断。实际上你的interrupt5的处理程序也没有写,是空的。(注意这点)
2、你既然没有设置it0=1(跳变触发中断),那么就是IT0=0(低电平触发)。
3、当一个低电平来的时候,就进入你的interrupt0处理程序。并且硬件自动清标记位置。执行完毕 beer=1。
4、这个时候还有一个中断请求标志IT=1,于是产生了中断嵌套。执行完高级中断后,进入低级中断interrupt5。之后是空白。。。。
5、结果就是你描述的:蜂鸣器一直响,数码管停止显示。
不知道我这样描述,你能不能理解。呵呵
可定是不可能回去的,因为你的查询检测没有一个大的死循环,所以顺序执行到最后后是不能回到前面的(当然有特殊的中断处理就不一样了)。
修改如下
if(Count==0)
{
goto LPPP;
}
修改为goto LPPP; //形成大循环
中断修改为:
void ISR_Key(void) interrupt 0 using 1
{
if(Count==2)
{Count = 0;} //清零,否则须中断256次才能到0
else
Count++;
}
这个主要是你的程序设计问题
在中断函数中,你并没有使用死循环之类的语句
所以,当你按下按键进入中断后,中断内的语句是可以执行的
但执行完 P1=0XFF; d5=0; 之后,又会返回到主函数
在这两条语句的执行过程中,只有几微妙的时间,所以肉眼看上去好像没有进入中断一样
如果想达到你要的效果,可以在中断内加上一个循环,如下面的代码
void int0() interrupt 0
{
while(!INT0)// INT0 是外部中断系统关键字,此句是等待按键松开
{
P1=0XFF;
d5=0;
}
}
当你按下按键后,只会执行这两条语句,松开后回到主程序
也可改成这样
void int0() interrupt 0
{
while(1)// 始终执行这两句,直到系统复位
{
P1=0XFF;
d5=0;
}
}
若满意,记得采纳哦
AT89S52单片机的中断系统共有8个中断源,6个中断矢量,两级中断优先级,可实现两级中断服务程序嵌套,通过软件来屏蔽或允许相应的中断请求。每一个中断源可以编程为高优先级中断或低优先级中断,允许或禁止向CPU申请中断。中断系统的特殊功寄存器有中断允许寄存器IE、中断优先级寄存器IP等。
图1为AT89S52单片机的中断系统结构示意图。AT89S52有两个外部中断源INT0、INT1;串口通信有接收和发送两个中断源,经过一个或门,公用同一个中断矢量;定时器/计数器0、定时器/计数器1的溢出中断源对应两个中断矢量;定时/计数器2有计数溢出和捕获两种中断源,经或门共用一个中断矢量。

图1 中断系统结构示意图
(1) 来自P32引脚上的外部中断请求(外部中断0),低电平或下降沿(从高到低)有效,通过设置IT0的值可将外部中断0设置为低电平触发或下降沿触发,IT0=0时,为电平触发方式,当引脚上出现低电平时就向CPU申请中断;IT0=1时,为跳变触发方式,当引脚上出现负跳变时,置位TCON1的IE0中断请求标志位,向CPU申请中断。CPU在每个机器周期的S5P2状态采样IE0标志位,当条件满足,则响应中断请求。
(2) 来自P33引脚上的外部中断请求(外部中断1),低电平或下降沿有效。其功能与 *** 作同。
(3) T0 片内定时器/计数器0溢出(TF0)中断请求。定时/计数器0无论内部定时或对外部事件T0计数,当计数器(TH0、TL0)计数溢出,置位TCON5的TF0中断请求标志位。CPU在每个机器周期的S5P2状态时采样TF0标志位,当条件满足时CPU响应中断请求,转向对应的中断矢量,执行该中断服务程序,并由硬件自动将TF0标志位清0。
(4) T1片内定时器/计数器1溢出(TF1)中断请求。其功能和 *** 作类似定时/计数器0。其中断请求标志位为TCON7的TF1。
(5) T2片内定时器/计数器2溢出中断请求。定时器2可以被寄存器T2CON中的TF2和EXF2的或逻辑触发。程序进入中断服务后,这些标志位都可以由硬件清0。定时器2有两种不同的工作方式。
定时/计数器方式。当定时/计数器方式的计数器(TH2、TL2)计数满后溢出,置位中断请求标志位(T2CON7)TF2,向CPU请求中断处理。
“捕获”方式。当外部输入端口T2EX发生从1→0下降沿时,亦将置位T2CON6的中断请求标志位EXF2,向CPU请求中断处理。
(6) 串行口中断。片内串行口完成一帧发送或接收,置位中断请求源TI或RI。当完成一串行帧的接收/发送时分别置位串行通信控制寄存器SCON中的RI/TI中断请求标志位,当条件满足时CPU响应中断请求。
每一个中断源都对应有一个中断请求标志位,它们设置在定时/计数器控制寄存器TCON、定时/计数器2控制寄存器T2CON和串行通信控制寄存器SCON的相应位来锁存。另外还有中断控制寄存器IE和中断优先级控制寄存器IP,IE用于确定各中断是允许还是禁止,IP用于定义各中断源的中断优先级,用户通过设置其状态来管理中断系统。
以上就是关于单片机IO赋值问题全部的内容,包括:单片机IO赋值问题、51单片机的默认优先级是INT0>IT0>INT1>IT1>PS 但是为什么在使用的时候好像不起作用啊!要使用IP进行重设、C语言单片机 goto语句使用疑问等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)