首页 > 编程知识 正文

外部中断实验报告,51单片机外部中断程序

时间:2023-05-04 21:56:10 阅读:168259 作者:4349

中断:

1.) p3.2 )可以选择it0(tcon.0 )是在低电平有效还是在下降沿有效。 当CPU检测到在P3.2端子出现有效的中断信号时,将中断标志ie0(tcon.1 )设为1,向CPU请求中断

2.) p3.3 )可以选择it1(tcon.2 )是在低电平下有效还是在下降沿下有效。 当检测到在P3.3端子上出现有效的中断信号时,CPU将中断标志ie1(TCON.3 )设置为1,并向CPU请求中断

3.TF0(TCON.5 )、片上定时器/计数器T0溢出中断请求标志。 当计时器/计数器T0溢出时,将TF0设置为set,向CPU请求中断

4.TF1(TCON.7 )、片上定时器/计数器T1溢出中断请求标志。 如果计时器/计数器T1发生溢出,则设置TF1,向CPU请求中断

5.ri(Scon.0 )或ti (scon.1 ),串行化中断请求标志。 当串行端口接收到一帧串行数据时设置RI,或者当串行端口发送完一帧串行数据时设置TI,请求CPU中断。

6 .如果CPU同时接收到一些中断,它首先对具有最高优先级的中断请求做出响应。 正在进行的中断过程不能被新的对等方或低优先级中断请求中断。 正在进行的低优先级中断服务可以由高优先级中断请求中断

为了实现上述后两个原则,中断系统内部设置了两个用户不能寻址的优先级状态触发器。 一个集1表示正在响应高优先级中断,并阻止所有后续的中断请求。 另一组1表示正在响应低优先级中断,并阻止所有后续的低优先级中断请求

7 .中断响应条件

中断源有中断请求

该中断源的允许中断位为1;

CPU中断(即EA=1)。

如果同时满足上述三个条件,则CPU可能会对中断做出响应

8 .外部中断0示例:

主程序需要以下代码。

EA=1; //打开总中断开关

EX0=1; //加入外部中断0

IT0=0/1; //设定外部中断的触发方式

中断服务函数:

void int0(内部0 )

{

do anything that you want

}

9 .中断有两个重要的寄存器: TCON和IE

int_0示例程序: K3每点击一次LED的状态就会反转

#include reg52.hsbit K3=P3^2; sbit LED0=P2^0; typedef unsigned char uint8_t; voidint0_init(void ) {IT0=1; //配置下降沿触发中断,配置中断的触发条件后接通中断,最后接通CPU中断,允许EX0=1; //打开外部中断0ea=1//CPU中断允许、总允许、允许CPU在执行过程中被中断中断中断(voiddelay(uint8_tI ) while(I-- ); }voidint0_ISR(void ) interrupt0) Delay ) 1000; if(0==K3 ) {LED0=~LED0; }intmain(void ) {int0_init; wile(1; 返回0; } int0和int1同时动作的代码:

#include reg52.hsbit K3=P3^2; sbit LED0=P2^0; sbit K4=P3^3; sbit LED1=P2^1; typedef unsigned char uint8_t; voidint0_init(void ) {IT0=1; //配置下降沿触发中断,配置中断的触发条件后接通中断,最后接通CPU中断,允许EX0=1; //打开外部中断0 ) voidini1_init(void ) {IT1=1; EX1=1; EA=1; //CPU中断许可、总许可、允许CPU在执行期间被中断中断中断(voiddelay(uint8_tI ) while(I-- ) ); }voidint0_ISR(void ) interrupt0) Delay ) 1000; if(0==K3 ) {LED0=~LED0; }voidint1_ISR(void ) interrupt2) Delay ) 1000; if(0==K4 ) {LED1=~LED1; }intmain(void ) {int0_init; ini1_init (; wile(1; 返回0; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。