(中断、冒泡排序、1602)单片机实验报告

合集下载

(中断、冒泡排序、1602)单片机实验报告

(中断、冒泡排序、1602)单片机实验报告

本科生实验报告实验课程单片机实验学院名称信息科学与技术学院专业名称物联网工程学生姓名曹林鑫学生学号201413060301指导教师谢兴红实验地点6B607实验成绩二〇一六年九月二〇一六年十二月实验一冒泡排序(汇编)一.实验目的掌握单片机的汇编语言排序程序。

二.实验内容将单片机内部的数据进行排序,且使用汇编语言。

三.实验要求根据实验内容编写一个程序,数据排列顺序要求是从小到大。

四.实验说明先在片内RAM中存储一组数据,重复地走访过要排序的数据,一次比较两块内存上的数据,如果他们的顺序错误就把他们交换过来。

走访数据的工作是重复地进行直到没有再需要交换,也就是说该列数据已经排序完成。

五.算法分析若文件的初始状态是正序的,一趟扫描即可完成排序。

所需的关键字比较次数C和记录移动次数M均达到最小值:,。

所以,冒泡排序最好的时间复杂度为O(n)。

若初始文件是反序的,需要进行n-1 趟排序。

每趟排序要进行n-i次关键字的比较(1≤i≤n-1),且每次比较都必须移动记录三次来达到交换记录位置。

在这种情况下,比较和移动次数均达到最大值:冒泡排序的最坏时间复杂度为。

综上,因此冒泡排序总的平均时间复杂度为。

六.实验程序及分析ORG 0000HLJMP mainORG 0100Hmain:MOV 40H,#05H//在40H-44H中随机存放五个立即数MOV 41H,#08HMOV 42H,#09HMOV 43H,#07HMOV 44H,#06HMOV R7,#04H//控制比较循环的次数MOV R6,#04HLOOP3:MOV R0,#40H//指向需要进行比较的数据的地址MOV R1,#41H//MOV A,R6MOV R7,ACLR ALOOP1:CLR CMOV A,@R1MOV 49H,A //交换数据前的备份SUBB A,@R0//用进位标志判断两数的大小JC LOOPLJMP LOOP4LOOP:MOV A, @R0//恢复交换前的备份数据MOV @R1,AMOV @R0,49HLOOP4:INC R0INC R1DJNZ R7,LOOP1//控制比较的次数DJNZ R6,LOOP3//控制比较的轮数LJMP $END六、实验截图排序前内存中的数据排序后内存的数据实验二外部中断一.实验目的1、掌握单片机外部中断的原理及过程。

单片机中断实验实训报告

单片机中断实验实训报告

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

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

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

二、实验目的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. 编译程序,下载到单片机实验板上。

单片机中断实验总结

单片机中断实验总结

单片机中断实验总结单片机中断是单片机系统中一项重要的功能和特性。

通过中断,可以实现对外部事件的实时响应和处理,从而提高系统的实时性和可靠性。

在实验中,我对单片机中断进行了学习和实践,以下是我的实验总结。

在实验中,我首先了解了中断的基本概念和原理。

中断是指在程序执行过程中,由外部事件、硬件设备或软件请求而打断正常执行流程,转去执行与该事件或请求相关的子程序。

中断可以分为外部中断和内部中断。

外部中断是通过硬件引脚与外部设备进行连接并触发的,而内部中断则是由软件内部生成的。

中断的实现需要借助中断控制器,例如常用的单片机8051就内置了中断控制器。

实验中,我使用keil C编译器和STC89C52单片机开发板进行了中断的实现。

编写了一个简单的程序,当外部中断0引脚检测到高电平时,触发外部中断,执行相应的中断服务程序。

在编写程序时,首先定义了中断服务程序的函数原型,然后通过中断向量表将中断服务程序与相应的中断号关联起来。

在主程序中,使用IE寄存器和相应的位操作函数开启了外部中断。

在实验过程中,我遇到了一些问题,并进行了解决。

首先,我发现外部中断引脚的电平触发方式对中断的触发有影响。

通过查阅资料,我了解到外部中断引脚可以选择边沿触发还是电平触发,需要根据实际的需求进行设置。

其次,我发现在中断服务程序中,需要注意中断屏蔽和中断优先级的设置,以免出现中断互相屏蔽的情况。

最后,我发现中断服务程序中的代码需要尽量简洁和高效,以保证中断的响应时间和系统的实时性。

通过实验,我进一步理解了单片机中断的概念和原理,掌握了使用keil C编写中断程序的方法,提高了对单片机系统的认识和理解。

中断在单片机系统中具有重要的作用,可以实现对外部事件的实时响应和处理,从而提高系统的可靠性和实时性。

在今后的学习和实践中,我将进一步深化对中断的理解和应用,并将其应用到更为复杂的系统中。

参考内容:1. 《嵌入式系统原理与开发:使用51单片机和C语言》-程杰2. 《嵌入式系统与单片机原理实验教程》-王刚3. 《单片机原理与应用》-马利民4. STC89C52单片机数据手册5. Keil C51编译器使用手册。

单片机与接口技术实验报告--冒泡排序实验

单片机与接口技术实验报告--冒泡排序实验

本科实验报告课程名称:单片机原理与接口技术实验项目:冒泡排序实验实验地点:跨越机房专业班级:学号:学生姓名:指导教师:2012 年4 月10 日一、实验目的和要求(1)熟悉MCS-51指令系统,掌握程序设计方法。

(2)掌握排序程序算法。

(3)掌握用循环程序实现数据排序的基本方法。

二、实验内容和原理编写并调试一个通用排序子程序,其功能为将RAM的40H~4FH单元的16字节无符号二进制整数按从小到大顺序排列,将排序后数据存储于RAM的50H~5FH单元中。

三、主要仪器设备计算机一台;伟福6000四、操作方法与实验步骤(上机源程序)ORG 0000H;该段代码向数据区域40H~4FH写入20H~11HMOV R7,#10H ;数据长度→R7MOV R0,#40H ;首地址→R0MOV R1,#20H ;第一个数据→R1START: MOV A,R1 ;(R1)→AMOV @R0,A ;数据→对应地址INC R0 ;地址加1DEC R1 ;数据减1DJNZ R7,START ;判断赋值完成否MOV R7,#0FH ;数据长度-1→R7LP0: MOV R0,#40H ;数据区域首地址→R0MOV A,R7 ;(R7)→AMOV R6,A ;(R7)→R6CLR 7FH ;设定7FH位为flag,并且flag=0LP1: MOV A,@R0 ;取得数据→AMOV 20H,@R0 ;当前地址中的值暂存到20H中INC R0 ;地址加1MOV 21H,@R0 ;当前地址中的值暂存到21H中CLR C ;清CSUBB A,21H ;相邻两个数相减JC LP2 ;如果前者大于后者则交换相邻的数SETB 7FH ;flag=1MOV @R0,21H ;把前边的数赋给后一个地址DEC R0 ;地址减1MOV @R0,21H ;把后边的数赋给前一个地址INC R0 ;地址加1LP2: DJNZ R6,LP1 ;判断是否到达内循环次数JNB 7FH,LP3 ;判断是否flag=0.如果flag=0,则表示顺序已经排好DJNZ R7,LP0 ;判断是否到达外循环次数LP3: MOV R7,#10H ;获得要传输的数据个数;把40H~4FH单元中数据复制到50H~5FH单元中MOV R0,#40H ;40H→R0MOV R1,#50H ;50H→R1LP4: MOV A,@R0 ;((R0))→AMOV @R1,A ;(A)→(R1)INC R0 ;地址加1INC R1 ;地址加1DJNZ R7,LP4 ;判断赋值是否完成SJMP $ ;程序在此处死循环END五、实验数据记录和处理单步执行观察发现,每一个数都会逐次与它之后的数进行比较,排序,直到所有数据都与其后的数据比较排完后才结束。

单片机中断实验报告

单片机中断实验报告

人的一生要疯狂一次,无论是为一个人,一段情,一段旅途,或一个梦想------- 屠呦呦实验三定时器中断实验一、实验目的1、掌握51单片机定时器基本知识;2、掌握定时器的基本编程方法;3、学会使用定时器中断。

二、实验内容1、利用定时器设计一个秒表,计数范围为0—59,并在数码管实时显示。

三、实验设备PC 机一台、单片机实验箱主要器件:AT89C52、7SEG-BCD、四、实验步骤1、使用Proteus设计仿真原理图;2、使用Keil设计程序;3、联合调试仿真。

五、实验流程图六、实验程序与结果#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit F=P2^1;void timer1_init(){TMOD=0x10;//将定时器1设置为工作方式1TH1=(65536-6000)/256;//定时器每加一时间为1/fsoc,定时时间为1/500//(1/500)s/(1/3000000)s=6000TL1=(65536-6000)%256;//fsoc=3000000,所以装入16位定时器中值为65536-6000 EA=1;ET1=1;TR1=1;}void main(){timer1_init();while(1);}void timer1() interrupt 3{TH1=(65536-6000)/256;//每次进入中断,重装初值TL1=(65536-6000)%256;F=~F;//每次进入中断P1.1口取反}#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit F=P2^1;void timer0_init(){TMOD=0x01;//将定时器0设置为工作方式1TH0=(65536-83)/256;//定时器每加一时间为1/fsoc,定时时间为2Khz,既500us//500us/6us=83.3333TL0=(65536-83)%256;//fsoc=6000000,所以装入16位定时器中值为65536-83EA=1;ET0=1;TR0=1;}void main(){timer0_init();while(1);}void timer0() interrupt 1{TH0=(65536-83)/256;//每次进入中断,重装初值TL0=(65536-83)%256;F=~F;//每次进入中断P1.1口取反,表示定时时间到}#include<reg51.h> // 包含51单片机寄存器定义的头文件#define seg_data P1#define seg_data2 P3#define uint unsigned intsbit D1=P2^0; //将D1位定义为P2.0引脚uint counter=0;unsigned int unit=0,decade=0,avs=0;//time=0;/************************************************************** 函数功能:主函数**************************************************************/ void main(void){uint time,time1,temp1,temp2,temp3;seg_data=0;seg_data2=0;TMOD=0x11; //使用定时器T0的模式2TH0=0xFC; //定时器T0的高8位赋初值 1000-500TL0=0x18; //定时器T0的低8位赋初值TH1=(65536-50000)/256; //定时器T1的高8位赋初值TL1=(65536-50000)%256; //定时器T1的低8位赋初值EA=1; //开总中断ET0=1; //定时器T0中断允许ET1=1;TR0=1; //启动定时器T0TR1=1;while(1)//无限循环等待中断{temp1=(decade&0x0F)<<4;temp2=unit&0x0F;time=temp2|temp1;seg_data=time;temp3=avs&0x0F;time1=temp3;seg_data2=time1;}}{D1=~D1; //按位取反操作,将P2.0引脚输出电平取反TH0=0xFF; //定时器T0的高8位赋初值 1000-500TL0=0x06; //定时器T0的低8位赋初值}void Time1(void) interrupt 3{counter++;if(counter>19){unit++;counter=0;}if(unit>9){decade++;unit=0;}if(decade>5){avs++;decade=0;}if(avs>9){avs=0;}TH1=(65536-50000)/256; //定时器T1的高8位赋初值TL1=(65536-50000)%256; //定时器T1的低8位赋初值TF1=0;}七、实验心得通过本次课程设计使我感受到它是一门综合性、实践性较强的课程,使我体会到要想综合运用所学的理论知识,提高我的设计能力,必须增加实际操作的环节。

单片机的中断实验报告

单片机的中断实验报告

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

51单片机设计冒泡程序实验总结

51单片机设计冒泡程序实验总结

51单片机设计冒泡程序实验总结51单片机设计冒泡程序实验总结「篇一」通过这一个学期的单片机学习,我收获了很多关于单片机的知识,并且这些知识和日常的生活息息相关。

了解了一些简单程序的录入,LED显示器、键盘、和显示器的应用和原理。

LED显示器:LED显示器是由发光二管组成显示字段的器件。

通常的8段LED 显示器是由8个发光二极管组成,LED显示器分共阳极和共阴极两种。

有段选码和和位选码。

当LED显示器每段的平均电流位5MA时,就有较满意的亮度,一般选择断码5-10MA电流;位线的电流应选择40-80MA。

LED显示器的显示方式有动态和静态两种。

7289A芯片是具有SPI串行接口功能的显示键盘控制芯片,它可同时取得8位共阴极数码管和64个键的键盘矩阵。

7289A的控制指令分为两类:8位宽度的单字节指令和16位宽度双字节指令;还有闪烁指令和消隐指令。

7289A采用串行方式SPI总线与微处理器通信;7289A与AT89C52接口电路,在实际电路中无论接不接键盘,电路中连接到其各段上的8个 100千欧的下拉电阻均不可以省去,如果不接键盘而只接显示器可以省去8个10千欧电阻,若仅接键盘而不接显示器,可省去串入DP及SA-SG连线的8个220欧电阻,7289A还需要外接晶体振荡电路。

液晶显示器简称LCD,其显示原理是用经过处后的液晶具有能改变光线传输方向的特性,达到显示字符和图形的目的。

最简单的笔段式液晶显示器类似于LCD显示器,可以显示简单的字符和数字,而目前大量使用的是点阵式LCD显示器,既可以显示字符和数字也可以显示汉字和图形。

如果把LCD显示屏、背光可变电源、接口控制逻辑、驱动集成芯片等部件构成一个整体,是的与CPU接口十分方便。

键盘:键盘是最常见的计算机输入设备,它广泛应用于微型计算机和各种终端设备上。

计算机操作者通过键盘向计算机输入各种指令、数据,指挥计算机的工作。

按照键盘的工作原理和按键方式的不同,可以划分为四种:机械式键盘采用类似金属接触式开关,工作原理是使触点导通或断开,具有工艺简单、噪音大、易维护的特点。

单片机与接口技术实验报告冒泡排序实验

单片机与接口技术实验报告冒泡排序实验

单片机与接口技术实验报告冒泡排序实验本实验旨在通过单片机的接口技术,实现冒泡排序算法的实践与理解。

通过实际操作,掌握单片机与接口技术的基本应用,理解冒泡排序算法原理,提升实践能力和编程技能。

冒泡排序是一种简单的排序算法,它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。

走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

在单片机与接口技术的实验中,我们可以使用LED灯等外部设备来模拟冒泡排序的过程。

通过改变LED灯的亮灭状态,反映出排序过程中数据的交换结果。

确定单片机型号并连接硬件电路。

选择合适的单片机,如8051系列,并搭建相应的硬件电路。

主要包括电源、晶振、输入输出端口、LED灯等。

编写程序代码。

根据冒泡排序算法,编写适用于所选单片机的程序代码。

代码应该能够控制LED灯,根据排序结果改变其亮灭状态。

调试与运行程序。

将程序下载到单片机中,开启电源,观察LED灯的亮灭情况。

检查程序是否能够正确地实现冒泡排序。

记录与分析实验结果。

详细记录LED灯的亮灭状态,分析排序结果是否正确。

同时,对程序进行优化,提高排序效率。

经过实验,我们成功地在单片机上实现了冒泡排序算法。

观察LED灯的亮灭情况,我们可以看到排序过程中的数据交换过程。

通过对比理论结果与实际结果,我们发现二者基本一致,说明我们的程序正确地实现了冒泡排序。

在实验过程中,我们遇到了一些问题,如初始时端口设置不正确导致LED灯无法正常显示、数据交换过程中出现异常等。

针对这些问题,我们通过查阅资料和讨论,对程序进行了相应的修改和优化,最终解决了问题。

通过本实验,我们不仅加深了对冒泡排序算法的理解,还掌握了单片机与接口技术的应用。

同时,实验过程中的问题也锻炼了我们的解决问题的能力。

本实验还提高了我们的实践能力和编程技能,为后续的学习和实践打下了坚实的基础。

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

本科生实验报告实验课程单片机实验学院名称信息科学与技术学院专业名称物联网工程学生姓名曹林鑫学生学号201413060301指导教师谢兴红实验地点6B607实验成绩二〇一六年九月二〇一六年十二月实验一冒泡排序(汇编)一.实验目的掌握单片机的汇编语言排序程序。

二.实验内容将单片机内部的数据进行排序,且使用汇编语言。

三.实验要求根据实验内容编写一个程序,数据排列顺序要求是从小到大。

四.实验说明先在片内RAM中存储一组数据,重复地走访过要排序的数据,一次比较两块内存上的数据,如果他们的顺序错误就把他们交换过来。

走访数据的工作是重复地进行直到没有再需要交换,也就是说该列数据已经排序完成。

五.算法分析若文件的初始状态是正序的,一趟扫描即可完成排序。

所需的关键字比较次数C和记录移动次数M均达到最小值:,。

所以,冒泡排序最好的时间复杂度为O(n)。

若初始文件是反序的,需要进行n-1 趟排序。

每趟排序要进行n-i次关键字的比较(1≤i≤n-1),且每次比较都必须移动记录三次来达到交换记录位置。

在这种情况下,比较和移动次数均达到最大值:冒泡排序的最坏时间复杂度为。

综上,因此冒泡排序总的平均时间复杂度为。

六.实验程序及分析ORG 0000HLJMP mainORG 0100Hmain:MOV 40H,#05H//在40H-44H中随机存放五个立即数MOV 41H,#08HMOV 42H,#09HMOV 43H,#07HMOV 44H,#06HMOV R7,#04H//控制比较循环的次数MOV R6,#04HLOOP3:MOV R0,#40H//指向需要进行比较的数据的地址MOV R1,#41H//MOV A,R6MOV R7,ACLR ALOOP1:CLR CMOV A,@R1MOV 49H,A //交换数据前的备份SUBB A,@R0//用进位标志判断两数的大小JC LOOPLJMP LOOP4LOOP:MOV A, @R0//恢复交换前的备份数据MOV @R1,AMOV @R0,49HLOOP4:INC R0INC R1DJNZ R7,LOOP1//控制比较的次数DJNZ R6,LOOP3//控制比较的轮数LJMP $END六、实验截图排序前内存中的数据排序后内存的数据实验二外部中断一.实验目的1、掌握单片机外部中断的原理及过程。

2、掌握单片机外部中断程序的设计方法。

3、掌握单片机外部中断时中断方式的选择方法。

二、实验内容如下图所示,P3.2设为输入,P2设为输出位,连有8个发光二极管D1~D8。

每当发生外部中断时,发光二极管以向下流水灯的方式点亮。

分别选择边沿触发外部中断放是和电平触发外部中断方式两种。

三、编程提示1、P3口是8位准双向口,具有双重功能:第一功能和P1口一样,作为输入输出口,也有字节操作和位操作两种方式,每一位可分别定义为输入或输出;第二功能定义如下:P3.0 RXD 串行输入口P3.1 TXD 串行输出口P3.2 INT0 外部中断0请求输入线P3.3 INT1 外部中断1请求输入线P3.4 T0定时器/计数器T0外部计数器脉冲输入线P3.5 T1定时器/计数器T1外部计数器脉冲输入线P3.6 WR外部数据存贮器写脉冲输出线P3.7 RD外部数据存贮器读脉冲输出线2、各中断服务程序入口地址:外部中断0 03H定时器/计数器T1溢出中断0BH外部中断1 13H定时器/计数器1BH串行口中断23H3、外部中断的产生条件中断允许寄存器IE:(1)外部中断源允许中断(中断0:EX0=1;中断1:EX1=1)。

(2)CPU开中断(EA=1)。

(3)外部中断方式CPU发出中断申请。

4、外部中断方式的选择控制TCON:IT0是选择文字则外部中断0请求(INT0)边沿触发方式或电平触发方式的控制位。

前一方式IT0=1,后一方式IT0=0。

IT1是选择外部中断1请求(INT1)为边沿触发方式或电平触发方式的控制位。

前一方式IT1=1,后一方式IT1=0。

当8031复位后,TCON被清0。

5、外部中断电路负脉冲作为中断请求信号时,为了保证中断的唯一性,必须加上消除开关抖动的电路或者去抖动延时程序,保证每次只产生单脉冲,构成边沿触发方式外部中断电路。

边沿触发的最大优点在于不会丢失中断。

只要中断请求负跳变的宽度大于 1 个机器周期,单片机就能够采样到中断请求信号,单片机将采样到的信号琐存到中断请求标志寄存器中,硬件自动置IE0为1,即使单片机暂时不响应,这个标志也不会丢失,只有在外部中断响应之后,硬件才将IE0清除。

低电平触发的外部中断与边沿触发的外部中断,其中断过程基本相似。

唯一不同在于中断请求信号的保持与撤消。

在边沿触发中,单片机TCON寄存器专门有一位作它的请求标志,当负跳变后,单片机将中断请求标志IE1(INT1中断为IE1,INT0中断为IE0)自动置1,由IE1请求中断,在响应中断时,又由单片机自动清除IE1。

但是对于电平触发方式,单片机中没有专门的请求标志,响应中断时也不能自动清除请求信号。

在实际应用中,常常是在单片机外增加一个触发器作为中断请求标志,当中断请求发生时置触发器为0,使INT1为低电平,在单片机响应这个中断后,利用软件(占用另一根I/O线,例如P3.1)发出复位脉冲,使该触发器置1,撤消中断请求。

这种电路使请求中断的低电平能够保持足够的时间,一直到中断发生为止,因而不会丢失中断请求。

低电平的时间又不致太长,只要进入中断服务程序,在返回之前,就撤消请求信号,因而也不会产生多余的中断动作。

四、实验器材仿真器、目标系统实验板、直流电源五、实验步骤1、边沿触发式外部中断0实验(1)P3.2设为边沿触发方式,连接外部复位开关,编程使每次中断流水灯向下移位一次,中断程序中不延时去抖动,观察结果。

(2)P3.2设为边沿触发方式,连接外部复位开关,编程使每次中断流水灯向下移位一次,中断程序中采用延时去抖动,观察结果。

(3)P3.3设为边沿触发方式,连接外部RS触发器硬件去抖动的开关,编程使每次中断流水灯向下移位一次,中断程序中不延时去抖动,观察结果。

2、电平触发式外部中断实验P3.3设为电平触发方式,连接外部RS触发器硬件去抖动的开关,编程使每次中断流水灯向下移位一次,中断程序中不延时去抖动,观察结果。

六、C源程序清单#include <STC12C5A60S2.h>#define uchar unsigned charuchar i=0;uchar numi[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};void delay(uchar k );void main(){EA=1;EX0=1;IT0=1;while(1){if(EX0==0){//delay(100);IE0=0;EX0=1;}}}void int0() interrupt 0{EX0=0;P2=~numi[i];i++;if(i>8){i=0;}}void delay(uchar k ){uchar x,y,z;for(x=k;x>0;x--)for(y=20;y>0;y--)for(z=250;z>0;z--);}七、总结1、边沿触发和电平触发两种方式中断响应的原理与区别边沿触发:当从高至低电平或从低至高电平转变时,触发产生;电平保持多久都只产生一次。

所以,边沿触发适合与以负脉冲形式输入的外部中断请求。

电平触发:那么在电平时间内中断一直有效;因此如果在电平没有恢复之前中断程序就已经执行完成从而退出,那么会在退出后又再次进入中断;但只要中断没有退出是不会重复触发的。

所以,电平触发方式适合于外部中断以电平输入而且中断服务能清除外部中断源的情况。

2、实验现象1、(1)实验现象是,按键一次就会跳过几个灯,也就是说按键一次并不是向后移一位而是好几位,这是因为按键没有去抖动,所以会进入多次中断导致。

1、(2)按键一次,灯就向下移一位,这是通过软件去抖动之后,按键按下后延时一段时间,再来判断中断有没有打开,所以按键一次只进入一次中断。

1、(3)按键一次,灯就向下移一位,虽然没有用按键去抖动,但是这个键在硬件上已经去抖,所以按键一次也是只进入一次中断程序,所以会有这种现象。

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

实验三定时/计数器实验一、实验目的学习MCS-51 内部计数器的使用和编程方法。

二、实验内容使用MCS-51 内部定时/计数器,定时一秒钟,CPU 运用定时中断方式,实现每一秒钟输出状态发生一次反转,即发光管每隔一秒钟亮一次。

三、实验要求根据实验内容编写一个程序,并在实验仪上调试和验证。

四、实验说明关于内部计数器的编程主要是定时常数的设置和有关控制寄存器的设置。

内部计数器在单片机中主要有定时器和计数器两个功能。

本实验使用的是定时器,定时为一秒钟。

定时器/计数器有关的寄存器有工作方式寄存器TMOD 和控制寄存器TCON。

TMOD 用于设置定时器/计数器的工作方式0-3,并确定用于定时还是用于计数。

TCON 主要功能是为定时器在溢出时设定标志位,并控制定时器的运行或停止等。

内部计数器用作定时器时,是对机器周期计数。

每个机器周期的长度是12 个振荡器周期。

假设实验系统的晶振是12MHZ,程序工作于方式2,即8 位自动重装方式定时器, 定时器100uS中断一次, 所以定时常数的设置可按以下方法计算:机器周期=12÷12MHz=1uS(256-定时常数)×1uS=100uS定时常数=156。

然后对100uS 中断次数计数10000 次,就是1 秒钟。

内部计数器用作计数器时,是对外部负脉冲进行计数。

其中,负脉冲从P3.4、P3.5端口输入的。

每有一个负脉冲,计数器就加一。

在本实验的中断处理程序中,因为中断定时常数的设置对中断程序的运行起到关键作用,所以在置数前要先关对应的中断,置数完之后再打开相应的中断。

本实验需要用到CPU 模块(F3 区)和八位逻辑电平显示模块(B5 区)。

五、实验程序及分析程序流程图如下:主程序流程图T1中断服务子程序T0中断服务子程序实验程序如下:Tick equ 10000 ; 10000 x 100us = 1sT100us equ 156 ; 100us时间常数(6M)C100us equ 30h ; 100us、50us记数单元Tuck equ 5000 ; 5000 x 100us = 0.5sLEDBuf bit 20hDIR bit P3.0org 0000hljmp Startorg 000bhljmp T0Int ;T0定时器中断入口:0138H org 001bh ;T1中断入口地址:001BH cpl P1.1 ;T1中断服务子程序reti地址 org 0100h0100H Start:mov P3,0ffh ;P3端口做输入口,初始化要置1mov TMOD, #62h ;T0为方式2, 定时器,T1为方式2,计数器 clr EA ;关中断,置定时器的初值mov TH0, #T100usmov TL0, #T100usmov TH1, #0fdhmov TL1, #0fdhmov IE, #10001010b ; EA=1, IT0 = 1,IT1 = 1setb TR0 ; 开始定时setb TR1 ; 开始计数clr LEDBufclr P1.0clr P1.1mov C100us, #27H ;#high(Tick)mov C100us+1, #10H ;#low(Tick)0125H Loop:clr Cmov C,DIRjnc Loop1setb F0 ;F0=1,T=0.5sljmp Loop3012FH Loop1:clr F0 ;F0=0,T=1s0131H Loop3:mov c, LEDBufmov P1.0, cljmp Loop0138H T0Int: ;T0定时器中断子程序push PSWmov a, C100us+1jnz Goondec C100us0140H Goon:dec C100us+1mov a, C100usorl a, C100us+1jnz Exit ; 记数器不为0, 返回jb F0,Loop2mov C100us, #27H ; #high(Tick),记数器为0,重置记数器mov C100us+1, #10H ; #low(Tick)ljmp Loop40154H Loop2:mov C100us, #13H ; #high(Tuck),记数器为0,重置记数器mov C100us+1, #88H ; #low(Tuck)015AH Loop4:cpl LEDBuf ; 取反LED015CH Exit:pop PSWretiEnd六、实验步骤及实验现象1)系统各跳线器处在初始设置状态,用导线连接CPU模块P10到八位逻辑电平显示模块的L0;用导线连接八位逻辑电平输出模块的K0 到CPU 模块的RXD(P3.0 口)。

相关文档
最新文档