设计二:51单片机外部中断控制

news2024/11/22 23:19:23

目录

一、设计内容

二、中断相关知识

1、51单片机中断源

2、中断系统特殊功能寄存器

3、中断函数与函数调用区别

三、仿真原理图

四、程序设计

五、仿真结果

六、思考题

作者有话说


一、设计内容

       本次设计使用2个按键,在无按键按下时,最下面一位发光二极管点亮;当KEY1按下,外部中断0请求中断,控制发光二极管从下到上循环点亮3圈;当KEY2按下,外部中断1请求中断,控制发光二极管闪烁3次。(要求外部中断1优先级高于外部中断0,即KEY2按下后能够打断流水灯的动作,当外中断1处理完后,恢复外中断0的处理,并且能从上次打断的那个LED开始循环)。

二、中断相关知识

1、51单片机中断源

中断源

中断号

入口地址

外部中断0

0

0003H

外部中断1

2

0013H

定时器T0

1

000BH

定时器T1

3

001BH

串口中断

4

0023H

2、中断系统特殊功能寄存器

     中断允许寄存器IE、定时器/计数器T0/T1控制寄存器TCON、定时器/计数器T2控制寄存器T2CON 、串口控制寄存器SCON

3、中断函数与函数调用区别

      中断函数不能有返回值、中断函数不能传递参数、中断函数程序应该短小精悍

三、仿真原理图

四、程序设计

/*******************************************************************************
* 函 数 名  				: main
* 函数功能		      : 外部中断
* 创作者  					: 薄情书生
* 创作时间  				: 2022.9.27
*******************************************************************************/
main.c文件

#include "reg52.h"         
#include "led.h"
#include "exit.h"

/*************38译码器**************/
void SelectHC138(unsigned char channel)
{
   switch(channel)
	 {
		 case 0:
        P1 = (P1 & 0x1f)|0x00;break;    //发光二极管(LEDS0)
   }
}

/*************主函数******************/
void main()
{
  SelectHC138(0);
	Exint_Init();
	while(1)
	{
		P0 = 0x7f;
	}
}


delay.c文件

#include "delay.h"

/*********毫秒延时*********/
void delay_ms(u16 ms)
{
	u16 x,y;
	for(x=ms;x>0;x--)
		for(y=114;y>0;y--);
}


led.c文件

#include "led.h"
#include "reg52.h"
#include "delay.h"
#include "intrins.h"

/*************LED由下至上**************/
void Bottom_Up()
{
	u8 i,j;
	for(j=0;j<3;j++)
	{
		for(i=0,P0 = 0xff;i<8;i++)
		{
			P0 = P0<<1;	 
			delay_ms(200); 
		}
	}
	P0 = 0xff;
}

/*************LED由上至下**************/
void Up_Bottom()
{
	u8 i,j;
	for(j=0;j<3;j++)
	{
		for(i=0,P0 = 0xff;i<8;i++)
		{
			P0 = P0>>1;	 
			delay_ms(100); 
		}
	}
	P0 = 0xff;
}

/*************LED齐闪烁**************/
void LED_twinkle()
{
	u8 i,j;
	for(j=0;j<3;j++)
	{
		for(i=0,P0 = 0x00;i<3;i++)
		{
			P0 = ~P0;	 
			delay_ms(500); 
		}
	}
	P0 = 0xff;
}

/*************LED保持3s**************/
void Hold_3s()
{
	P0 = 0x00;	 
	delay_ms(3000); 
	P0 = 0xff;
}

/*************两边至中间**************/
void LED_sides()
{
	u8 i,j,ri,lf;
	for(j=0;j<3;j++)
  {
		for(i=0,ri=0x7f,lf=0xfe;i<4;i++)
		{
			P0 = ri&lf;
			ri = _cror_(ri,1);
			lf = _crol_(lf,1);
			delay_ms(1000);
		}
  }
	P0 = 0xff;
}

/*************中间至两边**************/
void LED_middle()
{
	u8 i,j,ri,lf;
	for(j=0;j<3;j++)
	{
		for(i=0,ri=0xef,lf=0xf7;i<4;i++)
		{
			P0 = ri&lf;
			ri = _crol_(ri,1);
			lf = _cror_(lf,1);
			delay_ms(1000);
		}
	}
	P0=0xff;
}


exit.c文件

#include "exit.h"
#include "reg52.h"
#include "led.h"

/*********外部中断0、1初始化***********/
void Exint_Init()
{
	IT0 = 0;
	IT1 = 0;
	PX0 = 0;
	PX1 = 1;
	EA = 1;
	EX0 = 1;
	EX1 = 1;
}

/*********外部中断0服务函数***********/
void Exint0_Service() interrupt 0
{
	Up_Bottom();
}

/*********外部中断1服务函数***********/
void Exint1_Service() interrupt 2
{
	LED_twinkle();
}

五、仿真结果

无按键按下时,最下面一位发光二极管点亮。

 KEY1按下,外部中断0请求中断,控制发光二极管从下到上循环点亮3圈。

 KEY2按下,外部中断1请求中断,控制发光二极管闪烁3次。

KEY2按下后能够打断KEY1流水灯的动作,当外中断1处理完后,恢复外中断0的处理,并且能从上次打断的那个LED开始循环。

、思考题

请修改程序,将INT0和INT1的优先级都设置成0,先按下KEY2,在LED的闪烁过程中按下KEY1,看能否打断LED的闪烁?原因是什么?思考题参考程序将在设计三:51单片机数码管显示控制给出。

作者有话说

本专栏为51单片机实战教程,旨在以练促学,帮助小伙伴快速入门51单片机,学习51单片机相应理论知识请自行学习。本次设计涉及的相关理论知识:51单片机外部中断控制、独立按键的使用、模块化编程,请自行参考资料学习。

本次设计源程序及仿真源文件百度网盘链接:链接:https://pan.baidu.com/s/1TNwn74gbOoMzb3Wcqopvrg 
提取码:vga5 
 

设计一:51单片机控制流水灯思考题参考源程序及仿真源文件百度网盘链接:https://pan.baidu.com/s/1bdtvHcNLI8ydR_t94DWQXw 
提取码:gnv6 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/595646.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能python:Python代码50行:如何使用Python进行SEO分析

Python代码50行&#xff1a;如何使用Python进行SEO分析 随着互联网的发展&#xff0c;Search Engine Optimization&#xff08;SEO&#xff09;已经成为企业网络营销策略中至关重要的一环。而Python作为一种全能的编程语言&#xff0c;已经逐渐成为许多SEO工程师的首选工具。本…

chatgpt赋能python:Python修改List的教程

Python修改List的教程 当涉及到Python编程时&#xff0c;对于处理和管理数据&#xff0c;List是一个非常常见和有用的数据结构。像大多数数据结构一样&#xff0c;有时需要对List进行修改&#xff0c;以便更好地满足程序的需求。因此&#xff0c;本文将向您展示如何使用Python…

数据结构与算法09:二叉树

目录 【树】 【二叉树】 二叉树的遍历 Go代码实现 二叉树的复杂度分析 【二叉搜索树】 Go代码实现 【每日一练&#xff1a;移除元素】 【树】 什么是树&#xff1f;这个不用解释了吧&#xff0c;马路两边种的都是树。数据结构里面的“树”和现实生活中的树类似&#…

chatgpt赋能python:Python会动的图形:如何让你的网站活力四射

Python会动的图形&#xff1a;如何让你的网站活力四射 如果你想让你的网站更具生命力、吸引力和互动性&#xff0c;一种非常有效的方式是使用动态图形。而Python有许多强大的库可以帮助你实现这一目标。在本篇文章中&#xff0c;我们将讨论Python会动的图形的好处、如何实现和…

过滤器JavaWeb:Filter与拦截器Spring:Intercepter

过滤器与拦截器若同时存在&#xff0c;先执行过滤器的放行前&#xff0c;再执行整个拦截器&#xff0c;最后再执行过滤器的放行后 过滤器会拦截所有资源&#xff08;包括静态资源&#xff09;&#xff0c;拦截器只会拦截Spring环境的资源 Filter的使用 1、创建一个类implement…

深蓝学院C++基础笔记 第 1 章 C++初探

第 1 章 C初探 1&#xff0e;从Hello World 谈起 Hello World: #include <iostream> int mian() { std::cout << "Hello World!" << std::endl; }函数: 一段能被反复调用的代码&#xff0c;可以接收输入&#xff0c;进行处理并(或)产生输出-返回…

Postgres vs MySQL

主要区别及示例 简而言之&#xff0c;Postgres 和 MySQL 之间的主要区别实际上归结为主索引和辅助索引的实现方式以及数据的存储和更新方式。 让我们进一步探讨这个问题。 但首先... 基础知识 索引是一种数据结构&#xff08;主要是 B 树&#xff09;&#xff0c;允许通过…

DAY01_MySQL基础数据类型navicat使用DDL\DML\DQL语句练习

目录 1 数据库相关概念1.1 数据库1.2 数据库管理系统1.3 常见的数据库管理系统1.4 SQL 2 MySQL2.1 MySQL安装2.1.1 安装步骤 2.2 MySQL配置2.2.1 添加环境变量2.2.2 MySQL登录2.2.3 退出MySQL 2.3 MySQL数据模型2.4 MySQL目录结构2.5 MySQL一些命令2.5.1 修改默认账户密码2.5.2…

Linux 计划任务(at与crontab)

一次性计划任务 at Linux 中的【 at 】 命令是用来创建一次性计划任务的&#xff0c; at 命令有一个服务 atd 以后台的模式运行&#xff0c;通过检查当前的时间来决定是 否运行 " 计划 " &#xff0c;默认情况下&#xff0c; atd 服务每 60 秒检 查一次&#x…

【Web服务应用】Nginx服务

Nginx服务 一、Nginx概述1.1Nginx特点1.2Nginx作用1.3Nginx与Apache的差异 二、Nginx进程模型三、编译安装Nginx3.1Nginx服务的检查、启动、停止&#xff0c;重载3.2平滑升级3.3把nginx进程加入到系统服务当中 四、Nginx服务的主配置文件nginx.conf4.1补充什么是IO多路复用4.2根…

R语言:移动平均计算及绘图

问题描述 现在有一个分日期记录DAU的数据&#xff0c;现在需要绘制其360,180,90,30,7日移动平均值&#xff0c;来观测消除了波动干扰的DAU趋势 (实际移动在股价趋势图上非常常见) 原始数据格式如下&#xff1a; day &#xff08;character&#xff09; dau &#xff08;int…

Docker+Jenkins+Gitee自动化部署maven单模块项目

1.简介 各位看官老爷&#xff0c;本文为Jenkins实战&#xff0c;注重实际过程&#xff0c;阅读完会有以下收获&#xff1a; 了解如何使用Docker安装Jenkins了解如何使用Jenkins部署maven项目了解如何使用JenkinsGitee实现自动化部署 2.Jenkins介绍 相信&#xff0c;正在读这…

2023年上半年软件设计师上午真题及答案解析

1.计算机中&#xff0c;系统总线用于( )连接 A.接口和外设 B.运算器&#xff0c;控制器和寄存器 C.主存、外设部件 D.DMA控制器和中断控制器 2.在由高速缓存、主存和硬盘构成的三级存储体系中&#xff0c;CPU执行指令时需要读取数据&#xff0c;那么DMA控制…

深入理解Linux虚拟内存管理(一)

系列文章目录 Linux 内核设计与实现 深入理解 Linux 内核&#xff08;一&#xff09; 深入理解 Linux 内核&#xff08;二&#xff09; Linux 设备驱动程序&#xff08;一&#xff09; Linux 设备驱动程序&#xff08;二&#xff09; Linux 设备驱动程序&#xff08;三&#xf…

ubantu换配置源

文章目录 1.配置镜像源位置2.进入终端&#xff0c;切换到/home/user/etc/apt/3.默认这个文件是只读的&#xff0c;我们修改一下权限4.修改之前&#xff0c;我们先备份一下系统原来配置的源5.开始修改&#xff0c;打开/etc/apt/sources.list文件&#xff0c;将原来的内容删除&am…

chatgpt赋能python:Python代码怎么打包-全面介绍

Python 代码怎么打包 - 全面介绍 Python 是一种高效、易学易用、灵活多变的编程语言。对于 Python 开发者来说&#xff0c;如何将其编写的程序打包是一个必须掌握的技能。本文将着重介绍 Python 代码打包的方法及其优势&#xff0c;并提供一些实用的工具和技巧。 什么是打包?…

六级备考17天|2017年12月三套真题|翻译与写作|20:45~21:00

目录 第一套 翻译&#xff1a;太湖 中文 英文 词汇 作文 谚语题&#xff1a;respect others, and you will be respected 第二套 翻译&#xff1a;青海湖 中文 英文 词汇 第一套 翻译&#xff1a;太湖 中文 英文 词汇 太湖 Lake Tai 淡水湖 fre…

python+vue学生选课学习成绩分析及可视化分析系统

但目前国内的学习成绩分析及可视化分析信息仍然都使用人工管理&#xff0c;随着学校规模越来越大&#xff0c;同时课程信息量也越来越庞大&#xff0c;人工管理显然已无法应对时代的变化&#xff0c;而学习成绩分析及可视化分析能很好地解决这一问题&#xff0c;轻松应对学习成…

2020第十一届蓝桥杯Python组国赛【真题+解析+代码】

&#x1f381;2020第十一届蓝桥杯python组国赛真题 &#x1f680; 真题练习&#xff0c;冲刺国赛 &#x1f680; 2020年第十一届蓝桥python组国赛真题解析代码 博观而约取&#xff0c;厚积而薄发 &#x1f3c6;国赛真题目录 文章目录 &#x1f381;2020第十一届蓝桥杯python组国…

本地部署Jellyfin影音服务器【公网远程影音库】

文章目录 1. 前言2. Jellyfin服务网站搭建2.1. Jellyfin下载和安装2.2. Jellyfin网页测试 3.本地网页发布3.1 cpolar的安装和注册3.2 Cpolar云端设置3.3 Cpolar本地设置 4.公网访问测试5. 结语 转载自cpolar极点云的文章&#xff1a;零基础搭建私人影音媒体平台【远程访问Jelly…