您好,欢迎访问三七文档
1昆明理工大学信息工程与自动化学院学生实验报告(2014—2015学年第2学期)课程名称:单片机技术开课实验室:信自楼5042012年5月21日年级、专业、班计科121学号201210405106姓名和云山成绩实验项目名称定时器实验指导教师江虹教师评语教师签名:年月日一、实验目的掌握定时器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)启动定时器。定时器/计数器由四种工作方式,所用的计数位数不同,因此,定时计数常数也就不同。在C51程序设计中,当函数定义时用了interruptm修饰符,系统编译时把对应函数转化为中断函数,自动加上程序头段和尾段,并按MCS-51系统中断的处理方式自动把它安排在程序存储器中的相应位置。在该修饰符中,m的取值为0~31,对应的中断情况如下:0——外部中断01——定时/计数器T02——外部中断13——定时/计数器T14——串行口中断5——定时/计数器T2其它值预留。编写MCS-51中断函数注意如下:(1)中断函数不能进行参数传递,如果中断函数中包含任何参数声明都将导致编译出错。2(2)中断函数没有返回值,如果企图定义一个返回值将得不到正确的结果,建议在定义中断函数时将其定义为void类型,以明确说明没有返回值。(3)在任何情况下都不能直接调用中断函数,否则会产生编译错误。因为中断函数的返回是由8051单片机的RETI指令完成的,RETI指令影响8051单片机的硬件中断系统。如果在没有实际中断情况下直接调用中断函数,RETI指令的操作结果会产生一个致命的错误。(4)如果在中断函数中调用了其它函数,则被调用函数所使用的寄存器必须与中断函数相同。否则会产生不正确的结果。(5)C51编译器对中断函数编译时会自动在程序开始和结束处加上相应的内容,具体如下:在程序开始处对ACC、B、DPH、DPL和PSW入栈,结束时出栈。中断函数未加usingn修饰符的,开始时还要将R0~R1入栈,结束时出栈。如中断函数加usingn修饰符,则在开始将PSW入栈后还要修改PSW中的工作寄存器组选择位。(6)C51编译器从绝对地址8m+3处产生一个中断向量,其中m为中断号,也即interrupt后面的数字。该向量包含一个到中断函数入口地址的绝对跳转。(7)中断函数最好写在文件的尾部,并且禁止使用extern存储类型说明。防止其它程序调用。三、实验内容在实验板上完成如下功能:用定时器T0的方式1,实现第一个发光二极管以200ms的间隔闪烁;用定时器T1的方式1,实现数码管前两位59s循环计时。实验板数码管电路原理如图1所示。计算初值公式定时模式1th0=(216-定时时间)/256tl0=(216-定时时间)%256图1LED数码管电路原理图3四、实验步骤及结果1、按实验要求在KeilC中创建项目,编辑、编译程序。(1)创建项目:注意文件为。”.c”文件。(2)选择Device为“Atmel89C52”(3)添加文件4(4)编辑、编译程序52、将编译生成的目标码文件(后缀为.Hex)下载到实验板电路中。(1)编译生成的目标码文件(后缀为.Hex)(2)将编译生成的目标码文件传入实验板中。63、在实验板中运行程序,观察实验运行结果并记录。五、试验总结通过这次式样我初步掌握定时器T0、T1的方式选择和编程方法,同时我还了解中断服务程序的设计方法,学会实时程序的调试技巧。当然通过这次实验我还加深了定时器的使用以及定时器设置方法的应用,同时我还懂得了中断对于程序的作用和定时时间的设定。在这次实验之前,我对中断的概念模糊不清,太明白中断子程序该在什么时候执行直到自己动手用汇编编程翻书仔细把书中关于中断的部分看了一遍在结合书上的例题终于对中断有了个大致的了解。定时器确实是一项了不起的发明,使相当多需要人控制时间的工作变得简单。这次试验我只是对定时器有了初步的了解,我想在以后的学习中我们还会学到关于定时去的更复杂的运用,我希望现在的学习给我以后的进一步提升提供帮助。总之,要不断学习,不断实践。使自己把学到的东西在实践中磨练,这也是提高自己的一种方法。
本文标题:单片机实验二
链接地址:https://www.777doc.com/doc-4848626 .html