实验五 定时中断及数码管显示实验(3课时)20140506

合集下载

实验五 定时器

实验五 定时器

附件2 C51源程序
#include<reg51.h> main() {int i,a; void DEALY(); while(1) { P1=0XFD; DEALY(); P1=0XFF; DEALY(); a=0xFB; for(i=1;i<=6;i++) { P1=a; DEALY(); a<<=1; } } } void DEALY() { int x,y; for(x=1;x<8000;x++) for(y=1;y<=8000;y++); }
5
9
0
4
9
9
2
3
5
9
0
5
0
0
2
3
5
9
0
5
0
0
……
……
2
3
5
9
5
9
0
0
2
3
5
9
5
9
0
1
……
2ቤተ መጻሕፍቲ ባይዱ
3
5
9
5
9
9
9
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
……
0
0
0
0
0
0
9
9
0
0
0
0
0
1
0
0
0
0
0
0
0
1
0
1
……
0
0
0
0
0
1

定时器中断实验报告

定时器中断实验报告

实验三运用定时中断方法控制P1口亮灯实验报告一、实验目的1学习内部定时/计数器的使用2学习定时中断处理程序的编程方法二、实验预备知识1.P1口是准双向口,可以定义为输入,也可以定义为输出2.本实验中延时子程序采用指令循环来实现。

3.延时时间的计算:延时时间=机器周期×指令所需机器周期数×循环次数其中循环次数可以采用多重循环来实现三、实验内容程序如下:一、外部中断选择边沿触发方式控制灯的状态ORG 00HLJMP MAINORG 03HLJMP INTERRUPTORG 30HMAIN: SETB EX0SETB IT0SETB EAMOV A,#00HMOV P1,ASJMP $INTERRUPT: INC AMOV P1,ARETI二、用定时器定时方式控制灯的状态 ORG 0000HLJMP MAINORG 000BHLJMP DISPLAYORG 0030HMAIN:MOV IE,#82HMOV TMOD,#01HMOV P1,#01HMOV TH0,#9EHMOV TL0,#58HMOV R7,#10SETB TR0SJMP$DISPLAY:MOV TH0,#9EHMOV TL0,#58HDJNZ R7,LOOPMOV A,P1RL AMOV P1,AMOV R7,#10LOOP:RETI三、实验心得及体会对于中断的设置用到P3口的第二功能,第一个实验中,我所设置的触发方式为边沿触发,中断输入的管脚应该为P3.2即外部中断0输入,因此给外加脉冲时应该给到P3.2。

第一次因未分清触发所给管脚导致脉冲加入时无反应。

编写中断及初始化程序时,中断地址的开辟要提前在主程序之前给出,以实现执行中断时指针的转移。

做有关定时程序之前要首先弄清楚晶振的大小,以确定一个机器周期的时间,在这次试验中,试验箱所用晶振为6MHZ,一个机器周期的时间为2us,总计数时间可以达到131ms,但是无法满足0.5s的时间要求,所以用R7预置循环次数,显得尤为重要。

数码管动态显示实验报告

数码管动态显示实验报告

数码管动态显示实验报告1.实验目的:本实验旨在通过使用单片机控制数码管的动态显示,了解数码管的原理和使用方法,加深对单片机控制的理解。

2.实验原理:数码管是由许多发光二极管(LED)组成的,每个数码管有7个发光二极管组成7段,再加上一个小数点(或8段数码管),通过控制每个发光二极管的亮灭状态,可以显示出数字、字母等字符。

本实验使用的是共阴极数码管,在通常情况下,数码管引脚为低电平时亮灯,为高电平时灭灯。

3.实验器材:-STC89C52单片机-共阴极数码管-电阻-面包板及连接线-电源4.实验步骤:步骤1:连接电路将数码管的7个引脚分别连接到单片机的7个I/O引脚上,并通过电阻限流。

连接电路后,确认连接无误。

步骤2:编写程序使用C语言编写程序,实现数码管的动态显示。

可以使用延时函数和位操作函数控制数码管的亮灭,通过改变每个数码管引脚的高低电平状态,实现显示不同的数字、字母。

步骤4:实验观察与分析观察数码管的显示效果,通过改变程序中的参数,可以实现不同的显示效果。

5.实验结果与分析:经过实验,我们成功实现了数码管的动态显示。

通过编写程序,我们可以实现数码管显示数字、字母等不同的字符。

调整程序中的参数,可以实现不同的动态显示效果,如流水灯、闪烁等。

数码管的动态显示是通过改变每个数码管引脚的高低电平实现的,通过快速改变引脚电平状态的时间间隔,创建了肉眼无法察觉的视觉效果,从而实现了动态显示。

此外,通过实验我们还了解到了单片机控制数码管的原理和方法,加深了对单片机控制的理解。

6.实验总结:通过本实验,我们了解到了数码管的动态显示原理和方法,并通过编写程序,成功实现了数码管的动态显示。

同时,我们还巩固了单片机控制的知识,提高了自己的动手能力和问题解决能力。

在今后的学习和工作中,我们将进一步掌握数码管的使用方法,并能够将其应用于更加复杂的应用场景中,实现更多有趣的功能。

实验五 中断与定时(计数)器实验(Keil)

实验五  中断与定时(计数)器实验(Keil)

实验五中断与定时/计数器实验一、实验目的1.了解单片机中断与定时器工作原理,掌握中断与定时器程序结构;2.掌握在µVision环境中调试中断与定时器程序的方法。

二、实验仪器和设备Keil软件;THKSCM-2综合实验装置;三、实验原理及实验内容1.示例及相关设置(1)建立一个文件夹:lx51。

(2)利用菜单File的New选项进入编辑界面,输入下面的源文件,以lx51.asm文件名存盘到lx51文件夹中。

ORG 0000HLJMP MAINORG 0003HMOV P2,ARL ARETIORG 0040HMAIN:MOV SP,#5FHMOV A,#0FEHSETB EASETB EX0SETB IT0SJMP $END(3)在lx51文件夹下建立新工程,以文件名lx51存盘(工程的扩展名系统会自动添加)。

(4)在Project菜单的下拉选项中,单击Opt ions for Target ‘Target1’,在弹出的窗口中要完成一下设置:○1单片机芯片选择A T89C51选择完器件,按“确定”后会弹出一个提示信息框,提示“Copy Startup Code to Project Folder and Add File to Project?”,选择“是”。

○2晶振频率设为11.0592MHz。

○3Output标签下的Create HEX File前小框中要打钩。

○4在Debug标签选择Use Simulator(软件模拟)。

(5)在Project菜单的下拉选项中,单击build Target 选项完成汇编,生成目标文件(.HEX)。

按F5运行程序。

(6)在P3窗口的P3.2位单击鼠标(模拟INT0引脚信号),观察P2窗口变化。

(7)修改程序,使之适合字节数大于8的中断服务情况。

(8)利用单片机最小系统板演示该程序的运行情况。

2.示例及相关设置(1)建立一个文件夹:lx52。

(2)利用菜单File的New选项进入编辑界面,输入下面的源文件,以lx52.asm文件名存盘到lx52文件夹中。

--51单片机基础部分实验内容

--51单片机基础部分实验内容
实验仪器及设备
SST 51系列单片机实验板。 Keil C 单片机集成开发环境。 SST系列单片机专用下载程序。
定时器中断实验
实验内容及步骤:
读懂例子程序的基础上,用定时器控制4个LED灯的 点亮时间,并达到用不同速度循环显示的目的.
实验报告要求:
画出程序框图,给出源程序并注释.
思考题:
51单片机基础部分实验内容
实验一: LED显示实验 实验二: LCD显示实验 实验三:定时器中断实验 实验四:KEY实验 实验五:串口通讯实验 实验六:外部中断实验 实验七:AD/DA转换实验 实验八:红外遥控器解码实验 实验九:电子钟综合实验
SST51系列单片机实验板的组成
返回
数码管显示实验
实验目的:
熟悉51单片机的工作原理及组成,根据硬件原理 图,掌握数码管模块显示原理及单片机控制数码 管显示的软件编程方法。
实验仪器及设备
SST 51系列单片机实验板。 Keil C 单片机集成开发环境。 SST系列单片机专用下载程序。
数码管显示实验
实验内容及步骤:
读懂例子程序后,通过改编例子程序达到在数码管模块 上显示不同字符,并能闪烁或左右循环显示的目的.
实验仪器及设备
SST 51系列单片机实验板。 Keil C 单片机集成开发环境。
SST系列单片机专用下载程序。
红外遥控器解码实验
实验内容及步骤:
修改例子程序,正确接收红外遥控器的按键 信息,软件解码后,实时在LED上显示.
实验报告要求:
画出程序框图,给出源程序并注释.
思考题:
如何增强红外接收抗干扰的能力,如何提高 其稳定性?
KEY实验
实验内容及步骤:
读懂例子程序的基础上,用I/O口扩充KEY.达 到按一个KEY,可靠点亮对应LED灯的目的.

定时与中断实验

定时与中断实验

第二十课定时与中断实验二前面我们用定时器和中断做了延时的实验现在再来看一看外部计数和外部中断的实验在实际的工程应用中计数器通常会有两种要求第一种将计数的值显示出来象录音机上的计数器汽车上的里程表等等第二种计数值到一定值后即中断报警如前面提到的生产线上的计数定长定量仪等等接下来我们先来做一个外部计数器的实验要将外部计数的值显示出来最好是用数码管可我们还没有讲到这一部份为了避免把问题复杂化我们用 P1 口的 8 个 LED 来显示计到的数据为了完成这个实验我们需要用到一套附件它的作用就是输出一个宽度为 500mS 的方波这套附件不在我们的实验板上为了节约大家的学习费用我特地做了几套供大家借用各位可以到我这儿来借免费使用不过请各位爱惜哦不要搞坏了有了这套附件就可以完成我们的实验了我们把附件的两根线分别连接到实验板的电源接口和单片机的 15 脚也就是 T1 的输入端实验的程序如下一计数器实验一程序如下ORG 0000H ; AJMP START ; ORG 0030H ;START:MOV SP,#5FH ;MOVTMOD,#40H;定时/计数器 1 作计数用T0 不用全置SETBTR1;启动 T1 开始运行LOOP:MOV A,TL0 ; MOV P1,A ; AJMP LOOP ; END运行这个程序看到了什么随着 LED 的闪烁实验板上的 8 个 LED 也在不断地变化注意观察是不是按二进制 00000000 00000001 00000010 00000011 这样的顺序在变呢对了这就是 TL0 中的数据不过这个实验还看不出什么名堂接着做第二个实验二计数器实验二程序如下ORG 0000H ; AJMP START ; ORG 001BH ;AJMP TIMER1 ;定时器 1 的中断处理ORG 0030H ; START:MOV SP,#5FH ;MOV TMOD,#40H ;定时/计数器 1 作计数用工作方式 1 T0 不用置 0MOVTH1,#0FFH;MOVTL1,#0FAH;预置值每计到 6 个脉冲即为一个事件SETBEA;SETBET1;开总中断和定时器 1 中断允许SETBTR1;启动定时/计数器 1 开始运行AJMP$;TIMER1:PUSH ACC ;78----------------PUSH PSW ;CPL P1.0 ;计数值到即取反 P1.0MOVTH1,#0FFH;MOVTL1,#0FAH;重置计数初值POP PSW ;POP ACC ; RETI ; END这段程序完成的工作其实很简单就是每 6 个计数脉冲到来后取反一次 P1.0 因此实验的结果应当是 15 脚接的 LED 亮灭 6 次则 P1.0 口所接的 LED 就亮或灭一次这就是我们对输入脉冲的计数也就是每 6 个计数产生一次中断这段程序中有一个符号以前没见过需要给大家解释一下 AJMP$$ 我们称为标识符它的作用是指这条指令的开始处在这里其实就是循环执行 AJMP $这条指令执行这么多次干什么实际上它是在等待中断的产生这两个实验需要附件如果您觉得做起来不大方便没关系我们接着来做第三个实验采用两个定时/计数器合用一个作为定时器用一个作为计数器用来实现 P1.1 的延时这可以直接在我们的实验板上完成三两个定时/计数器合用的延时实验采用两个定时/计数器其中 T0 作为定时器用工作方式为方式 1 T1 作为计数器用计数次数为 1000 次 T0 溢出时产生一个间隔为 60mS 的方波也就是让 LED3 各亮灭60mS然后把 P1.2的输出作为 T1 的计数脉冲 T1 计数溢出时满 1000 次取反一次 P1.1 产生一个周期为 2 秒的方波即 LED2 每 2 秒闪烁一次程序如下ORG 0000H ; AJMP MAIN ;ORG 000BH ;定时器 T0 的中断入口AJMP T_0 ;转 T0 中断服务程序 ORG 001BH ;定时器 T1 的中断入口 AJMPT_1 ;转 T1 中断服务程序 ORG 0030H ;MAIN:MOV TMOD,#51H ;T1 为计数器方式 1 T0 为定时器方式 1MOVTH0,#15H;设置 T0 初值MOVTL0,#0A0H;MOV TH1,#0FCH ;设置 T1 初值MOVTL1,#18H;MOVIE,#8AH;允许T0T1 中断SETBTR0;启动定时器 T0SETBTR1;启动定时器 T1LL:SJMP LL ;循环T_0:MOV TH0,#15H ;给 T0 重新赋值MOV TL0,#0A0H ;T_1:MOV TH1,#0FCH ;给 T1 重新赋值MOV TL1,#18H ;CPL P1.1 ;计数到取反 P1.179----------------RETI ; END把程序下载到单片机看到什么 LED3 在不断的闪烁这就是 T0 的作用闪烁的周期是多少请大家计算一下接下来把 P1.2也就是 3 脚和 P3.5也就是 T1的输入端相连接是不是接在P1.1 上的 LED2 每 2 秒闪烁一次对了这就是 T1 作计数器的结果在这段程序里有一点请大家注意第四条—AJMP T_0,为什么要在 T 和 0 之间加上一条横线而不直接用 T0 呢原来在 MCS—51 系列单片机中是不能用 T0 T1 INT RET IP PSW 等等内部名称作为标号的如果这样做的话编译软件会出错这点我们好象很早以前曾经提到过接下来我们再来做一个外部中断的实验四外部中断实验程序如下ORG 0000H ; AJMP START ;ORG 0003H ;外部中断 0 地址入口AJMP INTO ; ORG 30H ;START: MOV SP,#5FH ;MOVP1,#0FFH;灯全灭MOVP3,#0FFH;P3 口置高电平SETBEA;SETBEX0;AJMP $ ;INTO:PUSH ACC ; PUSH PSW ; CPL P1.0 ;POPPSW;POPACC;RETI ;END本程序的功能就是按一次按键 S1接在 P3.2 引脚上的就引发一次外部中断INT0=0取反一次 P1.0 因此理论上按一下灯亮再按一下灯灭有点象我们工程应用中的自锁开关不过这段程序在实际的实验中可能会发觉有时不很灵按了它没反应但在大部份时候还是对的这是怎么回事呢其实这是因为按键没有作去抖动处理也就是说理论上我们是按了一次键但由于计算机的处理速度很快计算机实际上却认为已经按了好多次了如何来解决这个问题呢这就需要我们对按键作去抖动处理什么是按键的去抖动处理我们下一课讨论键盘接口时再作详细解释五本课总结通过这两节课的实验我们对定时/计数器和中断的使用方法已经有了一个基本的了解希望大家继续多做实验本来嘛学会单片机靠的就是不断的实践和总结80----------------第二十一课键盘接口与编程一键盘接口和数码管接口是构成单片机人机界面的主要方法对于一个初学者来说这部分的内容也是较难的我们将用四节课的时间来学习这方面的知识这一课先来讨论键盘的接口原理与编程方法键盘是单片机应用系统不可缺少的重要输入设备主要负责向计算机传递信息我们可以通过键盘向计算机输入各种指令地址和数据它一般由若干个按键组合成开关矩阵按照其接线方式的不同可分为两种一种是独立式接法一种是矩阵式接法如下面的图这一课先来讲解独立式键盘的工作原理和编程方法一独立式键盘的工作原理和编程方法独立式键盘具有结构简单使用灵活等特点因此被广泛应用于单片机系统中那么它是如何来工作的呢我们慢慢往下看1 独立式键盘的接线原理独立式键盘是由若干个机械触点开关构成的把它与单片机的 I/O 口线连起来通过读 I/O 口的电平状态即可识别出相应的按键是否被按下下面的左图就是我们实验板的按键连接图如果按键不被按下其端口就为高电平如果相应的按键被按下则端口就变为低电平在这种键盘的连接方法中我们通常采用下拉电平接法即各按键开关一端接低电平另一端接单片机 I/O口线如上左图所示这是为了保证在按键断开时各 I/O 口线有确定的高电平通常我们用来做键盘的按键有触点式和非触点式两种单片机中应用的一般是由机械触点构成的触点式微动开关这种开关具有结构简单使用可靠的优点但当我们按下按键或释放按键的时候它有一个特点就是会产生抖动看上图的按键脉冲波形这种抖动对于人来说是感觉不到的但对单片机来说则是完全可以感应到的因为单片机处理的速度是在微秒级的而机械抖动的时间至少是毫秒级对计算机而言这已是一个很漫长的过程了下面我们通过一个实验来验证一下实验程序如下ORG 0000H ; AJMP START ; ORG 0030H ; START:MOV SP,5FH ;81----------------MOVP1,#0FFH;MOVP3,#0FFH;L1:JNB P3.4,L2 ;按下按键开关取反一次 P1.0灯亮再按一下灯灭JNB P3.5,L3 ;按下按键开关取反一次 P1.1灯亮再按一下灯灭LJMPL1;L2:CPLP1.0;LJMPL1;L3:CPLP1.1;LJMPL1;END把这个程序下载到单片机我们会发现当按下相应的按键时灯并不是想象中的按一下亮再按一下就灭而是有时灵有时不灵为什么会这样呢原来当你按了一次按键可是单片机却早已执行了好多次如果执行的次数正好是奇数次那么结果正如你所料如果执行的次数是偶数次那结果就不对了为了使 CPU 能正确地读出端口的状态对每一次按键只作一次响应就必须考虑如何去除按键的抖动2 按键的去抖动原则和方法常用的去抖动的方法有两种硬件方法和软件方法硬件去抖动的方法很多好多书都有介绍这不在我们的讨论范围单片机中常用软件去抖动法软件法其实也很简单就是在单片机获得端口为低电平的信息后不是立即认定按键已被按下而是延时10 毫秒或更长一些时间后再次检测该端口如果仍为低说明此键的确被按下了这实际上是避开了按键按下时的抖动时间而在检测到按键释放后端口为高电平时再延时 5-10 毫秒消除后沿的抖动然后再对按键进行处理不过一般情况下我们通常不对按键释放的后沿进行处理实践证明也能满足通常的要求下面我们把前面的程序改一下看看按键的去抖动是如何实现的看下面的程序ORG 0000H ; AJMP START ; ORG 0030H ; START:MOV SP,#5FH ; MOVP1,#0FFH ; MOV P3,#0FFH ;L1:JB P3.4,L2 ;P3.4 为 1不做处理转 P3.5 否则说明有键按下LCALL D10mS ; 调用延时程序去除抖动JB P3.4,L1 ; P3.4 为 0说明此键确实被按下了CPL P1.0 ;取反 P1.0L3:JNB P3.4,L3 ;直到 P3.4 释放后转去判断第二个键L2:JB P3.5,L1 ;P3.5 为 1返回去继续处理 P3.4 否则说明有键按下LCALL D10mS ; 调用延时程序去除抖动JB P3.5,L2 ; P3.5 为 0说明此键确实被按下了CPL P1.1 ; 取反 P1.1L4:JNBP3.5,L4;直到 P3.5 释放为止LJMPL1;返回D10mS:MOV R7,#50 ;延时的时间一般为 5-20mSD1:MOV R6,#100 ; D2:DJNZ R6,D2 ; DJNZ R7,D1 ;82----------------RET ; END把这段程序写入单片机试试看是不是行了这就是独立式按键去抖动的基本方法不过这个程序在实际应用中并没有多大的意义因为如果按键数量比较多的话程序就会变得很长为什么会这样呢因为这里我们采用了直接寻址的方式如果我们把键值放入一个表格中再通过查表程序来判断到底是哪个按键被按下了再去处理相应的程序就会很简单想想看该怎么做二独立式键盘的编程方法我们刚才的程序演示了按键的去抖动原理和基本方法接下来让我们做一个按键使用的实验来验证一下大家看附图的电路图我们的实验板上有 4 个按键分别接到了 P3 口的 P3.2,P3.3,P3.4,P3.5 引脚上现在我们用 P3.2,P3.3,P3.4 和 P3.5 这四个按键来做一个实验实验之前先定义各个按键的功能实验程序如下按此键则灯开始流动(由左向右)按此键则停止流动所有灯为灭按此键则灯反向流动由右向左按此键则灯正向流动由左向右UpDown EQU 00H ; 上下行标志StartEndEQU01H;起动及停止标志LampCodeEQU21H;存放流动的数据代码ORG 0000H ;AJMP MAIN ; ORG 30H ; MAIN:MOV SP,#5FH ;MOVP1,#0FFH;CLRUpDown;启动时处于向上的状态CLRStartEnd;启动时处于停止状态MOV LampCode,#0FEH;单灯流动的代码LOOP:ACALL KEY ;调用键盘程序JNB F0,LNEXT ;如果无键按下则继续 ACALL KEYPROC ;否则调用键盘处理程序LNEXT:ACALL LAMP ;调用灯显示程序AJMP LOOP ;反复循环主程序到此结束DELAY:MOV R7,#100 ; D1:MOV R6,#100 ;DJNZR6,$;DJNZR7,D1;RET ;延时程序键盘处理中调用KEYPROC:MOV A,B ;从 B 寄存器中获取键值JB ACC.2,KeyStart ;分析键的代码某位被按下则该位为”1”在键盘程序中已取反JB ACC.3,KeyOver ;JBACC.4,KeyUp;JBACC.5,KeyDown;AJMP KEY_RET ;KeyStart:SETB StartEnd ;第一个键按下后的处理AJMP KEY_RET ;83----------------KeyOver:CLR StartEnd;第二个键按下后的处理AJMP KEY_RET ;KeyUp:SETB UpDown ;第三个键按下后的处理AJMP KEY_RET ;KeyDown:CLRUpDown;第四个键按下后的处理KEY_RET:RET;KEY:CLR F0 ;清 F0 表示无键按下ORLP3,#01111000B;将 P3 口接有四个键的位置1JZ K_RET ;如果为 0 则无键按下ACALL DELAY ;否则延时去键抖ORLP3,#01111000B;MOVA,P3;ORLA,#10000111B;CPLA;JZ K_RET;MOV B,A;确实有键按下将键值存入 B 中SETB F0 ;设置有键按下的标志K_RET:ORL P3,#01111000B ;此处循环等待键的释放MOVA,P3;ORLA,#10000111B;CPLA;JZ K_RET1 ;直到读取的数据取反后为”0”说明键释放了才从键盘处理程序返回AJMP K_RET ;K_RET1:RET ;D500mS: ;流水灯的延迟时间PUSHPSW;SETBRS0;MOV R7,#200 ;D51:MOV R6,#250 ; D52:NOPNOPNOPNOPDJNZR6,D52;DJNZR7,D51;POP PSW ;RET ;LAMP:JB StartEnd,LampStart ;如果 StartEnd=1 则启动MOV P1,#0FFH;AJMP LAMPRET;否则关闭所有显示返回LampStart:JB UpDown,LAMPUP ;如果 UpDown=1 则向上流动MOV A,LAMPCODE ;84 单片机学习中心,为您免费发布大量的学习资源以及商业代码RL A ;实际就是左移位MOVLAMPCODE,A;MOVP1,A;LCALL D500mS ;AJMP LAMPRET ; LAMPUP:MOV A,LAMPCODE ;RR A ;向下流动实际就是右移MOVLAMPCODE,A;MOVP1,A;LCALL D500mS ;LAMPRET:RET ; END这段程序是我们到目前为止最长的程序相信大多数指令大家应该能看懂开始三条 UpDown EQU00H StartEnd EQU 01H LampCode EQU 21H 给大家解释一下 EQU 叫做等值伪指令它的功能是将一个常数或者特定的符号赋予规定的字符串什么意思呢举个例子ORG 200HABC EQU R6MOV A ABC这里将 ABC 等值为寄存器 R6 也就是说在指令中 R6 这个寄存器可以用字符串 ABC 来代替为什么要这样写呢当然是为了增加程序的可读性不过有一点大家要记住了这里使用的字符串不是标号不能用来做分隔符比如这样写 ABC:EQU R6 如果加上汇编程序会出错当然用 EQU指令除了可以赋值数据和地址外还可以赋值直接地址或者直接当作一个立即数来使用例如ABC EQU 10HDELAY EQU 05AFHMOV A ABCLCALL DELAY这里 ABC 赋值以后被当作了直接地址使用而 DELAY 被赋值以后则成了一个16 位的地址如此一来上面的三条指令也就很清楚了这里有一个问题大家需注意使用 EQU 伪指令必须先赋值后使用所以一般的程序都把赋值指令放在程序的开头部分既然讲到了赋值伪指令我们再讲一下另外三条赋值伪指令.A 位地址定义伪指令 BIT它的功能是将一个可直接寻址的位地址赋予所规定的字符名称例如ABC BIT P1.0 把 P1.0 赋值给 ABC 即字符串 ABC 就是直接寻址位 P1.0这里注意与 EQU 不同的是这条指令只能对位地址赋值而不能对寄存器或直接地址和立即数赋值相反 EQU 指令却可以用来定义位地址变量不过这时所赋的值应当是具体的位地址值比如 P1.0 要用 90H 来代替 P2.0 要用 AOH 来代替等等B 内部 RAM 定义伪指令 DATA它的功能是给一个 8 位的内部 RAM 起一个名称例如ABC DATA 20H 把内部 RAM 的 20H 定义为 ABCC 外部 RAM 定义伪指令 XDADT给一个 8 位的外部 RAM 起一个名称例如ABC XDATA 0ACH 由于 89C51 的内部 RAM 寻址范围为 00H-FFH 所以这个地址必然大于 FFH讲了赋值伪指令再回到上面的按键处理程序这段程序的功能虽然很简单但它演示了一个键盘处理程序的基本思路程序本身很简单也不很实用实际工作中还会有好多要考虑的因素比如主循环每次都调用了灯的循环程序会造成按键反应迟钝而如果一直按着键不放则灯不会再流动85----------------一直要到松开手为止大家可以仔细考虑一下这些问题想想有什么好的解决办法独立式键盘除了上面介绍的这种连接方法我们还可以采用上图右边所示的连接方法用一个与非门把四个输入端连接起来当有任何一个按键按下时都会使与非门输出为低电平从而引起单片机的中断它的好处是不用在主程序中不断地循环查询了如果有键按下单片机就去作相应的处这一课通过两个实验讲解了独立式键盘的工作原理和基本的去抖动方法由于键盘的实际使用是千差万别的所以工程中您还得根据实际情况灵活应用这里只能给大家一个基本的认识四第 21 课习题1什么是键盘的去抖动问题为什么要对键盘进行去抖动处理2找一个硬件的去抖动电路并自行分析其工作原理。

实验五_外部中断控制数码管显示实验

实验五_外部中断控制数码管显示实验

实验五、外部中断控制数码管显示实验一、实验目的(1)掌握80C51扩展显示、外部中断的硬件设计和编程方法。

二、实验内容按键每按下一次,数码管循环显示0-9字符。

三、实验接线图图4-1 独立按键电路图4-2 数码块显示电路图4-3 实验接线图1、程序流程图图2-4 主程序流程图 图2-5 中断服务程序流程图2、源程序#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intsbit P32=P3^2;uchar led_c[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90 };void delay(uint N) //N=500,延时1s ;N=5,延时10ms{uint i;while(N--) for(i=0;i<100;i++) _nop_();}void int0_s(void) interrupt 0{ uchar i; P2=0xfe;for(i=0;i<10;i++){P0=led_c[i]; delay(500); P0=0xff;} }void main(void){ SP=0x40; P0=0xff;IT0=1; EA=1; EX0=1;while(1); }1、P0口接数码显示模块的P17,P2.0接数码显示模块的P16的Q4B,独立键盘模块的P12引脚之一接P3.2;2、用keil编辑、编译程序,生成hex文件;3、用STC-ISP软件下载hex文件;4、观察程序运行时数码块显示情况。

六、实验结果七、思考题1、调整接线,并修改程序,使接收到外部中断后数码管显示00-99数字。

2、利用外部中断,控制音乐的播放。

实现中断功能_实验报告(3篇)

实现中断功能_实验报告(3篇)

第1篇一、实验目的1. 理解中断的概念和作用。

2. 掌握单片机中断系统的基本原理和配置方法。

3. 学会编写中断服务程序,实现外部中断和定时器中断的应用。

4. 通过实验加深对中断系统在实际应用中的理解。

二、实验原理中断是计算机系统中一种重要的机制,它允许CPU在执行程序过程中,响应某些外部或内部事件,从而暂停当前程序的执行,转而处理这些事件。

单片机的中断系统主要包括外部中断和定时器中断两种类型。

三、实验环境1. 单片机:80C512. 开发环境:Keil for 80513. 仿真软件:Proteus4. 实验电路:外部按钮电路、LED灯电路、定时器电路四、实验内容1. 外部中断实验(1)实验目的:学习外部中断的工作原理,掌握外部中断的配置和编程方法。

(2)实验步骤:a. 创建80C51固件项目,并在Keil中编写程序。

b. 配置外部中断源,设置中断优先级。

c. 编写外部中断服务程序,实现LED灯的闪烁。

d. 在Proteus中搭建实验电路,并进行仿真测试。

(3)实验结果:当按下按钮时,LED灯闪烁,松开按钮后LED灯熄灭。

2. 定时器中断实验(1)实验目的:学习定时器中断的工作原理,掌握定时器中断的配置和编程方法。

(2)实验步骤:a. 创建80C51固件项目,并在Keil中编写程序。

b. 配置定时器工作模式,设置定时时间。

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

d. 在Proteus中搭建实验电路,并进行仿真测试。

(3)实验结果:定时器中断触发后,LED灯闪烁,达到设定时间后停止闪烁。

五、实验分析1. 外部中断实验分析通过外部中断实验,我们了解了外部中断的工作原理和配置方法。

在实验中,我们设置了外部中断源,并编写了中断服务程序,实现了LED灯的闪烁。

这表明外部中断可以有效地响应外部事件,并执行相应的操作。

2. 定时器中断实验分析通过定时器中断实验,我们掌握了定时器中断的配置和编程方法。

单片机定时器中断实验内容

单片机定时器中断实验内容

定时器中断实验内容:(第6章中断系统.doc和第7章定时器、计数器.doc)1.基础实验5(定时器输出PWM)2.定时器中断函数实验:要求:每一次按键(查询方式),同时要求改变LED1~LED8循环点亮(定时中断)的方式。

1)初始状态或按下KEY1键(松开后保持),只点亮一只LED灯,每隔1秒(定时)右循环显示(中断),移到LED8后回到LED1。

LED1LED8…………………………LED1LED82)按下KEY2键(松开后保持),同时点亮相邻的两只LED灯,每隔1秒(定时)右循环显示(中断),移到LED8后回到LED1。

LED1LED83)按下KEY3键(松开后保持),同时点亮间隔的两只LED灯,每隔1秒(定时)右循环显示(中断),移到LED8后回到LED1。

LED1LED84)按下KEY键(松开后保持),点亮一只LED灯,每隔1秒(定时)多点亮一只LED灯(中断),直到LED灯全亮,然后回到一只LED点亮状态循环。

LED1LED8LED1LED8…………………………LED1LED85)按下KEY键(松开后保持),同时点亮相邻的两只LED灯,隔1秒(定时)后再次增加点亮相邻的两只LED灯,直到全亮后再隔1秒点亮123456,后又1234,直到全灭后重新循环。

LED1LED8LED1LED8…………………………LED1LED8…………………………LED1LED86)按下KEY键(松开后保持),开始点亮LED1灯,隔1秒(定时)后点亮23,再隔1秒点亮345,隔1秒后5678,隔1秒后8,隔1秒后76 ,隔1秒后654,隔1秒后4321,隔1秒后1重复。

LED1LED8LED1LED8LED1LED8…………………………LED1LED87)按下KEY键(松开后保持),开始点亮LED1、LED8灯,隔1秒(定时)后点亮12、78,再隔1秒点亮123、678,直到全亮后再隔1秒点亮123、678,后又12、78,直到点亮LED1、LED8灯后重新循环。

定时器中断实验说明

定时器中断实验说明

#include "xparameters.h" #include "xscutimer.h" #include "xscugic.h" #include "xil_exception.h" #include "xil_printf.h" #include "xgpio.h"
/************************** Constant Definitions *************************/
二.Vivado 操作说明
2.1 特殊操作步骤说明
图 2-1 导入 PS 部分设置 该步骤需要根据硬件平台数据手册或者用户手册导入正确的 PS 部分设置文件,否则 SDK 中会出现找不到 ARM 的错误。
三.源代码说明
3.1 头文件说明
Seg7_Dynamic_Display.h 文件源代码 /************************************************************************** ***/ /** * @file SEG7_DYNAMIC_DISPLAY.h * * 该文件包含定时器中断刷新显示项目所包含的库文件、宏定义、常数、全局变量、函数定义 * * <pre> * MODIFICATION HISTORY: * * Ver Who Date Changes * ----- ---- -------- -----------------------------------------------------* 1.0 lj 07/28/06 创建该文件
定时器中断实验说明文档
一. 背景知识说明

定时计数器中断实验

定时计数器中断实验

定时/计数器中断实验实验一:定时实验。

P0口发光管交*闪亮(闪亮速率由定时器定时并通过中断实现)。

分析:主程序只需做好初始化的工作即可,在周期性执行的中断子程序里改变P0口的发光管状态,实现交*闪亮。

;***********************************************************Org 0000HLjmp mainOrg 000BHLjmp T0_int;主程序Org 0030HMain: Mov tmod,#00000001B ;选用T0,定时,方式1Setb et0 ;开T0单级中断Setb ea ;开总中断Setb tr0 ;启动T0Mov p0,#01010101B ;P0口发光管交*亮NextStep: sjmp NextStep ;此处代表主程序去忙其它事了。

;定时器中断子程序T0_int: mov a,p0 ;读入P0口内容Cpl a ;将各位取反Mov p0,a ;再送回P0口,实现交*点亮RetiEnd;思考题:;1)。

此实验发光管闪亮间隔约为65.5ms,若定闪亮间隔为30ms,应怎样修改?;2)。

若想实现长延时,如1S、10S、1分、1小时等,应如何编程?;参考定时器中断子程序(1S)T0_int: Mov th0,#3chMov tl0,#0b0h ;预置常数15536,实现50ms定时Inc r7Cjne r7,#20,T0_end ;不够1秒退出Mov r7,#0 ;够1秒将r7清0,为下一秒做准备Mov a,p0 ;读入P0口内容Cpl a ;将各位取反Mov p0,a ;再送回P0口,实现交*点亮T0_end: RetiEnd;**************************************************************** 2.定时/计数器中断实验2实验二:计数实验T0的计数脚P3.4接有一开关模拟计数输入,单片机应随时将输入情况通过P0口显示出来,当输入满100个数时,单片机声音提示。

C51单片机定时器及数码管控制实验报告

C51单片机定时器及数码管控制实验报告

昆明理工大学信息工程与自动化学院学生实验报告( 201 —201学年第1 学期)课程名称:单片机技术开课实验室: 年月日一、实验目的1. 掌握定时器 T0、T1 的方式选择与编程方法,了解中断服务程序的设计方法, 学会实时程序的调试技巧。

2. 掌握 LED 数码管动态显示程序设计方法。

二、实验原理1.89C51 单片机有五个中断源(89C52 有六个),分别就是外部中断请求 0、外部中断请求 1、定时器/计数器 0 溢出中断请求、定时器/计数器 0 溢出中断请求及串行口中断请求。

每个中断源都对应一个中断请求位,它们设置在特殊功能寄存器 TCON 与 SCON 中。

当中断源请求中断时,相应标志分别由 TCON 与SCON 的相应位来锁寄。

五个中断源有二个中断优先级,每个中断源可以编程为高优先级或低优先级中断,可以实现二级中断服务程序嵌套。

在同一优先级别中,靠内部的查询逻辑来确定响应顺序。

不同的中断源有不同的中断矢量地址。

中断的控制用四个特殊功能寄存器 IE、IP、TCON (用六位)与 SCON(用二位), 分别用于控制中断的类型、中断的开/关与各种中断源的优先级别。

中断程序由中断控制程序(主程序)与中断服务程序两部分组成:1)中断控制程序用于实现对中断的控制;2)中断服务程序用于完成中断源所要求的中断处理的各种操作。

C51 的中断函数必须通过 interrupt m 进行修饰。

在 C51 程序设计中,当函数定义时用了 interrupt m 修饰符,系统编译时把对应函数转化为中断函数,自动加上程序头段与尾段,并按 MCS-51 系统中断的处理方式自动把它安排在程序存储器中的相应位置。

在该修饰符中,m 的取值为 0~31,对应的中断情况如下:0——外部中断 01——定时/计数器 T02——外部中断 13——定时/计数器 T14——串行口中断5——定时/计数器 T2其它值预留。

89C51 单片机内设置了两个可编程的 16 位定时器 T0 与 T1,通过编程,可以设定为定时器与外部计数方式。

中断按时蜂鸣器实验

中断按时蜂鸣器实验

中断按时蜂鸣器实验一.实验目的1.把握ARM2131开发环境ADS,熟悉开发环境的经常使用工具和相应功能。

2.学习成立ADS的工程文件、编译连接设置、调试操作等。

3.学习对中断向量VTC、GPIO口的设置。

4.学习按时器中断的应用二.实验设备PC兼容机一台,操作系统WINDOWS 2000,安装(ARM Developer Suite 的成熟版本)三.实验原理随着信息技术技术的飞速进展,ARM技术方案架构作为一种具有低功耗、高性能、和小体积等特性的32位嵌入式微处置器,取得了众多的知识产权授权用户,其中包括世界顶级的半导体和系统公司。

目前已被普遍的用于各类电子产品,汽车、消费娱乐、影像、工业操纵、海量存储、网络、安保和无线等领域。

被业界人士以为,基于ARM的技术方案是最具市场前景和市场优势的解决方案。

LPC2131Philips LPC2131 是基于ARM7TDMI-S 的高性能32 位RISC 微操纵器,它一方面具有ARM 处置器的所有优势:低功耗、高性能;同时又具有较为丰硕的片上资源,超级适合嵌入式产品的开发。

其特点如下:·集成了Thumb 扩展指令集。

·32KB可在系统中编程(ISP)的片内Flash和可在应用中编程(IAP)的8KB RAM,具有向量中断控制器。

·2个UART,2个I2C 串行接口,2 个SPI串行接口,2 个按时器(7 个捕捉/ 比较通道),PWM单元可提供多达6个PWM输出,8通道10位ADC,实不时钟RTC,看门狗按时器WDT,48 个通用I/O 引脚。

·CPU时钟高达60MHz,具有片内晶体振荡器和片内PLL。

GPIO:(General Purpose Input Output)GPIO是用来进行输入输出的,那么确信有寄放器进行操纵。

关于输入的话,能够通过读取寄放器来确信引脚的高电平仍是低电平;关于输出的话,能够通过写某个寄放器来让那个引脚输出高低电平.GPxCON,GPACON每一名对应着一根引脚(23根)0:代表输出;1:相应的引脚为地址线或用于地址操纵关于PORT B-PORT J的话,GPxCON中每两位操纵一根引脚00:输入;01:输出;10:特殊功能;11:保留。

C单片机定时器及数码管控制实验报告

C单片机定时器及数码管控制实验报告

C单片机定时器及数码管控制实验报告一、实验目的:1.理解单片机的定时器的工作原理和使用方法;2.掌握单片机控制数码管显示的方法;3.综合运用单片机定时器和数码管控制来实现对时间的计时功能。

二、实验器材:1.STC89C52单片机开发板;2.4位数码管;3.相关电源电缆;4.相关串口连接线;5.PC机。

三、实验原理:1.定时器的工作原理:定时器是单片机中的一个重要模块,它可以用来产生一定时间间隔的定时中断。

在STC89C52单片机中,有两个可编程定时器,分别是Timer0和Timer1、定时器的工作方式有两种:定时器工作模式和计数器工作模式。

通过设定定时器的工作模式、预分频系数以及计数初值,可以实现定时中断。

2.数码管的控制原理:数码管是一种常见的数码显示器材,一般由多个LED组成,通过对LED的开关控制来实现不同数字的显示。

使用单片机控制数码管可以实现数字的动态显示。

通常使用行扫描和列驱动两种方法来控制数码管的显示。

在本实验中,我们使用列驱动的方法来控制数码管的显示。

3.单片机定时器和数码管控制实验的原理流程:(1)初始化定时器设置,包括设定工作模式、预分频系数和计数初值。

(2)初始化数码管连接引脚,并将引脚置为输出状态。

(3)在定时器中断中,通过改变数码管显示的值来实现时间的动态显示。

四、实验步骤:1.硬件连线将STC89C52单片机开发板上的P0口连接到4位数码管的输入口,共7根线。

其中6根线对应4位数码管的6个段输入,另外1根线连接到4位数码管的控制端,用于控制数码管的选通位。

2.软件编程(1)定义头文件和端口变量#include <reg52.h>#define uint unsigned int#define uchar unsigned charsbit DIG1=P0^0; // 数码管第1位sbit DIG2=P0^1; // 数码管第2位sbit DIG3=P0^2; // 数码管第3位sbit DIG4=P0^3; // 数码管第4位sbit DULA=P0^4; // 数码管段选sbit WELA=P0^5; // 数码管位选uchar code ledData[16]={ // 共阳数码管动态显示数值表,共16个字符0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};(2)初始化函数void Init_Timer0(void) // 初始化定时器0TMOD,=0x01;//设定为定时器模式,工作模式1TH0=0xfc; // 给定初值,定时1msTL0=0x18;ET0=1;//打开定时器0中断TR0=1;//启动定时器0void Init_Timer1(void) // 初始化定时器1TMOD,=0x10;//设定为定时器模式,工作模式1TH1=0xf8; // 给定初值,定时10msTL1=0xcc;ET1=1;//打开定时器1中断TR1=1;//启动定时器1(3)定时器中断函数void Timer0Interrupt( interrupt 1 // 计时定时器中断函数static uchar count=0;TH0=0xfc;TL0=0x18;count++;if(count>=1000) // 1秒到count=0;LED_Place=0; // 置位数码管位置Digit_Index++; // 下一个要显示的数字if(Digit_Index>=8)Digit_Index=0;}if(LED_Place==1) // 第2位数码管LEDX=ledData[N%10];DIG2=0;DIG1=1;//第2位数码管显示}else if(LED_Place==2) // 第3位数码管LEDX=ledData[N/10%10];DIG3=0;DIG2=1;//第3位数码管显示}else if(LED_Place==3) // 第4位数码管LEDX=ledData[N/100%10];DIG4=0;DIG3=1;//第4位数码管显示}else // 第1位数码管LEDX=ledData[N/1000%10];DIG1=0;DIG4=1;//第1位数码管显示}}(4)主函数void mainInit_Timer0(; // 初始化定时器0Init_Timer1(; // 初始化定时器1EA=1;//全局中断使能while(1)//主函数其他处理}五、实验效果:经过上述步骤的硬件连接和软件编程,当单片机开始运行后,数码管将开始显示时间。

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

实验五定时中断及数码管显示实验(3课时)
1.对P1口所接8只发光二极管,编写相应的程序使发光二极管循环点亮。

其中每一个发光二极管亮的时间为0.5S,0.5S的时间要求用定时中断实现。

(已知单片机晶振频率为12 .00MHz)
2.采用定时器设计一分钟倒计时器,通过P1口显示计时状态,每过1S时间8个发光二极管最右边一个亮一次,一分钟时间到时全部8个二极管都亮。

(已知单片机晶振频率为12 .00MHz)
3. 用八段数码管显示自己的生日:年月日各两位。

实验报告
实验五
1. 实验目的和要求
①对P1口所接8只发光二极管,编写相应的程序使发光二极管循环点亮。

其中每一个发光二极管亮的时间为0.5S,0.5S的时间要求用定时中断实现。

(已知单片机晶振频率为
12 .00MHz)
②采用定时器设计一分钟倒计时器,通过P1口显示计时状态,每过1S时间8个发光二极管最右边一个亮一次,一分钟时间到时全部8个二极管都亮。

(已知单片机晶振频率为
12 .00MHz)
③用八段数码管显示自己的生日:年月日各两位。

2. 主要仪器设备
①笔记本电脑
②51单片机
3. 实验内容
①对P1口所接8只发光二极管,编写相应的程序使发光二极管循环点亮。

其中每一个发光二极管亮的时间为0.5S,0.5S的时间要求用定时中断实现。

(已知单片机晶振频率为12 .00MHz)
源程序:
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
char i=100;
uchar temp;
void display()
{
uchar i;
for(i=0;i<8;i++)
{
P1=temp;
}
}
void main()
{
TMOD=0x01;
TH0=0xee;
TL0=0x00;
P1=0x00;
temp=0xfe;
EA=1;
ET0=1;
TR0=1;
while(1)
{
display();
}
}
void T0_int(void) interrupt 1 {
TH0=0xee;
TL0=0x00;
i--;
if(i<=0)
{
temp=temp<<1 | temp>>(8-1);
i=100;
}
}
②采用定时器设计一分钟倒计时器,通过P1口显示计时状态,每过1S时间8个发光二极管最右边一个亮一次,一分钟时间到时全部8个二极管都亮。

(已知单片机晶振频率为12 .00MHz)
源程序:
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
uint t=200;//计时器0初值TH0=0xee;TL0=0x00(记5000次)t=0时计时1s。

uint count;//count=8时全部8个二极管都亮
void main(void)
{
TMOD=0x01;
TH0=0xee;
TL0=0x00;
EA=1;
ET0=1;
TR0=1;
while(1);
}
void T0_int(void) interrupt 1//中断
{
TH0=0xee;
TL0=0x00;
t--;
P1=0xfe;
if(t==0)
{
t=200;
P1=0xff;
count++;
if(count==8)
{
count=0;
P1=0x00;
}
}
}
③用八段数码管显示自己的生日:年月日各两位。

源程序:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit duan_lock=P2^6;
sbit wei_lock=P2^7;
void delay_ms(uint t)
{
uint i;
for(;t>0;t--)
for(i=110;i>0;i--);
}
void display()//display "910917"
{
duan_lock=1;//display 9
P0=0x6f;
duan_lock=0;
P0=0xff;
wei_lock=1;
P0=0xfe;
wei_lock=0;
delay_ms(1);
duan_lock=1;//display 1
P0=0x06;
duan_lock=0;
P0=0xff;
wei_lock=1;
P0=0xfd;
wei_lock=0;
delay_ms(1);
duan_lock=1;//display 0
P0=0x3f;
duan_lock=0;
P0=0xff;
wei_lock=1;
P0=0xfb;
wei_lock=0;
delay_ms(1);
duan_lock=1;//display 9
P0=0x6f;
duan_lock=0;
P0=0xff;
wei_lock=1;
P0=0xf7;
wei_lock=0;
delay_ms(1);
duan_lock=1;//display 1
P0=0x06;
duan_lock=0;
P0=0xff;
wei_lock=1;
P0=0xef;
wei_lock=0;
delay_ms(1);
duan_lock=1;//display 7
P0=0x07;
duan_lock=0;
P0=0xff;
wei_lock=1;
P0=0xdf;
wei_lock=0;
delay_ms(1);
}
void main(void)
{
while(1)
{
display();
}
}
4.心得体会:
本次实验可以说是一次小综合实验,前而题应用了定时中断,有一定的难度,特别第三题,开始由于对硬件结构原理不了解,导致无从下手,最终查阅资料解决了问题。

并且强化了前几次实验的基础。

相关文档
最新文档