单片机实验:外部中断按键

这是之前写的,一直没发。

实验内容:

实验大致上就是说:按键不按的时候,灯一直亮,按键按下的时候,灯不亮,报警器响。现在给了汇编语言,要改成c语言,并在proteus里面仿真。

思考与总结:

响应中断请求的条件:
1.总中断允许开关EA=1。
2.中断源的中断允许位为1。
3.中断源发出中断请求。
4.无同级或更高级中断正在被服务。

结合实验,就知道,这里跑到中断子程序的条件,首先总开关打开。然后选择中断请求源,对这个实验来说,也就是选择INT0‾\overline{INT0}INT0外部中断请求0,它的中断允许控制位是EX0EX0EX0,我们置1后,就说明允许了外部中断0中断。
我们如果选用跳沿触发,一个机器周期采样到外部中断输入为高,下一个为低,那么中断请求触发器置一,这个时候进入中断子程序。
这个实验是电平触发。
cpu查询到中断请求时,就会进行中断响应(这里假设只是单一中断,如果有不同优先级的中断,那么cpu还要进行判断)。硬件生成一个长调用指令并执行,程序转向中断入口地址,两个中断入口相隔8字节,难以放下中断子程序,此时需要一个跳转指令,转向在其他地址下的子程序中。

实验结果:

汇编语言实现:

	 ORG 0000hLJMP MAIN//主程序ORG 0003hLJMP INT0s//中断入口ORG 0100h
MAIN: CLR IT0//外部中断请求0为电平触发SETB EA//总中断允许SETB EX0 //允许外部中断0	
LOOP: CLR P0.0//p0.0是低电平,此时灯亮SETB P2.3//p2.3是高电平,此时警报不响SJMP LOOP//短转移指令,程序跳到loop函数循环ORG 0200h//伪指令
INT0s: SETB P0.0	 //p0.0是高电平,此时灯灭CLR P2.3     //p2.3是低电平,此时警报响
Delay: MOV R0,#200//延时函数
D1:    MOV R1,#254
D2:    DJNZ R1,D2DJNZ R0,D1RETIEND

改成c51语言:

#include<reg51.h>
#define uchar unsigned char
sbit key = P3^2;
void delay(unsigned int i)//延时函数
{unsigned int j;for(;i>0;i--)for(j=0;j<333;j++){}
}
void main()//主函数
{EA=1;//总中断允许EX0=1;//允许外部中断0IT0=0;//选择外部中断0为电平触发方式while(1)//循环{P0=0xfe;}//P0.0口的Led亮
}
void key_scan() interrupt 0 //外部中断0的中断服务函数
{if(key==0)//判断是否有按键按下{delay(10);//延时去抖if(key==0){P2=0xf7;P0=0xff;while(!key);//等待按键松开P2=0xff;P0=0xfe;}}
}

proteus仿真:
在这里插入图片描述

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

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

相关文章

java 重复代码优化_Java代码优化

优化实践1.try{}catch(){}使用1)查询中不要使用try{}catch(){}语句2)循环中不要使用try{}catch(){}语句3)异常处理不要对于所有的异常捕获都使用Exception&#xff0c;最好是捕获对应的异常类型&#xff0c;处理日志方式&#xff1a;1、打印错误日志2、调用错误业务逻辑处理函数…

java 06_JAVA06 数组

1.设计思路&#xff1a;首先设置长度为10的数组&#xff0c;设置Random引用对象&#xff0c;在循环中生成一个随机数存储在数组中&#xff0c;累加和&#xff0c;利用对话框输出结果。2.程序流程图&#xff1a;3.源程序代码&#xff1a;1 //2016/11/062 //随机生成10个数&#…

java service 事物_Service 事务(JdbcUtils 升级)

1. DAO 事务// 在 DAO 中处理事务真是"小菜一碟"public void xxx(){Connection con null;try{con JdbcUtils.getConnection();con.setAutoCommit(false); // 开启事务QueryRunner qr new QueryRunner();String sql ...;Object[] params ...;qr.update(con,sql,p…

java 8.0 sinffer_jpcap 配置方法,问题解决,模拟sniffer程序。(附JAVA程序,jar,dll包等环境)...

一、 Eclipse环境下安装与配置Jpcap相关源程序、jpcap jar包&#xff0c;dll包&#xff0c;帮助文档。1、下载安装winpcap2、jpcap官方文件中lib包下&#xff0c;有两个文件&#xff0c;jpcap.dll和jpcap.jar。jpcap.dll-->JAVA安装路径/jre1.6.0_06/bin (JRE目录)jpcap.j…

mysql工作中遇到的问题_MySQL工作中遇到的问题记录

1&#xff1a;log_slave_updates:从库1搭建级联从库2&#xff0c;从库1需要开启log_slave_updates&#xff0c;修改/etc/my.cnf&#xff0c;增加一行log_slave_updates1&#xff0c;重启数据库。http://blog.itpub.net/12679300/viewspace-1319263/2&#xff1a;ERROR 1418 (HY…

java 基本格式

java基本格式&#xff1a; 所有的java程序必须放在一个类之中才可以执行。 主方法main是整个java程序的入口&#xff0c;所有程序都是从public static void main(String[] args)开始运行的。 类定义有两种形式&#xff1a; public class:文件名和类名一致。每一个*.java文件…

python xgboost实战_史上最详细的XGBoost实战

0. 环境介绍Python 版 本&#xff1a; 3.6.2操作系统  &#xff1a; Windows集成开发环境&#xff1a; PyCharm1. 安装Python环境安装Python首先&#xff0c;我们需要安装Python环境。本人选择的是64位版本的Python 3.6.2。去Python官网https://www.python.org/选择相应的版本…

java web导入tomcat_记一次在服务器上导入javaweb 项目的经历---tomcat服务器-Go语言中文社区...

1. 导入数据库远程linux服务器mysql数据库导入和导出.sql文件大部分情况本地开发环境为windows&#xff0c;部署的服务器为Linux&#xff0c;本地数据库导出.sql文件后需要远程导入服务器&#xff0c;具体如下。首先连接服务器&#xff0c;即服务器ip&#xff0c;协议&#xff…

java 2d绘图 stroke_Java标准教程:Java 2D绘图--第4章使用Text

Java标准教程&#xff1a;Java 2D绘图--第4章使用Text本节介绍文本API的用法&#xff0c;以及他们的渲染能力。至今为止&#xff0c;您已经有了基本的Java 2D文本API&#xff0c;同时知道如何设置字体和位置&#xff0c;以及绘制文本。本节扩展了这些知识&#xff0c;同时更深入…

java 定义和导入包

java定义和导入包&#xff1a; 为了更好地组织类&#xff0c;java提供了包机制。把功能相似或相关的类或接口组织在同一个包中&#xff0c;方便类的查找和使用。同一个包中的类名不同&#xff0c;不同包中类名可以相同。同时调用两个不同包中相同类名的类时&#xff0c;应该加…

php李捷,【问题解答】蝶泳手外划的作用

一直以来总是弄不明白&#xff0c;蝶泳手外划的作用&#xff0c;以及正确的外划动作&#xff0c;请指教。”我&#xff1a;先上两个图&#xff0c;您自己分析一下&#xff1a;我&#xff1a;蝶泳的划手路线和打腿的幅度和力度是相匹配的&#xff0c;如果打腿幅度小频率快&#…

ltrim函数php,php ltrim函数怎么用?

php ltrim()函数用于删除字符串左边的空格或其他预定义字符&#xff0c;语法为“ltrim(string,charlist)”&#xff0c;参数string指定需要处理的字符串&#xff0c;参数charlist指定要从字符串中删除哪些字符&#xff1b;然后返回已修改的字符串。php ltrim函数作用&#xff1…

java strcpy,详解C语言中strcpy()函数与strncpy()函数的使用

C语言strcpy()函数&#xff1a;复制字符串头文件&#xff1a;#include 定义函数&#xff1a;char *strcpy(char *dest, const char *src);函数说明&#xff1a;strcpy()会将参数src 字符串拷贝至参数dest 所指的地址。返回值&#xff1a;返回参数dest 的字符串起始地址。附加说…

使用github+hexo搭建静态blog

解决了个人博客图片不显示问题。解决了打开页面产生404问题。学习了如何更换界面主题。学习了如何使用Git。 注&#xff1a;这篇文章仅仅是入个门&#xff0c;了解一下怎么使用githubhexo创个静态blog&#xff0c;具体blog细节比如个人介绍&#xff0c;评论插件&#xff0c;音…

java 安卓调试,Android Studio(二十一):调试你的应用

Android Studio包含了一个调试器&#xff0c;允许你调试运行在Android虚拟机或连接的Android设备的应用。通过Android Studio的调试器&#xff0c;你可以&#xff1a;1、 选择你调试设备的app2、 为你的代码设置断点3、 在运行时检测变量和表达式4、 截图和录像通过点击工具栏中…

mysql hammerdb,[料理佳餚] 用 HammerDB 來執行資料庫 TPC-C 效能量測

TPC-C 模擬的情境TPC-C 模擬的情境是一個大型的商品批發商&#xff0c;擁有若干個倉庫&#xff0c;每個倉庫擁有 100000 件商品庫存、負責為 10 個地區供貨&#xff0c;每個地區服務 3000 名客戶&#xff0c;每名客戶平均一筆訂單有 10 項商品&#xff0c;所有訂單中約 1% 在其…

axure 鼠标变成手,Axure教程|鼠标移入移出自动显示与隐藏三级菜单

前几天因工作需要做一个鼠标移入显示隐藏菜单&#xff0c;鼠标移出自动隐藏菜单&#xff0c;做的时候觉得没有什么问题&#xff0c;做完后预览就发现一个很严重的问题&#xff0c;就是鼠标移出一级菜单向二级菜单时二级菜单不显示&#xff0c;或者二级菜单显示三级菜单不显示。…

php websocket应用实例,php使用websocket示例详解

下面我画了一个图演示 client 和 server 之间建立 websocket 连接时握手部分&#xff0c;这个部分在 node 中可以十分轻松的完成&#xff0c;因为 node 提供的 net 模块已经对 socket 套接字做了封装处理&#xff0c;开发者使用的时候只需要考虑数据的交互而不用处理连接的建立…

java basic data type,java基本数据类型--Basic Datatypes

Variables are nothing but reserved memory locations to store values. This means that when you create a variable you reserve some space in the memory.---说的好有道理Based on the data type of a variable, the operating system allocates memory and decides what…

adminer.php下载,Adminer.php

Adminer.php就是原来的phpMinAdmin&#xff0c;这是用PHP编写的数据库管理工具&#xff0c;支持mysql、mariadb、postgresql、sqlite、MS SQL、Oracle等多种数据库&#xff0c;虽然是一个源码&#xff0c;但是可以使用用户们和密码直接连接到数据库的服务器&#xff0c;既可以对…