普通外部中断 任务二 一进入主函数先执行while 显示0
按P33 低电平触发不松手显示1
按P47 低电平触发不松手显示2
数码管显示0:执行while函数 显示1:执行P3_I0中断
显示2:执行P4_I0中断
因为是普通外部中断40比41中断等级高,按住P33后再按P47
不管怎样都不会响应P47中断,倒过来按住P47后再按P33
肯定先执行P00的40号中断,然后假如松手P33,而P47不松手
就执行P47的41号中断,P47松手就返回while,使用AI8051U
特有的普通IO口中断,也是正常按优先级来
先把P4 调为最高中断优先级
void P4_IO_Init(void) //P47端口用作中断初始化
{
P4IM0 = 0X00; //P4口中断模式为低电平中断
P4IM1 = 0xFF;
P4INTE= 0X80; //使能 P4.7 口中断,7是最高位对应0X80
PINIPH |=(1<<4);//设置P47口中断优先级为3级(最高)1<<4就是0x10
PINIPL|=(1<<4); //写入最高优先级,|是不影响其他位
//这样你会发现出问题了,定时器0的优先级都给搞低
//了,所以无法正常显示2,所以要去把定时器0 的优先级也调整到最高
}
接着要把定时器0 的优先级也调整到最高:
void Timer0_Init(void) //1毫秒@24.000MHz
{
TM0PS = 0x00; //设置定时器时钟预分频 ( 注意:并非所有系列都有此寄存器,详情请查看数据手册 )
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0x30; //设置定时初始值
TH0 = 0xF8; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0 = 1; //使能定时器0中断
IPH |=(1<<1);//把定时器0优先级设置为最高
IP|=(1<<1);
}
这样就正常了
优先级是要规划的:
课后:
第十四课到此结束
先复习一下中断优先级:
例如把P4口中断优先级搞到最高:
void P4_IO_Init(void) //P47端口用作中断初始化
{
P4IM0 = 0X00; //P4口中断模式为低电平中断
P4IM1 = 0xFF;
P4INTE= 0X80; //使能 P4.7 口中断,7是最高位对应0X80
PINIPH |=(1<<4); //设置P47口中断优先级为3级(最高)
PINIPL |=(1<<4); //写入最高优先级加或|是不想干扰其他位
//这样你会发现出问题了,定时器0的优先级都给搞低
//了,所以无法正常显示2
}
然后我们把定时器0的中断优先级也调整到最高:
void Timer0_Init(void) //1毫秒@24.000MHz
{
TM0PS = 0x00; //设置定时器时钟预分频 ( 注意:并非所有系列都有此寄存器,详情请查看数据手册 )
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0x30; //设置定时初始值
TH0 = 0xF8; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0 = 1; //使能定时器0中断
IPH |=(1<<1);//把定时器0优先级设置为最高
IP |=(1<<1);//加或|是不想干扰其他位
}
这里定时器0 的优先级明显应该比端口4的优先级重要
其实现在大家都是最高级,但定时器是排在前面的,
应该没问题:
现在感觉前面没有试验箱的时候
看的太快了,好几个实验都没有好好做
毕竟是借的试验箱,操作时间有限,打算回过头去
重新再做一次!
前天收到试验箱了,感谢STC,感谢姚总和赵经理
先把第14集的实验再做一次!
先复习第13集:
14中断系统
中断系统是为使 CPU 具有对外界紧急事件的实时处理能力而设置的。
当中央处理机 CPU 正在处理某件事的时候外界发生了紧急事件请求,要求 CPU 暂停当前的工作,转而去处理这个紧急事件,处理完以后,再回到原来被中断的地方,继续原来的工作,这样的过程称为中断。实现这种功能的部件称为中断系统,请示CPU中断的请求源称为中断源。微型机的中断系统一般允许多个中断源,当几个中断源同时向 CPU 请求中断,要求为它服务的时候,这就存在 CPU 优先响应哪一个中断源请求的问题。通常根据中断源的轻重缓急排队,优先处理最紧急事件的中断请求源,即规定每一个中断源有一个优先级别。CPU总是先响应优先级别最高的中断请求。
当 CPU 正在处理一个中断源请求的时候(执行相应的中断服务程序),发生了另外一个优先级比它还高的中断源请求。如果 CPU 能够暂停对原来中断源的服务程序,转而去处理优先级更高的中断请求源,处理完以后,再回到原低级中断服务程序,这样的过程称为中断嵌套。这样的中断系统称为多级中断系统,没有中断嵌套功能的中断系统称为单级中断系统。
用户可以用关总中断允许位(EA/IE.7)或相应中断的允许位屏蔽相应的中断请求,也可以用打开相应的中断允许位来使 CPU响应相应的中断申请,每一个中断源可以用软件独立地控制为开中断或关中断状态,部分中断的优先级别均可用软件设置。高优先级的中断请求可以打断低优先级的中断,反之,低优先级的中断请求不可以打断高优先级的中断。当两个相同优先级的中断同时产生时,将由查询次序来决定系统先响应哪个中断。
总结一下:
当中央处理机 CPU正在处理某件事的另外界发生了紧急事件请求,CPU 暂停当前的工作,转而去处理这个紧急事件,处理完以后,再同到项京缺由每给地方,维体分水的工作,这样的过程称为中断,实现这种功能的部件称为中断系统。
中断是可以嵌套的:
CPU 总是先响应优先级别最高的中断请求
CPU 能够暂停对原来中断源的服务程序,转而去处理优先级更高的中断请求源,处理完以后,再回到原低级中断服务程序,每一个中断源可以用软件独立地控制为开中断或关中断
部分中断的优先级别均可用软件设置,高优先级的中断造求可以打断低优先级的中断
顺序如下图: