51单片机内部资源及编程

合集下载

51单片机内部资源简介

51单片机内部资源简介
RXD(串行口输入)
TXD(串行口输出)
INT0(外部中断0输入) INT1 (外部中断1输入) T0(定时器0的外部输入)
T1 (定时器1的外部输入)
WR(片外数据存储器“写选通控制”输 出) RD (片外数据存储器“读选通控制”输 出)
P3口
二、P3口作为第二功能(内部硬件自动使Q=1) 此时引脚部分输入(Q=1、W=1) 。
单片机内部资源简介
1、整体简介 2、端口 3、定时器 4、串口 5、中断
MCS-51单片机的基本组成
片内资源 中央处理器CPU 程序存储器ROM 数据存储器RAM 并行I/O口 串行口 定时计数器 中断系统中断源
AT89S52 8位
STC89C52RC 8位
8KB
8KB
256B 4个P0—P3
P0口的每一位口线可驱动8个LS型TTL负载。
2. P1~P3口 • P1~P3口都是准双向口,作为输入用时,必须向相应的
端口写“1”; • P1~P3口内部有上拉电阻,其每一位口线可驱动4个LS
型TTL负载。
补充
“灌电流”与“拉电流”
• “灌电流”
“灌电流”与“拉电流”
• “拉电流”
P1、P3口的驱动能力有限,在低电平输出时, 一般也只能提供不到2mA的“灌电流”。
定时/计数器接口
一、定时/计数器的主要特性 1)STC89C52RC单片机三个16位的可编程定时/计数器:定时/计数器T0
和定时/计数器T1以及定时/计数器T2。
2)每个定时/计数器既可以对系统时钟计数实现定时,也可以对外部信 号计数实现计数功能,通过编程设定来实现。
3)每个定时/计数器都有多种工作方式,其中T0有四种工作方式;T1有 三种工作方式,T2有三种工作方式。通过编程可设定工作于某种方式。

51单片机的内部资源

51单片机的内部资源
01
T1
RX TX
EX0 1 EA 1 IE0
ET0 1 TF0
EX1 1 IE1
ET1 1 TF1
RI TI ≥1
SCON
ES 1
IP
PX0 1 0
PT0 1 0
PX1 1 0
PT1 1 0
PS 1 0
硬件查询




1


级 中断入口
中断源


0




级 中断入口
中断源
三、中断请求源
51单片机的五个中断请求源 : (1)INT0—外部中断请求0,由引脚INT0 (P3.2)输入,中断
中断请求
执行主 程序
断点
继续执行 主程序
中断响应
执行 中断 处理 程序
中断返回
主程序:CPU正常情况下运行的程序称为主程序。
中断源:把向CPU提出中断申请的设备称为中断源。
中断请求:由中断源向CPU所发出的请求中断的信号称中断 请求。
中断响应:CPU在满足条件情况下接受中断申请,终止现行 程序执行转而为申请中断的对象服务称中断响应。
IE0=0,无中断请求。
IE0=1,外部中断0有中断请求。当CPU响应该中断,转向中 断服务程序时,由硬件清“0”IE0。
(3)IT1—外部中断请求1为跳沿触发方式还是电平触发方式, 意义与IT0类似。
(4)IE1—外部中断请求1的中断请求标志位,意义与IE0类似。
(5)TF0—T0溢出中断请求标志位。 T0计数后,溢出时,由硬件置“1”TF0,向CPU申请中断,
串行中断是为串行数据传送的需要而设置的。每当串行 口发送或接收一组串行数据时,就产生一个中断请求。

51单片机C语言编程入门(详讲版)

51单片机C语言编程入门(详讲版)

中国科学技术大学业余无线电协会编目 录§1 前言 (1)§2 单片机简介 (2)2.1 数字电路简介 (2)2.2 MCS-51单片机简介 (2)2.3 Easy 51 Kit Pro简介 (5)2.4 Easy 51 Kit Pro电路功能分析 (5)§3 MCS-51单片机的C语言编程 (8)3.1 汇编语言 (8)3.2 建立你的第一个C项目 (8)3.3 生成hex文件 (12)3.4 Keil C语言 (14)3.5 单片机I/O (18)3.6 中断 (25)3.7 定时器/计数器 (27)3.8 定时器的应用举例 (29)3.9 外部中断 (34)3.10 串行通信 (38)3.11 定时器2 (43)3.12 看门狗 (47)3.13 空闲模式和掉电模式 (50)§4 MCS-51单片机C语言编程应用进阶 (51)4.1 扫描式键盘 (51)4.2 EEPROM芯片AT93C46的读写 (55)4.3 Keil C的高级使用 (63)§5 编写高质量的单片机C程序 (64)5.1 文件结构 (64)5.2 程序的版式 (66)5.3 单片机程序命名规则与变量选择 (70)5.4 表达式和基本语句 (73)5.5 函数设计 (77)5.6 单片机程序框架 (79)附图:Easy 51 Kit Pro电路图(最小系统板) (80)附图:Easy 51 Kit Pro电路图(学习板) (81)§1 前言什么是单片机,目前还没有一个确切的定义。

普通认为单片机是将CPU、RAM、ROM、定时器/计数器以及输入输出(I/O)接口电路等计算机主要部件集成在一块芯片上,这样所组成的芯片级微型计算机称为单片微型计算机(Single Chip Microcomputer)。

简称为单片微机或单片机。

利用单片机程序,可以实现对硬件系统的小型化的智能控制。

1.1 单片机的内部资源.doc

1.1 单片机的内部资源.doc

这节课的标题是点亮LED,但是需要大家了解的单片机基础知识的内容也非常多,特别是对于初学者,刚开始要在头脑中建立一个单片机的概念,课程最后通过点亮一个LED小灯来增加初学者对实验的好奇心和自信心。

1.1 单片机的内部资源在这里我所讲到的单片机内部资源,和传统单片机书籍讲单片机内部结构不同,我这里讲到的内部资源,是指我们作为单片机用户,单片机提供给我们可使用的一些内容。

总结起来,主要是三大资源:1、FLASH(程序存储空间,早期单片机是OTPROM)2、RAM(数据存储空间)3、SFR(特殊功能寄存器)在早期的技术里边,主要是用OTPROM(One Time Programable Read-Only Memory,即一次可编程只读存储器)来存储单片机的程序,随着技术的发展,FLASH的以其可重复擦写且大容量低成本的优点成为绝大多数单片机的程序存储器。

对于单片机来说FLASH最大的意义是断电后数据不丢失,这个概念类似于我们电脑的硬盘,你看我们保存了电影、文档、音乐等文件,我们把电源关掉后,下次重新开电脑,所有的文件都还照样存在。

RAM是单片机的数据存储空间,用来存储程序运行过程中产生的和需要的数据,和我们电脑的内存是一个概念,其实最典型的比喻是我们的计算器,我们用计算器计算个加减法,一些中间的数据都会保存在RAM里边,关电后数据丢失,所以我们每次打开计算器,都是从归零开始计算。

但是他的优点第一是读写速度非常快,第二是理论上是可无限次写入的,即寿命无限,不管程序怎么运行怎么读写它都不会坏的。

第三个资源是SFR,特殊功能寄存器。

这个概念大家可能刚开始理解不了,但是一定要记住。

单片机有很多很多功能,每个功能都会配一个或多个SFR,我们就是通过对SFR的读写来实现单片机的多种多样的功能的。

讲到这里,我们来了解一下51单片机。

通常我们一说到51单片机,指的都是兼容Intel MCS-51体系架构的一系列单片机。

mcs-51系列单片机基本结构与工作原理

mcs-51系列单片机基本结构与工作原理


1)电源引脚VCC和VSS

VCC:40脚,电源端,+5V

VSS:20脚,接地端(GND)

2)时钟电路引脚

XTAL1:19脚,外接晶振输入引脚。

XTAL2:18脚,外接晶振输出引脚。

3)控制线引脚

共4根,其中3根为双功能

①RST/VPD :9脚,复位/备用电源。

RST---通过外接复位电路实现上电复位或按键复位。
直接寻址 寄存器寻址
(4)MOV 60H,@R1 直接寻址 寄存器间接寻址
表2-2 特殊功能寄存器SFR的名称及地址(一)
§ MCS-51的扩展应用
▪ 一、单片机Байду номын сангаас展的基本概念 ▪ 1、单片机最小系统:使单片机运行的最少器件构成的 ▪ 系统,就是最小系统。 ▪ 无ROM芯片:8031 必须扩展ROM,复位、晶振电路 ▪ 有ROM芯片:89C51等,不必扩展ROM,只要有复位、 ▪ 晶振电路 ▪ 2、扩展使用的三总线:
▪ 清零,用来选择8051的工作寄存器区。其选择方法见表2-1
▪ OV、( PSW.2)溢出标志位。当带符号数运算(加法或减法)结果超 ▪ 出范围(-127-+127)时,有溢出,OV=1;否则OV=0。 ▪ --、( PSW.1)用户定义标志位。 ▪ P、( PSW.0)奇偶校验位。在每个指令周期由硬件按累加器A中“1”的 ▪ 个数为奇数或偶数而为“1”或“0”。因此,P可用指示操作结果(累加器
direct
8 位内部RAM单元的地址
#data:
指令中的8 位常数。
#data16
指令中的16位常数。

第3章MCS-51单片机的内部资源及应用

第3章MCS-51单片机的内部资源及应用
出数据写入P0~P3的端口锁存器,然后通过输出驱动器送 到端口引脚线。例如,下面的指令均可在P0口输出数据。
MOV P0, A ANL P0, #data ORL P0, A
(2)读端口数据方式: CPU读入的这个数据并非端口引脚线 上的数据。读端口数据可以直接读端口。例如,下面的指 令均可以从P1口输入数据,这是锁存器上的数据。
2.P2口
P2口常用做外部存储器的高8位地址 口。当不用做地址口时,P2口也可作为 通用I/O口,这时它也是一个准双向I/O 口。不必外接上拉电阻就可以驱动任何 MOS驱动电路,且只能驱动4个TTL输 入。P2口的位结构如右图所示。
3.P1口
P1口常用做通用I/O口,它也是一 个标准的准双向I/O口,不必外接上拉 电阻就可以驱动任何MOS驱动电路, 且只能驱动4个TTL输入。P1口的位结 构如右图所示。
制。
(3)中断允许控制寄存器IE (0A8H)
EA
ES ET1 EX1 ET0 EX0
(3)中断允许控制寄存器IE (0A8H)
中断与子程序的最主要区别:子程序是预先安排好的,中断 是随机发生的。
中断涉及的几个环节:中断源、 中断申请、开放中断、保护 现场、中断服务、恢复现场、中断返回。
2. 中断源
中断源是指引起中断的设备或事件,或发出中断请求的源头。
3. 中断的分类
中断按功能通常可分为可屏蔽中断、非屏蔽中断和软件中断三类。 可屏蔽中断是指CPU可以通过指令来允许或屏蔽中断的请求。 非屏蔽中断是指CPU对中断请求是不可屏蔽的,一旦出现,CPU必须响应。 软件中断则是指通过相应的中断指令使CPU响应中断。
1.I/O口直接用于输入/输出
在I/O口直接用做输入/输出时,CPU既可以把它们看做数据口,也可以看 做状态口,这是由用户决定的。

51单片机资源分配和功能定义

51单片机资源分配和功能定义

51单片机资源分配和功能定义1.引言在51单片机的开发过程中,资源的合理分配和功能的准确定义是确保项目成功的关键。

本文将介绍51单片机资源的分配策略以及功能定义的步骤和方法。

2. 51单片机资源分配2.1内存资源分配在51单片机中,内存资源的合理分配对于程序的运行至关重要。

通常情况下,内存资源可以分为3个部分:内部R AM、外部R AM和R OM。

内部R AM分为数据内存和特殊功能寄存器(S FR),而外部R AM一般用于存储大量的数据。

R OM则用于存储程序代码。

在进行内存资源分配时,需要考虑以下几个因素:-程序的规模:根据程序的规模和功能需求,合理分配数据内存和外部R A M的大小;-数据内存和SF R的分配:根据程序的需求,合理分配数据内存和SF R 的地址;-R OM的分配:根据程序代码的大小,合理分配R OM的大小。

2.2I/O资源分配51单片机的I/O资源分配主要涉及到引脚的使用和外设的选择。

在进行I/O资源分配时,需要考虑以下几个因素:-引脚的数量和类型:根据项目需求和外设的连接方式,选择合适的引脚数量和类型;-引脚的功能定义:根据项目需求,在程序中准确定义每个引脚所承担的功能;-外设的选择:根据项目需求和功能要求,选择合适的外设进行连接和使用。

3.功能定义在进行51单片机的功能定义时,需要明确每个功能的需求和实现方式。

以下是功能定义的步骤和方法:3.1需求分析在功能定义之前,首先进行需求分析是十分重要的。

通过与项目团队的沟通和理解,明确项目的功能需求和目标。

3.2功能划分根据需求分析的结果,将项目功能进行划分,并确定每个功能的优先级和重要性。

3.3功能描述对于每个功能,进行详细的功能描述。

功能描述应包括功能的输入、输出、处理逻辑以及与其他功能的关联。

3.4功能实现根据功能描述,确定功能的具体实现方式。

可以使用编程语言来实现功能,也可以利用硬件电路来实现。

4.总结本文介绍了51单片机资源分配和功能定义的相关内容。

No.5C51程序设计

No.5C51程序设计
指针的存放区默认 指定指针的存放区
– 指定存储区的指针
• 指定存储区的指针在指针的声明中经常包含一个 存储类型标识符指向一个确定的存储区。 • 例如: char data *str; int xdata *ptr; long code *tab;
• 指定存储区指针存放时不再像通用指针那样需 要保存存储类型,指向idata、data 、bdata 和pdata存储区的指针只需要一个字节存放, 而code和xdata指针也才需要两字节。从而减 少了指针长度,节省了存储空间。
– 如:sfr16 TL0=0x8A;
– 特殊功能寄存器中特定位的定义
• 在C51中可以利用关键字sbit定义可独立寻址访问 的位变量
• 对一般位变量的定义
– 当位变量位于内部RAM的可位寻址区(20H~2FH 单元)时,可以利用C51编译器提供的bdata存储器 类型进行访问 – 带有bdata类型的变量可以进行字节或位寻址,用 sbit指定bdata变量的相应位后就可以进行位寻址。
– 考虑存储器结构 – 正确使用片内外RAM、特殊功能寄存器 – 正确处理接口芯片收发数据 – 不需要具体组织和分配存储器资源 – 结构模块化,思路与思维相同 – 但要与单片机结构相关联,否则不能正确映射
• C程序:
• C51:
– – – –
自动完成存储单元分配(内定义) 可编制常见接口芯片通用驱动函数 可采用模块化设计应用程序 加快开发速度
var=XBYTE[0x8000]; 头文件内定义的函数 XBYTE[0x8000]=0x21;
P71
– 例如:unchared xdta xram[0x8000]_at_0x1000; //在外部RAM1000H开始定义了一个一维数组
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第6章 MCS-51单片机内部资源及编程
如果定时时间大于65536μs,这时用一个定时/计数器直接处理不能实 现,这时可用两个定时/计数器共同处理或一个定时/计数器配合软件计 数方式处理。 【例6-3】设系统时钟频率为12MHZ,编程实现从P1.1输出周期为 1s的方波。 根据例6-2的处理过程,这时应产生500ms的周期性的定时, 定时到则对P1.1取反就可实现。由于定时时间较长,一个定时/计数器 不能直接实现,可用定时/计数器T0产生周期性为10ms的定时,然后 用一个寄存器R2对10ms计数50次或用定时/计数器T1对10ms计数50 次实现。系统时钟为12MHZ,定时/计数器T0定时10ms,计数值N为 10000,只能选方式1,方式控制字为00000001B(01H),初值X: X=65536-10000=55536=1101100011110000B 则TH0=11011000B=D8H,TL0=11110000B=F0H。
二.定时/计数器的控制寄存器TCON
TCON
(88H)
D7
TF1
D6
TR1
D5
TF0
D4
TR0
D3
IE1
D2
IT1
D1
IE0
D0
IT0
其中: TF1:定时/计数器T1的溢出标志位,当定时/计数器T1计满时,由 硬件使它置位,如中断允许则触发T1中断。进入中断处理后由内部硬 件电路自动清除。 TR1:定时/计数器T1的启动位,可由软件置位或清零,当TR1=1时 启动;TR1=0时停止。
M1 0 0 1 1 M0 0 1 0 1 工作方式 0 1 2 3 方式说明 13位定时/计数器 16位定时/计数器 8位自动重置定时/计数器 两个8位定时/计数器(只有T0有)
第6章 MCS-51单片机内部资源及编程
C/T:定时或计数方式选择位,当C/T=1时工作于计数方式;当C/T=0 时工作于定时方式。 GATE:门控位,用于控制定时/计数器的启动是否受外部中断请求信号 的影响。
第6章 MCS-51单片机内部资源及编程
由于是8位的定时/计数方式,因而最大计数值(满值)为2的8 次幂,等于256。如计数值为N,则置入的初值X为: X=256-N 如定时/计数器T0的计数值为100,则初值为256-100=156,转 换成二进制数为10011100B,则TH0= TL0=10011100B。 注意: 由于方式2计满后,溢出信号会触发三态门自动地把TH0(或 TH1)的值装入TL0(或TL1)中,因而如果要重新实现N个单位的 计数,不用重新置入初值。
;中断处理程
第6章 MCS-51单片机内部资源及编程
(2)采用查询方式处理的程序
汇编程序: ORG 0000H LJMP MAIN ORG 0100H ;主程序 MAIN:MOV TMOD,#02H MOV TH0,#06H MOV TL0,#06H SETB TR0 LOOP:JBC TF0,NEXT ;查询计数溢出 SJMP LOOP NEXT:CPL P1.0 SJMP LOOP SJMP $ END C语言程序: #include <reg51.h> //包含特殊功 能寄存器库 sbit P1_0=P1^0; void main() { char i; TMOD=0x02; TH0=0x06;TL0=0x06; TR0=1; for(;;) { if (TF0) { TF0=0;P1_0=! P1_0;} //查询计数溢出 } }
第6章 MCS-51单片机内部资源及编程
TF0:定时/计数器T0的溢出标志位,当定时/计数器T0计满时,由硬 件使它置位,如中断允许则触发T0中断。进入中断处理后由内部硬件 电路自动清除。 TR0:定时/计数器T0的启动位,可由软件置位或清零,当TR0=1时启 动;TR0=0时停止。
6.2.3 定时/计数器的工作方式 一.方式0
四.方式3 方式3只有定时/计数器T0才有,当M1M0两位为11时,定时/计数 器T0工作于方式3,方式3的结构如下图. 方式3下,定时/计数器T0被分为两个部分TL0和TH0,其中,TL0 可作为定时/计数器使用,占用T0的全部控制位:GATE、C/T、TR0 和TF0;而TH0固定只能作定时器使用,对机器周期进行计数,这时 它占用定时/计数器T1的TR1位、TF1位和T1的中断资源。
第6章 MCS-51单片机内部资源及编程
二.定时/计数器的应用 通常利用定时/计数器来产生周期性的波形。利用定时/计数器产生 周期性波形的基本思想是:利用定时/计数器产生周期性的定时,定时 时间到则对输出端进行相应的处理。如产生周期性的方波只须定时时 间到对输出端取反一次即可。 【例6-2】 设系统时钟频率为12MHZ,用定时/计数器T0编程实现 从P1.0输出周期为500μs的方波。 分析:从P1.0输出周期为500μs的方波,只须P1.0每250μs取反一 次则可。当系统时钟为12MHZ,定时/计数器T0工作于方式2时,最 大的定时时间为256μs,满足250μs的定时要求,方式控制字应设定 为00000010B(02H)。系统时钟为12MHZ,定时250μs,计数值N 为250,初值X=256-250=6,则TH0=TL0=06H。
第6章 MCS-51单片机内部资源及编程
6.2.4 定时/计数器的初始化编程及应用 一.定时/计数器的编程
MCS-51单片机定时/计数器初始化过程如下: 1.根据要求选择方式,确定方式控制字,写入方式控制寄存器 TMOD。 2.根据要求计算定时/计数器的计数值,再由计数值求得初值,写 入初值寄存器。 3.根据需要开放定时/计数器中断(后面须编写中断服务程序)。 4.设置定时/计数器控制寄存器TCON的值,启动定时/计数器开始 工作。 5.等待定时/计数时间到,到则执行中断服务程序;如用查询处理则 编写查询程序判断溢出标志,溢出标志等于1,则进行相应处理。
第6章 MCS-51单片机内部资源及编程
(1)采用中断处理方式的程序: 汇编程序: ORG 0000H LJMP MAIN ORG 000BH 序 CPL P1.0 RETI ORG 0100H ;主程序 MAIN:MOV TMOD,#02H MOV TH0,#06H MOV TL0,#06H SETB EA SETB ET0 SETB TR0 SJMP $ END C语言程序: #include <reg51.h> //包含特殊功 能寄存器库 sbit P1_0=P1^0; void main() { TMOD=0x02; TH0=0x06;TL0=0x06; EA=1;ET0=1; TR0=1; while(1); } void time0_int(void) interrupt 1 //中断服务程序 { P1_0=!P1_0; }
第6章 MCS-51单片机内部资源及编程
6.2 定时/计数器接口
6.2.1 定时/计数器的主要特性 1.MCS-51系列中51子系列有两个16位的可编程定时/计数器: 定时/计数器T0和定时/计数器T1,52子系列有三个,还有一个定时/ 计数器T2。 2.每个定时/计数器既可以对系统时钟计数实现定时,也可以对 外部信号计数实现计数功能,通过编程设定来实现。 3.每个定时/计数器都有多种工作方式,其中T0有四种工作方式; T1有三种工作方式,T2有三种工作方式。通过编程可设定工作于某 种方式。 4.每一个定时/计数器定时计数时间到时产生溢出,使相应的溢 出位置位,溢出可通过查询或中断方式处理。
Hale Waihona Puke 第6章 MCS-51单片机内部资源及编程
(1)用寄存器R2作计数器软件计数,中断处理方式。 汇编程序: ORG 0000H MOV TL0,#0F0H LJMP MAIN INC R2 ORG 000BH CJNE R2,#32H,NEXT LJMP INTT0 CPL P1.1 ORG 0100H MOV R2,#00H MAIN:MOV TMOD,#01H NEXT:RETI MOV TH0,#0D8H END MOV TL0,#0F0H MOV R2,#00H SETB EA SETB ET0 SETB TR0 SJMP $ INTT0:MOV TH0,#0D8H
二.方式1 方式1的结构与方式0结构相同,只是把13位变成16位, 16位的加 法计数器被全部用上。
由于是16位的定时/计数方式,因而最大计数值(满值)为2的16 次幂,等于65536。如计数值为N,则置入的初值X为: X=65536-N 如定时/计数器T0的计数值为1000,则初值为655361000=64536,转换成二进制数为1111110000011000B,则 TH0=11111100B,TL0=00011000B。
第6章 MCS-51单片机内部资源及编程
加法计数器在使用时注意两个方面。 第一,由于它是加法计数器,每来一个计数脉冲,加法器中的内 容加1个单位,当由全1加到全0时计满溢出,因而,如果要计N个单 位,则首先应向计数器置初值为X,且有: 初值X=最大计数值(满值)M-计数值N 在不同的计数方式下,最大计数值(满值)不一样,一般来说, 当定时器/计数器工作于R位计数方式时,它的最大计数值(满值) 为2的R次幂。 第二,当定时/计数器工作于计数方式时,对芯片引脚T0(P3.4) 或T1(P3.5)上的输入脉冲计数,计数过程如下:在每一个机器周 期的S5P2时刻对T0(P3.4)或T1(P3.5)上信号采样一次,如果 上一个机器周期采样到高电平,下一个机器周期采样到低电平,则 计数器在下一个机器周期的S3P2时刻加1计数一次。因而需要两个 机器周期才能识别一个计数脉冲,所以外部计数脉冲的频率应小于 振荡频率的1/24。
第6章 MCS-51单片机内部资源及编程
C语言程序: #include <reg51.h> //包含特殊功能寄存器库 sbit P1_1=P1^1; char i; void main() { TMOD=0x01; TH0=0xD8;TL0=0xf0; EA=1;ET0=1; i=0; TR0=1; while(1); } void time0_int(void) interrupt 1 //中断服务程序 { TH0=0xD8;TL0=0xf0; i++; if (i= =50) {P1_1=! P1_1;i=0;} }
相关文档
最新文档