单片机 实验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. 在实际应用中,需要根据具体的需求和硬件条件来选择合适的中断触发条件和中断服务程序。
六、实验总结通过本次实验,我们深入了解了单片机的中断功能,并通过实际操作掌握了中断的原理和应用方法。
中断作为一种重要的系统功能,可以提高系统的响应速度和实时性,广泛应用于各种电子设备中。
在今后的学习和工作中,我们将进一步探索中断的应用领域,并不断提高自己的单片机编程能力。
单片机 外部中断 程序设计
单片机外部中断程序设计一、引言在单片机应用系统中,外部中断是一个非常重要的功能。
当外部事件发生时,中断系统可以打断正在执行的程序,转而执行相应的中断服务程序(ISR)。
本指南将详细介绍如何进行单片机外部中断的程序设计,主要包括以下五个方面:配置中断控制器、定义中断服务程序、设置中断触发方式、开启外部中断以及测试与调试。
二、配置中断控制器中断控制器是单片机的核心部件之一,它负责管理中断的优先级、触发方式以及处理方式。
在进行外部中断程序设计之前,需要先配置中断控制器。
根据所使用的单片机型号和中断控制器的不同,配置方法会有所差异。
一般情况下,需要设置以下几个参数:1.中断触发方式:电平触发或边沿触发。
2.中断优先级:多个中断源的情况下,需要确定每个中断源的优先级。
3.中断处理方式:通常有向量中断和非向量中断两种处理方式,需要根据具体硬件平台进行选择。
三、定义中断服务程序中断服务程序(ISR)是当外部中断触发时,单片机执行的一段程序代码。
在定义ISR时,需要注意以下几点:1.ISR的入口和出口参数:一般情况下,单片机厂商会提供相应的库函数,用于定义ISR的入口和出口参数。
2.ISR的执行时间:为了保证系统的实时性,ISR的执行时间应尽可能短,避免长时间的操作导致系统响应延迟。
3.ISR的返回值:根据需要,ISR可以返回一定的状态信息或处理结果。
四、设置中断触发方式根据具体应用需求,需要设置外部中断的触发方式。
常见的触发方式包括电平触发和边沿触发。
电平触发是指当外部信号电平发生变化时,触发中断请求;边沿触发则是在信号电平由低变高或由高变低时触发中断请求。
选择合适的触发方式可以提高系统的响应速度和准确性。
五、开启外部中断完成以上步骤后,最后一步是开启外部中断。
具体方法取决于所使用的单片机型号和编译器。
一般来说,需要使用相应的指令或函数来开启外部中断。
在开启外部中断时,需要注意以下几点:1.中断使能:需要开启单片机的中断使能开关。
实验二 51单片机外部中断实验报告
实验二外部中断实验实验报告
一、实验内容
单片机外部中断0(P3.2)已与独立式键盘中KEY0连接,外部中断1(P3.3)已与KEY1连接,要求在无外部中断时最上面一位发光二极管(LED10)点亮。
请编程实现:当KEY0按下,外部中断0请求中断,控制发光二极管从上到下循环点亮3圈;当KEY1按下,外部中断1请求中断,控制发光二极管闪烁3次。
(要求外部中断1优先级高于外部中断0,即KEY1按下后能够打断流水灯的动作,当外中断1处理完后,恢复外中断0的处理,并且能从上次打断的那个LED开始循环)。
单片机与发光二极管的连接如图2-1所示,独立式键盘原理图如图2-2所示。
图2-1 单片机与发光二极管的连接原理图
2-2 独立式键盘原理图
三、硬件电路分析
1、阅读电路2-1简要分析如何使发光二极管点亮?
当LEDS0 为高电平时,三极管Q6导通,发光二极管的阳极为高电平,此时,当给发光二极管的阴极为低电平时,发光二极管两端存在电位差,发光二极管导通,则发光二极管点亮。
2、简要画出独立式按键电路(一个键),并分析其如何工作?
如图所示,当按键按下时,单片机IO处会由高电平变为低电平,单片机IO口在经过消抖处理之后仍然检测为低电平,则表明按键被按下。
四、程序设计
画出主程序流程图:
画出外部中断0流程图;
五、思考题
六、收获和体会。
实验2-外部中断实验
②先点击S1、再点击S0,观察L0、L1亮的现象,分析中断的发生情况。
③改变连线,把P3.2、P3.3引脚相连接;点击S0或S1,则 和 应该同时中断,观察L0、L1亮的现象,分析中断的发生情况。
3)观察中断优先级和中断嵌套
去掉P3.2、P3.3引脚之间的连接线,恢复P3.2引脚与S0相连,P3.3引脚与S1相连。修改主函数中的中断优先级控制寄存器IP,设置 (或 )为高优先级、 (或 )设为低优先级,编译下载程序,然后全速运行。
单片机、电阻、发光二极管、按钮在器件库中的名字分别为:AT89C51、RES、LED-RED(红)、button。
(2)编写程序
需要分别编写主函数和两个外中断服务函数。
主函数:置两个外中断均为下降沿方式触发(对TCON寄存器);设置两个外中断优先级均为低级(对IP寄存器);开两个外中断和中断总控位(对IE寄存器);最后使程序一直处于等待中断状态。
①先点击S0、再点击S1,观察中断现象,分析中断嵌套情况。
②先点击S1、再点击S0,观察中断现象,分析中断嵌套情况。
③使用短路连接块,把P3.2、P3.3引脚相连接;点击S0或S1,则 和 应该同时中断,观察中断现象,分析中断嵌套情况。
④不改变P3.2、P3.3引脚相连接;修改主函数中的中断优先级控制寄存器IP,使 、 的优先级交换;点击S0或S1,则 和 应该同时中断,观察中断现象,分析中断嵌套情况。
//3、T0中断,产生基本延时2.5ms,并且调用显示函数
//根据以上功能,该文件为进一步编写实验程序、实际应用程序,提供了基础
#include<reg52.h>
#definedelay5ms(x){delay_xms=x*2;while(delay_xms<255);}//用于延时的宏,x的1个数值对应延时5ms。x<=127。
单片机实验 实验二 中断实验
POP ACC RETI
3、延时程序
DELAY: MOV R3, #253 DEL1: MOV R4, #200
DEL2:
DJNZ R4, DEL2
DJNZ RET END R3, DEL1
ORG
0000H
EXT0:
PUSH
END
LCALL DELAY
START: MOV
LOOP: MOV
A, #0FEH
P1, A DELAY
CPL
A
DJNZ R5, LOOP1 POP PSW
LCALL
RL
A
POP ACC
RETI
LJMP LOOP
DELAY: MOV R3, #253 DEL1: DEL2: MOV R4, #200 DJNZ R4, DEL2 DJNZ RET R3, DEL1
中断允许控制寄存器IE
D7 EA
D6
D5
D4 ES
D3 ET1
D2 EX1
D1 ET0
D0 EX0
0 禁止,1允许
定时/计数器控制寄存器TCON
D7 D6 D5 D4 D3 D2 D1 D0 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 中断请求标志 启动定时/计数器
0 停止 1 启动
ACC
LJMP MAIN ORG 4003H
PUSH PSW SETB CLMAIN: MOV 4100H IE, #10000001B
MOV A,
MOV R5, #10 LOOP1: MOV P1, A
MOV TCON, #00000000B MOV SP, #70H
[实验二]数码管动态扫描显示及外部中断的使用
[实验二]数码管动态扫描显示及外部中断的使用[实验目的]1.掌握Mega16的I/O输出特性和使用,以及单片机I/O输出口串行扩充的方法。
2.掌握LED数码管动态扫描的原理和设计方法,了解数码管及LED点阵模块的使用。
3.了解AVR中断系统原理,响应过程,以及外部中断程序的编写。
4.设计实现一个秒表系统。
[基本实验内容]1.阅读芯片数据手册,掌握GPIO口有几种工作模式,如何控制I/O口的输出应用。
2.实现6位LED数码管的动态扫描显示的软件设计和硬件设计。
a)根据例6.5 六位LED 数码管动态扫描控制显示设计(一),掌握其硬件连线,在实验板上实现该设计。
源程序参考demo_6_5.c,读懂该程序,回答以下问题:b)时、分、秒的计算采用何种数制?到数码管的时间显示之间经过了几种数制的转换?为什么要转换(不转换行吗)?怎样转换的?时分秒本身是十进制,秒到分和分到时都是60进制;三种,十进制到七段数码管,六十进制到七段数码管;根据十进制数的字形,写出相应的字形代码,同理六十进制c)Display()函数是如何工作的?每秒钟执行几次?动态扫描显示函数,每2ms对各位数码管扫描一次;40次;d)说明time_to_buffer()的功能,每秒执行几次?时间值送显示缓冲区,将两个子程序分离开来,635次e)说出和深入体会程序中的变量time_counter、point_on 的作用。
time_counter实际代表1s中扫描的次数;控制秒显示标志亮暗的频率f)将程序中有(3)注释标记的语句去掉,会产生什么现象,为什么?说明该语句的作用。
最高位数码管显示明显比其他亮度高,因为当最高位数码管被扫描以后PORTC没有关闭,持续时间延时了13ms,因此扫描时间长,亮度高;保持各数码管扫描时间均匀,亮度一致;g)将程序中有(4)注释标记的语句去掉,会产生什么现象?变成分秒十分秒百分秒计数,经过3s36,会有一次停顿,此时秒显示标志会灭h)如何调整程序,使数码管的显示亮度有变化?将数码管显示时间由2ms改为1ms,亮度明显变暗了delay_ms(2)------ delay_ms(1)delay_ms(13) ------ delay_ms(19)i)程序中使用了显示缓冲区,占用了6 个字节。
单片机中断实验报告
单片机中断实验报告单片机中断实验报告引言:单片机是一种集成电路,具有微处理器、存储器和各种输入输出设备等功能模块。
中断是单片机中的一种重要机制,它可以使单片机在执行某个任务时,暂停当前操作,转而执行其他紧急任务。
本次实验旨在深入了解单片机中断的原理和应用,以及如何在程序中实现中断功能。
一、实验目的本次实验的目的是通过编写程序,实现单片机中断功能,并验证中断的正确性和可靠性。
具体而言,我们将使用单片机的外部中断和定时器中断功能,分别实现按键中断和定时中断。
二、实验器材1. 单片机开发板2. 按键模块3. 七段数码管模块4. 电源模块5. 连接线等三、实验原理1. 外部中断外部中断是通过外部中断引脚与外部电路连接来实现的。
当外部电路触发中断条件时,单片机将暂停当前操作,转而执行中断服务程序。
在本实验中,我们将按键模块连接到外部中断引脚,当按下按键时,触发外部中断,实现按键中断功能。
2. 定时器中断定时器中断是通过定时器模块来实现的。
定时器可以按照设定的时间间隔产生中断请求信号,从而实现定时中断功能。
在本实验中,我们将使用定时器模块来实现每隔一段时间触发一次中断,实现定时中断功能。
四、实验步骤1. 连接电路将按键模块的输出引脚连接到单片机的外部中断引脚,将七段数码管模块连接到单片机的IO口。
接通电源,确保电路连接正确。
2. 编写程序使用C语言编写程序,首先需要初始化单片机的中断向量表和相关寄存器。
然后编写中断服务程序,根据实验要求实现按键中断和定时中断功能。
最后,在主程序中设置中断使能位,使得中断能够正常触发。
3. 烧录程序使用烧录器将编写好的程序烧录到单片机中。
4. 实验验证按下按键,观察七段数码管的显示是否按照预期变化。
等待一段时间,观察定时中断是否按照设定的时间间隔触发。
五、实验结果与分析经过实验验证,按键中断和定时中断功能均能够正常运行。
按下按键时,七段数码管的显示会按照预期变化,定时中断也能够按照设定的时间间隔触发。
单片机实验二_外部中断
一、实验二: 中断实验二、实验目的:三、通过对P3.2、P3.3引脚的电平控制, 实现外部中断处理, 从而控制输出口P1的输出效果变化。
四、实验原理图实验参考电路图如下:五、参考实验程序/用外中断0的中断方式进行数据采集和处理#include<reg51.h> //包含51单片机寄存器定义的头文件sbit S=P3^2; //将S位定义为P3.2,/*******************************************函数功能: 主函数******************************************/void main(void){EA=1; //开放总中断EX0=1; //允许使用外中断IT0=1; //选择负跳变来触发外中断P1=0xff;while(1); //无限循环, 防止程序跑飞}/************************************************************** 函数功能: 外中断T0的中断服务程序**************************************************************/ void int0(void) interrupt 0 using 0 //外中断0的中断编号为0 {P1=~P1; //每产生一次中断请求, P1取反一次。
}实验思考题:(1) 根据指导书中提供的原理图, 自行设计一个外部中断实验, 要求:(2) 两个外部中断全部用上;(3) 实验能体现不同中断优先级的中断源的相应情况;(4) 不同中断处理程序能输出不同的响应效果//用外中断0的中断方式进行数据采集和处理00000000#include<reg51.h> //包含51单片机寄存器定义的头文件sbit S=P3^2; //将S位定义为P3.2,/*******************************************函数功能: 主函数******************************************/void main(void){EA=1; //开放总中断EX0=1; //允许使用外中断IT0=1; //选择负跳变来触发外中断P1=0xf0;PX0=1;// PX1=1;while(1); //无限循环, 防止程序跑飞}/************************************************************** 函数功能: 外中断T0的中断服务程序**************************************************************/ void int0(void) interrupt 0 using 0 //外中断0的中断编号为0 {//P1=~P1;P1=0x01;}void int1(void) interrupt 1 using 1{//P1=~P1;P1=0XFe; }。
单片机实验二 外部中断与LCD显示实验
return(result);
}
void lcd_wcmd(unsigned char cmd) //写指令到LCD子程序
{
while(lcd_bz());
rs=0;
rw=0;
ep=0;
_nop_();
_nop_();
P0=cmd;
_nop_();
_nop_();
_nop_();
_nop_();
四、实验电路图
图11602LCD原理图
图2独立按键原理图
图3实验总仿真图
五、与1602LCD相关的部分函数(提示)
bit lcd_bz() //检测LCD是否忙
{
bit result;
rs=0;
rቤተ መጻሕፍቲ ባይዱ=1;
ep=1;
_nop_();
_nop_();
_nop_();
_nop_();
result=(bit)(P0&0x80);
4、单片机的P1.4、P1.5分别接至某一个LED灯的输入端(J12的某个端子)
八、实验步骤
1、在正确的位置按正确的方向接上1602LCD
2、实验接线
3、编程、编译生成.HEX文件
4、利用“PZISP自动下载软件”进行下载,观察效果。
九、思考题
1、实验内容2中,若最大只能加到255,应如何解决?
2、采用中断有什么好处?
十、实验报告要求
1、实验目的
2、实验设备
3、实验内容
4、实验内容1和实验内容2的主要电路图(画出逻辑图即可,不必画出引脚图)
5、实验流程图(实验内容1和实验内容2)
6、实验源程序(实验内容1)
7、思考题解答
单片机 实验2-外部中断程序设计-中断按键按下次数计数数码管显示-硬件和程序设计参考
硬件电路参考如下:程序参考如下:#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循环计数又该怎样设计硬件和软件呢?。
湖南工业大学单片机实验报告 2外部中断实验
实验二、外部中断实验一、实验目的1. 掌握外部中断技术的基本使用方法2.掌握中断处理程序的编写方法二、实验设备PC机、Keil 软件、Proteus软件。
三、实验内容1.在Proteus中绘制图1电路,加载给定目标代码文件进行调试。
图1 LED灯的开关控制四、实验程序解析#include <AT89X52.H> //包含AT89X52.H头文件sbit S1=P1^5; //定义S1与P1.5位对应sbit LED1=P1^0; //定义LED1与P1.0位对应void main (void){while(1){if(S1==0)LED1=0; // 开关闭合,P1.0=0,LED点亮elseLED1=1; //开关断开,P1.0=1,LED熄灭}}五、实验原理说明1、外部中断的初始化设置共有三项内容:中断总允许即EA=1,外部中断允许即EXi=1(i=0或1),中断方式设置。
中断方式设置一般有两种方式:电平方式和脉冲方式,本实验选用后者,其前一次为高电平后一次为低电平时为有效中断请求。
因此高电平状态和低电平状态至少维持一个周期,中断请求信号由引脚INT0(P3.2)和INT1(P3.3)引入,本实验由INT0(P3.2)引入。
2、中断服务的关键:a、保护进入中断时的状态。
堆栈有保护断点和保护现场的功能使用PUSH指令,在转中断服务程序之前把单片机中有关寄存单元的内容保护起来。
b、必须在中断服务程序中设定是否允许中断重入,即设置EX0位。
c、用POP指令恢复中断时的现场。
3、中断控制原理:中断控制是提供给用户使用的中断控制手段。
实际上就是控制一些寄存器,51系列用于此目的的控制寄存器有四个:TCON 、IE 、SCON 及IP。
4、中断响应的过程:首先中断采样然后中断查询最后中断响应。
采样是中断处理的第一步,对于本实验的脉冲方式的中断请求,若在两个相邻周期采样先高电平后低电平则中断请求有效,IE0或IE1置“1”;否则继续为“0”。
单片机实验_外部中断
北京XXXX学院实验报告课程:单片机原理与应用班级:XXXX 姓名:XXX 学号:XXXXXXX成绩:指导教师:XXX 实验日期及时间:座位号:xx 必修/选修:必修实验序号:X实验名称:外部中断一、实验目的1.掌握单片机开发环境的使用2.熟悉开发板硬件实验环境及资源3.掌握外部中断的程序设计与应用。
二、实验内容与要求在mega16单片机学习板上,利用中断方式检测4*4的矩阵键盘;在4位数码管上显示按下的键值,每列键值对应一位数码管。
矩阵键盘每个键号按先行后列的形式排列。
三、实验方案设计1.实验的方案的论述和分析本次实验主要分为按键的检测与消抖,以及数码管与LED灯的显示。
主要用到了PA,PD口,来控制按键按下与数码管。
(1)函数初始化:在使用数码管时,会用到MAX7219,因此要将该芯片初始化,以及将INT1初始化,并要在开始时将函数中所要引用的数值赋值。
(2)按键的检测检测有无键按下:利用INT1中断。
判断哪个键按下:依次将PA3~PA0四条线置0,读取PA7~PA4的值即可判断是哪个键按下。
PA3~PA0=1110时:【PA7~PA4】= 1111,无键按下;【PA7~PA4】= 1110,表示K1-1按下;【PA7~PA4】= 1101, 表示K1-2按下;【PA7~PA4】= 1011,表示K1-3按下【PA7~PA4】= 0111,表示K1-4按下;同理检测其它行线。
按键消抖是通过延时检测来消除按键都懂带来的影响,按键扫描,是要通过按键矩阵来控制LED灯的改变以及数码管的显示。
因为在实现功能时要使用16个按键,判断有无按键按下:可以通过中断函数来进行判断。
而当已经确定有按键按下时:可以依次将PA3~PA0四条线置0,读取PA7~PA4的值来判断是哪个键按下,如果全为1,则无按键按下,其中任意一个为0,便代表该按键按下。
对于外部中断是INT1中断,当有按键按下,通过与门输入一个下降沿外部中断。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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循环计数又该怎样设计硬件和软件呢?。