51单片机之中断系统

目录

一、中断是什么?

二、外部中断

1.中断寄存器及中断优先级

3.外部中断

4.定时器中断

5.串行口通信

5.1串口相关寄存器

总结


一、中断是什么?

      中断系统是为使CPU具有对外界紧急时间的实时处理能力而设置的。

      当中央处理器cpu正在处理某件事情的过程中外界发生了紧急事件请求,需要cpu暂停当前的工作,而转去处理这个紧急事件,处理完以后,再回到原来被中断的地方,继续原来的工作,这样的过程称之为中断。

二、外部中断

1.中断寄存器及中断优先级

EA 总中断控制

EX0 外部中断0控制允许位

IPH,IP  优先级控制位

2.定时器/计数器0/1控制寄存器TCON

TF1/TF0  定时器T0/T1溢出标志位

FR1/FR0 定时器1/0运行控制位

IT1/IT0 外部中断中断类型选择位,选择下降沿或低电平触发

IE1/IE0 外部中断请求源标志(cpu)控制

3.外部中断

#include <reg51.h>
#include"public.h"
#define led_all P2
sbit led=P2^2 ;	  
sbit key=P3^2;
sbit key1=P3^3;	      
	  

void exin0()		 //外部中断0初始化函数
{
EA=1;			 //打开总中断
EX0=1;			 // 外部中断0中断允许位
IT0=1;			 //外部中断0中断源类型选择位,可选择低电平触发或下降沿触发
}
void exin1()		 //外部中断1初始化函数
{
EA=1;			 //打开总中断
EX1=1;			 // 外部中断0中断允许位
IT1=1;			 //外部中断0中断源类型选择位,可选择低电平触发或下降沿触发
}
int main()		 //主函数
{

exin0();
exin1();			  //调用中断初始化
while(1)
{				  //空循环
}
return 0;
}

void int0()	interrupt 0		//中断函数
{
 delay_ms(1);				//消抖
 if(key==0)					//触发
 led=!led;					//led翻转
}

void int1()	interrupt 2		//中断函数
{
 delay_ms(1);				//消抖
 if(key1==0)					//触发
 led_all=~led_all;					//led_all翻转
}

4.定时器中断

#include <reg51.h>
#include"public.h"

sbit led=P2^2 ;	  
      
	  

void time0_init()			  //定时器0初始化函数
{
   TMOD=0x01;				  //定时器模式控制  写入gate0=0定时器计数  设置定时器从内部时钟输入
   TH0=0xfc;				  //设置寄存器初值高8位
   TL0=0x18;				  //设置寄存及初值低8位
   ET0=1;					  //打开定时器0中断允许
   EA=1;					  //打开定时器总中断
   TR0=1;					  //打开定时器T0运行控制位
}

int main()
{
  time0_init();
  while(1)
{
}
return 0;
}


void time0() interrupt 1		//中断函数time0
{
  static int i=0;				//静态局部变量i
   TH0=0xfc;					//初值初始化
   TL0=0x18;
   i++;							//次数

if(i==1000)						//1s
   {
   i=0;
   led=!led;					//led翻转
   }
}

5.串行口通信

51单片机内部集成有一个功能很强的全双工串行通信口,设有两个相互独立的接收和发送缓冲器,可以同时发送和接收数据,发送缓冲器只能写入而不能读出,接收缓存器只能读出而不能写入,因而两个缓冲器可以公用一个地址码(99H)两个缓冲器统称串行通信特殊功能寄存器SBUF。

5.1串口相关寄存器

SCON 串口控制寄存器

SBUF 串口通信缓冲器

PCON 电源控制寄存器

IE(ES) 串口中断允许位

IPH/IP 中断优先级寄存器

SADEN/SADDR 从机地址控制寄存器

#include <reg51.h>
#include"public.h"

sbit led=P2^2 ;	  
      
	  

void uart_init()			  //串口初始化函数
{
   TMOD|=0x20;				   //定时器1
   PCON=0x80;				   //
   SCON=0x50;				   //串口控制寄存器配置
   TH1=0xfa;				  //设置寄存器初值高8位
   TL1=0xfa;				  //设置寄存及初值低8位
   ES=1;					  //串口中断允许
   EA=1;					  //打开总中断
   TR1=1;					  //打开定时器运行控制位
}

int main()
{
  uart_init();
  while(1)
{
}
return 0;
}


void uart() interrupt 4		//中断函数urat
{
  int rec=0;
  RI=0;				
  rec=SBUF;
  SBUF=rec;
  while(!TI);
  TI=0;
  
}


总结

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值