热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

单片机外部中断实验

目录1、概述2、原理3、硬件和软件设备4、步骤5、结果(分析)1、概述联系程序设计,并熟悉外部中断和按钮的使用;掌握

目录

1、概述

2、原理

3、硬件和软件设备

4、步骤

 5、结果(分析)



1、概述

        联系程序设计,并熟悉外部中断和按钮的使用;掌握单片机外部中断程序的设计方法;在外部中断0处接一个开关,作开始按钮,按下后8个LED灯依次闪烁(在中断服务程序中实验),设计一个停止按钮,按下后灯停止闪烁;

2、原理

(1)P3口是位准双向口,具有双重功能:第一功能和P1口一样,作为输入输出口,也有字节操作和位操作两种方式,每一位可定义为输入输出;第二功能可以作为外部中断输入线。

(2)外部中断的产生的条件:中断允许寄存器IE:图片

外部中断源允许中断(中断0:EX0=1,中断1:EX1=1);CPU开中断(EA=1);外部中断方式CPU发出中断申请。

(3)外部中断方式选择:控制TCON:

 ITO是选择文字则外部中断0请求(INTO)边沿触发方式或电平触发方式的控制位。前一方式IT0=1,后一方式ITO=0
  IT1是选择外部中断1请求(INT1) 为边沿触发方式或电平触发方式的控制位。前一方式IT1=1,后一方式IT1=0,本实验采用了电平触发方式。

(4)通过特殊功能位sbit对两个开关进行位定义,为后续程序做准备。(sbit是指8051片内特殊功能寄存器的可寻地址位)

3、硬件和软件设备

(1)Protues软件中器件:AT89C51芯片、开关、电阻、电容、晶振、发光二极管、直流电源、开关。

(2)Keil软件中外部中断相关程序设计。

4、步骤

(1)先画一个程序框图,有一个大体思路。

(2)对硬件进行设计:选元件、接线、调试等一系列内容。

(3)对软件进行编程:为了实现实验目标,先在程序中写出相关头文件,本实验用到了字符循环左移,所以用到了#include ;然后定义变量,实验用到了开关,对开关进行了位定义;因为要在外部中断0处接一个按钮,作开始按钮,按下后8个LED灯依次闪烁(在中断服务程序中实验),设计一个停止按钮,按下后灯停止闪烁;在主函数中用到了if语句实现了对按钮的控制,让八个灯依次闪烁,用中断函数得到了实现。然后编译调试生成.hex文件,程序设计:

#author:hewang
#qq:207962168#include#include#define uchar unsigned char#define uint unsigned intsbit k1=P3^2;sbit k2=P3^3;char i=100;void main() //主函数
{ if (k1==0){TMOD=0x01;TH0=0Xee;TL0=0x00;P1=0xfe;EA=1;ET0=1;IT0=0;TR0=1;while(1){;}}
else {P1=0Xff;}}void time0() interrupt 1 //T0的中断函数
{TH0&#61;0xee; //重新赋初值TL0&#61;0x00;i--;if(i<&#61;0){P1&#61;_crol_(P1,1) ; //左移1位i&#61;100; //重置循环次数}else if(k2&#61;&#61;0){P1&#61;0xff;}}

&#xff08;4&#xff09;对Protues中电路和Keil进行联调。硬件设计&#xff1a;

 5、结果&#xff08;分析&#xff09;

&#xff08;1&#xff09;结果&#xff1a;对Protues进行仿真&#xff1a;当把外部中断0处的按钮按下时&#xff0c;8个LED灯依次闪烁。当把另一个按钮按下后灯停止闪烁。

&#xff08;2&#xff09;分析&#xff1a;A、在软件中用到了分支结构&#xff0c;实现了对硬件中按钮的控制&#xff0c;且达到了预期目标。

B、用软件中中断函数实现了对硬件中8个LED依次闪烁目标的实现。

C、由于是电平触发&#xff0c;所以在按下按键的时候&#xff0c;会有好多灯一起亮&#xff0c;比如低电平&#xff0c;在低电平这段时间里&#xff0c;会不断地请求中断&#xff0c;所以就会进入很多次中断&#xff0c;在加上请求中断的速度快和LED灯有一定的的余晖&#xff0c;所以肉眼看起来就好像灯全是亮的。

D、为了让人眼能看清楚LED灯的变换&#xff0c;控制8只LED灯每0.5秒闪一次&#xff0c;本实验用到了定时器/计数器T1、T0的编程应用。


推荐阅读
  • 本文介绍了基于c语言的mcs51单片机定时器计数器的应用教程,包括定时器的设置和计数方法,以及中断函数的使用。同时介绍了定时器应用的举例,包括定时器中断函数的编写和频率值的计算方法。主函数中设置了T0模式和T1计数的初值,并开启了T0和T1的中断,最后启动了CPU中断。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • c语言\n不换行,c语言printf不换行
    本文目录一览:1、C语言不换行输入2、c语言的 ... [详细]
  • 本文介绍了一种划分和计数油田地块的方法。根据给定的条件,通过遍历和DFS算法,将符合条件的地块标记为不符合条件的地块,并进行计数。同时,还介绍了如何判断点是否在给定范围内的方法。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 本文介绍了为什么要使用多进程处理TCP服务端,多进程的好处包括可靠性高和处理大量数据时速度快。然而,多进程不能共享进程空间,因此有一些变量不能共享。文章还提供了使用多进程实现TCP服务端的代码,并对代码进行了详细注释。 ... [详细]
  • 本文介绍了解决二叉树层序创建问题的方法。通过使用队列结构体和二叉树结构体,实现了入队和出队操作,并提供了判断队列是否为空的函数。详细介绍了解决该问题的步骤和流程。 ... [详细]
  • 本文介绍了C函数ispunct()的用法及示例代码。ispunct()函数用于检查传递的字符是否是标点符号,如果是标点符号则返回非零值,否则返回零。示例代码演示了如何使用ispunct()函数来判断字符是否为标点符号。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • 本文介绍了指针的概念以及在函数调用时使用指针作为参数的情况。指针存放的是变量的地址,通过指针可以修改指针所指的变量的值。然而,如果想要修改指针的指向,就需要使用指针的引用。文章还通过一个简单的示例代码解释了指针的引用的使用方法,并思考了在修改指针的指向后,取指针的输出结果。 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
author-avatar
QQ文科
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有