单片机原理与真实性项目应用教程391_第1页
单片机原理与真实性项目应用教程391_第2页
单片机原理与真实性项目应用教程391_第3页
单片机原理与真实性项目应用教程391_第4页
单片机原理与真实性项目应用教程391_第5页
已阅读5页,还剩386页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

国家骨干院校优质专业核心课程

单片机应用学习要求:上课记笔记独立完成作业认真做好实验学习方法:动手实践Practiceisabestwaytolearning.一、十进制ND

符号集:0~9规则:逢十进一。

例:1234.5=1×103+2×102+3×101+4×100+5×10-1加权展开式以10称为基数,各位系数为0~9。

一般表达式:ND=dn-1×10n-1+dn-2×10n-2+…+d0×100+d-1×10-1+…进位计数制二、二进制NB

符号集:0、1规则:逢二进一。

例:1101.101=1×23+1×22+0×21+1×20+1×2-1+1×2-3

加权展开式以2为基数,各位系数为0、1。

一般表达式:

NB=bn-1×2n-1+bn-2×2n-2+…+b0×20+b-1×2-1+…三、十六进制NH

符号集:0~9、A~F规则:逢十六进一。

例:DFC.8=13×162+15×161+12×160+8×16-1

展开式以十六为基数,各位系数为0~9,A~F。 一般表达式:

NH=hn-1×16n-1+hn-2×16n-2+…+h0×160+h-1×16-1+…不同进位计数制之间的转换一、二进制和十六进制数转换成十进制数

先展开,然后按照十进制运算法则求和。举例:1011.1010B=1×23+1×21+1×20+1×2-1+1×2-3=11.625DFC.8H=13×162+15×161+12×160+8×16-1=3580.5二、二进制与十六进制数之间的转换24=16,四位二进制数对应一位十六进制数。举例:3AF.2H=0011

1010

1111.0010= 3AF.21110101111.001B

1111101.11B=0111

1101.1100=7D.CH

7D.C

三、十进制数转换成二、十六进制数

1.整数转换法

“除基取余”:十进制整数不断除以转换进制基数,直至商为0。每除一次取一个余数,从低位排向高位。

举例:

(1)39转换成二进制数

39=100111B

23912

1912

912

402

202

11

0(2)208转换成十六进制数

208=D0H16208余01613余13=DH 0

2.小数转换法

“乘基取整”:用转换进制的基数乘以小数部分,直至小数为0或达到转换精度要求的位数。每乘一次取一次整数,从最高位排到最低位。举例:

(1)0.625转换成二进制数1) 0.625×2

2)

0.2501(b- × 23)

0.500(b- × 2 1.0 1(b-0.625=0.101B(2)0.625转换成十六进制数0.625×16=10.0

0.625=0.AH(3)208.625转换成十六进制数208.625=D0.AH带符号数的表示方法

机器中,数的符号用“0”、“1”表示。最高位作符号位,“0”表示“+”,“1”表示“-”。一、机器数与真值机器数:机器中数的表示形式,其位数通常为8的倍数真值:机器数所代表的实际数值。举例:一个8位机器数与它的真值对应关系如下:真值: X1=+84=+1010100B

X2=-84=-1010100B

机器数:[X1]机=01010100[X2]机=11010100二、原码(TrueForm)

最高位为符号位,0表示“+”,1表示“-”。数值位与真值数值位相同。例8位原码机器数:真值:x1=+1010100B

x2=-1010100B

机器数:[x1]原=01010100

[x2]原=11010100原码表示简单直观,但0的表示不唯一,加减运算复杂。三、补码(Two’sComplement)

正数的补码表示与原码相同。负数补码的符号位为1,数值位等于求反加1。例:求8位补码机器数: x=+4 [x]补=00000100

x=-4

原码

10000100

反码

11111011

+1[x]补=11111100

补码表示的优点: 0的表示唯一,加减运算方便

数的补码与“模”有关“模”即计数系统的量程。

当X<0,[X]补=模-|X|。

8位二进制数的模为:256

当X<0,[X]补=256-|X|

=255-|X|+1

=[X]反码+1

所以[X]反码=255-|X|

规则:求反加1,符号位不变。

如:10001101B其补码:11110010

规定:00000000B为0

10000000B不是-0,而是-1288位机器数表示的真值四、机器数与真值之间的转换

1.真值®机器数-128~+127(1)X1=+127,X2=-127,求[X]原、[X]补[X1]原=[X1]补=01111111=7FH [X2]原=11111111=FFH [X2]补=10000001=81H(2)X1=+255,X2=-255,求[X]原、[X]补[X1]原=[X1]补=0000000011111111=00FFH [X2]原=1000000011111111=80FFH [X2]补=1111111100000001=FF01H

二—十进制编码BCD码BCD码(BinaryCodedDecimal)二进制代码表示的十进制数。一、8421BCD码例:求十进制数876的BCD码[876]BCD=100001110110 876=36CH=1101101100B二、BCD码运算

十进制调整:计算机实际按二进制法则计算,加入十进制调整操作,可计算BCD码。

十进制调整方法:当计算结果有非BCD码或产生低四位(最高位)进位或借位,进行加6或加-6调整。例:计算BCD码38+29=67

00111000

[38]BCD

+00101001+[29]BCD 01100001产生非BCD

+0000

0110

加+06调整

01100111计算BCD码70+39=X1=+120,X2=-120,求[X]原、[X]补国家骨干院校优质专业核心课程

单片机应用--251.1任务一:51单片机结构、引脚功能、最小系统电路图1.2任务二:KeilC51软件的操作及点亮

一个放光二极管项目一:单个发光二级管点亮的实现

1.1任务一:51单片机结构、引脚功能、最小系统电路图什么是单片机?◆单板机

将CPU芯片、存储器芯片、I/O接口芯片和简单的I/O设备(小键盘、LED显示器)等装配在一块印刷电路板上,再配上监控程序(固化在ROM中),就构成了一台单板微型计算机(简称单板机)。--26

单板机--27

◆单片机

在一片集成电路芯片上集成微处理器、存储器、I/O接口电路,从而构成了单芯片微型计算机,即单片机。Intel公司推出了MCS-51系列单片机:集成8位CPU、4K字节ROM、128字节RAM、4个8位并口、1个全双工串行口、2个16位定时/计数器。寻址范围64K,并有控制功能较强的布尔处理器。单板机单片机

80C51系列介绍--28

Intel:80C31、80C51、87C51,80C32、80C52、87C52等;

﹡ATMEL:89C51、89C52、89C2051等;

Philips、华邦、Dallas、STCSiemens(Infineon)等公司的许多产品。

80C51是MCS-51系列中的一个典型品种;其它厂商以8051为基核开发出的CMOS工艺单片机产品统称为80C51系列。当前常用的80C51系列单片机主要产品有:80C51的引脚封装--2940个引脚分为四类:电源、地2条;时钟2条;控制4条;I/O线32条。电源引脚:Vcc(+5V)

和Vss(接地)外接晶振引脚:XTAL1,XTAL2I/O引脚P0、P1、P2和P3控制和复位引脚ALE、、、RST。1.I/O口线功能:4个8位并行I/O接口引脚:P0.0~P0.7(低8位地址、数据、I/O口)P1.0~P1.7(准双向口)P2.0~P2.7(高8位地址、I/O)P3.0~P3.7(I/O口、第二功能)为多功能引脚,可自动切换用作数据总线、地址总线、控制总线和或I/O接口外部引脚--30P0.0--P0.7(39-32):双向I/O口P0.第二功能是在访问外部存储器时,可分时用作低8位地址和8位数据线;在对8751编程和校验时,用于数据的输人/输出。P0口能以吸收电流的方式驱动8个LS型TTL负载--31Pl.0--Pl.7(1-8):双向I/O口Pl。P1口能驱动(吸收或输出电流)4个LS型TTL负载。在对EPROM编程和程序验证时,它接收低8位地址。在8052单片机中P1.0还用作定时器2的计数触发输人端T2,P1.1还用作定时器2的外部控制端T2EX。--32P2.0--P2.7(21-28):双向I/O口P2。P2口可以驱动(吸收或输出电流)4个LS型TTL负载。第二功能是在访问外部存储器时,输出高8位地址。在对EPROM编程和校验时,它接收高位地址。P3.0--P3.7(10-17):双向I/O口P3。P3口能驱动(吸收或输出电流)4个LS型TTL负载。P3口的每条引脚都有各自的第二功能。--33--34表2.7P3口的第二功能复位引脚9RST/VPD复位的原理:利用复位电路的电解电容的充电原理,使RST得到一个大于2个机器周期的高电平,完成复位。VPD:掉电保护。当+5V电源突然消失了,电解电容放电,电容正向板就好比一个+5V电源,可以提供一定时间的高电平,CPU可以命令数据存储器把数据保存下来。--35--36复位后各寄存器的状态大部分寄存器都清零。SP堆栈指针寄存器:0x0707h/07HP0~P3:全1,高电平。SBUF串行口数据缓冲寄存器:不确定。--37ALE/(30):ALE是地址锁存允许信号端,一般常用来连接外接地址锁存器芯片的锁存引脚

在访问外部存储器时,用来锁存由P0口送出的低8位地址信号。在不访问外部存储器时,ALE以振荡频率1/6的固定速率输出脉冲信号。因此它可用作对外输出的时钟。但要注意,当对片外RAM进行读/写时,ALE信号不是周期性的。

第二功能是作为编程写入(固化程序)编程脉冲输人端。

--38它是外部程序存储器ROM的读选通信号,一般连接程序存储器的选通信号引脚。在执行访问外部ROM指令时,会自动产生PSEN信号;而在访问外部数据存储器RAM或访问内部ROM时,不产生PSEN信号。--39(29):

外部程序存储器地址允许输入端/固化编程电压输入端,它是访问外部存储器的控制信号。

当EA高电平时,访问内部程序存储器;但当程序计数器PC的值超过OFFFH(对8051/80051/8751)或1FFFH(对8052)时,将自动转向执行外部程序存储器内的程序。当EA保持低电平时,只访问外部程序存储器,不管是否有内部程序存储器。第二功能VPP,对于片内有EPROM的芯片固化编程时,它作为施加较高编程电压(一般12~21V)的输入端。--40(31):XTALl(19):接外部晶体的一个引脚。当单片机采用外部时钟信号时,此脚应接地。

XTAL2(18):接外部晶体的一个引脚。当单片机采用外部时钟信号时,外部时钟信号由此引脚接入。

使用单片机内部振荡电路时,用来接外部晶体的两端和微调电容。当单片机采用外部时钟信号时,则用来输入时钟脉冲。Vss(20):接地端。

Vcc(40):电源端,接十5V。--41--421、振荡周期Tosc晶体振荡器的周期=

1/fosc2、状态周期s=2Tosc=2/fosc3、机器周期:CPU完成一次读或者写的操作所用的时间单位。

T=6S=12Tosc=12/foscT=6S=12T外=12/f外12MHZ=12*1000KHZ=12*1000*1000HZT=12/12*10^6HZ=1*10^-6s=1us1s=1000ms=1000*1000us--434、指令周期:CPU执行完一条指令所需时间51单片机的指令,单周期指令(执行完一条指令只需要1个机器周期)、双周期指令(执行完一条指令只需要2个机器周期)、四周期指令(执行完一条指令只需要4个机器周期,乘法指令、除法指令)。指令长度:单字节指令,双字节指令、三字节指令--44--45--461、程序存储器的结构如上图所示,包括片内和片外程序存储器两个部分。其主要用来存放编好的用户程序和表格常数,它以16位的程序计数器PC作为地址指针,故寻址空间为64KB,也即是8051单片机外部可扩展最多达64KB的EPROM。EA接高电平:CPU首先从片内0000H字节单元取取指令;超过0FFFH后转向片外扩展的EPROM对应单元。EA接低电平:复位后CPU直接从片外EPROM的0000H单元开始取指令执行。--472、片外数据存储器

8051片外最大可以扩展数据存储器的容量是64KB。地址范围为0000H~FFFFH。3、片内数据存储器8051片内有数据存储器地址范围为00H~0FFH。--48--49(1)工作寄存器区域RS1RS0地址区域工作寄存器区0000H~07H,0区

0108H~0FH,1区

1010H~17H,2区

1118H~1FH,3区--50(2)位寻址区

地址为20H~2FH的16个字节单元中共128位,每一位都有相应的位地址,可用位寻址方式对其进行置位、复位、内容传送、逻辑运算等操作。128位的位地址定义为00H~7FH,其位地址分布如表所示。--51--521、位地址低位<8H字节地址2XHX=位地址的高位*2位号=位地址低位2、位地址低位>=8H字节地址2XHX=位地址的高位*2+1位号=位地址低位-8--53(3)用户RAM区

地址范围为30H~7FH,作为数据缓冲器使用,可用于原始数据及运算结果的存储。

注意:堆栈一般设在此区域内(4)特殊功能寄存器区(SFR区)

此区离散地分布着21个特殊功能寄存器。这些特殊功能寄存器的符号、名称及地址如右表所示。

地址能被8整除的特殊功能寄存器,可以位寻址。--54--55--56--57单片机I/O口的使用对单片机的控制,其实就是对I/O口的控制,无论单片机对外界进行何种控制,或接受外部的何种控制,都是通过I/O口进行的。51单片机总共有P0、P1、P2、P3四个8位双向输入输出端口,每个端口都有锁存器、输出驱动器和输入缓冲器。--58P0、P1、P2、P3相同点:都是8位的双向IO口。都拥有端口专有的8位特殊功能寄存器。可以字节寻址也可以位寻址。复位以后四个端口都是高电平。--59P0、P1、P2、P3不同点:P0内部没有上拉电阻,做输出时要外接上拉电阻。P0接外设可以做低8位地址线和8位数据线。P1、P2、P3都是准双向接口。P2接外设做高8位地址线。与P0口共同构成16位地址线。P3每根引脚都有第二功能。--60P3第二功能各引脚功能定义:P3.0:RXD串行口输入P3.1:TXD串行口输出P3.2:INT0外部中断0输入P3.3:INT1外部中断1输入P3.4:T0定时器0外部输入P3.5:T1定时器1外部输入P3.6:WR外部写控制P3.7:RD外部读控制--61国家示范性高职院校建设重点培育院校优质专业核心课程

单片机应用2.1任务一:C程序的数据类型、运算符、选择语句、循环语句简单延时程序2.2任务二:流水灯的定时计数控制2.3任务三:流水灯的中断控制情境二:流水灯的控制2.1任务一:C程序的数据类型、运算符、选择语句、循环语句简单延时程序一、数据类型:先来简单说说C语言的标识符和关键字。标识符是用来标识源程序中某个对象的名字的,这些对象可以是语句、数据类型、函数、变量、数组等等。C语言是大小字敏感的一种高级语言,如果我们要定义一个定时器1,可以写做"Timer1",如果程序中有"TIMER1",那么这两个是完全不同定义的标识符。20=(10100)B每四位二进制对应一位十六进制10100B=()HECH原码反码补码无符号数有符号数原码十进制转换成二进制,自然码无符号数有符号数+-最高位是拿来表示+、-正数:最高位为1负数:最高位为020:00010100B-20:10010100B

八位的二进制,除符号位,剩下七位表示数制大小。原码有符号二进制数数值范围:-128~127(01111111)无符号二进制数数值范围:0~255(11111111)地址数是无符号数据数据是由符号数据,计算机内部表示负数用补码表示正数的补码就是原码,反码也是原码。负数的补码需要转换。负数的反码符号位不变,其他的数值位,取反。-2010010100B反码11101011B负数的补码补码=反码+1-2010010100B反码11101011B补码111101100BECH-56补码:原码10111000

反码11000111

补码111001000原码和补码有什么关系-2010010100B20:00010100B反码11101011B补码111101100BECH00010100B14H100000000B100H11101100BECH-56补码:原码10111000

反码11000111

补码111001000C8H0011100038H100000000100H负数的补码+该负数绝对值的原码=100H-56的补码:100H38HC8H16进制,高位借位给低位是1610进制,高位借位给低位是10标识符由字符串,数字和下划线等组成,注意的是第一个字符必须是字母或下划线,如“1Timer”是错误的,编译时便会有错误提示。有些编译系统专用的标识符是以下划线开头,所以一般不要以下划线开头命名标识符。标识符在命名时应当简单,含义清晰,这样有助于阅读理解程序。在C51编译器中,只支持标识符的前32位为有效标识,一般情况下也足够用了。关键字则是编程语言保留的特殊标识符,它们具有固定名称和含义,在程序编写中不允许标识符与关键资亦同。在KEILuVision2中的关键字除了有ANSIC标准的32个关键字外还根据51单片机的特点扩展了相关的关键字。其实在KEILuVision2的文本编辑器中编写C程序,系统可以把保留字以不同颜色显示,缺省颜色为天蓝色。表中列出了KEILuVision2C51编译器所支持的数据类型数据类型长度值域unsignedchar单字节0~255signedchar单字节-128~+127unsignedint双字节0~65535signedint双字节-32768~+32767unsignedlong四字节0~4294967295signedlong四字节-2147483648~+2147483647float四字节±1.175494E-38~±3.402823E+38*1~3字节对象的地址bit位0或1sfr单字节0~255sfr16双字节0~65535sbit位0或11、char字符类型char类型的长度是一个字节,通常用于定义处理字符数据的变量或常量。分无符号字符类型unsignedchar和有符号字符类型signedchar,默认值为signedchar类型。unsignedchar类型用字节中所有的位来表示数值,所可以表达的数值范围是0~255。signedchar类型用字节中最高位字节表示数据的符号,"0"表示正数,"1"表示负数,负数用补码表示。所能表示的数值范围是-128~+127。unsignedchar常用于处理ASCII字符或用于处理小于或等于255的整型数。

*正数的补码与原码相同,负二进制数的补码等于它的绝对值按位取反后加1。2、int整型int整型长度为两个字节,用于存放一个双字节数据。分有符号int整型数signedint和无符号整型数unsignedint,默认值为signedint类型。signedint表示的数值范围是-32768~+32767,字节中最高位表示数据的符号,"0"表示正数,"1"表示负数。unsignedint表示的数值范围是0~65535。3、long长整型

long长整型长度为四个字节,用于存放一个四字节数据。分有符号long长整型signedlong和无符号长整型unsignedlong,默认值为signedlong类型。signedint表示的数值范围是-2147483648~+2147483647,字节中最高位表示数据的符号,"0"表示正数,"1"表示负数。unsignedlong表示的数值范围是0~4294967295。4、float浮点型float浮点型在十进制中具有7位有效数字,是符合IEEE-754标准的单精度浮点型数据,占用四个字节。因浮点数的结构较复杂在以后的章节中再做详细的讨论。5.*指针型

指针型本身就是一个变量,在这个变量中存放的指向另一个数据的地址。这个指针变量要占据一定的内存单元,对不同的处理器长度也不尽相同,在C51中它的长度一般为1~3个字节。指针变量也具有类型,在以后的课程中有专门一课做探讨,这里就不多说了。6、bit位标量bit位标量是C51编译器的一种扩充数据类型,利用它可定义一个位标量,但不能定义位指针,也不能定义位数组。它的值是一个二进制位,不是0就是1,类似一些高级语言中的Boolean类型中的True和False。7、sfr特殊功能寄存器sfr也是一种扩充数据类型,点用一个内存单元,值域为0~255。利用它可以访问51单片机内部的所有特殊功能寄存器。如用sfrP1=0x90这一句定P1为P1端口在片内的寄存器,在后面的语句中我们用以用P1=255(对P1端口的所有引脚置高电平)之类的语句来操作特殊功能寄存器。8、sfr1616位特殊功能寄存器sfr16占用两个内存单元,值域为0~65535。sfr16和sfr一样用于操作特殊功能寄存器,所不同的是它用于操作占两个字节的寄存器,好定时器T0和T1。9、sbit可录址位sbit同位是C51中的一种扩充数据类型,利用它可以访问芯片内部的RAM中的可寻址位或特殊功能寄存器中的可寻址位。二、常量常量的数据类型只有整型、浮点型、字符型、字符串型和位标量。1.整型常量可以表示为十进制如123,0,-89等。十六进制则以0x开头如0x34,-0x3B等。长整型就在数字后面加字母L,如104L,034L,0xF340等。2.浮点型常量可分为十进制和指数表示形式。十进制由数字和小数点组成,如0.888,3345.345,0.0等,整数或小数部分为0,可以省略但必须有小数点。指数表示形式为[±]数字[.数字]e[±]数字,[]中的内容为可选项,其中内容根据具体情况可有可无,但其余部分必须有,如125e3,7e9,-3.0e-3。3.字符型常量是单引号内的字符,如'a','d'等,不可以显示的控制字符,可以在该字符前面加一个反斜杠"\"组成专用转义字符。常用转义字符表请看表2-2。4.字符串型常量由双引号内的字符组成,如“test”,“OK”等。当引号内的没有字符时,为空字符串。在使用特殊字符时同样要使用转义字符如双引号。在C中字符串常量是做为字符类型数组来处理的,在存储字符串时系统会在字符串尾部加上\o转义字符以作为该字符串的结束符。字符串常量“A”和字符常量‘A’是不同的,前者在存储时多占用一个字节的字间。5.位标量,它的值是一个二进制。转义字符含义ASCII码(16/10进制)\o空字符(NULL)00H/0\n换行符(LF)0AH/10\r回车符(CR)0DH/13\t水平制表符(HT)09H/9\b退格符(BS)08H/8\f换页符(FF)0CH/12\'单引号27H/39\"双引号22H/34\\反斜杠5CH/92要在程序中使用变量必须先用标识符作为变量名,并指出所用的数据类型和存储模式,这样编译系统才能为变量分配相应的存储空间。定义一个变量的格式如下:

[存储种类]数据类型[存储器类型]变量名表在定义格式中除了数据类型和变量名表是必要的,其它都是可选项。存储种类有四种:自动(auto),外部(extern),静态(static)和寄存器(register),缺省类型为自动(auto)。data直接访问内部数据存储器(128字节),访问速度最快bdata可位寻址内部数据存储器(16字节),允许位与字节混合访问idata间接访问内部数据存储器(256字节),允许访问全部内部地址pdata分页访问外部数据存储器(256字节),用MOVX@Ri指令访问xdata外部数据存储器(64KB),用MOVX@DPTR指令访问code程序存储器(64KB),用MOVC@A+DPTR指令访问存储器类型的说明就是指定该变量在C51硬件系统中所使用的存储区域,并在编译时准确的定位。注意的是在AT89C51芯片中RAM只有低128位,位于80H到FFH的高128位则在52芯片中才有用,并和特殊寄存器地址重叠。sfr特殊功能寄存器名=特殊功能寄存器地址常数;

sfr16特殊功能寄存器名=特殊功能寄存器地址常数;

我们可以这样定义AT89C51的P1口

sfrP1=0x90;//定义P1I/O口,其地址90H

sfr关键定后面是一个要定义的名字,可任意选取,但要符合标识符的命名规则,sbit可定义可位寻址对象。如访问特殊功能寄存器中的某位。其实这样应用是经常要用的如要访问P1口中的第2个引脚P1.1。我们可以照以下的方法去定义:

(1)sbit位变量名=位地址

sbitP1_1=Ox91;//这样是把位的绝对地址赋给位变量。同sfr一样sbit的位地址必须位于80H-FFH之间。(2)Sbit位变量名=特殊功能寄存器名^位位置sftP1=0x90;sbitP1_1=P1^1;//先定义一个特殊功能寄存器名再指定位变量名所在的位置可寻址位位于特殊功能寄存器中时可采用这种方法

(3)sbit位变量名=字节地址^位位置sbitP1_1=0x90^1;//这种方法其实和2是一样的,只是把特殊功能寄存器的位址直接用常数表示。四、运算符及表达式:运算符就是完成某种特定运算的符号。运算符按其表达式中与运算符的关系可分为单目运算符,双目运算符和三目运算符。单目就是指需要有一个运算对象,双目就要求有两个运算对象,三目则要三个运算对象。表达式则是由运算及运算对象所组成的具有特定含义的式子。C是一种表达式语言,表达式后面加";"号就构成了一个表达式语句。(一)赋值运算符对于"="这个符号大家不会陌生的,在C中它的功能是给变量赋值,称之为赋值运算符。它的作用不用多说大家也明白,就是但数据赋给变量。如,x=10;由此可见利用赋值运算符将一个变量与一个表达式连接起来的式子为赋值表达式,在表达式后面加";"便构成了赋值语句。使用"="的赋值语句格式如下:变量=表达式;示例如下:

a=0xFF;//将常数十六进制数FF赋于变量a

b=c=33;//同时赋值给变量b,c

d=e;//将变量e的值赋于变量d

f=a+b;//将变量a+b的值赋于变量f如果赋值运算符两边的数据类型不相同,系统将自动进行类型转换,即把赋值号右边的类型换成左边的类型。具体规定如下:1.实型赋予整型,舍去小数部分。前面的例2.9已经说明了这种情况。2.整型赋予实型,数值不变,但将以浮点形式存放,即增加小数部分(小数部分的值为0)。3.字符型赋予整型,由于字符型为一个字节,而整型为二个字节,故将字符的ASCII码值放到整型量的低八位中,高八位为0。4.整型赋予字符型,只把低八位赋予字符量。(二)算术运算符和算术表达式对于a+b,a/b这样的表达式大家都很熟悉,用在C语言中,+,/,就是算术运算符。C51中的算术运算符有如下几个,其中只有取正值和取负值运算符是单目运算符,其它则都是双目运算符:

+加或取正值运算符

-减或取负值运算符

*乘运算符/除运算符%取余运算符自增(++)自减(--)1、加法运算符“+”加法运算符为双目运算符,即应有两个量参与加法运算。如a+b,4+8等。具有右结合性。

2、减法运算符“-”减法运算符为双目运算符。但“-”也可作负值运算符,此时为单目运算,如-x,-5等具有左结合性。

3、乘法运算符“*”双目运算,具有左结合性。

4、除法运算符“/”双目运算具有左结合性。参与运算量均为整型时,结果也为整型,舍去小数。如果运算量中有一个是实型,则结果为双精度实型。

5、求余运算符(模运算符)“%”双目运算,具有左结合性。要求参与运算的量均为整型。求余运算的结果等于两数相除后的余数。6、自增1,自减1运算符

自增1运算符记为“++”,其功能是使变量的值自增1。自减1运算符记为“--”,其功能是使变量值自减1。自增1,自减1运算符均为单目运算,都具有右结合性。可有以下几种形式:++ii自增1后再参与其它运算。--ii自减1后再参与其它运算。i++i参与运算后,i的值再自增1。i--i参与运算后,i的值再自减1。(三)逻辑运算符用于逻辑运算。包括与(&&)、或(||)、非(!)三种。用逻辑运算符将关系表达式或逻辑量连接起来的式子就是逻辑表达式。C语言提供了三种逻辑运算符:“&&”(逻辑与)、“||”(逻辑或)和“!”(逻辑非)。C语言编译系统在给出逻辑运算的结果时,用“1”表示真,而用“0”表示假,但是判断一个量是否是“真”时,以0代表“假”,而以非0代表“真”,这一点务必要注意。(四)关系运算符所谓“关系运算”实际上是两个值作一个比较,判断其比较的结果是否符合给定的条件。关系运算的结果只有2种可能,即“真”和“假”。例:3>2的结果为真,而3<2的结果为假。C语言一共提供了6种关系运算符:“<”(小于)、“<=”(小于等于)、“>”(大于)、“>=(大于等于)”、“==”(等于)和“!=”(不等于)。用关系运算符将两个表达式连接起来的式子,称为关系表达式。例:a>b,a+b>b+c,(a=3)>=(b=5)等都是合法的关系表达式。关系表达式的值只有两种可能,即“真”和“假”。在C语言中,没有专门的逻辑型变量,如果运算的结果是“真”,用数值“1”表示,而运算的结果是“假”则用数值“0”表示。(五)位操作运算符参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、位非(~)、位异或(^)、左移(<<)、右移(>>)六种。(六)条件运算符这是一个三目运算符,用于条件求值(?:)。(七)逗号运算符用于把若干表达式组合成一个表达式(,)。C语言中逗号“,”也是一种运算符,称为逗号运算符。其功能是把两个表达式连接起来组成一个表达式,称为逗号表达式。其一般形式为:表达式1,表达式2······。其求值过程是分别求两个表达式的值,并以最后一个表达式的值作为整个逗号表达式的值(八)指针运算符用于取内容(*)和取地址(&)二种运算。(九)求字节数运算符用于计算数据类型所占的字节数(sizeof)。(十)特殊运算符有括号(),下标[],成员(→,.)等几种。五、C语言程序基本语句:(一)选择语句1、if语句if语句是用来判定所给定的条件是否满足根据判定的结果(真或假)决定执行给出的两种操作之一。C语言提供了三种形式的if语句1)if(表达式)语句如果表达式的结果为真,则执行语句,否则不执行2)if(表达式)语句1else语句2如果表达式的结果为真,则执行语句1,否则执行语句23)if(表达式1)语句1elseif(表达式2)语句2elseif(表达式3)语句3…elseif(表达式m)语句melse语句n(二)循环语句:

While(表达式)

{语句(内部也可为空)}

特点:先判断表达式,后执行语句。

原则:若表达式不是0,即为真,那么执行语句。否则跳出while语句。do-while语句do-while语句用来实现“直到型”循环,特点是先执行循环体,然后判断循环条件是否成立。其一般形式如下:do{循环体语句}while(表达式)对同一个问题,既可以用while语句处理,也可以用do-while语句处理。For(表达式1;表达式2;表达式3)

{语句(内部可为空)}

执行过程:

1.求解一次表达式1.

2.求解表达式2,若其值为真(非0即为真),则执行for中语句。然后执行第3步。否则结束for语句,直接跳出,不再执行第3步。

3.求解表达式3.

4.跳到第2步重复执行。2.2任务二:流水灯的定时计数控制一、定时/计数器的结构定时/计数器的实质是加1计数器(16位),由高8位和低8位两个寄存器组成。TMOD是定时/计数器的工作方式寄存器,确定工作方式和功能;TCON是控制寄存器,控制T0、T1的启动和停止及设置溢出标志。

二、定时/计数器的工作原理

1、加1计数器(16位)

2、输入的计数脉冲有两个来源,一个是由系统的时钟振荡器输出脉冲经12分频(机器周期)后送来,工作于定时模式;另一个是T0或T1引脚输入的外部脉冲源,工作于计数模式。3、每来一个(周期)脉冲计数器加1。4、当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使TCON中TF0或TF1置1,向CPU发出中断请求(定时/计数器中断允许时)。设置为定时器模式时,加1计数器是对内部机器周期计数(1个机器周期等于12个振荡周期,即计数频率为晶振频率的1/12)。计数值N乘以机器周期Tcy就是定时时间t

。设置为计数器模式时,外部事件计数脉冲由T0或T1引脚输入到计数器。在每个机器周期的S5P2期间采样T0、T1引脚电平。当某周期采样到一高电平输入,而下一周期又采样到一低电平时,则计数器加1,更新的计数值在下一个机器周期的S3P1期间装入计数器。由于检测一个从1到0的下降沿需要2个机器周期,因此要求被采样的电平至少要维持一个机器周期。当晶振频率为12MHz时,最高计数频率不超过1/2MHz,即计数脉冲的周期要大于2

s。

三、定时/计数器的控制:80C51单片机定时/计数器的工作由两个特殊功能寄存器控制。TMOD用于设置其工作方式;TCON用于控制其启动和中断申请。1、工作方式寄存器TMOD工作方式寄存器TMOD用于设置定时/计数器的工作方式,低四位用于T0,高四位用于T1。其格式如下:GATE:门控位。GATE=0时,只要用软件使TCON中的TR0或TR1为1,就可以启动定时/计数器工作;GATA=1时,要用软件使TR0或TR1为1,同时外部中断引脚或也为高电平时,才能启动定时/计数器工作。即此时定时器的启动多了一条件。:定时/计数模式选择位。=0为定时模式;=1为计数模式。M1M0:工作方式设置位。定时/计数器有四种工作方式,由M1M0进行设置。

2、控制寄存器TCON

TCON的低4位用于控制外部中断,已在前面介绍。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类同。

四、定时/计数器的工作方式:1、方式0

方式0为13位计数,由TL0的低5位(高3位未用)和TH0的8位组成。TL0的低5位溢出时向TH0进位,TH0溢出时,置位TCON中的TF0标志,向CPU发出中断请求。定时器模式时有:N=t/Tcy计数初值计算的公式为:定时器的初值还可以采用计数个数直接取补法获得。计数模式时,计数脉冲是T0引脚上的外部脉冲。门控位GATE具有特殊的作用。当GATE=0时,经反相后使或门输出为1,此时仅由TR0控制与门的开启,与门输出1时,控制开关接通,计数开始;当GATE=1时,由外中断引脚信号控制或门的输出,此时控制与门的开启由外中断引脚信号和TR0共同控制。当TR0=1时,外中断引脚信号引脚的高电平启动计数,外中断引脚信号引脚的低电平停止计数。这种方式常用来测量外中断引脚上正脉冲的宽度。

2、方式1方式1的计数位数是16位,由TL0作为低8位、TH0作为高8位,组成了16位加1计数器。计数个数与计数初值的关系为:

3、方式2方式2为自动重装初值的8位计数方式。

工作方式2特别适合于用作较精确的脉冲信号发生器。

计数个数与计数初值的关系为:

4、方式3方式3只适用于定时/计数器T0,定时器T1处于方式3时相当于TR1=0,停止计数。

工作方式3将T0分成为两个独立的8位计数器TL0和TH0

定时/计数器应用举例

初始化程序应完成如下工作:对TMOD赋值,以确定T0和T1的工作方式。计算初值,并将其写入TH0、TL0或TH1、TL1。使TR0或TR1置位,启动定时/计数器定时或计数。

例利用定时/计数器T0,产生200ms的定时,并使P1.0引脚上输出周期为400ms的方波,,设系统时钟频率为12MHz。65536

解:1、计算计数初值X:由于晶振为12MHz,所以机器周期Tcy为1

s。所以:N=t/Tcy=200000/1=200000=50000*4;

TH0=(65536-50000)/256;TL0=(65536-50000)%256;2、求T0的方式控制字TMOD:GATE=0,C/T=0,M1M0=01,可取方式控制字为00000001;ORG0000HLJMPMAINORG0100HMAIN:MOVTMOD,#02HMOVTL0,#38HMOVTH0,#38HSETBTR0LOOP1:MOVR3,#10LOOP2:JBCTF0LOOPSJMPLOOP2LOOP:DJNZR3,LOOP2CPLP1.0LJMPLOOP1END#include”reg51.h”sbitfb=P1^0;chari=0;voidmain(){TMOD=0x01;fb=1;TH0=(65536-50000)/256;TL0=(65536-50000)%256;

ET0=1;EA=1;TR0=1;//开定时计数器while(1)

{

while(i<4);//等待4趟50000计数结束fb=~fb;i=0;}voidITTO()interrupt1{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;i++;}2.3任务三:流水灯的中断控制一、80C51的中断系统结构1、中断的概念CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生);CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务);待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断。MCS-51单片机的中断系统结构执行主程序主程序继续执行主程序断点中断请求中断响应执行中断处理程序中断返回引起CPU中断的根源,称为中断源。中断源向CPU提出的中断请求。CPU暂时中断原来的事务A,转去处理事件B。对事件B处理完毕后,再回到原来被中断的地方(即断点),称为中断返回。实现上述中断功能的部件称为中断系统(中断机构)。

随着计算机技术的应用,人们发现中断技术不仅解决了快速主机与慢速I/O设备的数据传送问题,而且还具有如下优点:

分时操作。CPU可以分时为多个I/O设备服务,提高了计算机的利用率;实时响应。CPU能够及时处理应用系统的随机事件,系统的实时性大大增强;可靠性高。CPU具有处理设备故障及掉电等突发性事件能力,从而使系统可靠性提高。2、80C51中断系统的结构

80C51的中断系统有5个中断源(8052有6个),2个优先级,可实现二级中断嵌套

。1、(P3.2)可由IT0(TCON.0)选择其为低电平有效还是下降沿有效。当CPU检测到P3.2引脚上出现有效的中断信号时,中断标志IE0(TCON.1)置1,向CPU申请中断。2、(P3.3)可由IT1(TCON.2)选择其为低电平有效还是下降沿有效。当CPU检测到P3.3引脚上出现有效的中断信号时,中断标志IE1(TCON.3)置1,向CPU申请中断。

3、TF0(TCON.5),片内定时/计数器T0溢出中断请求标志。当定时/计数器T0发生溢出时,置位TF0,并向CPU申请中断。

4、TF1(TCON.7),片内定时/计数器T1溢出中断请求标志。当定时/计数器T1发生溢出时,置位TF1,并向CPU申请中断。

5、RI(SCON.0)或TI(SCON.1),串行口中断请求标志。当串行口接收完一帧串行数据时置位RI或当串行口发送完一帧串行数据时置位TI,向CPU申请中断。

二、中断请求标志1、TCON的中断标志IT0(TCON.0),外部中断0触发方式控制位。当IT0=0时,为电平触发方式。当IT0=1时,为边沿触发方式(下降沿有效)。IE0(TCON.1),外部中断0中断请求标志位。IT1(TCON.2),外部中断1触发方式控制位。IE1(TCON.3),外部中断1中断请求标志位。TF0(TCON.5),定时/计数器T0溢出中断请求标志位。TF1(TCON.7),定时/计数器T1溢出中断请求标志位。

2、SCON的中断标志RI(SCON.0),串行口接收中断标志位。当允许串行口接收数据时,每接收完一个串行帧,由硬件置位RI。注意,RI必须由软件清除。TI(SCON.1),串行口发送中断标志位。当CPU将一个发送数据写入串行口发送缓冲器时,就启动了发送过程。每发送完一个串行帧,由硬件置位TI。CPU响应中断时,不能自动清除TI,TI必须由软件清除。

1、中断允许控制CPU对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器IE控制的。三、80C51中断的控制

EX0(IE.0),外部中断0允许位;ET0(IE.1),定时/计数器T0中断允许位;EX1(IE.2),外部中断1允许位;ET1(IE.3),定时/计数器T1中断允许位;ES(IE.4),串行口中断允许位;EA(IE.7),CPU中断允许(总允许)位。2、中断优先级控制80C51单片机有两个中断优先级,即可实现二级中断服务嵌套。每个中断源的中断优先级都是由中断优先级寄存器IP中的相应位的状态来规定的

。PX0(IP.0),外部中断0优先级设定位;PT0(IP.1),定时/计数器T0优先级设定位;PX1(IP.2),外部中断0优先级设定位;PT1(IP.3),定时/计数器T1优先级设定位;PS(IP.4),串行口优先级设定位;PT2(IP.5),定时/计数器T2优先级设定位。PX0(IPH.0),外部中断0优先级设定位;PT0(IPH.1),定时/计数器T0优先级设定位;PX1(IPH.2),外部中断1优先级设定位;PT1(IPH.3),定时/计数器T1优先级设定位;PS(IPH.4),串行口优先级设定位;PT2(IPH.5),定时/计数器T2优先级设定位。而80C52单片机有四个中断优先级,即可实现四级中断服务嵌套。每个中断源的中断优先级由中断优先级寄存器IP和IPH中的相应位的状态来规定的

同一优先级中的中断申请不止一个时,则有中断优先权排队问题。同一优先级的中断优先权排队,由中断系统硬件确定的自然优先级形成,其排列如所示:设置52单片机的4个中断源,使他们的优顺序为T1,INT1,INT0,T0.

IPH=0X08; PT1=1;

IP=0X40; PX1=1;80C51单片机的中断优先级有三条原则:CPU同时接收到几个中断时,首先响应优先级别最高的中断请求。正在进行的中断过程不能被新的同级或低优先级的中断请求所中断。正在进行的低优先级中断服务,能被高优先级中断请求所中断。为了实现上述后两条原则,中断系统内部设有两个用户不能寻址的优先级状态触发器。其中一个置1,表示正在响应高优先级的中断,它将阻断后来所有的中断请求;另一个置1,表示正在响应低优先级中断,它将阻断后来所有的低优先级中断请求。四、80C51单片机中断处理过程

中断响应条件和时间:中断源有中断请求;此中断源的中断允许位为1;CPU开中断(即EA=1)。CPU在执行指令的随后一个机器周期的S5P2,查询中断标志位。CPU在指令操作IE,IP寄存器的指令时,不查询中断标志位,再执行一条其他指令,按以上时刻查询标志位。以上五条同时满足时,CPU才有可能响应中断。响应的过程:1、断点地址入栈,现场数据入栈保存2、找到中断服务程序的入口地址中断的执行过程:1、执行中断服务程序中断的返回过程:中断响应过程的逆过程:1、断点地址恢复,现场数据恢复。主体:1、SP=0x60/0x50/0x40;0x07:0x08~0x1f工作寄存器1、23区(默认)24BSP=0x60;:0x60~0x7f32BSP=0x50;:0x50~0x7f48BSP=0x40;:0x40~0x7f64B2、若用了定时计数器,初始化编程:TMODTH0/1TL0/1TR0/13、若用了外部中断,IT0=1;(P3.2引脚为下降沿有效),IT1=1(P3.3为下降沿有效)4、IE5、IP6、while(1);中断函数编写:数据类型函数名(参数)interrupt中断编号[using工作寄存器组号]{}voiditn()interrupt1{}主体程序:0、ORG0000HLJMPMAINORG0003HLJMPLTTIN0ORG001BHLJMPLTIQ11、MOVSP,#??2、MOVTMOD,#??MOVTH0/1,#??MOVTL0/1,#??SETBTR0/13、SETBIT0/14、IE5、IP6、SJMP$中断子程序的编写:LTTIN0:PUSHPSWPUSHAccPUSHB……….POPBPOPAccPOPPSWRETI国家示范性高职院校建设重点培育院校优质专业核心课程

单片机应用3.1任务一:51单片机串行口通信3.2任务二:51单片机串行口的C程序设计项目三:蜂鸣器发声控制3.2任务一:51单片机串行口通信一、串行通信基本知识

计算机与外界的信息交换称为通信。基本的通信方法有并行通信和串行通信两种。

1.并行通信

单位信息(通常指一个字节)的各位数据同时传送的通信方法称为并行通信。

2.串行通信

单位信息的各位数据被分时一位一位依次顺序传送的通信方式称为串行通信。

数据通信

从图中可以看出:并行通信连线多,速度快,适合近距离通信;串行通信连线少,速度慢,适合远距离通信。并行通信示意图串行通信示意图

1.异步通信

异步通信中,传送的数据可以是一个字符代码或一个字节数据,数据以帧的形式一帧一帧传送。

二、异步通信和同步通信异步通信的一帧数据格式

2.同步通信

在同步通信中,每一数据块发送开始时,先发送一个或两个同步字符,使发送与接收取得同步,然后再顺序发送数据。数据块的各个字符间取消起始位和停止位,所以通信速度得以提高。异步通信和同步通信同步通信数据帧格式三、通信方向

单工方式:一对传输线只允许单方向传送数据;

半双工方式:一对传输线允许向两个方向中的任一方向传送数据,但不能同时进行;

全双工方式:用两对传输线连接在发送器和接收器上,发送和接收能同时进行。

通信方向串行通信传输方式四、串行通信接口种类

根据串行通信格式及约定(如同步方式、通信速率、数据块格式等)不同,形成了许多串行通信接口标准,如常见的:

UART(串行异步通信接口)、

USB(通用串行总线接口)、

I2C(集成电路间的串行总线)、 SPI(串行外设总线)、

485总线、CAN总线接口等。五、MCS-51串行口结构串行口内部结构示意简图六、与串行口有关的特殊功能寄存器

1.控制状态寄存器SCON

用于定义串行通信口的工作方式和反映串行口状态,其字节地址为98H,复位值为00000000B,可位寻址格式为:D7D6D5D4D3D2D1D0SM0SM1SM2RENTB8RB8TIRISM0和SM1(SCON.7、SCON.6):串行口工作方式选择位。SM0SM1工作方式功能说明波特率00方式0同步移位寄存器fosc/1201方式18位数据UART可变(T1溢出率/32或/16)10方式29位数据UARTfosc/64或fosc/3211方式39位数据UART可变(T1溢出率/32或/16)与串行口有关的特殊功能寄存器SM2(SCON.5):多机通信控制位,在方式2或3中使用。REN(SCON.4):允许接收控制位,由软件置1或清0。TB8(SCON.3):发送数据的第9位。RB8(SCON.2):接收数据的第9位。TI(SCON.1):发送中断标志。发送SBUF为空,TI至1,通知CPU还有无数据发送。软件清0。RI(SCON.0):接收中断标志。接收SBUF为满,RI至1,通知CPU取走接收的8位数据。软件清0。与串行口有关的特殊功能寄存器

2.电源控制寄存器PCON

电源控制寄存器PCON(地址为87H)中只有SMOD位与串行口工作有关。

D7D6D5D4D3D2D1D0SMOD---------GF1GF0PDIDL与串行口有关的特殊功能寄存器

SMOD(PCON.7):波特率倍增位。串行口工作于方式1、方式2和方式3时,当SMOD=1时,串行口波特率加倍。复位值为00000000B。PCON寄存器不能进行位寻址。七、波特率

在串行通信中,对数据传送速度有一定要求。波特率表示每秒传送的位数,单位为b/s(记作波特)。

例如:数据传送速率为每秒钟10个字符,若每个字符的一帧为11位,则传送波持率为:

11b/字符×10字符/s=110b/s

异步通信的传送速率一般在50~19.2kb/s之间。

方式0和方式2的波特率是固定的,方式1和方式3的波特率是由定时器T1的溢出率来决定的。在增强型单片机中,也可以使用T2作波特率发生器。

1.方式0的波特率

固定为振荡频率的1/12。并不受PCON寄存器中SMOD位的影响。方式0的波特率=fosc/12=fT=12/fosc=1/(fosc/12)7.2.3波特率设计

2.方式2的波特率

接收与发送的移位时钟由振荡频率fosc的第二节拍P2时钟(fosc/2)给出,所以,方式2波特率取决于PCON中SMOD位的值:当SMOD=0时,波特率为fosc的1/64;若SMOD=1,则波特率为fosc的1/32。即方式2的波特率=2SMOD×fosc/647.2.3波特率设计

3.方式1和方式3的波特率(1)T1作波特率发生器在最典型应用中,定时器T1选用定时器模式2,此时n=8,设定时器的初值为X:于是, X=256-

方式1、3的波特率

=×(T1溢出速率)即波特率=

×

×/(2n-初值)

(2)T2作波特率发生器

在增强型单片机80C52中,还可以使用T2作为波特率发生器。当寄存器T2CON的位TCLK=1和(或)RCLK=1时,允许串行口从T2获得发送和(或)接收的波特率。

串行口方式1、3的波特率=T2溢出率/16

定时器2作波特率发生器时,计数在每个状态周期递增。这样:方式1、3的波特率=7.2.3波特率设计八、串行口工作方式

1、串行口方式0

方式0为同步移位寄存器输入/输出方式,常用于扩展I/O口。RXD为数据输入或输出,TXD为移位时钟,作为外接部件的同步信号。

方式0不适用于两个89C52之间的数据通信,可以通过外接移位寄存器来实现单片机的接口扩展。

在这种方式下,收/发的数据为8位,低位在前,无起始位、奇偶校验位及停止位,波特率是固定的。

1、方式0输出图3-11方式0输出示意图

2、方式0输入图3-12方式0输入示意图串行口方式0发送电路接收电路#include<reg51.h>Sbitc165=P1^1;Chardata;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论