单片机实验报告一、实验目的1、学习利用单片机设计简单加减计数,并学会定时/计数器T0/T1的使用。2、学习使用keil和proteus软件。3、熟悉汇编语言并能利用汇编语言编写程序。二、实验思路用T0、T1设计10位以内的按键加减计数:利用T0/T1计数功能实现每次按键的中断,且采用方式2,可以自动重载初值,较为方便。这里不考虑优先级的问题。再分别对T0、T1编写中断处理的程序。要注意的是,加法时,9加1显示0的情况;减法时,0减1显示9的情况。三、实验原理(以下不考虑T2的情况)1、中断的概念CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生);CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务);待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断。2、定时/计数器(1)中断控制寄存器(TCON)TCON的高4位用于控制定时/计数器的启动和中断申请。其格式如下:TF1(TCON.7):T1溢出中断请求标志位。T1计数溢出时由硬件自动置TF1为1。CPU响应中断后TF1由硬件自动清0。T1工作时,CPU可随时查询TF1的状态。所以,TF1可用作查询测试的标志。TF1也可以用软件置1或清0,同硬件置1或清0的效果一样。TR1(TCON.6):T1运行控制位。TR1置1时,T1开始工作;TR1置0时,T1停止工作。TR1由软件置1或清0。所以,用软件可控制定时/计数器的启动与停止。TF0(TCON.5):T0溢出中断请求标志位,其功能与TF1类同。TR0(TCON.4):T0运行控制位,其功能与TR1类同。本次试验要用到T0、T1,即TR0、TR1置1。(2)中断允许控制(IE)EX0(IE.0),外部中断0允许位;ET0(IE.1),定时/计数器T0中断允许位;EX1(IE.2),外部中断1允许位;ET1(IE.3),定时/计数器T1中断允许位;ES(IE.4),串行口中断允许位;EA(IE.7),CPU中断允许(总允许)位。以上都是为1时开启,为0时关闭。本次试验需要开启EA、ET1、ET0,即令IE为8AH。(3)工作方式寄存器TMODGATE:门控位。GATE=0时,只要用软件使TCON中的TR0或TR1为1,就可以启动定时/计数器工作;GATA=1时,要用软件使TR0或TR1为1,同时外部中断引脚或也为高电平时,才能启动定时/计数器工作。C/T:定时/计数模式选择位。C/T=0为定时模式;C/T=1为计数模式。M1M0:工作方式设置位。定时/计数器有四种工作方式,由M1M0进行设置。这次试验需要计数模式且为方式二,所以,TMOD值设为66H。3、数码管在这里我们使用的是7SEG-COM-AN-GRN数码管,由7个发光管组成的8字形构成的,如下图所示,左边接线顺序下来分别命名为ABCDEFG数码管的接线为共阳接法,即低电平亮,高电平灭。实验中用P0.0-P0.6控制数码管的7段,P0口的八位与发光管的对应关系见下表所示。显示P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.0HEX——GFEDCBA00100000040H10111100179H20010010024H30011000030H40001100119H50001001012H60000001002H70111100078H80000000000H90001100018H四、设计流程NYYNYN(a)主程序(b)中断响应五、原理图存数寄存器初始化中断初始化开始数码管显示示等待中断示按键扫描R0置0是否为加法R0是否为9R0是否为0R0加1R0加1R0减1中断返回运行后,初始如上图所示,当按一下第一个键时,数码管显示1,此后每按一次数码管显示数值加1,当数码管显示为9时,按下第一个键,显示为0;初始状态下,当按下第二个键时,数码管显示9,此后每按一次第二个键,数码管显示数值减1。说明实验成功六、汇编程序ORG0000HJMPMAINORG000BH//T0(加法)中断入口JMPT0_ADDORG001BH//T1(减法)中断入口JMPT1_SUBMAIN://主程序MOVTMOD,#66H//设置T1、T0方式2计数MOVTL1,#0FFH//为T1、T0设置初值MOVTH1,#0FFHMOVTL0,#0FFHMOVTH0,#0FFHMOVIE,#8AH//CPU、T0、T1开启中断SETBTR1//启动T1计数器SETBTR0//启动T0计数器MOVR0,#0//设置显示的初始值及其地址MOVDPTR,#TABLOOP:MOVA,R0//输出显示数值MOVCA,@A+DPTRMOVP0,ASJMPLOOP//等待中断T0_ADD:CJNER0,#9,T_END0//是否需要进位MOVR0,#0RETIT1_SUB:CJNER0,#0,T_END1//是否需要借位MOVR0,#9RETIT_END0:INCR0//加1RETIT_END1:DECR0//减1RETITAB://选择0-9的输出DB0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x18END七、小结这次实验中,我进一步加深了对单片机及其应用的了解。通过查找资料和老师的帮助,进一步熟练了对keil和proteus软件的操作。在编写程序的过程中也遇到了一些问题,一些语句的使用不够熟练,但现在对它们有了更深的记忆。在编写程序的过程中,我加深了对中断概念和对计数器工作原理的理解。同时,感受了设计程序的流程,为以后的实验积累了一定经验。