IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 51单片机之中断系统 -> 正文阅读

[嵌入式]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;
  
}


总结

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-01-16 13:13:51  更:2022-01-16 13:15:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 12:34:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码