STC51单片机中断介绍

目录

  • 1.关于51单片机的介绍
    • 1.1中断应用背景介绍
    • 1.2中断寄存器介绍
  • 2.中断示例
    • 2.1程序设计
    • 2.2讲解
  • 3.总结与心得

1.关于51单片机的介绍

总体介绍:51单片机是对所有兼容Intel 8051指令系统的单片机的统称。该系列单片机的始祖是Intel的8004单片机,后来随着Flash rom技术的发展,8004单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。需要注意的是51系列的单片机一般不具备自编程能力。

功能介绍:8位CPU·4kbytes程序存储器(ROM) (52为8K)
·128bytes的数据存储器(RAM) (52有256bytes的RAM)
·32条I/O口线·111条指令,大部分为单字节指令
·21个专用寄存器
·2个可编程定时/计数器·5个中断源,2个优先级(52有6个)
·一个全双工串行通信口
·外部数据存储器寻址空间为64kB
·外部程序存储器寻址空间为64kB
·逻辑操作位寻址功能·双列直插40PinDIP封装
·单一+5V电源供电
CPU:由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器;
RAM:用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据;
ROM:用以存放程序、一些原始数据和表格;
I/O口:四个8位并行I/O口,既可用作输入,也可用作输出
T/C:两个定时/记数器,既可以工作在定时模式,也可以工作在记数模式;
五个中断源的中断控制系统;
一个全双工UART(通用异步接收发送器)的串行I/O口,用于实现单片机之间或单片机与微机之间的串行通信;
片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。最佳振荡频率为6M—12M。

1.1中断应用背景介绍

中断是广泛应用在51或ARM单片机里用来优先执行部分代码的重要功能,其重要原因其实就是因为我们在程序设计时总会有部分功能对应程序我们想要优先去执行它,与FPGA并行不同的是在现有的微控制器中大部分都是串行执行程序的,所以中断就是一个十分天才的想法。下附中断原理图
STC51单片机中断介绍_第1张图片

1.2中断寄存器介绍

这里我们结合中断原理图来介绍:最外层为中断名称以及个数,中断共包括两个外部中断两个定时器中断和一个定时器中断。中断名称右边第一个的寄存器表示中断触发信号的类型。如外部中断0的INTO当IT0=0表示电平触发模式,IT0=1时表示沿触发模式。定时器触发信号时有定时器时间提供的。TCON部分为中断请求标志位在大部分中断使用时,我们不需要关心这部分寄存器。寄存器IE是各个终端的使能位,在我们使用相应的中断时就必须让相应的IE下的使能位使能,就相当于打开中断对应的开关。EA为重视能开关,当我们使用中断服务时就必须打开总使能。最后一个为优先级设定,我们知道中断是可以嵌套的也就是说中断服务里高优先级中断可以打断低优先级中断从而获得优先执行。那么在这个寄存器里打开对应的中断下的优先级那么他就会比自然优先级更高,会去优先执行已设定的哪一位中断。
STC51单片机中断介绍_第2张图片
STC51单片机中断介绍_第3张图片

2.中断示例

2.1程序设计

外部中断示例

#include "reg52.h"			 

typedef unsigned int u16;	 
typedef unsigned char u8;

sbit k3=P3^2; 
sbit led=P2^0;	 


void delay(u16 i)
{
	while(i--);	
}


void Int0Init()
{
	
	IT0=1;
	EX0=1;
	EA=1;	
}


void main()
{	
	Int0Init();  
	while(1);		
}


void Int0()	interrupt 0		
{
	delay(1000);	
	if(k3==0)
	{
		led=~led;
	}
}

定时器中断

#include "reg52.h"			 

typedef unsigned int u16;	  
typedef unsigned char u8;

sbit led=P2^0;	 



void Timer0Init()
{
	TMOD|=0X01;
	TH0=0XFC;	
	TL0=0X18;	
	ET0=1;
	EA=1;
	TR0=1;	
}


void main()
{	
	Timer0Init();  ¯
	while(1);		
}


void Timer0() interrupt 1
{
	static u16 i;
	TH0=0XFC;	
	TL0=0X18;
	i++;
	if(i==1000)
	{
		i=0;
		led=~led;	
	}	
}

2.2讲解

外部中断
在外部中断里进行了初始化部分设置IT0=1; EX0=1; EA=1;表示设置为沿触发模式打开中断开关然后打开总中断这样就完成了中断的初始化设定,其触发信号有开k3带来,这里deley的作用就是消抖当有开k3按键按下时程序马上跳转到终端内进行一次消抖之后确认按键按下时LED电平取反往复如此。
定时器中断在定时器中断里进行初始化设置的语句TMOD|=0X01; TH0=0XFC; TL0=0X18; ET0=1; EA=1; TR0=1;这里设置了TMOD的作用设置定时器的工作模式为模式1即设置一个16位定时器,TH0和TL0代表定时器中断0的高低8位。对其进行赋值可以设置定时器计数时常,然后打开定时器中断0并且打开总使能开关,之后打开定时器。这里要记住的是当进入中断时要重新对定时器赋值。

3.总结与心得

初次接触中断,则一定要坚持下去,打破思维固化,便是一往无前。
技术水平有限,如有错误欢迎批评指正:[email protected](本人会在闲暇时在嵌入式,集成电路,物联网互联网方面发布自己经验与心得,喜欢可以关注。谢谢。)

你可能感兴趣的:(笔记,嵌入式,单片机)