您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 单片机定时器实验报告
1XXXX大学信息工程与自动化学院学生实验报告(2009—2010学年第二学期)课程名称:单片机开课实验室:2010年5月14日年级、专业、班学号姓名成绩实验项目名称定时器实验(十进制计数器)指导教师教师评语该同学是否了解实验仪器原理A.了解[]B.基本了解[]C.不了解[]该同学的实验能力A.强[]B.中等[]C.差[]该同学的实验是否达到要求A.达到[]B.基本达到[]C.未达到[]实验报告是否规范A.规范[]B.基本规范[]C.不规范[]实验过程是否详细记录A.详细[]B.一般[]C.无[]教师签名:年月日一.实验目的:掌握定时器T0、T1的方式选择和编程方法,了解中断服务程序的设计方法,学会实时程序的调试技巧。二.实验原理:MCS-51单片机内设置了两个可编程的16位定时器T0和T1,通过编程,可以设定为定时器和外部计数方式。T1还可以作为其串行口的波特率发生器。定时器T0由特殊功能寄存器TL0和TH0构成,定时器T1由TH1和TL1构成,特殊功能寄存器TMOD控制定时器的工作方式,TCON控制其运行。定时器的中断由中断允许寄存器IE,中断优先权寄存器IP中的相应位进行控制。定时器T0的中断入口地址为000BH,T1的中断入口地址为001BH。定时器的编程包括:1)置工作方式。2)置计数初值。3)中断设置。4)启动定时器。定时器/计数器由四种工作方式,所用的计数位数不同,因此,定时计数常数也就不同。2在编写中断服务程序时,应该清楚中断响应过程:CPU执行中断服务程序之前,自动将程序计数器PC内容(即断点地址)压入堆栈保护(但不保护状态寄存器PSW,更不保护累加器A和其它寄存器内容),然后将对应的中断矢量装入程序计数器PC使程序转向该中断矢量地址单元中以执行中断服务程序。定时器T0和T1对应的中断矢量地址分别为000BH和001BH。中断服务程序从矢量地址开始执行,一直到返回指令“RETI”为止。“RETI”指令的操作一方面告诉中断系统该中断服务程序已经执行完毕,另一方面把原来压入堆栈保护的断点地址从栈顶弹出,装入到程序计数器PC,使程序返回到被到中断的程序断点处,以便继续执行。因此,我们在编写中断服务程序时注意。1.在中断矢量地址单元放一条无条件转移指令,使中断服务程序可以灵活地安排在64K字节程序存储器的任何空间。2.在中断服务程序中应特别注意用软件保护现场,以免中断返回后,丢失原寄存器、累加器的信息。3.若要使执行的当前中断程序禁止更高优先级中断,可以先用软件关闭CPU中断,或禁止某中断源中断,在返回前再开放中断。三.实验内容:编写并调试一个程序,用AT89C51的T0工作方式1产生1s的定时时间,作为秒计数时间,当1s产生时,秒计数加1;秒计数到60时,自动从0开始。实验电路原理如图1所示。计算初值公式定时模式1th0=(216-定时时间)/256tl0=(216-定时时间)mod2563图1定时器实验电路原理图四.实验步骤:1.打开ProteusISIS编辑环境,按下表所列的元件清单添加元件。实验所用元件清单元件名称所属类所属子类AT89C51MicroprocessorICs8051FamilyCAPCapacitorsGenericCAP-ELECCapacitorsGenericCRYSTALMiscellaneous-RESResistorsGeneric7SEG-COM-CAT-GRNOptoelectronics7-SegmentDisplaysPULLUPModellingPrimitivesDigital[Miscellaneous]AT889C51元件,界面如图所示:4元件全部添加时,点击所添加的文件,并点击右键,选择“编辑属性”;元件全部添加后,在ProteusISIS的编辑区域中按实验原理图连接硬件电路,连接结果如下图所示;2.按实验要求在KeilC中创建项目,编辑、编译程序,程序如下图所示;5由编译结果可见,程序无误,可进行导入。3.将编译生成的目标码文件(后缀为.Hex)传入Proteus的实验电路中。在proteus软件已经完成实验电路图中选中元件“AT89C51”,单击元件,添加已生成的.hex文件,点击“确定”,即可导入,如下图所示;4.在ProteusISIS仿真环境中运行程序,观察实验运行结果并记录。点击左下角的运行按钮,即可看到运行结果,从00开始循环计数,秒计数到60时,自动从0开始,点击暂停按钮,记录实验结果如下图所示:6当计数器到59后,自动从00开始,如下图所示;由此可见,电路连接正确,源代码正确,实现了实验的相应要求。五.参考程序:secondequ30hcountequ31horg00hljmpstartorg0bhljmpint_t0start:movsecond,#00h7movcount,#00hmovdptr,#table;段码表首址movp0,#3fhmovp2,#3fhmovtmod,#01hmovth0,#(65536-50000)/256movtl0,#(65536-50000)mod256;定时50mssetbtr0movie,#82hsjmp$int_t0:movth0,#(65536-50000)/256movtl0,#(65536-50000)mod256inccountmova,countcjnea,#20,i2;是否到1smovcount,#00hincsecondmova,secondcjnea,#60,i1;是否到60smovsecond,#00hi1:mova,secondmovb,#10divabmovca,@a+dptrmovp0,amova,bmovca,@a+dptrmovp2,ai2:retitable:db3fh,06h,5bh,4fh,66hdb6dh,7dh,07h,7fh,6fhend六.思考题:若用定时器1方式2,程序如何修改?答:程序修改如下:SECONDEQU30HCOUNTEQU31HORG00HLJMPSTARTORG1BH;T1中断入口地址8LJMPINT_T1START:MOVSECOND,#00HMOVCOUNT,#00HMOVDPTR,#TABLE;段码表首址MOVP0,#3FHMOVP2,#3FHMOVTMOD,#20H;T1模式2,定时MOVTH1,#06h;定时500微秒MOVTL1,#06hSETBTR1MOVIE,#88HSJMP$INT_T1:INCCOUNTMOVA,COUNTCJNEA,#2000,I2;是否到1sMOVCOUNT,#00HINCSECONDMOVA,SECONDCJNEA,#60,I1;是否到60sMOVSECOND,#00HI1:MOVA,SECONDMOVB,#10DIVABMOVCA,@A+DPTRMOVP0,AMOVA,BMOVCA,@A+DPTRMOVP2,AI2:RETITABLE:DB3FH,06H,5BH,4FH,66H9DB6DH,7DH,07H,7FH,6FHEND七.实验总结:通过本次实验,使我对Proteus7Professional软件的使用方法有了初步的了解,还认识了89C51单片机的结构及各个端口的功能,同时,还掌握了怎样在Proteus环境中来导入Keilc环境下的程序来建立两个环境的联系,完成程序和电路图的联系。虽然在本次试验中遇到了的问题,都在同学的帮助下解决了,同时还进一步了解了单片机方面的有关知识。
本文标题:单片机定时器实验报告
链接地址:https://www.777doc.com/doc-6047879 .html