c51单片机中断详解--适合初学者

2023-11-17

代码文本在文末,文中为代码截图

工程图
在这里插入图片描述

第一题

**每次亮一个灯的流水灯,定义P1为led1。

在这里插入图片描述

外部中断0允许中断:EX0=1;下降沿触发:IT0=1;总开关:EA=1;

在这里插入图片描述

中断要执行的是P0引脚的4个二极管闪六次。
其实这里还有个想说的是,IE在中断请求的时候,会置位为1,然后CPU同意并执行中断程序后,IE自动清零。为什么说这个,这个可以在以后的一些情况,作为中断条件。

在这里插入图片描述

第二题

每次亮一个灯的流水灯和第一题的一样;
中断0下降沿触发也和第二题一样;
中断0程序是:P1引脚每次亮两个二极管的流水灯

讨论一下:每次亮两个二极管,如果低电平亮,那就要11111100B→11110011B。

在这里插入图片描述

个人觉得在中断中使用while造成的后果是很致命的,一般杜绝在里面用while,否则永远跳不出中断。(当然你可以在此中断里边进入另一个中断再跳回main,这样也太麻烦了)

实在不行的话,那就利用中断方式2的IE1吧,在while里边加个判断,break出while循环。(或者随便一个IO引脚,给她一个电平判断,应该也可以跳出while)

在这里插入图片描述

第三题

首先点亮所有灯0x00,然后逐个灭掉

逐个灭掉,补1?好象没有低位补1的,那就可以低位补0,然后取反得1:~(0xff→0xfe)=0x01

在这里插入图片描述
有没有注意到,其实我们总是习惯低电平亮灯,其实也可以高电平亮灯的,这样就不用取反这么麻烦,位的取反会显得复杂。高电平亮灯的话,直接p1=0xff<<i;即可

中断1程序是:P1引脚每次亮两个二极管的流水灯,同时P0和P2引脚闪烁交替(这里的同时不知是什么意思,,难道有多线程?)

在这里插入图片描述
变量的名字乱起的(比如interr0或intter1),自己写代码的时候另起个好听的。
哪里写得有错的话,评论分享一下,谢谢。

补充代码

#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
void delay(uint); 
#define led1 P1
sbit oo=P2^7;//测试用
//延迟函数(网上抄的)
void delay(uint t)
{
	register uint bt;
	for(;t;t--)
		for(bt=0;bt<255;bt++);
}

//中断初始化
void interr0()
{
	EA = 1;//总开关
	EX0 = 1;//中断允许位\EX1代表外部中断1
	IT0 = 1;//0为电平触发,1为脉冲触发即上下沿
}
void interr1()
{
	EA = 1;//总开关
	EX1 = 1;//中断允许位\EX1代表外部中断1
	IT1 = 1;//0为电平触发,1为脉冲触发即上下沿
}

//第一二题的main函数
/*void main()
{
		unsigned char i;
		interr0();
		led1 = 0xFE;
		while(1)
		{
			//for(i=0;i<8;i++)
			//{
			//	led1=_crol_(0xfe,i);//不知为何  原理一样的代码led1 = _corl_(led1,1);为什么不可以,还在找资料
			//	delay(200);			
			//}
			//如果不想用上边的代码,可以尝试用这个
			for(i=0;i<=8;i++)
			{
				//led1>>=i;
				led1=~(0x01<<i);//这是左移i微,然后空位补零,取反0变1,灯不亮
				delay(200);
			}
		}
}*/

//第一题中断0的程序
/*void sy1() interrupt 0
{
	unsigned char i;
	P2 = 0x00;//0x00或00000000B

		for(i=0;i<12;i++)//闪六次,也就是亮闪12次
		{
			P2 = ~P2;//由0x00变0xff
			delay(200);
		}			

}*/

//第二题中断0的程序
/*void sy2() interrupt 0
{
	unsigned char i;
	while(1)
	{
		P1 = 0xFC;//11111100B;
		//for(i=0;i<5;i++)
		//{
		//	delay(200);
		//	//P1 = _crol_(P1,2);//哇,这个_crol_又不行呀!!!难受,莫非里面不能用变量?
		//	//P1 = 
		//}
		//上面不行的话只能用这种改循环的ben方法了...
		for(i=0;i<=6;)
		{
			delay(200);
			i=i+2;
			//led1 = _crol_(0xFC,i);
			led1 = ~(0x03<<i);
		}
		if(IE1==1)break;
	}
}*/

//第三题main函数

void main(void)
{
	uint i;
	uchar temp;
	interr1();
	while(1)
	{
		temp=0xFF;
		for(i=0;i<=8;i++)
		{
			P1=temp;
			delay(200);
			temp=~(0xff<<i);//11111111→111111110→00000001
		}
	}
}

void sy3() interrupt 2
{
	while(1)
	{
		uint i;//我在前面定义了的即unsigned char i;
		P1 = 0xFC;
		P0=0x00;
		P2=0xff;
		for(i=0;i<=6;)
		{
			delay(200);
			i=i+2;
			led1 = ~(0x03<<i);
			P0=~P0;
			P2=~P2;
		}
		
		if(IE0==1)break;//来个跳出死循环的条件吧
	}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c51单片机中断详解--适合初学者 的相关文章

  • 各种日志关系

    slf4j是日志的门面 也是会说是日志框架
  • 【Unity开发】Unity获取设备屏幕分辨率

    using UnityEngine using System Collections public class ExampleClass MonoBehaviour void Start Resolution resolutions Scr
  • Vscode ssh远程连接失败解决办法

    问题描述 Vscode 通过remote ssh连接远程ubuntu时出现 192 168 x x has fingerprint SHA256 如下图所示 按照提示选择 continue 然后输入正确密码却显示Permission Den
  • java md5 解密_“实用”的JAVA开发工具类库

    简介 Hutool是一个小而全的Java工具类库 通过静态方法封装 降低相关API的学习成本 提高工作效率 使Java拥有函数式语言般的优雅 让Java语言也可以 甜甜的 Hutool中的工具方法来自于每个用户的精雕细琢 它涵盖了Java开
  • 免费的 AI 代码辅助工具-codeium

    不是标题党 是真免费 几天之前 GitHub 发布了 GitHub Copilot X 这是一款基于 OpenAI 的 GPT 4 模型开发的 AI 代码辅助工具 看介绍应该是和 Microsoft 365 Copilot 很像的产物 属于
  • ChatGLM-6B部署笔记

    前言 本笔记基于ChatGLM 6B开源网站 https github com THUDM ChatGLM 6B 完成ChatGLM的本地部署 首先电脑已经安装python3 10 anaconda pycharm2022 3 如若使用本地

随机推荐

  • Application.targetFrameRate安卓apk上设置帧率问题

    一般游戏为了更好的适配各种机型 会对游戏进行锁帧 就会使用Application targetFrameRate这个方法设置帧率 pc上测试是没问题的 但是安卓机上面测试就会发现 设置的帧率只能在30和60帧两个数值来回跳动 参考了unit
  • 21-angular.merge

    通过从src对象 s 复制自己的可枚举属性到dst 深度扩展了目标对象的dst 您可以指定多个src对象 如果您想保留原始对象 那么可以通过将空对象作为目标来实现 var object angular merge object1 objec
  • 睿智的seq2seq模型1——利用seq2seq模型对数字进行排列

    睿智的seq2seq模型1 利用seq2seq模型对数字进行排列 学习前言 seq2seq简要介绍 利用seq2seq实现数组排序 实现方式 一 对输入格式输出格式进行定义 二 建立神经网络 1 神经网络的输入 2 语义编码c的处理 3 输
  • 【English】十大词性之感叹词(感叹句)

    感叹词 文章目录 感叹词 前言 一 十大高频感叹词 1 1 Oh 表示惊讶 指责 痛苦 称赞 懊恼等 可译为 哦 哎呀 噢 啊 呀 等 1 2 Ah 表示惊奇 高兴 讨厌 懊悔 藐视 威胁等 可译为 呀 啊 等 1 3 come 表示鼓励
  • 海量数据分类 liblinear使用总结

    liblinear使用总结 liblinear是libsvm的线性核的改进版本 专门适用于百万数据量的分类 正好适用于我这次数据挖掘的实验 liblinear用法和libsvm很相似 我是用的是 exe文件 利用python的subproc
  • Oracle安装详细教程

    一 安装教程 安装教程1 安装教程2 假设安装时弹出 microsoft net framework 3 5 提示你需要安装这个 你可以选择直接忽视 关掉弹窗 等待数据库复制 安装时 综合看两个教程 基本满足安装需求 二 安装测试 1 在电
  • Mac os Ventura 关闭 accent方言,长按不能连续输入问题

    Mac os Ventura 关闭 accent方言 长按不能连续输入问题 在之前的osx版本遇到长按开启方言输入 无法连续输入问题时 defaults write g ApplePressAndHoldEnabled bool false
  • Python逻辑判断顺序

    Python逻辑判断是有顺序的 如 while l1 is not None and l2 is not None and l1 val lt l2 val node1 next l1 node1 node1 next l1 l1 next
  • 从零开始,教你如何开发一款自己的 IDEA 插件!

    程序员的成长之路 互联网 程序员 技术 资料共享 关注 阅读本文大概需要 4 分钟 来自 blog csdn net smile 795 article details 125470136 idea插件介绍 作为一枚程序员 平时最常用的id
  • cdn服务器pnk_cdn服务器是什么

    对于cdn我们不陌生 你听过cdn服务器吗 CDN服务器是建立在网络上的内容分发网络 依托布置在各地的边缘服务器 用户可以经过中央渠道的负载平衡 内容分发 调度等功用模块获取附近所需的内容 然后减少网络拥塞 进步用户拜访响应速度和命中率 为
  • 数据结构与算法——线性表的顺序储存结构

    目录 前言 一 顺序储存的定义及储存方式 二 地址计算方法 三 顺序存储结构的插入和删除 3 1 获得元素操作 3 2 插入操作 3 3 删除操作 四 分析插入和删除操作的时间复杂度 五 线性表顺序存储结构的优缺点 前言 在介绍线性表的顺序
  • Windows安装程序遇到错误:0x80240037

    在安装微软的程序时遇到此错误 本例以安装PB的帮助文档为例 解决办法是 第一步 更改安装文件后缀 第二步 Win R执行 第一步 将msu后缀更改为cab 更改后变为 然后将其解压到一个新文件夹 比如cab 解压后的内容为 第二步 WIN
  • Linux与Windows下CMake的安装与编译

    一 背景介绍 CMake 这个名字是 Cross platform Make 的缩写 虽然名字中含有 make 但是CMake和Unix上常见的 make 系统是分开的 而且更为高端 它可与原生建置环境结合使用 例如 make 苹果的Xco
  • GPS开发常用方法 和用Criteria确定android location providerGPS开发常用方法

    GPS常用方法总结 取得LocationProvider Java代码 public void getLocationProvider try Criteria mCriteria01 new Criteria mCriteria01 se
  • 利用Visual Studio程序写出循环结构求1+3+5+....+100的值

    下面是在 Visual Studio 中使用 C 编写循环结构求 1 3 5 100 的值的示例代码 int sum 0 for int i 1 i lt 100 i 2 sum i Console WriteLine sum 上面的代码使
  • Excel里怎么冻结某一行某一列

    企业内部日常运营中 需要不断的处理数据来为决策做支撑 但是如果数据大的话 会发现看不到表头那边 不知道这些数据属于哪个地方 下面小编就告诉大家如何在Excel里来冻结窗口固定表头 以下就是Excel里冻结首行首列已经冻结多个窗口的方法 Ex
  • 《程序员的自我修养——链接、装载与库》

    先不说别的 就单看书名就知道是什么意思了 作者的意思是想 演员的自我修养 的作者 斯坦尼斯拉夫斯基 致敬 老斯的那本书我没看过 但我看这本书的意思就是培养程序员的基本素质 你说啥叫基本素质 那就是你能够了解你编写的程序的任何一个运行的细节
  • c++可变参数完美转发

    c 语法真的怪异 看线程源码的时候看到一段 template
  • 基于51单片机可控电压0-5V输出PWM方式PID稳压

    视频地址链接 https www bilibili com video BV17V411n72P 本设计为AT89C51为主控芯片 主要是实现了PWM方式输出可调电压0 5V输出 使用PID方式稳压
  • c51单片机中断详解--适合初学者

    代码文本在文末 文中为代码截图 工程图 第一题 每次亮一个灯的流水灯 定义P1为led1 外部中断0允许中断 EX0 1 下降沿触发 IT0 1 总开关 EA 1 中断要执行的是P0引脚的4个二极管闪六次 其实这里还有个想说的是 IE在中断