版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章80C51单片机的功能单元
基本内容4.1 并行I/O接口4.1.1P1口4.1.2P3口4.1.3P2口4.1.4P0口4.2 定时器/计数器4.2.1概述4.2.2定时器/计数器T0、T1第四章80C51单片机的功能单元
4.2.3定时器/计数器T24.2.4看门狗4.2.5定时器/计数器的编程和使用4.3 串行接口4.4 中断系统4.4.1中断、中断源及中断优先级4.4.2中断的控制和操作4.4.3中断的响应过程和中断矢量地址
第四章80C51单片机的功能单元
4.1并行I/O接口80C51共有四个8位的并行双向口,计有32根输入/输出(I/O)口线。各口的每一位均由锁存器、输出驱动器和输入缓冲器所组成。由于它们在结构上的一些差异,故各口的性质和功能也就有了差异。它们之间的异同列于表4--1。表4—180C51并行I/O接口的比较I/O口P0口P1口P2口P3口位数8888性质真正双向口准双向口准双向口准双向口功能I/O口替代功能I/O口替代功能I/O口替代功能I/O口替代功能SFR字节地址80H90HA0HB0H地址范围80H~87H90H~97HA0H~A7HB0H~B7H驱动能力8个TTL负载4个TTL负载4个TTL负载4个TTL负载
I/O口
P0口P1口P2口P3口替代功能程序存储器、片外数据存储器低8位地址及8位数据CTC2T2、T2EX(CTC2仅80C52中有)串行口程序存储器、片外数据存储器高8位地址串行口:RXDTXD中断:INT0INT1CTC0、1:T0、T1片外数据存储器:WRRD第四章80C51单片机的功能单元
下面按照各口的结构由简而繁的顺序加以介绍。4.1.1P1口P1口是一个8位口,可以字节访问也可位访问,其字节访问地址为90H,位访问地址为90H~97H。位结构与工作过程分P1口的位结构如图4--1所示,内包含:输出锁存器、输入缓冲器BUF1(读引脚)、BUF2(读锁存器)以及由FET晶体管Q0与上拉电阻组成的输出/输入驱动器。第四章80C51单片机的功能单元
图4---1P1口的位结构原理图第四章80C51单片机的功能单元
P1口的工作过程分析如下:①P1.i位作输出口用时:CPU输出0时,D=0,Q=0,Q=1,晶体管Q0导通,A点被下拉为低电平,即输出0;CPU输出1时,D=1,Q=1,Q=0,晶体管Q0截止,A点被上拉为高电平,即输出1。②P1.i位作输入口用时:先向P1.i位输出高电平,使A点提升为高电平,此操作称为设置P1.i为输入线。若外设输入为1时,A点为高电平,由BUF1读入总线后,B点也为高电平;若外设输入为0时,A点为低电平,由BUF1读入总线后,B点也为低电平。第四章80C51单片机的功能单元
2P1口的特点①输出锁存,输出时没有条件;②输入缓冲,输入时有条件,即需要先将该口设为输入状态,先输出1;③工作过程中无高阻悬浮状态,也就是该口不是输入态就是输出态。具有这种特性的口不属于“真正”的双向口,而被称为“准”双向口。第四章80C51单片机的功能单元
这里需要注意的是,若在输入操作之前不将A点设置为高电平(即先向该口线输出1),如果A点电平为低电平时,则外设输入的任何信号均被A点拉为低电平,亦即此时外设的任何信号都输不进来。更为严重的是,A点为低电平,而外设为高电平时,外设的高电平通过Q0强迫下拉为低电平,将可能有很大的电流流过Q0而将它烧坏。P1口能驱动4个TTL负载。第四章80C51单片机的功能单元
3P1口的操作字节操作和位操作CPU对于P1口不仅可以作为一个8位口(字节)来操作,也可以按位来操作。有关字节操作的指令有:输出MOVP1,A;(P1)←(A)MOVP1,#data;(P1)←#dataMOVP1,direct;(P1)←(direct)
输入MOVA,P1;(A)←(P1)MOVdirect,P1;(direct)←(P1)第四章80C51单片机的功能单元
有关位操作的指令有:置位、清除SETBP1.i;P1.i←1CLRP1.i;P1.i←0输入、输出MOVP1.i,C;P1.i←CYMOVC,P1.i;CY←P1.I判跳JBP1.i,rel;P1.i=1,跳转JBCP1.i,rel;P1.i=0,跳转且P1.i←0逻辑运算ANLC,P1.i;CY←(P1.i·CY)ORLC,P1.i;CY←(P1.i+CY)其中:P1.i中的i=0,…,7。第四章80C51单片机的功能单元
因此,P1口不仅可以以8位一组进行输入、输出操作,还可以逐位分别定义各口线为输入线或输出线。例如:ORLP1,#0000,0010B可以使P1.1位口线输出1,而使其余各位不变。ANLP1,#1111,1101B可以使P1.1位口线输出0,而使其余各位不变。读引脚操作和读锁存器操作
从P1口的位结构图中可以看出,有两种读口的操作:一种是读引脚操作,一种是读锁存器操作。第四章80C51单片机的功能单元
在响应CPU输出的读引脚信号时,端口本身引脚的电平值通过缓冲器BUF1进入内部总线。这种类型的指令,执行之前必须先将端口锁存器置1,使A点处于高电平,否则会损坏引脚,而且也使信号无法读出,已于前述。这种类型的指令有:MOVA,P1;(A)←(P1)MOVdirect,P1;(direct)←(P1)第四章80C51单片机的功能单元
在执行读锁存器的指令时,CPU首先完成将锁存器的值通过缓冲器BUF2读入内部,进行修改,然后重新写到锁存器中去,这就是“读-修改-写”指令。这种类型的指令包含所有的口的逻辑操作(ANL、ORL、XRL)和位操作(JBC、CPL、MOV、SETB、CLR等)指令。第四章80C51单片机的功能单元
读锁存器操作可以避免一些错误,如用P1.i去驱动晶体管的基极。当对P1.i写入一个1之后,晶体管导通。若此时CPU接着读该位引脚的值,即晶体管基极的值时,为0;但是正确的值应该是1,这可从读锁存器得到。第四章80C51单片机的功能单元
4关于口操作的时序在执行改变端口锁存器内容的指令时,新的内容在指令执行的最后一个周期的S6P2时传送到口的锁存器内。然而口锁存器仅在任何周期的P1时才采样端口锁存器(缓冲器),在P2时输出锁存器的值并保持P1时所采样到的内容。第四章80C51单片机的功能单元
因此,S6P2时写入端口锁存器的新数值直到下一个周期的P1时被采样到,即只有在下一个机器周期的S1P1时,才真正出现在引脚上。5P1口的多功能线在80C52中,P1.0和P1.1口线是多功能的,即除作一般双向I/O口线之外,这两根口线还具有下列功能:第四章80C51单片机的功能单元
P1.0——定时器/计数器2的外部输入端T2;P1.1——定时器/计数器2的外部控制端T2EX。这时,该两位的结构与P3口的位结构相当。关于P1.0和P1.1的功能在定时器/计数器2中叙述。第四章80C51单片机的功能单元
4.1.2P3口P3口是一个多功能的8位口,可以字节访问也可位访问,其字节访问地址为B0H,位访问地址为B0H~B7H。1位结构与工作过程分析
位结构P3口的位结构如图4---2所示。从P3口的位结构图中可以看出,它与P1的口位结构之间的区别在于:第四章80C51单片机的功能单元
图4--2P3口的位结构原理图第四章80C51单片机的功能单元
P3口中增加了一个与非门。与非门有两个输入端:一个为口输出锁存器的Q端,另一个为替代功能的控制输出。与非门的输出端控制输出FET管Q0。
输出锁存器不是从端而是从Q端引出。有两个输入缓冲器,替代输入功能取自第一个缓冲器的输出端;I/O口的通用输入信号取自第二个缓冲器的输出端。第四章80C51单片机的功能单元
(2)输出工作过程分析①当替代输出功能B点置1时,输出锁存器的输出可以顺利通到引脚P3.i。其工作状况与P1口相类似。这时P3口的工作状态为一I/O口,显然此时该口具有准双向口的性质。第四章80C51单片机的功能单元
②当输出锁存器的输出置1时,替代输出功能可以顺利通到引脚P3.i。若替代输出为0时,因与非门的C点已置1,现B点为0,故与非门的输出为1,使Q0导通,从而使A点也为0。若替代输出为1时,与非门的输出为1,Q0截止,从而使A点也为高电平。这时P3口的工作状态处于替代输出功能状态。第四章80C51单片机的功能单元
从上述分析可以看出,不论是替代输出还是替代输入功能时,输出锁存器的输出置1是必需的。因此,P3口不论作替代功能输入,还是作替代功能输出,甚至作一般I/O的输入功能时,都需要向该口位输出1。这一点特别应该引起注意。
第四章80C51单片机的功能单元
2
P3口的功能和特点与P1口不同,P3口是一个多功能口。可作I/O口使用,为准双向口。这方面的功能与P1口一样。既可以字节操作,也可以位操作;既可以8位口操作,也可以逐位定义口线为输入线或输出线;既可以读引脚,也可以读锁存器,实现“读—修改—输出”操作。
可以作为替代功能的输入、输出。替代输入功能:P3.0——RXD,
串行输入口。第四章80C51单片机的功能单元
P3.2——INT0,
外部中断0的请求。P3.3——INT1,
外部中断1的请求。P3.4——T0,
定时器/计数器0外部计数脉冲输入。P3.5——T1,
定时器/计数器1外部计数脉冲输入。替代输出功能:第四章80C51单片机的功能单元
P3.1——TXD,
串行输出口。P3.6——WR,
外部数据存储器写选通,输出,低电平有效。P3.7——RD,
外部数据存储器读选通,输出,低电平有效。
(3)P3口能驱动4个TTL负载。
第四章80C51单片机的功能单元
4.1.3P2口P2口是一个多功能的8位口,可以字节访问也可位访问,其字节访问地址为A0H,位访问地址为A0H~A7H。1位结构与工作过程分析位结构与工作过程
P2口位结构示于图4--3。第四章80C51单片机的功能单元
它与P1口位结构之间的区别在于:①P2口的位结构中增加了一个多路开关。多路开关的输入有两个:一个是口输出锁存器的输出端Q;一个是地址寄存器(PC或DPTR)的高位输出端。多路开关的输出经反相器反相后去控制输出FETQ0。多路开关的切换由内部控制信号控制。②输出锁存器的输出端是Q而不是,这样多路开关之后接反相器就很好理解了。第四章80C51单片机的功能单元
图4---3P2口的位结构原理图第四章80C51单片机的功能单元
(2)工作过程分析①
在内部控制信号的作用下,多路开关的输入投向输出锁存器的输出(C点)侧,这样多路开关将接通输出锁存器。若经由内部总线输出0,输出锁存器的Q端为0,信号经多路开关和反相器后输出1,Q0导通,A点为0,输出低电平;若经由内部总线输出1,输出锁存器的Q端为1,反相器后输出0,Q0截止,A点为1,输出高电平。
这时P2口的工作状态是I/O口状态。第四章80C51单片机的功能单元
②
在内部控制信号的作用下,多路开关的输入投向地址输出(B点)侧,这样多路开关将接通地址寄存器输出。同样可以知道,A点的电平将随地址输出的0、1而1、0地变化。
这时P2口的工作状态是输出高8位地址。
第四章80C51单片机的功能单元
2
P2口的功能和特点从上述工作过程的分析中可以看出,P2口是一个双功能的口:(1)作I/O口使用时,P2口为一准双向口,功能与P1口一样。(2)作地址输出时,P2口可以输出程序存储器或片外数据存储器的高8位地址,与P0口输出的低地址一起构成16位地址线,从而可分别寻址64KB的程序存储器或片外数据存储器。地址线是8位一起自动输出的,不能像I/O口线逐位定义。(3)P2口能驱动4个TTL负载。第四章80C51单片机的功能单元
3
P2口使用中注意的问题(1)由于P2口的输出锁存功能,在取指周期内或外部数据存储器读、写选通期间,输出的高8位地址是锁存的,故无需外加地址锁存器。(2)在系统中如果外接有程序存储器,由于访问片外程序存储器的连续不断的取指操作,P2口需要不断送出高位地址,这时P2口的全部口线均不宜再作I/O口使用。(3)在无外接程序存储器而有片外数据存储器的系统中,P2口使用可分为两种情况:第四章80C51单片机的功能单元
①
若片外数据存储器的容量≤256B:可使用“MOVXA,@Ri”及“MOVX@Ri,A”类指令访问片外数据存储器,这时P2口不输出地址,P2口仍可作为I/O口使用;②
若片外数据存储器的容量≥256B:
这时使用“MOVXA,@DPTR”及“MOVX@DPTR,A”类指令访问片外数据存储器,P2口需输出高8位地址。在片外数据存储器读、写选通期间,P2口引脚上锁存高8位地址信息,但是在选通结束后,P2口内原来锁存的内容又重新出现在引脚上。
第四章80C51单片机的功能单元
此时可以根据片外数据存储器读、写选通的频繁程度,有限制地将P2口作I/O口使用。
在片外数据存储器容量不太大的情况下,也可从软件上设法,只利用P1、P3甚至P2口中的某几根口线送高位地址,从而保留P2口的全部或部分口线作I/O口用。注意,这时使用的是“MOVXA,@Ri”及“MOVX@Ri,A”类访问指令,高位地址不再是自动送出的,而要通过程序设定。
第四章80C51单片机的功能单元
4.1.4P0口P0口是一个多功能的8位口,可以字节访问也可位访问,其字节访问地址为80H,位访问地址为80H~87H。1位结构与工作过程分析位结构P0口位结构示于图4--4。第四章80C51单片机的功能单元
图4—4P0口的位结构原理图第四章80C51单片机的功能单元
P0口的位结构与P1口有明显区别:①P0口中增加了一个多路开关:多路开关的输入有两个,地址/数据输出;输出锁存器的输出。多路开关的输出用于控制输出FETQ0的导通和截止。多路开关的切换由内部控制信号控制。②P0口的输出上拉电路与P1口完全不同:P0口的上拉电路导通和截止受内部控制信号和地址/数据信号共同(相“与”)来控制。第四章80C51单片机的功能单元
(2)工作过程分析①当内部控制信号置1时,多路开关接通地址/数据输出端。当地址/数据输出线置1时,控制上拉电路的“与”门输出为1,上拉FET导通,同时地址/数据输出通过反相器输出0,控制下拉FET截止,这样A点电位上拉,地址/数据输出线为1。第四章80C51单片机的功能单元
当地址/数据输出线置0时,“与”门输出为0,上拉FET截止,同时地址/数据输出通过反相器输出1,控制下拉FET导通,这样A点电位下拉,地址/数据输出线为0。第四章80C51单片机的功能单元
通过上述分析可以看出,此时的输出状态随地址/数据线而变。因此,P0口可以作为地址/数据复用总线使用。这时上下两个FET处于反相,构成了推拉式的输出电路,其负载能力大大增加。此时的P0口相当一个双向口。第四章80C51单片机的功能单元
②当内部控制信号置0时,多路开关接通输出锁存器的端。这时明显地可以看出两点:·由于内部控制信号为0,与门关闭,上拉FET截止,形成P0口的输出电路为漏极开路输出;·输出锁存器的端引至下拉FET栅极,因此P0口的输出状态由下拉电路决定。在P0口作输出口用时,若P0i输出1,输出锁存器的端为0,下拉FET截止,这时P0i为漏极开路输出;若P0.i输出0,输出锁存器的端为1,下拉FET导通,P0.i输出低电平。第四章80C51单片机的功能单元
在P0口作输入口用时,为了使P0.i能正确读入数据,必须先使P0i锁存器置1。这样,下拉FET也截止,P0.i处于悬浮状态。A点的电平由外设的电平而定,通过输入缓冲器读入CPU。这时P0口相当于一个高阻抗的输入口。2P0口的功能和特点(1)作I/O口使用。相当于一个真正的双向口:输出锁存、输入缓冲,但输入时需先将口置1;每根口线可以独立定义为输入或输出。它具有双向口的一切特点。第四章80C51单片机的功能单元
与P1及其它口的区别是,输出时为漏极开路输出,与NMOS的电路接口时要用电阻上拉;输入时为悬浮状态,为一个高阻抗的输入口。(2)作地址/数据复用总线用。此时P0口为一个准双向口。但是没有上拉电阻,作数据输入时,口也不是悬浮状态。作地址/数据复用总线用时,口不能逐位定义为输入/输出。作数据总线用,输入/输出8位数据;作地址总线用,输出低8位地址。当P0口作地址/数据复用总线用之后,就再也不能作I/O口使用了。第四章80C51单片机的功能单元
现时的许多仿真系统中,均以P0口作地址/数据复用总线使用,因而仿真I/O口的功能丧失。这一点特别应该注意。(3)P0口能驱动8个TTL负载。第四章80C51单片机的功能单元
4.2定时器/计数器4.2.1概述定时器/计数器(timer/counter)是单片机中重要部件,其工作方式灵活、编程简单,使用它对减轻CPU的负担和简化外围电路都有很大好处。80C51包含有两个16位的定时器/计数器:定时器/计数器T0和定时器/计数器T1;80C52包含有三个16位的定时器/计数器:定时器/计数器T0、定时器/计数器T1和定时/计数器T2;在80C51系列的部分产品(80C552)中,还包含有一个用做看门狗的8位定时器(T3)。第四章80C51单片机的功能单元
定时器/计数器的核心是一个加一计数器,其基本功能是加1功能。①在单片机的T0、T1或T2引脚上施加一个1到0的跳变,计数器增1,即是计数功能;②在单片机内部对机器周期或其分频进行计数,从而得到定时,这就是定时功能。在单片机中,定时功能和计数功能的设定和控制都是通过软件来进行的。第四章80C51单片机的功能单元
4.2.2定时器/计数器T0、T11定时器/计数器T0、T1的内部结构定时器/计数器T0、T1的内部结构简图示于图4--5中。从图中可以看出,定时器/计数器T0、T1由以下几部分组成:①计数器TH0、TL0和TH1、TL1;②特殊功能寄存器TMOD、TCON;③时钟分频器;④输入引脚T0、T1、INT0、INT1。第四章80C51单片机的功能单元
图4---5定时器/计数器T0、T1的内部结构简图第四章80C51单片机的功能单元
2定时器/计数器T0、T1的特殊功能寄存器(1)定时器/计数器T0、T1的方式寄存器——TMOD方式寄存器TMOD是一个逐位定义的8位寄存器,是只能字节寻址的寄存器,字节地址为89H。其格式如下
D7D6D5D4D3D2D1D0GATEC/TM1M0GATEC/TM1M0第四章80C51单片机的功能单元
其中低4位定义定时器/计数器T0,高4位定义定时器/计数器T1,各位的意义如下:GATE——门控位。GATE=1时,由外部中断引脚INT0、INT1和TR0、TR1来启动定时器。当INT0引脚为高电平时,TR0置位,启动定时器T0;当INT1引脚为高电平时,TR1置位,启动定时器T1。GATE=0时,仅由TR0和TR1置位来启动定时器T0和T1。第四章80C51单片机的功能单元
C/T——功能选择位。C/T=1时,选择计数功能;C/T=0时,选择定时功能。M1、M0——方式选择位。由于有M1和M0两位,可以有四种工作方式,如表4--2所示。第四章80C51单片机的功能单元
表4--2定时器/计数器T0、T1的四种工作方式M1M0工作方式计数器配置00方式013位计数器01方式116位计数器10方式2自动再装入的8位计数器11方式3T0分为两个8位计数器,T1作波特率发生器第四章80C51单片机的功能单元
将定时器/计数器T0、T1的方式寄存器——TMOD各位的功能综合列入表4--3中。表4--3方式寄存器——TMOD各位的功能第四章80C51单片机的功能单元
位名称功能D7GATE定时器/计数器T1门控位D6C/T定时/计数器T1功能选择位C/T=1计数器,C/T=0定时器D5M1定时器/计数器T1方式选择位D4M0定时器/计数器T1方式选择位D3GATE定时器/计数器T0门控位D2C/T定时器/计数器T0功能选择位C/T=1计数器,C/T=0定时器D1M1定时器/计数器T0方式选择位D0M0定时器/计数器T0方式选择位第四章80C51单片机的功能单元
(2)定时器/计数器T0、T1的控制寄存器——TCON控制寄存器TCON是一个逐位定义的8位寄存器,既可字节寻址也可位寻址,字节地址为88H,位寻址的地址为88H~8FH。其格式如下:位地址8FH8EH8DH8CH8BH8AH89H88H位功能TF1TR1TF0TR0IE1IT1IE0IT0第四章80C51单片机的功能单元
其中各位的意义如下:①TF1(TCON.7)——定时器/计数器T1的溢出标志。定时器/计数器T1溢出时,该位由内部硬件置位。若中断开放,即响应中断,进入中断服务程序后,由硬件自动清0;若中断禁止,可用于判跳,用软件清0。第四章80C51单片机的功能单元
②TR1(TCON.6)——定时器/计数器T1的运行控制位。用软件控制,置1时,启动T1;清0时,停止T1。③TF0(TCON.5)——定时器/计数器T0的溢出标志。其意义与TF1相同。④TR0(TCON.4)——定时器/计数器T0的运行控制位。用软件控制,置1时,启动T0;清0时,停止T0。第四章80C51单片机的功能单元
⑤IE1(TCON.3)——外部中断1请求标志位。⑥IT1(TCON.2)——外部中断1触发类型选择位。⑦IE0(TCON.1)——外部中断0请求标志位。⑧IT0(TCON.0)——外部中断0触发类型选择位。TCON的低4位与中断有关,将在“中断系统”一节中详细讨论。第四章80C51单片机的功能单元
复位后,TCON的所有位均清0。将定时器/计数器T0、T1的控制寄存器——TCON各位的功能综合列入表4--4中。
第四章80C51单片机的功能单元
表4---4控制寄存器——TCON各位的功能位名称功能D7
TF1(TCON.7)计数器T1的溢出标志D6TR1(TCON.6)定时器/计数器T1的运行控制位D5TF0(TCON.5)定时器/计数器T0的溢出标志D4TR0(TCON.4)定时器/计数器T0的运行控制位D3IE1(TCON.3)外部中断1请求标志位D2IT1(TCON.2)外部中断1触发类型选择位D1IE0(TCON.1)外部中断0请求标志位D0IT0(TCON.0)外部中断0触发类型选择位第四章80C51单片机的功能单元
(3)定时器/计数器T0、T1的数据寄存器——TH1、TL1和TH0、TL0定时器/计数器T0、T1各有一个16位的数据寄存器,它们都是由高8位寄存器和低8位寄存器所组成。这些寄存器不经过缓冲,直接显示当前的计数值。所有这四个寄存器都是读/写寄存器,任何时候都可对它们进行读/写操作。复位后,所有这四个寄存器全部清零。它们都只能字节寻址,相应的字节地址见表4---5。第四章80C51单片机的功能单元
3定时器/计数器T0、T1的功能选择定时器/计数器T0、T1的功能是通过TMOD中的C/T来选择的。(1)定时器,设置C/T=0此时,计数输入信号是内部时钟脉冲,每个机器周期使寄存器的值增1。每个机器周期等于12个振荡周期,故计数速率为振荡周期的1/12。当采用12MHz的晶体时,计数速率为1MHz。第四章80C51单片机的功能单元
表4--5定时器/计数器T0、T1的数据寄存器的字节地址寄存器名称字节地址TH1T1的高8位数据寄存器8DHTL1T1的低8位数据寄存器8BHTH0T0的高8位数据寄存器8CHTL0T0的低8位数据寄存器8AH第四章80C51单片机的功能单元
定时器的定时时间,与系统的振荡频率有关,与计数器的长度和初值有关。(2)计数器,设置C/T=1这时,通过引脚T0(P3.4)和T1(P3.5)对外部信号进行计数。在每个机器周期的S5P2期间,CPU采样引脚的输入电平。若前一机器周期采样值为1,下一机器周期采样值为0,则计数器增1,此后的机器周期S3P1期间,新的计数值装入计数器。所以检测一个1到0的跳变需要两个机器周期,故最高计数频率为振荡频率的1/24。第四章80C51单片机的功能单元
4定时器/计数器T0、T1的工作方式根据对M1和M0的设定,定时器/计数器T0、T1可选择四种不同的工作方式。定时器/计数器T0、T1的前三种工作方式(即方式0、方式1和方式2)相同,方式3的设置稍有不同,需要注意。(1)方式0当TMOD中的M1=0、M0=0时,选定方式0工作。方式0时的结构如图4--6所示。这种方式下,计数寄存器由13位组成,即TLx的高3位未用。第四章80C51单片机的功能单元
图4---6方式0时,定时器/计数器T0、T1的结构简图第四章80C51单片机的功能单元
计数时,TLx的低5位溢出后向THx进位,THx溢出后将TFx置位,并向CPU申请中断。当GATE=0时,A点为高电平,定时器/计数器的启动/停止由TRx决定。TRx=1,定时器/计数器启动;TRx=0,定时器/计数器停止。当GATE=1时,A点的电位由INTx决定,因而B点的电位就由TRx和INTx决定,即定时器/计数器的启动/停止由TRx和INTx两个条件决定。第四章80C51单片机的功能单元
计数溢出时,TFx置位。如果,中断允许,CPU响应中断并转入中断服务程序,由内部硬件清TFx。TFx也可以由程序查询和清零。(2)方式1当TMOD中的M1=0、M0=1时,选定方式1工作。方式1时的结构如图4--7所示。这种方式下,计数寄存器由16位组成。第四章80C51单片机的功能单元
图4--7方式1时,定时器/计数器T0、T1的结构简图第四章80C51单片机的功能单元
计数时,TLx溢出后向THx进位,THx溢出后将TFx置位,并向CPU申请中断。其它与方式0完全相同。(3)方式2当TMOD中的M1=1、M0=0时,选定方式2工作。这种方式是将16位计数寄存器分为两个8位寄存器,组成一个可重装入的8位计数寄存器。方式2时的结构如图4--8所示。第四章80C51单片机的功能单元
图4--8方式2时,定时器/计数器T0、T1的结构简图第四章80C51单片机的功能单元
在方式2中,TLx作为8位计数寄存器,THx作为8位计数常数寄存器。
当TLx计数溢出时,一方面将TFx置位,并向CPU申请中断;另一方面将THx的内容重新装入TLx中,继续计数。重新装入不影响THx的内容,所以可以多次连续再装入。方式2对定时控制特别有用,它可实现每隔预定时间发出控制信号,而且特别适合于串行口波特率发生器的使用。第四章80C51单片机的功能单元
(4)方式3当TMOD中的M1=1、M0=1时,选定方式3工作。这种方式是将定时器/计数器T0分为一个8位定时器/计数器和一个8位定时器,TL0用于8位定时器/计数器,TH0用于8位定时器。方式3时定时器/计数器T0的结构如图4--9所示。第四章80C51单片机的功能单元
图4---9方式3时,定时器/计数器T0的结构简图第四章80C51单片机的功能单元
定时器/计数器的工作与方式0时相同,只是此时的计数器为8位计数器TL0,它占用了T0的GATE、INT0、TR0、T0引脚以及中断源等。TH0所构成的定时器只能作为定时器用,因为此时的外部引脚T0已为定时器/计数器TL0所占用。不过这时它却占用了定时器/计数器T1的启动/停止控制位TR1、计数溢出标志位TF1及中断源。第四章80C51单片机的功能单元
在方式3下,定时器/计数器T1的结构如图4--10所示。此时定时器/计数器T1可选方式0、1或2。由于此时中断源已被占用,所以仅能作为波特率发生器或其它不用中断的地方。事实上,只在定时器/计数器T1用做波特率发生器时,定时器/计数器T0才选作方式3。第四章80C51单片机的功能单元
图4--10方式3时,定时器/计数器T1的结构简图第四章80C51单片机的功能单元
4.2.3定时器/计数器T280C52中有一个功能较强的定时器/计数器T2,它是一个16位的、具有自动重装载和捕获能力的定时器/计数器。在定时器/计数器T2的内部,除了两个8位计数器TL2、TH2和控制寄存器T2CON及T2MOD之外,还设置有捕获寄存器RCAP2L(低字节)和RCAP2H(高字节)。定时器/计数器T2的计数脉冲源都可以有两个:一个是内部机器周期,另一个是由T2(P1.0)端输入的外部计数脉冲。第四章80C51单片机的功能单元
输入引脚T2(P1.0)是外部计数脉冲输入端;输入引脚T2EX(P1.1)是外部控制信号输入端。1
定时器/计数器T2中的特殊功能寄存器(1)控制寄存器——T2CON控制寄存器T2CON是一个逐位定义的8位寄存器,既可字节寻址也可位寻址,字节地址为0C8H,位寻址的地址为0C8H~0CFH。其格式如下:第四章80C51单片机的功能单元
各位的含义如下:TF2(T2CON.7)——定时器/计数器T2溢出标志。定时器T2溢出时置位,并申请中断。只能靠软件清除。但在波特率发生器方式下,也即RCLK=l或TCLK=l时,定时器溢出不对TF2置位。
位地址0CFH0CEH0CDH0CCH0CBH0CAH0C9H0C8H位功能TF2EXF2RCLKTCLKEXEN2TR2C/T2CP/RL2第四章80C51单片机的功能单元
EXF2(T2CON.6)——定时器/计数器T2外部标志。当EXEN2=1,且T2EX引脚上出现负跳变而造成捕获或重装载时,EXF2置位,申请中断。这时若已允许定时器/计数器T2中断,CPU将响应中断,转向中断服务程序。EXF2要靠软件来清除。
RCLK(T2CON.5)——接收时钟标志。靠软件置位或清除,用以选择定时器/计数器T2或T1作串行口接收波特率发生器。RCLK=l时,用定时器/计数器T2溢出脉冲作为串行口的接收时钟;RCLK=0时,用定时器/计数器T1的溢出脉冲作接收时钟。
第四章80C51单片机的功能单元
TCLK(T2CON.4)——发送时钟标志。靠软件置位或清除,以选择定时器/计数器T2或T1作串行口发送波特率发生器。TCLK=l时,用定时器/计数器T2溢出脉冲作为串行口的发送时钟;TCLK=0时,用定时器/计数器Tl的溢出脉冲作发送时钟。第四章80C51单片机的功能单元
EXEN2(T2CON.3)——定时器/计数器T2外部允许标志。靠软件设置或清除,以允许或禁止用外部信号来触发捕获或重装载操作。当EXEN2=1时,若定时器/计数器T2未用作串行口的波特率发生器,则在T2EX端出现的信号负跳变时,将造成定时器/计数器T2捕获或重装载,并置EXF2标志为1,请求中断。EXEN2=0时,T2EX端的外部信号不起作用。TR2(T2CON.2)——定时器/计数器T2运行控制位。靠软件设置或清除,以决定定时器/计数器T2是否运行。TR2=1,启动定时器/计数器T2,否则停止。第四章80C51单片机的功能单元
C/T2(T2CON.1)——定时器/计数器T2的定时器方式或计数器方式选择位。靠软件设置或清除。C/2=0,选择定时器工作方式;C/2=1,选择计数器工作方式,下降沿触发。第四章80C51单片机的功能单元
CP/RL2(T2CON.0)——捕获/重装载标志。用软件设置或清除。CP/RL2=1选择捕获功能,这时若EXEN2=1,且T2EX端的信号负跳变时,发生捕获操作。CP/RL2=0,选择重装载功能,这时若定时/计数器T2溢出或在EXEN2=1条件下T2EX端信号负跳变,都会造成自动重装载操作。当RCLK=l或TCLK=l时,CP/RL2控制位不起作用,定时器/计数器T2被强制工作于重装载方式。重装载发生于定时器/计数器T2溢出时,常用来作波特率发生器。T2CON中的各位都是可位寻址的,因此所有标志或控制位都可以靠软件来设置或清除。第四章80C51单片机的功能单元
(2)方式控制寄存器——T2MOD
方式控制寄存器T2MOD是80C52/54/58芯片新增添的、定时器/计数器T2的方式控制寄存器,字节地址为0C9H。其格式如下:
该寄存器现只定义了2位,它们的含义是:D7D6D5D4D3D2D1D0——————T2OEDCEN第四章80C51单片机的功能单元
T2OE(T2MOD.l)——定时器/计数器T2输出允许位。当T2OE=l时,允许时钟输出至T2(P1.0)引脚。这一位仅对80C54/80C58有定义。DCEN(T2MOD.0)——向下计数允许位。当DCEN=l时,允许定时器/计数器T2向下计数,否则向上计数。方式控制寄存器T2MOD
复位值=××××××00B第四章80C51单片机的功能单元
(3)数据寄存器——TH2、TL2定时器/计数器T2有一个16位的数据寄存器,是由高8位寄存器(TH2)和低8位寄存器(TL2)所组成。它们都只能字节寻址,相应的字节地址为0CDH和0CCH。这两个寄存器都是读/写寄存器。
复位后,所有这两个寄存器全部清零。第四章80C51单片机的功能单元
(4)捕获寄存器——RCAP2H、RCAP2L定时器/计数器T2中的捕获寄存器是一个16位的数据寄存器,由高8位寄存器(RCAP2H)和低8位寄存器(RCAP2L)所组成。它们也都只能字节寻址,相应的字节地址为0CBH和0CAH。捕获寄存器RCAP2H和RCAP2L,用于捕获计数器TL2、TH2的计数状态,或用来预置计数初值的。TH2、TL2和RCAP2H、RCAP2L之间接有双向缓冲器(三态门)。复位后,所有这两个寄存器全部清零。
第四章80C51单片机的功能单元
2定时器/计数器T2的功能选择定时器/计数器T2有计数和定时两种功能,由控制位C/T2决定。①C/T2=0时,定时功能。TH2和TL2计的是机器周期数。每个机器周期使TL2寄存器的值增1。计数脉冲的频率为1/12振荡器频率。第四章80C51单片机的功能单元
②C/T2=1时,计数功能。计数脉冲自T2(Pl.0)引脚输入,TH2和TL2作外部信号脉冲计数器用,每当外部脉冲负跳变时,计数器值增l。其工作情况和时序关系与定时器/计数器T0和T1的完全一样,对外部计数脉冲的要求也相同。外部脉冲频率不超过振荡器频率的1/24。3定时器/计数器T2的工作方式定时器/计数器T2的工作方式用控制位CP/RL2(T2CON.0)和RCLK+TCLK来选择。定时器/计数器T2可能有三种工作方式(表46):捕获方式、自动重装载方式和波特率发生器方式。第四章80C51单片机的功能单元
表46定时器/计数器T2的工作方式RCLK+TCLKCP/RL2TR2工作方式001自动重装载方式011捕获方式1×1波特率发生器方式××0关闭第四章80C51单片机的功能单元
(1)捕获方式捕获方式是指:在一定条件下,自动将计数器TH2和TL2的数据读入RCAP2H和RCAP2L,亦即TH2和TL2内容的捕获是通过捕获寄存器RCAP2H和RCAP2L来实现的。其工作原理可参见图4--11。第四章80C51单片机的功能单元
图411定时器/计数器T2的捕获方式第四章80C51单片机的功能单元
当CP/RL2=1时,选择捕获方式。捕获操作发生于下述两种情况下:①定时器2的寄存器TH2和TL2溢出时,打开重装载三态缓冲器,把TH2和TL2的内容自动读入到RCAP2H和RCAP2L中。同时,溢出标志TF2置1,申请中断。第四章80C51单片机的功能单元
②当EXEN2=1且T2EX(P1.1)端的信号有负跳变时,将发生捕获操作。同时标志EXF2置1,申请中断。若定时器/计数器2的中断是被允许的,则无论发生TF2=1还是EXF2=1,CPU都会响应中断,此中断向量的地址为2BH。响应中断后,应靠软件清除中断申请,以免无休止地发生中断。TF2和EXF2都是直接可寻址位,可采用CLRTF2和CLREXF2指令实现清除中断申请的功能。第四章80C51单片机的功能单元
(2)自动重装载方式自动重装载方式是指:在一定条件下,自动地将RCAP2H和RCAP2L的数据装入计数器TH2和TL2中。一般说来,RCAP2H和RCAP2L在这里起预置计数初值的功能。对于8XC52,其工作原理可参见图4--12。第四章80C51单片机的功能单元
图4--12自动重装载方式第四章80C51单片机的功能单元
当CP/RL2=0时,选择自动重装载方式。重装载操作发生于下述两种情况下:①定时器/计数器T2的寄存器TH2和TL2溢出时,打开重装载三态缓冲器,把RCAP2H和RCAP2L的内容自动装载到TH2和TL2中。同时,溢出标志TF2置1,申请中断。第四章80C51单片机的功能单元
②当EXEN2=1且T2EX(P1.1)端的信号有负跳变时,将发生重装载操作。同时标志EXF2置1,申请中断。若定时器/计数器T2的中断是被允许的,则无论发生TF2=1还是EXF2=1,CPU都会响应中断,此中断向量的地址为2BH。响应中断后,应靠软件撤除中断申请,以免无休止地发生中断。TF2和EXF2都是直接可寻址位,可采用CLRTF2和CLREXF2指令实现撤除中断申请的功能。第四章80C51单片机的功能单元
(3)波特率发生器方式当T2CON中RCLK+TCLK=1时,定时器/计数器T2将工作于波特率发生器方式,即其溢出脉冲用做串行口的时钟。定时器/计数器T2的波特率发生器方式下的结构图示于图413中。在T2CON中,RCLK选择串行通信接收波特率发生器,TCLK选择发送波特率发生器,因而,发送和接收的波特率可以不同。此时,定时器/计数器T2的输入时钟可由内部时钟决定,也可由外部时钟决定。
若C/T2=0,选用内部时钟,计数脉冲的频率为1/2振荡器频率。第四章80C51单片机的功能单元
若C/T=1,选用外部时钟,该时钟由T2(P1.0)端输入,每当外部脉冲负跳变时,计数器值增1。外部脉冲频率不超过振荡器频率的1/24。由于脉冲溢出时,RCAP2H和RCAP2L的内容会自动装载到TH2和TL2中,故波特率的值还决定于RCAP2H和RCAP2L装载初值。RCLK+TCLK还用于选择定时器/计数器T1还是T2作串行通信的波特率发生器。由图4--13可看出,这两位的值用来控制两个电子开关的位置。值为0时,选用定时器/计数器T1;值为1时,选用定时器/计数器T2,用做波特率发生器。第四章80C51单片机的功能单元
图4--13定时器/计数器T2的波特率发生器方式第四章80C51单片机的功能单元
当定时器/计数器T2用做波特率发生器时,TH2的溢出不使TF2置位,不产生中断。因而,当定时器/计数器T2用做波特率发生器时,没有必要禁止中断。当定时器/计数器2用做波特率发生器时,若EXEN2置1,则T2EX端的信号产生负跳变时,EXF2将置1,但不会发生重装载或捕获操作。这时,T2EX可以作为一个附加的外部中断源。第四章80C51单片机的功能单元
在波特率发生器工作方式下,在T2计数过程中(即TR2=1之后),不能再读/写TH2和TL2的内容。如果读,则读出的结果不会精确(因为每个状态加1);如果写,则会影响T2的溢出而使波特率不稳定。在T2计数过程中,可以读出但不能改写RCAP2H和RCAP2L的内容。需要访问RCAP2H和RCAP2L,应事先关闭定时器工作。第四章80C51单片机的功能单元
4.2.4看门狗看门狗(watchdog)有时又称为定时器T3,它的作用是强迫单片机(微控制器)进入复位状态,使之从硬件或软件故障中解脱出来。即当单片机的程序进入了错误状态后,在一个指定的时间内,用户程序没有重装定时器T3,将产生一个系统复位。第四章80C51单片机的功能单元
在80C552中,定时器T3由一个11位的分频器和8位定时器T3组成,如图4--14所示。T3由外部引脚EW和电源控制寄存器中的PCON.4(WLE)和PCON.1(PD)控制。EW——看门狗定时器允许,低电平有效。EW=0时,允许看门狗定时器,禁止掉电方式;EW=1时,禁止看门狗定时器,允许掉电方式WLE(PCON.4)——看门狗定时器允许重装标志,若WLE置位,定时器T3只能被软件装入,装入后WLE自动清除。第四章80C51单片机的功能单元
图4---14看门狗(定时器T3)
第四章80C51单片机的功能单元
定时器T3的重装和溢出,产生复位的时间间隔,由装入T3的值决定。定时器T3的工作过程:在T3溢出时,复位8XC552,并产生复位脉冲输出至复位引脚RST。为防止系统复位,必须在定时器T3溢出前,通过软件对其进行重装。如果发生软件或硬件故障,将使软件对定时器T3重装失败,从而T3溢出导致复位信号的产生。用这样的方法可以在软件失控时,恢复程序的正常运行。
例如:
watchdog使用的一段程序如下:
T3EQU0FFH;定时器T3的地址
PCONEQU87H;PCON的地址
第四章80C51单片机的功能单元
WATCH_INTVEQU156;看门狗的时间间隔
;
LCALLWATCHDOG;看门狗的服务程序
WATCHDOG:ORLPCON,#10H;允许定时器T3重装MOVT3,#WATCHINTV;装载定时器T3
RET第四章80C51单片机的功能单元
4.2.5定时器/计数器的编程和使用1定时器/计数器溢出率的计算定时器/计数器运行前,在其中预先置入的常数,称为定时常数或计数常数(TC)。由于计数器是加1(向上)计数的,故而预先置入的常数均应为补码。t=Tc×(2LTC)=12/fosc(2L--TC)第四章80C51单片机的功能单元
其中:t——定时时间。Tc——机器周期。fosc——晶体振荡器频率。L——计数器的长度。对于T0及T1:方式0L=13213=8192方式1L=16216=65536方式2L=828=256对于T2:L=16216=65536第四章80C51单片机的功能单元
TC——定时器/计数器初值,即定时常数或计数常数。定时时间的倒数即为溢出率,即溢出率=1/t=fosc/12*1/(2L--TC)根据既定的定时时间t,计算出TC值,并将其转换成二进制数TCB,然后再分别送入THi、TLi(对于T0,i=0;对于T1,i=1)。
对于定时器/计数器T0、T1:方式0时:TCB=TCH+TCL,TCH——高8位,TCL——低5位MOVTHi,#TCH;送高8位MOVTLi,#TCL;送低5位第四章80C51单片机的功能单元
方式1时:TCB=TCH+TCL,TCH——高8位,TCL——低8位MOVTHi,#TCH;送高8位MOVTLi,#TCL;送低8位方式2时:TCB——8位MOVTHi,#TCBMOVTLi,#TCB对于定时器/计数器T2:与T0、T1的方式1相同。第四章80C51单片机的功能单元
2定时器/计数器的编程定时器/计数器的编程可分为以下几步:①写TMOD,只能用字节寻址。设置定时器/计数器的工作方式(M1、M0)、功能选择(C/)及是否使用门控(GATE)。②将时间常数或计数常数写入THi及TLi,也只能用字节寻址。根据上面的计算结果写入THi及TLi。③启动定时或计数,即写TCON,可用字节寻址也可用位寻址。如:第四章80C51单片机的功能单元
SETBTRi;启动定时器SETBTCON.4(T0)SETBTCON.6(T1)CLRTRi;停止定时器④定时器中断开放和禁止,即写IE(IE.7,IE.3,IE.1)。如:SETBETi;允许中断ETiSETBEA;开放中断CLRETi;禁止中断ETiCLREA;关闭中断第四章80C51单片机的功能单元
3定时器/计数器的应用举例例1使用定时器/计数器T0的方式0,设定1ms的定时。在P1.0引脚上产生周期为2ms的方波输出。晶体振荡器的频率为fosc=6MHz。解:①定时常数计算
振荡器的频率fosc=6MHz=6×106Hz,方式0计数器长度L=13,2L=213=8192定时时间t=1ms=1×10-3s定时常数第四章80C51单片机的功能单元
TC=2L-fosc×t/12=8192-6×106×10-3/12=8192-500=7692定时常数TC转换成二进制数TCB=1111000001100B所以TCH=0F0H,TCL=0CH②TMOD的设定(即控制字)第四章80C51单片机的功能单元
③编程MOVTMOD,#00H;写控制字MOVTH0,#0F0H;写定时常数MOVTL0,#0CHSETBTR0;启动T0SETBET0;允许T0中断SETBEA;开放CPU中断AJMP$ORG000BH;T0中断矢量地址AJMPINQP第四章80C51单片机的功能单元
ORG00××H;中断服务程序INQP:MOVTH0,#0F0H;重写定时常数MOVTL0,#0CHCPLP1.0;P1.0变反输出RETI;中断返回第四章80C51单片机的功能单元
例2.使用定时器/计数器T1的方式1,设定1ms的定时。同样,在P1.0引脚上产生周期为2ms的方波输出。晶体振荡器的频率为fosc=6MHz。解:①定时常数计算
振荡器的频率fosc=6MHz=6×106Hz,方式1计数器长度L=16,2L=216=65536第四章80C51单片机的功能单元
定时时间t=1ms=1×10-3s定时常数TC=2L-fosc×t/12=65536-6×106×10-312=65536-500=65036定时常数TC转换成二进制TCB=1111111000001100B=0FE0CH所以TCH=0FEH(高8位),TCL=0CH(低8位)②TMOD的设定(即控制字)第四章80C51单片机的功能单元
③编程ORG001BH;T1中断矢量地址AJMPINQP
ORG100H;主程序入口MOVTMOD,#10H;写控制字MOVTH1,#0FEH;写定时常数MOVTL1,#0CHSETBTR1;启动T1第四章80C51单片机的功能单元
SETBET1;允许T1中断SETBEA;开放CPU中断AJMP$ORG00××H;中断服务程序
INQP:MOVTH1,#0FEH;重写定时常数MOVTL1,#0CHCPLP1.0;P1.0变反输出RETI;中断返回第四章80C51单片机的功能单元
例3欲用80C51产生两个方波,其一周期为200μs,另一周期为400μs,而且该80C51使用串行口,并希望用定时器/计数器为波特率发生器。试问定时器/计数器该如何设置?解:这时宜用定时器/计数器T0的方式3工作,其中:TL0产生200μs方波,由P1.0输出;TH0产生400μs方波,由P1.1输出;定时器/计数器T1设置为方式2作波特率发生器用。为波特率设置的方便,采用晶振频率为fosc=9.216MHz。第四章80C51单片机的功能单元
①定时常数计算·TL0定时常数为TCL0:定时时间为tL0=100μsTCL0=28-9216×106×100×10-6/12=256-76.8=179.2单位μs,为十进制数值。十六进制数值为TCBL0=0B3H。第四章80C51单片机的功
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- Module 10 Unit 2 You shouldn't be late(说课稿)-2024-2025学年外研版(一起)英语五年级上册001
- 16 滑轮 说课稿-2023-2024学年科学六年级上册青岛版001
- 3 珍贵的淡水资源(说课稿)-2023-2024学年四年级科学下册大象版
- 3 我不拖拉 第2课时(说课稿)-2023-2024学年道德与法治一年级下册统编版
- 2023二年级数学上册 二 角的初步认识 锐角和钝角说课稿 西师大版
- 19《夜宿山寺》说课稿-2024-2025学年二年级上册语文统编版
- 2023八年级道德与法治上册 第四单元 维护国家利益 第八课 国家利益至上 第1框 国家好 大家才会好说课稿 新人教版
- 2024年八年级道德与法治下册 第三单元 人民当家作主 第五课 我国基本制度 第2框 根本政治制度说课稿 新人教版
- 2024年秋九年级历史上册 第一单元 古代亚非文明 第3课 古代印度说课稿2 新人教版001
- 2025北京建筑材料购货合同
- 2024年05月浙江金华成泰农商银行员工招考笔试历年参考题库附带答案详解
- 北京市海淀区2024-2025学年七年级上学期期末考试数学试题(含答案)
- 带看协议书范本(2篇)
- 2025-2030年中国科教玩具行业发展动态及前景趋势分析报告新版
- 股权投资项目建议书
- 2025年北京广播电视台招聘(140人)历年高频重点提升(共500题)附带答案详解
- 2024复工复产安全培训
- 中学生宿舍日常与管理
- 2025中国南光集团限公司校园招聘高频重点提升(共500题)附带答案详解
- 【历史】秦汉时期:统一多民族国家的建立和巩固复习课件-2024-2025学年统编版七年级历史上册
- 社区中心及卫生院65岁及以上老年人健康体检分析报告模板
评论
0/150
提交评论