主页 > 科技生活 >狱锁狂龙5_单片机不同优先级的中断之后运行什么程序 >

狱锁狂龙5_单片机不同优先级的中断之后运行什么程序

单片机不同优先级的中断之后运行什么程序
的意思(学习过微机原理与接口技术的同学,过单片机,也应该知道),我们在这里就不,首先来回忆下中断系统涉及到哪些问题。
(1)中断源:中断请求信号的来源。(8051有3个内部中断源T0,T1,串行口,2个外部中断源INT0,INT1(这两个低电平有效,上面的那个横杠不知道怎么加上去))
(2)中断响应与返回:CPU采集到中断请求信号,怎样转向特定的中断服务子程序,并在执行完之后返回被中断程序继续执行。期间涉及到CPU响应中断的条件,现场保护,现场恢复。
(3)优先级控制:中断优先级的控制就形成了中断嵌套(8051允许有两级的中断嵌套,优先权顺序为INT0,T0,INT1,T1,串行口),同一个优先级的中断,还存在优先权的高低。优先级是可以编程的,而优先权是固定的。
80C51的原则是①同优先级,先响应高优先权②低优先级能被高优先级中断③正在进行的中断不能被同一级的中断请求或低优先级的中断请求中断。
80C51的中断系统涉及到的中断控制有中断请求,中断允许,中断优先级控制
(1)3个内部中断源T0,T1,串行口,2个外部中断源INT0,INT1
(2)中断控制寄存器:定时和外中断控制寄存器TCON(包括T0、T1,INT0、INT1),串行控制寄存器SCON,中断允许寄存器IE,中断优先级寄存器IP
具体的是什么,包括哪些标志位,在这里不讲了,所有书上面都会讲。
在这里我们讲下注意的事项
(1)CPU响应中断后,TF0(T0中断标志位)和TF1由硬件自动清0。
(2)CPU响应中断后,在边沿触发方式下,IE0(外部中断INT0请求标志位)和IE1由硬件自动清零;在电平触发方式下,不能自动清楚IE0和IE1。所以在中断返回前必须撤出INT0和INT1引脚的低电平,否则就会出现一次中断被CPU多次响应。
(3)串口中断中,CPU响应中断后,TI(串行口发送中断请求标志位)和RI(接收中断请求标志位)必须由软件清零。
(4)单片机复位后,TCON,SCON给位清零。定时器优先级,中的优先级高执行完成在执行低优先级的,比如你里面有2个定时器T1和T2,你T2定时器比T1优先级高,当在执行T1中断的时候,T2也中断了,程序会跳到优先级高的T2进行执行,执行完成后在返回到T1被打断的位置继续执行,这样你能明白吗。本回答被网友采纳
8051的中断优先级是如何规定的
可程设置中断优先级寄存器 ip”, ‘1’表示为高级。
高优先级的中断可再中断低优先级的中断程序。(两个优先级)
当编程为同级优先级的中断同时请求时,就要涉及到有一个“自然优先级”,又高到低为:int0,t0,int1,t1,ri/ti。本回答由推荐
stm32f103zet6中断优先级支持多少可编程优先级
STM32 目前支持的中断 84 个(16 个内核+68
部), 16 级可编程中断级
的设置使用中断优先级设置 8bit 中的高 4 位)和16个抢占优先级(因为抢占优先级最多可以有四位数)。
stm32中断编程要求:2个中断,2个优先级,2个初始化函数
这个在中断配置函数里有,建议楼主查看相关例程。。。
两个中断及优先级就是中断配置的时候配置好就行了,至于初始化函数自己写就是,估计是每个中断一个初始化函数。。。希望对你有用追问

能给我一个类似的编程或者链接吗同学,你的问题需要根据实际的情定
比如我们使用外部中下面我就结合的学习讲讲使用外部中断的一般步骤:
1、初始化对应的GPIO口。假如我们使用的是GPIOB。
(1)首先定义初始化用到的结构体名称。
GPIO_InitTypeDefGPIO_InitStructure;
说明一下:GPIO_InitTypeDef是stm32给我们定义好的结构,里面有相应的成员变量,我们只需要定义结构体的名称即GPIO_InitStructure,然后配置它的成员。
(2)开启GPIOB的时钟。
开启时钟用到系统为我们提供好的函数
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);
说明:因为我们要复用GPIO口,所以也要开启GPIO口的复用功能时钟RCC_APB2Periph_AFIO;
(3)配置结构GPIO_InitStructure。
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//选用管脚
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IN_IPU;//设置输出模式,改模式是将stm32管脚内部拉高保证处于高电平,并且做输入管脚使用。
(4)这一步设置输入速度的我们可以不要,当GPIO口做输入时,不需要对速度进行配置
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
(5)GPIO_Init(GPIOB, &GPIO_InitStructure);//调用初始化函数,将配置应用到GPIOB口中。
2、连接GPIO到EXTI
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource0);//将GPIOB0口连接到EXTI0,可能有些同学就不明白了,为什么是EXTI0,这里简单的说明一下GPIO口如果连接的是0管脚,则对应EXTI0,如果是1管脚则对应EXTI1。
3、配置外部中断的触发方式
EXTI_InitTypeDefEXTI_InitStructure;
EXTI_InitStructure.EXTI_Line=EXTI_Line0;
EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd=ENABLE;
EXTI_Init(& EXTI_InitStructure);
4、设置中断优先级寄存器
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//这里我们选择分组2,也就是说给抢占优先级分配两位,给响应优先级分两位
5、配置中断控制寄存器(NVIC)
(1)NVIC_InitTypeDefNVIC_InitStructure;//这一步是给我们的结构体命名,下面是对结构进行配置
(2)NVIC_InitStructure.NVIC_IRQChannel=EXTI0_IRQn;//选择中断类型也就选择外部中断0,这些语句其实stm32都给我们,中断名称在IRQn_Type结构体中为我们定义好了,我们只需要选择一个我们要用的中断就好了,stm32f10xx.h中我们可以找到它。
(3)NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01;//设置抢占优先级。
(4)NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x01;//设置响应优先级。
(5)NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//设置开启中断。可以理解为开启总中断。
(6)NVIC_Init(&NVIC_InitStructure);//调用出事换函数,初始化这个中断。
6、最都不要忘记在stm32f10x_it.c中编写中断服务程序。不要忘记,清除中断标志位。
void PPP_IRQHandler(void)
{}
我们在这个函数中写中断程序,PPP意思就是设备。不过同学们要记住我们不能直接就在里面写我们要将PPP写该成我们的中断口,void EXTI0_IRQHandler(void) {}
这样才可以,课能同学又要问了怎样确定这个名称呢。
答案是我们要在stm32的启动文件startup_stm32f1xx.s这个汇编文件中找,就可以找到每个中断所对应的名称了。
慢慢学 其实没有我们想象的那么难


上一篇: 下一篇: