沿触发方式。请至少用两种方式对中断系统初始化
关于中断的优先级有一下原则:
1、CPU同时接收到几个中断时,首先响应优先级最高的中断请求,低优先的进入队列等待;
2、正在进行的中断过程不能被新的同级或低优先级的中断请求所中断;
3、正在进行的低优先级中断服务,能被高优先级中断请求中断;
那么,IP寄存器的某一中断配置为1就成为高优先级。每一个中断在IP里面只占一位配置位(IP.x=0或OP.x=1),也就是说系统里只存在两种优先级,要么是高优先级,要么是低优先级。
如果,任何中断都不配置IP寄存器的优先级,也等同于系统上电时,默认的优先级顺序如下:
外部中断0 > 定时/计数器0 > 外部中断1 > 定时/计数器1 > 串行中断
关于外部中断的寄存器已经了解清楚了,接下来看代码设计:
外部中断0(下降沿触发)
/*-----------------------------------------------
功能:外部中断0边沿触发
现象:首先将P3.2口通过上拉电阻接到电源,保证在空闲时P3.2处于高电平;
当外部中断信号输出口P3.2接到GND时,产生了一个下降沿信号,接到P0.0
口的LED灯反转;若此后P3.2持续接到GND,LED只反转一次,这与电平触发
有区别。
------------------------------------------------*/
#include
sbit LED=P0^0; //定义LED端口
void DelayMs(unsigned char t) //大致延时1mS
{
unsigned short T=500;
while(t--)
{
while(--T);
}
}
void INT0_init(void) //外部中断0初始化
{
LED=1; //LED口初始值
EA=1; //全局中断开
EX0=1; //外部中断0开
IT0=1; //边沿触发
}
main()
{
INT0_init();
while(1){
//主循环
}
}
//中断服务程序 interrupt 0 指明是外部中断0的中断函数
/*
interrupt 0 指明是外部中断0;
interrupt 1 指明是定时器中断0;
interrupt 2 指明是外部中断1;
interrupt 3 指明是定时器中断1;
interrupt 4 指明是串行口中断;
*/
void ISR_Key(void) interrupt 0 using 1
{
if(!INT0){
DelayMs(10); //防抖动
if(!INT0){
LED=!LED; //按下触发一次,LED取反一次
}
}
}
外部中断0(电平触发)
/*-----------------------------------------------
功能:外部中断0电平触发
现象:首先将P3.2口通过上拉电阻接到电源,保证在空闲时P3.2处于高电平;
当外部中断信号输出口P3.2接到GND时,产生了一个低电平信号,接到P0.0
口的LED灯反转;若此后P3.2持续接到GND,LED会反复反转,这与边沿触
发有区别。
------------------------------------------------*/
#include
sbit LED=P0^0; //定义LED端口
void DelayMs(unsigned char t) //大致延时1mS
{
unsigned short T=500;
while(t--)
{
while(--T);
}
}
void INT0_init(void) //外部中断0初始化
{
LED=1; //LED口初始值
EA=1; //全局中断开
EX0=1; //外部中断0开
IT0=0; //电平触发
}
main()
{
INT0_init();
while(1){
//主循环
}
}
//中断服务程序 interrupt 0 指明是外部中断0的中断函数
/*
interrupt 0 指明是外部中断0;
interrupt 1 指明是定时器中断0;
interrupt 2 指明是外部中断1;
interrupt 3 指明是定时器中断1;
interrupt 4 指明是串行口中断;
*/
void ISR_Key(void) interrupt 0 us
1、CPU同时接收到几个中断时,首先响应优先级最高的中断请求,低优先的进入队列等待;
2、正在进行的中断过程不能被新的同级或低优先级的中断请求所中断;
3、正在进行的低优先级中断服务,能被高优先级中断请求中断;
那么,IP寄存器的某一中断配置为1就成为高优先级。每一个中断在IP里面只占一位配置位(IP.x=0或OP.x=1),也就是说系统里只存在两种优先级,要么是高优先级,要么是低优先级。
如果,任何中断都不配置IP寄存器的优先级,也等同于系统上电时,默认的优先级顺序如下:
外部中断0 > 定时/计数器0 > 外部中断1 > 定时/计数器1 > 串行中断
关于外部中断的寄存器已经了解清楚了,接下来看代码设计:
外部中断0(下降沿触发)
/*-----------------------------------------------
功能:外部中断0边沿触发
现象:首先将P3.2口通过上拉电阻接到电源,保证在空闲时P3.2处于高电平;
当外部中断信号输出口P3.2接到GND时,产生了一个下降沿信号,接到P0.0
口的LED灯反转;若此后P3.2持续接到GND,LED只反转一次,这与电平触发
有区别。
------------------------------------------------*/
#include
sbit LED=P0^0; //定义LED端口
void DelayMs(unsigned char t) //大致延时1mS
{
unsigned short T=500;
while(t--)
{
while(--T);
}
}
void INT0_init(void) //外部中断0初始化
{
LED=1; //LED口初始值
EA=1; //全局中断开
EX0=1; //外部中断0开
IT0=1; //边沿触发
}
main()
{
INT0_init();
while(1){
//主循环
}
}
//中断服务程序 interrupt 0 指明是外部中断0的中断函数
/*
interrupt 0 指明是外部中断0;
interrupt 1 指明是定时器中断0;
interrupt 2 指明是外部中断1;
interrupt 3 指明是定时器中断1;
interrupt 4 指明是串行口中断;
*/
void ISR_Key(void) interrupt 0 using 1
{
if(!INT0){
DelayMs(10); //防抖动
if(!INT0){
LED=!LED; //按下触发一次,LED取反一次
}
}
}
外部中断0(电平触发)
/*-----------------------------------------------
功能:外部中断0电平触发
现象:首先将P3.2口通过上拉电阻接到电源,保证在空闲时P3.2处于高电平;
当外部中断信号输出口P3.2接到GND时,产生了一个低电平信号,接到P0.0
口的LED灯反转;若此后P3.2持续接到GND,LED会反复反转,这与边沿触
发有区别。
------------------------------------------------*/
#include
sbit LED=P0^0; //定义LED端口
void DelayMs(unsigned char t) //大致延时1mS
{
unsigned short T=500;
while(t--)
{
while(--T);
}
}
void INT0_init(void) //外部中断0初始化
{
LED=1; //LED口初始值
EA=1; //全局中断开
EX0=1; //外部中断0开
IT0=0; //电平触发
}
main()
{
INT0_init();
while(1){
//主循环
}
}
//中断服务程序 interrupt 0 指明是外部中断0的中断函数
/*
interrupt 0 指明是外部中断0;
interrupt 1 指明是定时器中断0;
interrupt 2 指明是外部中断1;
interrupt 3 指明是定时器中断1;
interrupt 4 指明是串行口中断;
*/
void ISR_Key(void) interrupt 0 us
温馨提示:答案为网友推荐,仅供参考
第1个回答 2021-11-16
PT0=1;//此句能编译,因IP寄存器可位寻址。
ET0=1;
ET1=1;
EA=1;
EX1=1;
IT1=1;追问
ET0=1;
ET1=1;
EA=1;
EX1=1;
IT1=1;追问
要两种方式呢
追答另一种方式应该是直接写 IP=0X02 // PT0 IP.1 定时器0中断优先级设为1,其余为0
IE=0X9F
IE的D7到D0位分别是:
EA=1
空闲 - 设为0
空闲-设为0
ES=1
ET1=1
EX1=1
ET0=1
EX0=0
第2个回答 2021-11-15
:通过外部中断0,触发一个延时过程,假定延时时间为1秒,延时期间可以点亮一个LED或让蜂鸣器发出声音。已知单片机晶振频率为6 .00MHz。提示:可以使用定时器中断,也可以不使用定时器中断。如果使用定时器中断,则把中断重新启动工作放在外部中断服务程序中,一旦定时器从新启