(中断、冒泡排序、1602)单片机实验报告
(中断、冒泡排序、1602)单片机实验报告
![(中断、冒泡排序、1602)单片机实验报告](https://img.taocdn.com/s3/m/1438954977232f60ddcca16c.png)
本科生实验报告实验课程单片机实验学院名称信息科学与技术学院专业名称物联网工程学生姓名曹林鑫学生学号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、掌握单片机外部中断的原理及过程。
单片机中断实验实训报告
![单片机中断实验实训报告](https://img.taocdn.com/s3/m/6c7a1a7fcdbff121dd36a32d7375a417876fc169.png)
一、实验背景随着电子技术的飞速发展,单片机因其体积小、成本低、功能强大等优点,在各个领域得到了广泛应用。
中断技术是单片机设计中非常重要的一部分,它允许单片机在执行程序的过程中,能够及时响应外部事件,从而提高系统的实时性和效率。
本实训旨在通过实验,加深对单片机中断系统的理解,掌握中断系统的使用方法,并学会在实际应用中灵活运用中断技术。
二、实验目的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. 编译程序,下载到单片机实验板上。
单片机中断实验总结
![单片机中断实验总结](https://img.taocdn.com/s3/m/8060cd12f11dc281e53a580216fc700abb6852ad.png)
单片机中断实验总结单片机中断是单片机系统中一项重要的功能和特性。
通过中断,可以实现对外部事件的实时响应和处理,从而提高系统的实时性和可靠性。
在实验中,我对单片机中断进行了学习和实践,以下是我的实验总结。
在实验中,我首先了解了中断的基本概念和原理。
中断是指在程序执行过程中,由外部事件、硬件设备或软件请求而打断正常执行流程,转去执行与该事件或请求相关的子程序。
中断可以分为外部中断和内部中断。
外部中断是通过硬件引脚与外部设备进行连接并触发的,而内部中断则是由软件内部生成的。
中断的实现需要借助中断控制器,例如常用的单片机8051就内置了中断控制器。
实验中,我使用keil C编译器和STC89C52单片机开发板进行了中断的实现。
编写了一个简单的程序,当外部中断0引脚检测到高电平时,触发外部中断,执行相应的中断服务程序。
在编写程序时,首先定义了中断服务程序的函数原型,然后通过中断向量表将中断服务程序与相应的中断号关联起来。
在主程序中,使用IE寄存器和相应的位操作函数开启了外部中断。
在实验过程中,我遇到了一些问题,并进行了解决。
首先,我发现外部中断引脚的电平触发方式对中断的触发有影响。
通过查阅资料,我了解到外部中断引脚可以选择边沿触发还是电平触发,需要根据实际的需求进行设置。
其次,我发现在中断服务程序中,需要注意中断屏蔽和中断优先级的设置,以免出现中断互相屏蔽的情况。
最后,我发现中断服务程序中的代码需要尽量简洁和高效,以保证中断的响应时间和系统的实时性。
通过实验,我进一步理解了单片机中断的概念和原理,掌握了使用keil C编写中断程序的方法,提高了对单片机系统的认识和理解。
中断在单片机系统中具有重要的作用,可以实现对外部事件的实时响应和处理,从而提高系统的可靠性和实时性。
在今后的学习和实践中,我将进一步深化对中断的理解和应用,并将其应用到更为复杂的系统中。
参考内容:1. 《嵌入式系统原理与开发:使用51单片机和C语言》-程杰2. 《嵌入式系统与单片机原理实验教程》-王刚3. 《单片机原理与应用》-马利民4. STC89C52单片机数据手册5. Keil C51编译器使用手册。
单片机与接口技术实验报告--冒泡排序实验
![单片机与接口技术实验报告--冒泡排序实验](https://img.taocdn.com/s3/m/c1bbc2c22cc58bd63186bddf.png)
本科实验报告课程名称:单片机原理与接口技术实验项目:冒泡排序实验实验地点:跨越机房专业班级:学号:学生姓名:指导教师: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五、实验数据记录和处理单步执行观察发现,每一个数都会逐次与它之后的数进行比较,排序,直到所有数据都与其后的数据比较排完后才结束。
单片机中断实验报告
![单片机中断实验报告](https://img.taocdn.com/s3/m/888f24407f1922791788e82b.png)
人的一生要疯狂一次,无论是为一个人,一段情,一段旅途,或一个梦想------- 屠呦呦实验三定时器中断实验一、实验目的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;}七、实验心得通过本次课程设计使我感受到它是一门综合性、实践性较强的课程,使我体会到要想综合运用所学的理论知识,提高我的设计能力,必须增加实际操作的环节。
单片机的中断实验报告
![单片机的中断实验报告](https://img.taocdn.com/s3/m/0fd919a59a89680203d8ce2f0066f5335a8167d3.png)
单片机的中断实验报告单片机的中断实验报告引言:单片机是现代电子技术中的一种重要组成部分,广泛应用于各种电子设备中。
中断是单片机中的一种重要功能,能够提高系统的响应速度和实时性。
本实验旨在通过对单片机的中断功能进行实验,深入了解中断的原理和应用。
一、实验目的本实验旨在通过对单片机的中断功能进行实验,掌握中断的原理和应用,提高对单片机的理解和应用能力。
二、实验器材和材料1. 单片机开发板2. 电脑3. USB数据线4. LED灯5. 电阻、电容等元件三、实验原理中断是单片机中的一种重要功能,当某个事件发生时,单片机可以立即中断当前程序的执行,转而执行中断服务程序,处理该事件。
中断可以分为外部中断和内部中断两种类型。
外部中断由外部设备触发,如按键、传感器等;内部中断由单片机内部的某个模块触发,如定时器溢出、串口接收等。
四、实验步骤1. 连接单片机开发板和电脑,并通过USB数据线进行通信。
2. 在开发环境中编写中断服务程序,实现对外部中断的响应。
3. 将LED灯连接到开发板的某个IO口,并设置为输入模式。
4. 在主程序中配置外部中断的触发条件和中断服务程序。
5. 运行程序,触发外部中断,观察LED灯的亮灭情况。
五、实验结果与分析经过实验,我们成功实现了对外部中断的响应,并观察到LED灯在中断触发时的亮灭情况。
通过实验结果的分析,我们可以得出以下结论:1. 外部中断可以有效地提高系统的响应速度和实时性,特别适用于需要及时处理外部事件的应用场景。
2. 中断服务程序的编写和配置是实现中断功能的关键,需要充分理解中断的原理和编程方法。
3. 在实际应用中,需要根据具体的需求和硬件条件来选择合适的中断触发条件和中断服务程序。
六、实验总结通过本次实验,我们深入了解了单片机的中断功能,并通过实际操作掌握了中断的原理和应用方法。
中断作为一种重要的系统功能,可以提高系统的响应速度和实时性,广泛应用于各种电子设备中。
在今后的学习和工作中,我们将进一步探索中断的应用领域,并不断提高自己的单片机编程能力。
51单片机设计冒泡程序实验总结
![51单片机设计冒泡程序实验总结](https://img.taocdn.com/s3/m/60053d9bed3a87c24028915f804d2b160b4e8676.png)
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接口十分方便。
键盘:键盘是最常见的计算机输入设备,它广泛应用于微型计算机和各种终端设备上。
计算机操作者通过键盘向计算机输入各种指令、数据,指挥计算机的工作。
按照键盘的工作原理和按键方式的不同,可以划分为四种:机械式键盘采用类似金属接触式开关,工作原理是使触点导通或断开,具有工艺简单、噪音大、易维护的特点。
单片机与接口技术实验报告冒泡排序实验
![单片机与接口技术实验报告冒泡排序实验](https://img.taocdn.com/s3/m/903751aa6394dd88d0d233d4b14e852459fb3977.png)
单片机与接口技术实验报告冒泡排序实验本实验旨在通过单片机的接口技术,实现冒泡排序算法的实践与理解。
通过实际操作,掌握单片机与接口技术的基本应用,理解冒泡排序算法原理,提升实践能力和编程技能。
冒泡排序是一种简单的排序算法,它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。
走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
在单片机与接口技术的实验中,我们可以使用LED灯等外部设备来模拟冒泡排序的过程。
通过改变LED灯的亮灭状态,反映出排序过程中数据的交换结果。
确定单片机型号并连接硬件电路。
选择合适的单片机,如8051系列,并搭建相应的硬件电路。
主要包括电源、晶振、输入输出端口、LED灯等。
编写程序代码。
根据冒泡排序算法,编写适用于所选单片机的程序代码。
代码应该能够控制LED灯,根据排序结果改变其亮灭状态。
调试与运行程序。
将程序下载到单片机中,开启电源,观察LED灯的亮灭情况。
检查程序是否能够正确地实现冒泡排序。
记录与分析实验结果。
详细记录LED灯的亮灭状态,分析排序结果是否正确。
同时,对程序进行优化,提高排序效率。
经过实验,我们成功地在单片机上实现了冒泡排序算法。
观察LED灯的亮灭情况,我们可以看到排序过程中的数据交换过程。
通过对比理论结果与实际结果,我们发现二者基本一致,说明我们的程序正确地实现了冒泡排序。
在实验过程中,我们遇到了一些问题,如初始时端口设置不正确导致LED灯无法正常显示、数据交换过程中出现异常等。
针对这些问题,我们通过查阅资料和讨论,对程序进行了相应的修改和优化,最终解决了问题。
通过本实验,我们不仅加深了对冒泡排序算法的理解,还掌握了单片机与接口技术的应用。
同时,实验过程中的问题也锻炼了我们的解决问题的能力。
本实验还提高了我们的实践能力和编程技能,为后续的学习和实践打下了坚实的基础。
单片机中断实验报告
![单片机中断实验报告](https://img.taocdn.com/s3/m/e908b6c2ed3a87c24028915f804d2b160b4e861c.png)
通过单片机的下载接口,将可执行的二进制文件 下载到单片机中。
实验测试
通过按键触发外部中断,观察LED灯的状态变化, 验证程序的正确性。
04
实验结果与分析
中断响应时间测试
总结词
响应时间快
详细描述
在测试中,我们发现单片机的中断响应时间非常快,能够在极短的时间内对外 部事件做出响应。这主要得益于单片机的硬件架构和中断处理机制,使得单片 机能够迅速识别并处理外部事件。
提高编程能力
通过本次实验,我们认识到自己的编程能力还有很大的提升空间。在未来的学习中,我们将注重提高自 己的编程能力,包括代码的优化、调试技巧等方面。
THANKS
感谢观看
实验中的问题与解决方案
在实验过程中,我们遇到了一些问题,如中断触发条件不 稳定等,通过调整相关参数和优化代码,最终解决了这些 问题。
对实验的反思与建议
01
实验操作流程的不足
在实验过程中,我们发现操作流程仍存在一些不足之处,如某些步骤的
描述不够清晰,导致实验过程中出现了一些不必要的困惑。建议在后续
的实验指导书中对操作流程进行更加详细的描述。
深入学习单片机中断机制
通过本次实验,我们对单片机的中断机制有了初步的了解。在未来的学习中,我们计划深入学习单片机的中断机制, 了解更多关于中断的细节和应用技巧。
探索更多中断应用场景
除了本次实验中实现的按键中断和定时器中断外,我们还计划探索更多的中断应用场景,如串口中断、ADC中断等 ,以拓宽我们的知识面和应用能力。
05
结论与建议
实验结论
实验目标达成情况
实验目标是通过单片机实现外部中断和定时器中断,实验 过程中成功实现了外部按键中断和定时器中断,验证了单 片机的中断处理机制。
(完整word版)单片机实验一冒泡法排序
![(完整word版)单片机实验一冒泡法排序](https://img.taocdn.com/s3/m/50d53088783e0912a3162aed.png)
实验一:冒泡法排序实验一、实验要求实验目的:掌握控制转移指令的功能,以及冒泡法排序的原理。
实验要求:设 30H 开始的 10 个储存单元中,寄存的是无符号数,编写程序实现: 10 个数排序,寄存在 50H 开始的单元中。
二、实验原理多重循环即循环嵌套构造。
多重循环程序的设计方法和单重循环是同样的,不过要分别考虑各重循环的控制条件。
内循环属于外循环体重的详细办理部分。
在多重嵌套中,不同意各个循环体互相交错,也不同意从外循环跳入内循环,不然编译时会犯错。
应当注意每次经过外循环进入内循环式,内循环的初始条件需要重置。
三、程序设计1、程序流程图开始R4 ←外循环次数R3 ←内循环次数R0 ←缓冲区首地点B←((R0))A ←((R0)+1)(A)≥(B)?N ((R0)) ←→ ((R0)+1)R0←(R0)+1(R3)-1=0?Y(R4)-1=0?YR0←30HR1←31H((R1)) ←((R0)) ((R0)) ←((R0)+1) ((R1)) ←((R1)+1)(R7)-1=0?Y结束YNNN图 1 冒泡法程序流程图2、程序代码N EQU 10TAB EQU 30HORG 0000HMOV 30H, #1 ;在 30H 中输入 10 个随机数MOV 31H, #3MOV 32H, #2MOV 33H, #4MOV 34H, #6MOV 35H, #8MOV 36H, #7MOV 37H, #11MOV 38H, #9MOV 39H, #10SORT: MOV R4, #N-1LOOP1: MOV A,R4 ;冒泡法循环MOV R3, AMOV @R0, #TABLOOP2: MOV A, @R0MOV B, AINC R0MOV A, @R0CLR CMOV R2, ASUBB A, BJNC UNEXCHMOV A, R2UNEXCH: DJNZ R3, LOOP2 ;假如 A<B ,次序履行 UNEXCH DJNZ R4, LOOP1LJMP SWITCHEXCH: DEC R0 ;假如 A>B ,则 A,B 调动地点XCH A, @R0INC R0MOV @R0, ASWITCH: MOV R0, #30HMOV R1, #50HMOV R2, #NPAIXU: MOV A, @R0 ;将 30H 中排好的数挪动到50H 中MOV @R1, AINC R0INC R1DEC R2CJNE R2, #0, PAIXUSJMP $END四、程序考证1、在30H中输入10个数,显示以下:图 2 30H 单元中储存的10 个数2、对30H中的10个数排序,结果以下:图 3 对 30H 中 10 个数排序后的结果3、将30H中的数转移到50H 中,结果以下:图 4 30H 中 10 个数转移到50H 以后的结果结论:程序基本切合实验要求。
单片机原理实验报告
![单片机原理实验报告](https://img.taocdn.com/s3/m/4789e6aba417866fb94a8e86.png)
实验报告01_排序程序实验目的1. 熟悉MCS-51指令系统,掌握程序设计方法。
2. 掌握控制转移指令的功能,以及冒泡排序法原理。
3. 熟悉51单片机汇编语言编程环境。
实验要求设30H开始的10个存储单元中,存放的是无符号数,编写程序实现:将它们排序,并存放到50H开始的单元中。
实验原理冒泡算法的思想为,每次取相邻单元的两个数比较,判断是否需要交换数据的位置。
第一次循环,比较N-1次,取到数据表的最大值;第二次循环,比较N-2次,取到次大值;……第N-1次循环,比较一次,排序结束。
流程框图实验程序及调试仿真:实验程序如下:N EQU 10TAB EQU 30HTAC EQU 50HORG 0000H SORT: MOV R4,#N-1 LOOP1: MOV A,R4MOV R3,AMOV R0,#TAB LOOP2: MOV A,@R0MOV B,AINC R0MOV A,@R0CLR CSUBB A,BJNC UNEXCHMOV A,@R0DEC R0XCH A,@R0INC R0MOV @R0,A UNEXCH: DJNZ R3,LOOP2DJNZ R4,LOOP1MOV R1,#TABMOV R7,#NMOV R0,#TAC AGAIN: MOV A,@R1MOV @R0,AINC R1INC R0DJNZ R7,AGAINSJMP $END程序调试及运行结果实验结论通过本实验,我对冒泡排序法的原理有了更深入的理解,同时在掌握此算法思想的基础上能够用汇编语言进行编程,并学会在Keil μVersion4调试界面的Memory窗口中查看内存地址的内容,从而验证设计的源程序的正确性,提高了自己解决问题的能力。
实验报告02_ 外部中断实验实验目的学会使用Keil μVersion4和Proteus软件进行单片机汇编语言和C语言程序设计与开发;了解和掌握MCS-51单片机的中断组成、中断控制工作原理、中断处理过程、外部中断的中断触发方式,掌握中断功能的编程方法。
单片机 中断实验 实验报告
![单片机 中断实验 实验报告](https://img.taocdn.com/s3/m/ee7a204f5acfa1c7aa00cc60.png)
实验三中断实验一、实验内容1.当单片机的INT0端出现负脉冲时,进入相应的中断服务程序,P1口做输出口,接8只发光二极管,通过程序控制发光二极管依次点亮。
2.选择外部中断0(P3.2)接按键INTO到地,按下出现负脉冲时,进入相应的中断服务程序,在中断服务程序中,数码管显示加1,在0-9之间循环。
二、实验目的1、学习外部中断技术的基本使用方法。
2、学习中断处理程序的编程方法。
三、实验原理(中断原理部分参考教材填写)本实验中断处理程序的应用,最主要的地方是如何保护进入中断前的状态,使得中断程序执行完毕后能回到交通灯中断前的状态。
要保护的地方,除了累加器ACC、标志寄存器PSW外,还要注意。
一是主程序中的延时程序和中断处理程序中的延时程序不能混用,本实验中,主程序延时用的寄存器和中断延时用的寄存器应不相同。
四、实验电路(参考学习板说明书Page11)五、接线方式(参考学习板说明书Page11)P1口接发光二极管的L1—L8;单脉冲输出端“”接INI0,即接89C51的P3.2管脚。
六、参考程序程序一、ORG 0030Htmpdate: DB 01H,02H,04H,08H,10H,20H,40H,80H /*定义常量做为输出*/ORG 0000HLJMP MAINORG 0003HLJMP INTMAIN: SETB EA /*首先开启总中断*/SETB EX0 /*开启外部中断0 */SETB IT0 /* 设置成下降沿触发方式*/MOV R7,#8MOV DPTR,#TMPDATEL0: SJMP L0 //等待中断INT: DJNZ R7,L1 /*外部中断0 每按一次主板上的"INT0"键,中断响应,调用该函数,我们从P1口输出点亮发光二极管*/MOV R7,#8L1: MOV A,R7MOVC A,@A+DPTRCPL AMOV P1,ARETIEND程序二、/***************************************************************功能:按下按键,数码管加1,用中断的方法作者:txl时间:2009-04版本:V1.0***************************************************************/#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit wei1=P2^0;sbit key1=P3^2;uchar code table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};//共阳数码管码表//全局变量uchar num;//函数声明void delay(uint z);void led_show(uchar temp);void main(){num=0;// IT0=1; //中断以下降沿方式触发IT0=0; //中断以低电平方式触发EX0=1; //允许外部中断0中断EA=1; //总中断开wei1=0;while(1){led_show(num); //显示}}/*************************************************************** 功能:外部中断0入口***************************************************************/ void EX0_Int() interrupt 0{EX0 = 0; //关中断num++;if(num==10)num=0;while(!key1);//消除抖动delay(5);while(!key1);// for(;!key1;); //等待放开EX0 = 1; //开中断}void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void led_show(uchar temp){P0=table[temp];delay(5);}扩展程序三、#include <AT89X52.H> //包含头文件sbit led=P1^0;#define shuma P0 //数码管数据口sbit LED_0=P2^0; //定义数码管4个控制位sbit LED_1=P2^1;sbit LED_2=P2^2;sbit LED_3=P2^3;unsigned char m;unsigned int code ton[7];void display(unsigned char d1,unsigned char d2,unsigned char d3,unsigned char d4);/*=====0-9=====A-G=====*/unsigned char a[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//共阳极数码管的段码0 1 2 3 4 5 6 7 8 9 A B C D E F//定时初值计算方法:以5ms为例,5ms=5000us,0xffff-5000/1.085即为TH和TL的值void int1() interrupt 3 //T1中断,时间是5ms{TR1=0; //关中断TH1=0xed; //装定时器初值实现5ms定时TL1=0xff;ET1=1; //开中断TR1=1;display(1,2,3,4); //在中断里显示数字}void main( void ){m=1;TMOD=0x10; //设置为T1定时器TH1=0xed; //装定时器初值TL1=0xff;TR1=1; //开中断ET1=1;EA=1;while(1){}}void display(unsigned char d1,unsigned char d2,unsigned char d3,unsigned char d4) {if(m==1) //每进入一次中断显示1位,用变量m作为显示位标识{LED_0=0; //使能该数码管控制位LED_1=LED_2=LED_3=1; //其他控制位无效shuma=a[d1]; //按照数据点亮该数码管}if(m==2) //第二次中断显示第二位{LED_1=0;LED_0=LED_2=LED_3=1;shuma=a[d2];}if(m==3) //第三次中断显示第三位{LED_2=0;LED_1=LED_0=LED_3=1;shuma=a[d3];}if(m==4) //第四次中断显示第四位{LED_3=0;LED_1=LED_2=LED_0=1;shuma=a[d4];}m++; //数码管位循环扫描if(m>=5) //如果4次中断显示完成,则回到第一重新显示m=1;}。
单片机实验报告 中断
![单片机实验报告 中断](https://img.taocdn.com/s3/m/4eac8012ac02de80d4d8d15abe23482fb5da0279.png)
单片机实验报告中断单片机实验报告:中断引言:单片机是一种集成电路,具有微处理器、存储器和输入输出接口等功能。
在嵌入式系统中,单片机常常被用于控制和管理各种设备。
而中断是单片机中一种重要的机制,它可以在特定条件下打断程序的正常执行,执行一段特定的代码,然后返回到原来的程序中。
本文将介绍中断的概念、分类以及在单片机实验中的应用。
一、中断的概念中断是一种硬件或软件生成的信号,用于打断正在执行的程序。
当中断信号发生时,单片机会立即停止当前的任务,转而执行中断服务程序。
中断可以提高程序的响应速度和效率,使单片机能够及时处理紧急事件。
二、中断的分类中断可以分为外部中断和内部中断两种类型。
1. 外部中断外部中断是由外部设备产生的中断信号。
当外部设备需要单片机的处理时,会发送中断请求信号。
单片机在接收到中断请求后,会立即停止当前任务,转而执行与中断相关的程序。
外部中断常用于处理外部设备的输入信号,如按键、传感器等。
2. 内部中断内部中断是由单片机内部产生的中断信号。
内部中断通常由单片机的一些特定事件触发,如定时器溢出、串口接收完成等。
内部中断常用于周期性的任务处理和数据通信等。
三、中断的实验应用在单片机实验中,中断被广泛应用于各种场景,下面将介绍两个实验应用的例子。
1. 外部中断实验假设我们需要设计一个按键控制LED灯的实验。
当按下按键时,LED灯亮起;当松开按键时,LED灯熄灭。
这个实验可以使用外部中断来实现。
首先,我们需要将按键连接到单片机的外部中断引脚。
当按键按下时,外部中断引脚会产生一个中断请求信号。
单片机接收到中断请求后,会执行相应的中断服务程序。
在中断服务程序中,我们可以控制LED灯的亮灭。
通过这个实验,我们可以学习到如何使用外部中断来处理外部设备的输入信号,并且了解到中断的响应速度和效率优势。
2. 内部中断实验假设我们需要设计一个定时器实验,要求每隔一段时间点亮一次LED灯。
这个实验可以使用内部中断来实现。
单片机中断实验总结
![单片机中断实验总结](https://img.taocdn.com/s3/m/2fd203b6b8d528ea81c758f5f61fb7360b4c2b9d.png)
单片机中断实验总结本次实验是关于单片机中断的,通过对中断的学习和实验,我了解了中断的基本原理和实现方式,进一步认识到中断在程序设计和实现中的重要性。
首先,通过实验我了解到中断是一种异步的事件,可以打断正在执行的程序,并在中断发生时响应处理。
单片机中断是指在硬件或软件条件满足时,单片机主动中断正在执行的程序,跳转到相应的中断服务程序中执行。
中断可以在不影响主程序的同时响应该事件,使程序更加高效、灵活。
其次,在实验过程中我学会了如何在单片机中实现外部中断,包括设置中断触发方式、对中断请求进行检测和响应等。
我了解到单片机中断可以分为外部中断和内部中断,其中外部中断是通过外部中断源(如按键、触摸开关等)触发的,而内部中断则是由单片机内部条件触发的。
外部中断常常用于接收外部设备输入(如计数器、编码器等),并在特定条件下进行中断处理。
最后,在实验中我还学习了如何编写中断服务程序,并利用中断服务程序响应中断并完成相应处理。
中断服务程序需要快速、准确地响应中断事件,才能实现高效的中断处理。
因此在编写中断服务程序时需要注意以下几点:1. 确定中断源:不同的中断源可能需要不同的中断触发方式和响应程序。
因此在编写中断服务程序前需要确定中断源,根据中断源的特点确定相应的中断触发方式、响应程序等。
2. 保存寄存器状态:中断服务程序执行过程中需要使用寄存器等CPU资源,因此在中断服务程序中需要先保存相关寄存器的状态,防止中断服务程序执行过程中出现寄存器误操作等问题。
3. 快速响应和处理:中断服务程序需要快速、准确地响应中断,因此需要使用最小可行代码,避免执行过多的指令或函数调用等操作。
单片机中断实验报告
![单片机中断实验报告](https://img.taocdn.com/s3/m/078aaa3b1fd9ad51f01dc281e53a580217fc5048.png)
一、实验目的1. 理解单片机中断的基本概念和工作原理。
2. 掌握单片机中断系统的初始化方法。
3. 学会编写中断服务程序,实现特定功能。
4. 熟悉中断优先级设置及其对系统性能的影响。
二、实验设备1. 单片机实验板:STC89C52单片机实验板2. 串口下载线:USB转串口下载线3. 电脑:一台运行Windows操作系统的电脑4. 软件工具:Keil uVision4集成开发环境三、实验原理单片机中断系统是单片机的重要组成部分,它允许单片机在执行主程序时,响应外部或内部事件的中断请求,暂停主程序执行,转而执行相应的中断服务程序。
中断系统由硬件和软件两部分组成。
1. 硬件部分:包括中断源(如定时器、外部中断等)、中断控制器、优先级寄存器、中断服务寄存器等。
2. 软件部分:包括中断初始化程序、中断服务程序等。
四、实验步骤1. 创建项目:在Keil uVision4中创建一个新项目,选择STC89C52单片机作为目标芯片。
2. 设计电路:根据实验要求,绘制电路原理图,连接单片机实验板上的相关元器件。
3. 编写程序:编写C语言程序,实现以下功能:(1)初始化单片机中断系统,包括设置中断优先级、启用中断等;(2)编写中断服务程序,处理中断请求;(3)编写主程序,实现特定功能。
4. 编译程序:将编写好的程序编译成hex文件。
5. 烧录程序:将编译好的hex文件烧录到单片机实验板中。
6. 运行实验:观察实验现象,验证程序功能。
五、实验内容1. 实验一:外部中断实验(1)功能:当外部中断0(INT0)或外部中断1(INT1)有信号输入时,触发对应的中断服务程序,使LED灯闪烁。
(2)步骤:a. 初始化外部中断0和外部中断1,设置中断优先级;b. 编写外部中断0和外部中断1的中断服务程序;c. 编写主程序,实现LED灯闪烁。
2. 实验二:定时器中断实验(1)功能:定时器0每隔1秒产生一次中断,触发中断服务程序,使LED灯闪烁。
单片机中断实验报告
![单片机中断实验报告](https://img.taocdn.com/s3/m/8bd70b703868011ca300a6c30c2259010302f379.png)
单片机中断实验报告单片机中断实验报告引言:单片机是一种集成电路,具有微处理器、存储器和各种输入输出设备等功能模块。
中断是单片机中的一种重要机制,它可以使单片机在执行某个任务时,暂停当前操作,转而执行其他紧急任务。
本次实验旨在深入了解单片机中断的原理和应用,以及如何在程序中实现中断功能。
一、实验目的本次实验的目的是通过编写程序,实现单片机中断功能,并验证中断的正确性和可靠性。
具体而言,我们将使用单片机的外部中断和定时器中断功能,分别实现按键中断和定时中断。
二、实验器材1. 单片机开发板2. 按键模块3. 七段数码管模块4. 电源模块5. 连接线等三、实验原理1. 外部中断外部中断是通过外部中断引脚与外部电路连接来实现的。
当外部电路触发中断条件时,单片机将暂停当前操作,转而执行中断服务程序。
在本实验中,我们将按键模块连接到外部中断引脚,当按下按键时,触发外部中断,实现按键中断功能。
2. 定时器中断定时器中断是通过定时器模块来实现的。
定时器可以按照设定的时间间隔产生中断请求信号,从而实现定时中断功能。
在本实验中,我们将使用定时器模块来实现每隔一段时间触发一次中断,实现定时中断功能。
四、实验步骤1. 连接电路将按键模块的输出引脚连接到单片机的外部中断引脚,将七段数码管模块连接到单片机的IO口。
接通电源,确保电路连接正确。
2. 编写程序使用C语言编写程序,首先需要初始化单片机的中断向量表和相关寄存器。
然后编写中断服务程序,根据实验要求实现按键中断和定时中断功能。
最后,在主程序中设置中断使能位,使得中断能够正常触发。
3. 烧录程序使用烧录器将编写好的程序烧录到单片机中。
4. 实验验证按下按键,观察七段数码管的显示是否按照预期变化。
等待一段时间,观察定时中断是否按照设定的时间间隔触发。
五、实验结果与分析经过实验验证,按键中断和定时中断功能均能够正常运行。
按下按键时,七段数码管的显示会按照预期变化,定时中断也能够按照设定的时间间隔触发。
第五次实验报告
![第五次实验报告](https://img.taocdn.com/s3/m/73a3f8ecf61fb7360b4c657b.png)
for(a=130;a>0;a--); void Delay1ms(unsigned int a) { unsigned int b,c; for(c=a;c>0;c--) for(b=110;b>0;b--); void LcdWriteCom(unsigned char com) 入命令 { RS=0; RW=0; GPIO_LCD=com; Delay1ms(10); LCDE=1; Delay1ms(10); LCDE=0; void LcdWriteData(unsigned char dat) //写入数据 // 写
void LcdWriteCom(unsigned char); void LcdWriteData(unsigned char); void LcdInit(); void Delay1ms(unsigned int); void main(void) {
{ case(0X07): KeyValue=0;break; case(0X0b): KeyValue=1;break; case(0X0d): KeyValue=2;break; case(0X0e): KeyValue=3;break; } GPIO_KEY=0XF0; Delay10ms(); switch(GPIO_KEY) { case(0X70): KeyValue=KeyValue;break; case(0Xb0): KeyValue=KeyValue+4;break; case(0Xd0): KeyValue=KeyValue+8;break; case(0Xe0): KeyValue=KeyValue+12;break; } while((a<50)&&(GPIO_KEY!=0xf0)) 测按键松手检测 { Delay10ms(); a++; } a=0; } } } void Delay10ms(void) { unsigned char a,b,c; for(c=1;c>0;c--) for(b=38;b>0;b--) } // 误差 0us } // 检 { RS=1; RW=0; } } }
单片机中断系统设计实验报告
![单片机中断系统设计实验报告](https://img.taocdn.com/s3/m/082582781eb91a37f1115c79.png)
计算机与信息工程学院设计性实验报告一、实验目的1.学习外部中断技术的基本使用方法。
2.学习中断处理程序的编程方法。
二、实验仪器或设备CPU挂箱、AT89S51CPU模块三、总体设计(设计原理、设计方案及流程等)P1.4~P1.7接键盘的列,P1.0~P1.3接键盘的行。
通过扫描键盘确定是否有键按下,如有则确定键值,并在CPU模块的数码管上显示(高位为行号,低位为列号)。
本实验中断处理程序的应用,最主要的地方是如何保护进入中断前的状态,使得中断程序执行完毕后能回到交通灯中断前的状态。
要保护的地方,除了累加器ACC、标志寄存器PSW外,还要注意:一是主程序中的延时程序和中断处理程序中的延时程序不能混用,本实验给出的程序中,主程序延时用的是R5、R6、R7,中断延时用的是R3、R4和新的R5。
第二,主程序中每执行一步经74LS273的端口输出数据的操作时,应先将所输出的数据保存到一个单元中。
因为进入中断程序后也要执行往74LS273端口输出数据的操作,中断返回时如果没有恢复中断前74LS273端口锁存器的数据,则显示往往出错,回不到中断前的状态。
还要注意一点,主程序中往端口输出数据操作要先保存再输出,例如有如下操作:MOV A,#0F0H (0)MOVX @R1,A (1)MOV SAVE,A (2)程序如果正好执行到(1)时发生中断,则转入中断程序,假设中断程序返回主程序前需要执行一句MOV A,SAVE指令,由于主程序中没有执行(2),故SAVE中的内容实际上是前一次放入的而不是(0)语句中给出的0F0H,显示出错,将(1)、(2)两句顺序颠倒一下则没有问题。
发生中断时两方向的红灯一起亮10秒,然后返回中断前的状态。
实验原理图流程图1主程序框图中断程序框图四、实验步骤(包括主要步骤、代码分析等)1.244/273PORT单元的的O0~O7接发光二极管L1~L8;2.74LS273的片选CS273接片选信号CS2,此时74LS273的片选地址为CFB0H~CFB7H之间任选;3.单脉冲输出端P-接CPU板上的INT0。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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 口)。