C语言单片机 goto语句使用疑问

C语言单片机 goto语句使用疑问,第1张

你问的是关于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语句使用疑问等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/8885061.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-22
下一篇 2023-04-22

发表评论

登录后才能评论

评论列表(0条)

保存