单片机 实验2-外部中断程序设计-中断按键按下次数计数数码管显示-硬件和程序设计参考

合集下载

外部中断计数实验报告

外部中断计数实验报告

一、实验目的1. 理解单片机外部中断的工作原理和触发条件。

2. 掌握如何通过外部中断实现计数功能。

3. 学习中断服务程序的设计方法。

4. 提高单片机编程和调试能力。

二、实验环境1. 单片机:80C512. 开发工具:Keil uVision3. 实验电路:按键、LED灯、单片机及其相关外围电路三、实验原理外部中断是指单片机通过外部引脚接收到的中断信号,使得CPU暂停当前程序,转而执行中断服务程序。

本实验通过外部中断实现计数功能,具体原理如下:1. 将单片机的某个外部引脚(如P3.2)设置为外部中断0(INT0)的触发引脚。

2. 在外部中断0的中断服务程序中,设置一个计数变量,每次中断发生时,计数变量加1。

3. 将计数变量的值通过LED灯显示出来,以观察计数过程。

四、实验步骤1. 创建Keil uVision项目,并添加80C51固件库。

2. 编写C语言程序,实现以下功能:- 初始化外部中断0,设置中断触发方式为下降沿触发。

- 初始化定时器,用于产生中断。

- 编写外部中断0的中断服务程序,实现计数功能。

- 编写主函数,用于设置单片机的工作状态和显示计数结果。

3. 编译并下载程序到单片机。

4. 连接实验电路,包括按键、LED灯和单片机及其相关外围电路。

5. 观察实验现象,验证计数功能是否实现。

五、实验结果与分析1. 实验现象:按下按键,LED灯显示的计数值加1。

2. 分析:- 外部中断0的中断服务程序被正确调用。

- 计数变量在每次中断发生时加1。

- LED灯能够正确显示计数结果。

六、实验总结1. 本实验成功实现了通过外部中断实现计数功能,验证了单片机外部中断的工作原理。

2. 通过编写中断服务程序,掌握了中断编程方法。

3. 实验过程中,遇到了一些问题,如中断服务程序编写错误、程序编译错误等,通过查阅资料和调试,最终解决了问题。

4. 通过本次实验,提高了单片机编程和调试能力,加深了对单片机外部中断的理解。

实验二中断实验

实验二中断实验

实验二中断实验一、实验目的1、掌握数码管的静态和动态扫描显示法。

2、掌握单片机系统中断的原理及使用方法。

3、理解键盘去抖动的原理。

二、实验原理1. 发光二极管的工作原理发光二极管简称为LED(Light Emiting Diode)。

通常所说的LED显示器由7个发光二极管组成,因此也称之为七段LED显示器,其排列形状如图8.15(a)所示。

此外,显示器中还有一个小圆点型发光二极管(在图中以dp表示),用于显示小数点。

通过七段发光二极管亮暗的不同组合,可以显示多种数字、字母以及其它符合。

LED显示器中的发光二极管共有两种连接方法,一种是共阴极连接,另一种共阳极连接。

其连接图如图8.15(b)所示。

图七段LED显示器使用LED显示器时,要注意区分这两种不同的接法。

为了显示数字或字符,必须对数字或字符进行编码。

七段数码管加上一个小数点,共计8段。

因此为LED显示器提供的编码正好是一个字节。

用LED显示器显示16进制数的编码已列在表7-4所示。

表LED显示器16进制数编码通常使用的LED显示器都是多位的。

对多位LED显示器,通常采用动态扫描的方法进行显示,即逐个循环点亮各位显示器。

为了实现LED显示器的动态扫描除了要给显示器提供段码(字形编码)的输入之外,还要对显示器加位的控制(控制LED显示器亮灭),这就是通常所说的位控和段控。

2 、中断知识在计算机系统中,中断可以由各种硬件设备产生,以便请求服务或报告故障等。

此外,中断也可由处理器自身产生,例如,程序错误或对操作系统的请求做出响应等。

89C51 的中断系统具有5 个中断源,即2 个外部中断、2 个定时器中断和1 个串行中断。

(三)、按键抖动抖动的原因:目前大部分按键或键盘都是利用机械触电的合、断作用。

机械触点在闭合及断开瞬间由于弹性作用的影响,在闭合及断开瞬间均有抖动过程,从而使电压信号也出现抖动,抖动时间的长短与开关的机械特性有关,一般为5~10ms。

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

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

单⽚机实验:外部中断按键实验内容:实验⼤致上就是说:按键不按的时候,灯⼀直亮,按键按下的时候,灯不亮,报警器响。

现在给了汇编语⾔,要改成c语⾔,并在proteus⾥⾯仿真。

思考与总结:响应中断请求的条件:1.总中断允许开关EA=1。

2.中断源的中断允许位为1。

3.中断源发出中断请求。

4.⽆同级或更⾼级中断正在被服务。

结合实验,就知道,这⾥跑到中断⼦程序的条件,⾸先总开关打开。

然后选择中断请求源,对这个实验来说,也就是选择I N T 0 ‾\overline{INT0}INT0外部中断请求0,它的中断允许控制位是E X 0 EX0EX0,我们置1后,就说明允许了外部中断0中断。

我们如果选⽤跳沿触发,⼀个机器周期采样到外部中断输⼊为⾼,下⼀个为低,那么中断请求触发器置⼀,这个时候进⼊中断⼦程序。

这个实验是电平触发。

cpu查询到中断请求时,就会进⾏中断响应(这⾥假设只是单⼀中断,如果有不同优先级的中断,那么cpu还要进⾏判断)。

硬件⽣成⼀个长调⽤指令并执⾏,程序转向中断⼊⼝地址,两个中断⼊⼝相隔8字节,难以放下中断⼦程序,此时需要⼀个跳转指令,转向在其他地址下的⼦程序中。

实验结果:汇编语⾔实现:ORG 0000hLJMP MAIN//主程序ORG 0003hLJMP INT0s//中断⼊⼝ORG 0100hMAIN: CLR IT0//外部中断请求0为电平触发SETB EA//总中断允许SETB EX0 //允许外部中断0LOOP: 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,#254D2: DJNZ R1,D2DJNZ R0,D1RETIEND改成c51语⾔:#include<reg51.h>#define uchar unsigned charsbit 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仿真:。

单片机中断实验实训报告

单片机中断实验实训报告

一、实验背景随着电子技术的飞速发展,单片机因其体积小、成本低、功能强大等优点,在各个领域得到了广泛应用。

中断技术是单片机设计中非常重要的一部分,它允许单片机在执行程序的过程中,能够及时响应外部事件,从而提高系统的实时性和效率。

本实训旨在通过实验,加深对单片机中断系统的理解,掌握中断系统的使用方法,并学会在实际应用中灵活运用中断技术。

二、实验目的1. 熟悉单片机中断系统的基本概念和原理。

2. 掌握中断源、中断优先级、中断服务程序等基本概念。

3. 学会使用单片机的中断系统实现实时响应外部事件。

4. 培养动手实践能力和问题解决能力。

三、实验器材1. 单片机实验板2. 示波器3. 电源4. 连接线5. 逻辑分析仪(可选)四、实验内容1. 实验一:外部中断实验(1)实验目的:验证外部中断功能,实现按键控制LED灯的点亮和熄灭。

(2)实验步骤:a. 将外部中断0(INT0)引脚连接到按键,按键按下时产生低电平信号。

b. 编写中断服务程序,实现按键按下时点亮LED灯,按键释放时熄灭LED灯。

c. 编译程序,下载到单片机实验板上。

d. 测试实验效果,观察LED灯的点亮和熄灭情况。

2. 实验二:定时器中断实验(1)实验目的:验证定时器中断功能,实现LED灯的定时闪烁。

(2)实验步骤:a. 配置定时器T0为模式1,设置定时器初值,使定时器溢出时间为1秒。

b. 开启定时器中断,编写定时器中断服务程序,实现LED灯的定时闪烁。

c. 编译程序,下载到单片机实验板上。

d. 测试实验效果,观察LED灯的闪烁情况。

3. 实验三:中断嵌套实验(1)实验目的:验证中断嵌套功能,实现定时器中断和外部中断的嵌套。

(2)实验步骤:a. 配置定时器T0为模式1,设置定时器初值,使定时器溢出时间为1秒。

b. 开启定时器中断和外部中断,设置中断优先级。

c. 编写定时器中断服务程序和外部中断服务程序,实现中断嵌套。

d. 编译程序,下载到单片机实验板上。

单片机外部中断实验程序

单片机外部中断实验程序

单片机外部中断实验程序单片机外部中断是一种常用的硬件中断方式,可以使单片机在执行主程序的同时,及时响应外部设备的信号,并进行相应的处理。

在本实验中,我们将编写一段简单的程序,用于实现单片机外部中断的功能。

首先,我们需要明确实验的硬件配置。

本实验中,我们使用的是STC89C52单片机,其中P3.2引脚作为外部中断0的引脚。

接下来,我们将详细介绍实验的步骤。

首先,在主程序中,我们需要首先对单片机的外部中断进行初始化设置。

具体的设置步骤如下:1.设置外部中断引脚的工作方式。

我们需要将P3.2引脚设置为外部中断0的工作模式。

可以通过将P3.2引脚对应的P3CON寄存器位设置为1来实现。

2.设置外部中断的触发方式。

单片机外部中断可以通过电平触发或边沿触发来响应外部设备的信号。

在本实验中,我们选择边沿触发方式。

可以通过将IE寄存器中的EX0位设置为1来实现。

然后,在程序的主循环中,我们可以编写一个简单的实验程序,用于验证外部中断的功能。

具体的步骤如下:1.在主循环中,我们可以设置一个循环延时函数,用于模拟主程序的执行过程。

2.在循环延时函数的适当位置,可以编写一段代码来模拟外部设备的信号触发。

可以通过向P3.2引脚输出一个高电平信号来触发外部中断。

3.在外部中断的中断服务函数中,我们可以编写一段简单的代码,用于处理外部中断触发时的操作。

可以通过向LED等外设输出一个特定的信号,以验证中断服务函数的正确性。

最后,在程序的尾部,我们可以添加一个死循环,用于保证程序的持续运行。

具体的代码如下所示:```#include<reg52.h>sbit LED=P1^0;void delay(unsigned int t){unsigned int i,j;for(i=t;i>0;i--)for(j=110;j>0;j--);}void ExternalInterrupt0()interrupt0{LED=~LED;delay(100);}void main(){IT0=1;//设置外部中断0为边沿触发EX0=1;//允许外部中断0EA=1;//允许总中断while(1){//主循环中的其他操作delay(1000);}}```通过以上的程序,我们可以实现单片机的外部中断功能。

单片机外部中断实训报告

单片机外部中断实训报告

一、实训目的1. 理解单片机外部中断的概念和作用。

2. 掌握单片机外部中断的配置方法。

3. 学会编写外部中断服务程序。

4. 通过实际操作,提高单片机编程和调试能力。

二、实训内容1. 单片机外部中断原理2. 单片机外部中断配置3. 外部中断服务程序编写4. 实验验证与调试三、实训环境1. 单片机开发板:选用STC89C52单片机。

2. 仿真软件:Proteus。

3. 实验工具:示波器、电源、连接线等。

四、实训步骤1. 理解单片机外部中断原理外部中断是单片机中断系统中的一种,用于响应外部事件。

当外部事件发生时,单片机会暂停当前程序,转去执行外部中断服务程序。

外部中断有多个中断源,如INT0、INT1等。

2. 单片机外部中断配置(1)设置外部中断触发方式:根据需要选择上升沿触发、下降沿触发或双边沿触发。

(2)设置外部中断优先级:根据实际需求设置中断优先级。

(3)设置外部中断使能:通过设置IE寄存器使能外部中断。

3. 外部中断服务程序编写编写外部中断服务程序,用于处理外部中断事件。

在服务程序中,完成相关处理逻辑,如记录外部事件发生次数、控制LED灯闪烁等。

4. 实验验证与调试(1)搭建实验电路:将单片机开发板与外部设备(如按钮)连接,设置好外部中断配置。

(2)在Proteus中搭建仿真电路,编写代码。

(3)下载代码到单片机开发板,观察实验现象。

(4)根据实验现象,调试程序,确保外部中断功能正常。

五、实验结果与分析1. 实验现象:按下外部按钮,单片机进入外部中断服务程序,控制LED灯闪烁。

2. 分析:通过设置外部中断触发方式、优先级和使能,成功实现外部中断功能。

在服务程序中,完成相关处理逻辑,达到预期效果。

六、实训总结1. 通过本次实训,掌握了单片机外部中断的配置方法,学会了编写外部中断服务程序。

2. 熟悉了外部中断在实际应用中的重要作用,提高了单片机编程和调试能力。

3. 在实训过程中,遇到了一些问题,如外部中断响应不及时、LED灯闪烁不稳定等。

实验二 外部中断实验

实验二 外部中断实验

实验二外部中断实验一、实验目的1.学会使用Keil μVision3和Proteus软件进行单片机汇编语言和C语言程序设计与开发。

2.了解和掌握MCS-51单片机的中断组成、中断控制工作原理、中断处理过程、外部中断的中断触发方式,掌握中断功能的编程方法。

二、实验内容1.单片机的P1.0引脚连接LED指示灯D0。

2.单片机的P3.2引脚(INT0)连接按键开关K,作为中断源,每次按键都会触发INT0中断。

3.在INT0中断服务程序中将P1.0端口的信号取反,使LED指示灯D0在点亮和熄灭两种状态间切换,产生LED指示灯由按键开关K 控制的效果。

三、实验程序ORG 0000H ;MCS-51复位入口AJMP MAIN ;转入主程序ORG 0003H ;INTO中断入口AJMP EX_INTO ;转入中断服务程序ORG 0100H ;主程序入口MAIN: MOV SP,#40H ;中断初始化设置堆栈SETB IT0 ;中断请求信号设置为边沿触发方式SETB EA ;开放总中断SETB EX0 ;允许INTO中断HERE: SJMP HERE ;原地踏步(处理其他事务)等待中断到来ORG 0200H ;中断服务程序EX_INTO:CPL P1.0 ;改变指示灯状态RETI ;中断返回END四、实验原理图五、实验仿真及结果当开关断开时,LED指示灯D1熄灭,如图1所示:图1当按键开关接通时,LED指示灯D1点亮,如图2所示:图2六、实验总结通过本次实验,进一步熟悉了对Keil μVision3软件的操作,另外还接触到了Proteus软件。

掌握了中断功能的编程方法,加上两个上述软件,使得单片机汇编语言得以仿真。

进一步深化了解和掌握MCS-51单片机的中断的相关知识,包括中断的组成、工作原理、处理过程以及外部中断的中断触发方式。

单片机的中断实验报告

单片机的中断实验报告

单片机的中断实验报告单片机的中断实验报告引言:单片机是现代电子技术中的一种重要组成部分,广泛应用于各种电子设备中。

中断是单片机中的一种重要功能,能够提高系统的响应速度和实时性。

本实验旨在通过对单片机的中断功能进行实验,深入了解中断的原理和应用。

一、实验目的本实验旨在通过对单片机的中断功能进行实验,掌握中断的原理和应用,提高对单片机的理解和应用能力。

二、实验器材和材料1. 单片机开发板2. 电脑3. USB数据线4. LED灯5. 电阻、电容等元件三、实验原理中断是单片机中的一种重要功能,当某个事件发生时,单片机可以立即中断当前程序的执行,转而执行中断服务程序,处理该事件。

中断可以分为外部中断和内部中断两种类型。

外部中断由外部设备触发,如按键、传感器等;内部中断由单片机内部的某个模块触发,如定时器溢出、串口接收等。

四、实验步骤1. 连接单片机开发板和电脑,并通过USB数据线进行通信。

2. 在开发环境中编写中断服务程序,实现对外部中断的响应。

3. 将LED灯连接到开发板的某个IO口,并设置为输入模式。

4. 在主程序中配置外部中断的触发条件和中断服务程序。

5. 运行程序,触发外部中断,观察LED灯的亮灭情况。

五、实验结果与分析经过实验,我们成功实现了对外部中断的响应,并观察到LED灯在中断触发时的亮灭情况。

通过实验结果的分析,我们可以得出以下结论:1. 外部中断可以有效地提高系统的响应速度和实时性,特别适用于需要及时处理外部事件的应用场景。

2. 中断服务程序的编写和配置是实现中断功能的关键,需要充分理解中断的原理和编程方法。

3. 在实际应用中,需要根据具体的需求和硬件条件来选择合适的中断触发条件和中断服务程序。

六、实验总结通过本次实验,我们深入了解了单片机的中断功能,并通过实际操作掌握了中断的原理和应用方法。

中断作为一种重要的系统功能,可以提高系统的响应速度和实时性,广泛应用于各种电子设备中。

在今后的学习和工作中,我们将进一步探索中断的应用领域,并不断提高自己的单片机编程能力。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

硬件电路参考如下:
程序参考如下:
#pragma sfr
#pragma interrupt INTP0 LED_INTP0 /* 定义使用INTP0中断,中断函数名LED_INTP0*/ #pragma di /*禁止使用中断功能声明*/
#pragma ei /*允许使用中断功能声明*/
/*数码管编码数组*/
unsigned char LED_light[10]={0x30,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x3F}; unsigned char j=0; /*按键次数变量*/
void hdinit() /*硬件初始化*/
{
PM1=0; /*P1口输出数码管字型码,所以设置为输出*/
PU1=0XFF; /*由于P1口直接驱动数码管显示,为增大驱动,设置为内部上拉*/
PM12.0=0; /*P12.0口线要作为中断多功能,设置为输出和内部上拉 */
PU12.0=1;
PIF0=0; /*中断请求标志,没有中断请求*/
PMK0=0; /*中断屏蔽标志,允许中断*/
PPR0=1; /*中断优先级,低优先级*/
EGP.0=1; /*与EGN组合,上升沿有效*/
EGN.0=0;
}
void main (void)
{
DI(); /*首先做准备,禁止中断*/
IMS=0XCC;
IXS=0X00;
hdinit();
EI(); /*准备完成,允许中断*/
while(1)
{ /*啥也不干,就等待中断,仅是在这个实验中使用中断,实际不是这样/*
}
}
__interrupt void LED_INTP0() /*中断函数*/
{ P1= LED_light[j]; /*P1赋值,数码管显示相应数值*/
j++; /*按键次数加一*/
if(j==10) /*如果按键次数达到十次,按键计数归0*/
{j=0;} }
思考: 如果用两位数码管,从0—99循环计数又该怎样设计硬件和软件呢?。

相关文档
最新文档