51单片机学习笔记_5 中断:外部中断和定时器中断

news/2024/11/28 23:41:23/

中断

使单片机能对外部或者内部随机发生的事件实时处理。

分时操作,实时响应,可靠性高。

中断相应条件:①中断源有中断请求;②中断源的中断允许位为1;③CPU 开中断(EA=1)。

代码编写:主程序中需要包含:

EA=1;//总中断开关:打开
EX0=1;//外部中断0开关:打开。
IT0=0/1;//外部中断触发方式的选择。如下降沿触发,或低电平触发。
//如果要配置外部中断1,则改为EX1和IT1//中断服务函数
void int0() interrupt 0 using 1
{}

interrupt 是关键字,代表中断。0代表是外部中断,using 1 可省略。如果是外部中断1,interrupt后面是2.

外部中断实验

运行程序前,请摘下红外接收传感器。因为共用P3^2引脚,会干扰实验结果。

51单片机都有2个外部中断。STC89C5X系列有INT0~INT3四个。

对于三个参数的初始化,一般用一个init函数执行,在main的最开头。

本例中,我们用按键3作为外部中断源。按下按键3就会产生中断。中断执行的指令就是点亮或熄灭LED灯。

#include "reg52.h"
sbit LED=P2^0;
sbit KEY3=P3^2;
void delay(int ten_us)
{
while(ten_us--);
}
void interrupt_init(){EA=1;//总中断开关:打开EX0=1;//外部中断0开关:打开。IT0=1;//外部中断触发方式的选择。如下降沿触发,或低电平触发。	
}void int0() interrupt 0{delay(1000);if(KEY3==0){LED=!LED;}
}void main(){interrupt_init();while(1){}
}

定时器中断实验

本章利用单片机自带的定时器来实现之前做过的操作:LED灯间歇闪烁。一直以来实现的方法都是借助while循环来拖延时间。

CPU时序的相关知识

振荡周期:为单片机提供信号的振荡源的周期(晶振周期)。

状态周期:两个振荡周期=1状态周期s(时钟周期)。

机器周期:6状态周期=1机器周期。

指令周期:完成一条指令所用的全部时间,以机器周期为单位。

定时器的相关知识

定时器又可以计数,也叫计数器。不需要CPU参与自己就能完成任务,根据脉冲信号对寄存器中数据+1。来一个脉冲定时器+1,加到全为1后输出一个脉冲并归0.同时,向CPU发出计时器中断信息。

因此比如之前的delay函数就交给定时器来就行,CPU可以腾出来处理其他。

开启定时器计数功能及总中断:

void time0_init(void)
{TMOD|=0X01;//选择为定时器 0 模式,工作方式 1TH0=0XFC; //给定时器赋初值,定时 1msTL0=0X18;ET0=1;//打开定时器 0 中断允许EA=1;//打开总中断TR0=1;//打开定时器
}

要使用定时器1,把0变成1就好。

LED灯间隔1s闪烁代码(以12M晶振为例):

#include "reg52.h"
sbit LED=P2^0;
void time0_init(void)
{TMOD|=0X01;//选择为定时器 0 模式,工作方式 1TH0=0XFC; //给定时器赋初值,定时 1msTL0=0X18;ET0=1;//打开定时器 0 中断允许EA=1;//打开总中断TR0=1;//打开定时器
}
void  time0() interrupt 1{static int i;TH0=0XFC; //给定时器赋初值,定时 1msTL0=0X18;i++;if(i==1000){i=0;LED=!LED;}
}
void main(){time0_init();while(1){}
}

http://www.ppmy.cn/news/9375.html

相关文章

【Linux】顶级编辑器Vim的基本使用及配置

👑作者主页:进击的安度因 🏠学习社区:进击的安度因(个人社区) 📖专栏链接:Linux 文章目录一、前言二、vim基本概念三、vim 基本操作1、模式切换2、命令模式3、插入模式4、底行模式四…

对厚积薄发的理解

厚积而薄发的完整语句是“博观而约取,厚积而薄发”。 重点在于博观和厚积上,然而这两者并非是条件关系,并不是博观后才能约取,也不是厚积后才能薄发。 他更像是一种人生态度,经博览群观众书后,选择约取的…

059-MySQL数据库综合应用(实现登录及注册功能)

【上一讲】058-PreparedStatement对象的使用方法及步骤详细介绍_CSDN专家-赖老师(软件之家)的博客-CSDN博客 【下一讲】060-MySQL数据库综合应用(实现登录及注册功能源代码)_CSDN专家-赖老师(软件之家)的博客-CSDN博客 本文章讲解JAVA数据库技术与MySQL数据库结合使用,…

深度剖析数据在内存中的存储

数据类型的介绍数据类型的归类整形家族:char (在内存存储ASCII码值,是整数)short int long long long浮点数家族:floatdouble构造类型:结构体struct枚举类型enum联合类型union指针类型:int*shor…

2021 CCF “计算之美”学术大会参会总结

最近在回顾读研以来参加过的大大小小的学术会议记录,在此整理记录之。 前言 2021年6月12日,2021年CCF“计算之美”——新基建时代产、教、研、地融合学术大会在海上丝绸之路起点宁波成功举办。近200人参与本次大会,40余位嘉宾带来精彩分享&…

网站收录查询方法,网站收录减少的原因

网站收录就是与互联网用户共享网址,网站收录前提是网站首页提交给搜索引擎,蜘蛛才会光顾,每次抓取网页时都会向索引中添加并更新新的网站,站长只需提供顶层网页即可,不必提交各个单独的网页。抓取工具能够找到其他网页…

活动星投票最美空姐网络评选微信的投票方式线上免费投票

如何进行“最美空姐”的投票活动_投票小程序投票_投票助力方式大家在选择投票小程序之前,可以先梳理一下自己的投票评选活动是哪种类型,目前有匿名投票、图文投票、视频投票、赛事征集投票等。我们现在要以“最美空姐”为主题进行一次投票活动&#xff0…

计算机网络(二)Linux网络编程

layout: post title: 计算机网络(二)Linux网络编程 description: 计算机网络(二)Linux网络编程 tag: 计算机网络 文章目录资源共享POSIX概念POSIX网络相关APIsocket()bind()网络字节序与主机字节序(大小端设备&#xf…