2018-05-30 23:03:30 nanfeibuyi 阅读数 2699
  • 单片机控制第一个外设-LED灯-第1季第6部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第6个课程,主要讲解LED的工作原理和开发板原理图、实践编程等,通过学习目的是让大家学会给单片机编程控制LED灯,并且为进一步学习其他外设打好基础。

    3992 人正在学习 去看看 朱有鹏

单片机 中断

一、简述

    中断,即CPU在正常执行程序的过程中,遇到外部/内部的紧急事件需要处理,暂时中断(中止)当前程序的执行,而转去为事件服务,待服务完毕,再返回到暂停处(断点)继续执行原来的程序。


二、中断请求标志控制寄存器TCON


三、中断请求标志控制寄存器SCON


四、中断允许寄存器IE


五、中断函数

中断函数定义的格式为:
函数类型 函数名 interrupt   n  using  m
其中:
    interrupt 后面的n 是中断号。

    关键字using 后的m 是所选择的寄存器组,取值范围是0~3。

using m这部分通常可以省略,由编译器自动选择一个寄存组。

举例:

void int0rupt() interrupt 0    
{		
	beep=0;//开蜂鸣器	
	while(P3_2!=1);//当P3^2口一直是低电平时,就一直告警
	beep=1;//关蜂鸣器
}
void 是函数类型表示空类型
int0rupt是函数名

interrupt 0中的0表示该函数是为外部中断0服务的处理函数(当外部申请中断0服务时调用此函数)

六、完整例子

文件打包:链接: https://pan.baidu.com/s/1Zuo1-bGvJV5YJU1Kq1Xh9w 密码: 195s

1、效果:当按键按下时,蜂鸣器就会响,不松开就一直响,松开关闭。

    (主程序死循环,通过CPU中断可以暂时中断,先执行其他任务,然后再回来继续执行被中断的任务。例子中开启外部中断0,中断方式为下降沿触发,比如控制端口原来是高电平的,按下按钮使控制端口变为低电平,高电平到低电平有个下降过程,下降沿触发中断0,调用中断服务处理函数,蜂鸣器响。中断服务处理函数有个循环检测直到按钮释放才关闭蜂鸣器,退出中断服务处理函数,控制端口恢复为高电平。)

2、Keil文件结构


3、仿真电路


4、alarm.c文件

#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit P3_2=P3^2;//将P3^2定义为中断0控制口
sbit beep=P3^3;//将P3^3定义为蜂鸣器控制口
void main()
{
	EA=1;//开许总中断
  	EX0=1;//开外部中断0
 	IT0=0;//中断触发方式为低电平触发
	while(1)  //主程序一直在死循环,外部中断可以暂时执行中断处理函数
	{}
}
/**********************************************************/
//函数名:int0rupt() interrupt 0
//功能:外部中断0中断响应程序 
//调用函数:
//输入参数:
//输出参数:
//说明:当P3^2口为低电平时进入响应程序 
/**********************************************************/
void int0rupt() interrupt 0//当P3^2键口为低电平时
{
	beep=0;//开蜂鸣器
	while(P3_2!=1);//当P3^2口置高检测,就是按钮不释放蜂鸣器就一直响
	beep=1;//关蜂鸣器
}
2015-05-20 11:09:10 u014304806 阅读数 804
  • 单片机控制第一个外设-LED灯-第1季第6部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第6个课程,主要讲解LED的工作原理和开发板原理图、实践编程等,通过学习目的是让大家学会给单片机编程控制LED灯,并且为进一步学习其他外设打好基础。

    3992 人正在学习 去看看 朱有鹏

51单片机中断。


2018-12-17 22:09:11 qq_42747105 阅读数 1177
  • 单片机控制第一个外设-LED灯-第1季第6部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第6个课程,主要讲解LED的工作原理和开发板原理图、实践编程等,通过学习目的是让大家学会给单片机编程控制LED灯,并且为进一步学习其他外设打好基础。

    3992 人正在学习 去看看 朱有鹏

                                 蓝桥杯单片机之中断

1、中断含义及过程

中断是指CPU在处理A事情时,发现B请求CPU立刻去处理(中断发生),于是CPU去处理B(中断服务), 处理完B后又再次回到A被中断的地方,继续处理A(中断返回)

2、中断源

51单片机有五个中断源,分为外部 中断源(2个),定时器/计数器 中断源(2个)、串行通信 中断(1个)

每个中断源都有固定的入口地址和中断号,学习时要注意中断源与中断号的对应关系

3、中断的处理函数

(1)中断初始化函数

(2)中断服务 函数     三个特点:<1>没有返回值也不能带参数

                                                       <2>函数后面跟一个关键字:interrupt

                                                        <3>在关键字interrupt后面跟一个中断号

4、与中断 相关的寄存器

一、TCON    低4位给外部中断请求源使用,高4位给内部中断系统寄存器

外部请求源(第四位)

<1>  IT0  :IT0 = 0时, INT0为低电平触发方式, IT0 = 1, INT0为负 跳变触发方式。总之是INT0触发方式控制位,可由软件进行置位和复位。

<2>IE0 :    INT0中断请求标志位,当有外部中断请求时,该位就置1(硬件来完成),在CPU响应中断后,硬件将IE0又清0

<3> IT1:   类似  不过是定时器1的相关位

<4>IE1:   SAME

内部 请求源(高四位)

<1>TF0:定时/计数器T0溢出中断标记。当T0产生溢出时,TF0置位,当CPU响应中断后,硬件再把TF0复位

<2>TR0 :T0的开关控制位, TR0 = 1  定时器计数器打开, TR0= 0   定时器计数器关闭

注:TF1、TR1 与TF0 和TR0相似 。只是一个是定时器0的,一个是定时器1的

二、SCON :低二位与串口中断相关

TI:串行口发送中断

RI :串行口接收中断

三、IE    中断允许寄存器

EA : 中断总控制位    EA =1 ,CPU开放所有中断   EA = 0, CPU禁止所有中断

ES:     串行口中断控制位 ES =1, 允许串行口中断, ES= 0, 屏蔽串行口中断

ET1:   定时/计数器TI中断控制位。ET1=1,允许T1中断;ET1=0,禁止T1中断

EX1:外部中断1中断控制位。EX1=1,允许外部中断1中断;EX1=0禁止外部中断1中断

ETO:定时/计数器T0中断控制位。ETO=1,允许T0中断;ETO=0,禁止T0中断

EXO:外部中断0中断控制位。EX0=1,允许外部中断0中断;EX0=0,禁止外部中断0断。

四、IP  中断优先级寄存器

执行时先将高级优先级执行后才会执行低的

PS  :串行口中断优先级控制位

PT1:定时器1优先级控制位
PX1:外部中断1优先级控制位
PTO:定时器0优先级控制位
PX0:外部中断0优先级控制位

5、对于每一个外设,我们都需要写一个初始化函数和中断服务函数。

下面分别展示外部中断   定时器\计数器中断    串行借口中断的部分代码

6

6、单片机补充:

《1》三大外设:外部中断、定时/计数器、串行通信

《2》sfr P0 = 0x80    和 P0 = 0x02的区别        前者用SFR来找了P0口的地址,为0X80, 后者是把0x02赋给P0口

《3》INT0  和INT1是中断控制器里面的,称为外部中断申请输入端

在INT0 或INT1 输入一个信号(低电平或者是下降沿),就可以使单片机临时停下正在执行的事情, 转去执行B事情

《4》KEIL使用建工程:project---new uvison project---source group----add existing files to group.写完之后记得点魔术棒,生成Greate HEX Files

在断电状态下单击下载,然后再上电  程序就自动下载到芯片了

2018-01-01 22:56:10 shi_shi08 阅读数 1368
  • 单片机控制第一个外设-LED灯-第1季第6部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第6个课程,主要讲解LED的工作原理和开发板原理图、实践编程等,通过学习目的是让大家学会给单片机编程控制LED灯,并且为进一步学习其他外设打好基础。

    3992 人正在学习 去看看 朱有鹏
单片机的中断序号决定该中断的中断向量的位置(即中断服务程序的入口地址)
即 中断序号就是中断源在单片机的中断向量表中的位置序号。
具体关系:           中断向量=0003H+中断序号×8搜索
例如:  
 中断0(即中断序号为0 )   其中断向量=中断服务程序的入口地址=0003H
 中断1(即中断序号为1 )   其中断向量=中断服务程序的入口地址=000BH     
对于51单片机:
中断序号0    表示的是外部中断0的中断序号
中断序号1    表示的是定时计数器0的中断序号
中断序号2    表示的是外部中断1的中断序号
中断序号3   表示的是定时计数器1的中断序号
中断序号4    表示的是串行口的中断序号
中断序号5    表示的是定时计数器2的中断序号
2019-11-18 15:07:30 Supremelv 阅读数 148
  • 单片机控制第一个外设-LED灯-第1季第6部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第6个课程,主要讲解LED的工作原理和开发板原理图、实践编程等,通过学习目的是让大家学会给单片机编程控制LED灯,并且为进一步学习其他外设打好基础。

    3992 人正在学习 去看看 朱有鹏

51单片机中断使用注意事项

1.例如:
同时使用外部中断0和串口中断的时候,如果没有用到串口中断,一定要将串口中断ES置0,不然当你执行一次外部中断,然后再用串口发送数据(并没有用到串口中断服务程序),就会一直发送数据,这是最为致命的,这个时候外部中断0完全失效。正确代码如下:
`void UartInit(void) //9600bps@11.0592MHz
{
SCON=0x50;
// AUXR1=0x40;
T2L=(65536-(FOSC/4/BAUD));
T2H=(65536-(FOSC/4/BAUD))>>8;
// AUXR=0x14;
// AUXR|=0x01;
AUXR=0x15;
IT0=0;
EX0=1;
// ES=1;
EA=1;
}
void Int0() interrupt 0
{
delay6(1000);
if(K1==0)
{
Hn++;
Si++;
if(Hn>2)
{
Hn=0;
}
if(Si>2)
{
Si=0;
}
}
}
第一次发帖,表述的不是多清楚,总之,就是没用到中断服务程序,就不要把相应的中断打开。(第一次发帖,有点LOW,还请看到此贴的大佬多多指教)

单片机中断总结

阅读数 2814

51单片机之中断

阅读数 745

没有更多推荐了,返回首页