车用单片机原理(含实验与实训指导)362_第1页
车用单片机原理(含实验与实训指导)362_第2页
车用单片机原理(含实验与实训指导)362_第3页
车用单片机原理(含实验与实训指导)362_第4页
车用单片机原理(含实验与实训指导)362_第5页
已阅读5页,还剩357页未读 继续免费阅读

下载本文档

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

文档简介

车用单片机原理(含实验与实训)12汽车电子技术的发展单片机概述单击此处添加标题单击此处添加标题01汽车电子技术的发展一、汽车电子技术的发展史随着电子、电气以及网联技术的迅猛发展,传统的机械结构与电子信息技术在不断融合,汽车产品的电子化、电气化和智能化水平也在逐步提高。目前汽车中的电子装置设备,无论是数量还是成本都在不断攀升,特别是随着新能源汽车的突飞猛进,汽车除底盘和车身外,大部分机械结构,已被电子电气化设备替代,汽车电子化的程度已成为衡量汽车技术水平的重要标志之一。一、汽车电子技术的发展史

汽车电子技术的发展历程,大体可以分为以下三个阶段:第一阶段,从20世纪中期到70年代中期,是汽车电子控制技术初步发展阶段。第二阶段,从20世纪70年代中期到90年代中期,随着电子集成电路的快速发展,微型控制器开始在汽车上大规模应用,是汽车电子控制技术迅猛发展的阶段。第三阶段,从20世纪90年代中期开始到现在,是汽车电子控制技术向智能化发展的阶段。二、汽车电子系统在整车中的作用汽车电子产业是汽车工业与电子信息产业的结合,目前正处于高速发展阶段。汽车电子产品在整车制造中,所占的比例越来越高,汽车电子信息技术不仅推动了汽车工业的发展,同时也极大地促进了电子信息、计算机等产业的发展。现代汽车电子技术在改善汽车动力性、经济性、安全性、行驶稳定性和乘坐舒适性等方面发挥着不可替代的作用。总体来说,汽车电子技术在汽车中的应用,大体可分为以下五个方面:(一)动力传动电子控制系统(二)底盘电子控制系统(三)车身电子控制系统(四)车载智能信息系统(五)车载故障自诊断系统三、汽车电子行业发展趋势目前汽车电子信息产业已经迎来黄金发展期。汽车电动化、智能化趋势加速,电子化程度持续提升,汽车电子信息有望接力智能手机成为电子行业发展的新动力。二、汽车电子技术的发展史

随着电子工业的飞速发展,汽车电子在汽车领域的应用日益深入,汽车电子占汽车总成本的比重日益加大,尤其中高端汽车与新能源汽车中汽车电子附加值更高。目前,国内紧凑型乘用车中汽车电子占成本的比重约为15%,中高端乘用车中汽车电子占成本的比重约为28%,而新能源汽车电子占成本的比重高达47%-65%,预计未来高端配置逐步向低端车渗透将是趋势,将带来汽车电子在乘用车成本中的比重持续提升,汽车行业仍处于“电子化”趋势中。02单片机概述一、什么是单片机一片半导体硅片集成:中央处理单元(CPU)、存储器(RAM、ROM)、并行I/O、串行I/O、定时器/计数器、中断系统、系统时钟电路及系统总线的微型计算机。具有微型计算机属性,因而被称为单片微型计算机,简称单片机。一、什么是单片机单片机的发展大致分为4个阶段。

第一阶段(1974年~1976年):单片机初级阶段。因工艺限制,双片形式且功能较简单。1974年12月,仙童公司推出了8位的F8单片机,实际只包括了8位CPU、64BRAM和2个并行口。

第二阶段(1976年~1978年):低性能单片机阶段。1976年Intel的MCS-48单片机(8位)极大地促进了单片机变革和发展,1977年GI公司推出PIC1650,但这个阶段仍处于低性能阶段。二、单片机的产生与发展

第三阶段(1978年~1983年):高性能单片机阶段。1978年,Zilog公司推出Z8单片机,1980年,Intel公司在MCS-48系列基础上推出MCS-51系列,Mortorola推出6801单片机。使单片机性能及应用跃上新台阶。此后,各公司8位单片机迅速发展。推出的单片机普遍带有串行I/O口、多级中断系统、16位定时器/计数器,片内ROM、RAM容量加大,且寻址范围可达64KB,有的片内还带有A/D转换器。由于这类单片机性/价比高,得到广泛应用,是目前应用数量最多的单片机。二、单片机的产生与发展第四阶段(1983年~现在):8位单片机巩固发展及16位单片机、32位单片机推出阶段。

16位典型产品Intel公司的MCS-96系列单片机。而32位单片机除具有更高集成度外,其数据处理速度比16位单片机提高许多,性能比8位、16位单片机更加优越。

20世纪90年代单片机大发展时期,Mortorola、Intel、ATMEL、德州仪器(TI)、三菱、日立、飞利浦、LG等公司开发一大批性能优越的单片机,极大推动单片机应用。近年,不少新型高集成度的单片机涌现。目前,除8位单片机得到广泛应用外,16位单片机、32位单片机也得到广大用户青睐。三、常见单片机的类型和特点

按用途可分为通用型和专用型两大类。通用型:内部可开发资源(如存储器、I/O等各种外围功能部件等)可全部提供给用户。专用型专门针对某些产品的特定用途而制作的。根据需要,设计一个以通用单片机芯片为核心,再配以外围接口电路及外围设备,并编写相应软件来满足各种不同需要的测控系统。通常所说和本书介绍的是指通用型单片机。三、常见单片机的类型和特点例如,各种家用电器中的控制器等。由于特定用途,单片机芯片制造商常与产品厂家合作,设计和生产“专用”的单片机。在设计中,已对“专用”单片机的系统结构最简化、可靠性和成本的最佳化等做了全面综合考虑,所以“专用”单片机具有十分明显的综合优势。无论“专用”单片机在用途上有多么“专”,其基本结构和工作原理都是以通用单片机为基础。三、常见单片机的类型和特点单片机特点体积小、重量轻。电源单一、功耗低。功能强、价格低。运行速度快、抗干扰能力强、可靠性高。可以嵌入到电子产品中----嵌入式应用系统。四、单片机的发展趋势低功耗化:CMOS化,功耗小,配置有等待状态、睡眠状态、关闭状态等工作方式。消耗电流仅在µA或nA量级,适于电池供电的便携式、手持式的仪器仪表及其它消费类电子产品。外围电路内装化:随着集成电路技术的快速发展,单片机除了可以将中央处理器(CPU)、随机存取数据存储器(RAM)、只读程序存储器(ROM)、并行和串行通信接口、中断系统、定时电路、时钟电路等集成到一块芯片之外,还可以将传感器、输入接口处理电路,显示器件等都集成到单片机内部,一块单片机就等于一个具有高性能运算的计算机、单片机包含的单元电路越多,功能就越强大。低电压化:几乎所有的单片机都有WAIT、STOP等省电运行方式。允许使用的电压范围越来越宽,一般在3~6V范围内工作。低电压供电的单片机电源下限已可达1~2V。目前0.8V供电的单片机已经问世。单片机的发展趋势车用单片机原理(含实验与实训)21MCS-51单片机的总体结构MCS-51单片机的引脚功能单击此处添加标题单击此处添加标题43MCS-51单片机中央处理器MCS-51单片机存储器65MCS-51单片机并行I/O端口MCS-51单片机的时序7MCS-51单片机的辅助电路01MCS-51单片机的总体结构第一节MCS-51单片机的总体结构中央处理器CPU:8位,运算和控制功能内部ROM:4KB掩膜ROM,用于存放程序、原始数据和表格内部RAM:共256个RAM单元,用户使用前128个单元,用于存放可读写数据,后128个单元被专用寄存器占用。定时/计数器:两个16位的定时/计数器,实现定时或计数功能并行I/O口:4个8位的I/O口P0、P1、P2、P3。串行口:一个全双工串行口。中断控制系统:5个中断源。时钟电路:可产生时钟脉冲序列,允许晶振频率6MHZ和12MHZ。51系列单片机的内部结构框图如图2-1所示。第一节

MCS-51单片机的总体结构图2-1

8051单片机内部结构图02MCS-51单片机的引脚功能第二节

MCS-51单片机的引脚功能图2-251单片机的引脚信号

51单片机一般采用40引脚双列直插(DIP)封装,如图2-2所示。51单片机的引脚可以分为三类,分别是电源和时钟引脚、I/O引脚、控制引脚。第二节

MCS-51单片机的引脚功能双列直插式(DIP)51系列单片机芯片一般为40条引脚,其引脚说明如下:一、电源及时钟引脚功能

◆主电源引脚

Vcc(40脚):接+5V电源正端。

Vss(20脚):接+5V电源地端。

◆外接晶体引脚

XTAL1(19脚):接外部石英晶体的一端。在单片机内部,它是一个反相放大器的输入端,可构成片内振荡器。当采用外部时钟时,对于HMOS单片机,该引脚接地;对于CHMOS单片机,该引脚作为外部振荡信号的输入端。第二节

MCS-51单片机的引脚功能◆外接晶体引脚

XTAL2(18脚):接外部石英晶体的另一端。在片内,它是片内振荡器反相放大器的输出端。当采用外部时钟时,对于HMOS单片机,该引脚为外部振荡信号的输入端;对于CHMOS单片机,该引脚悬空不接。第二节

MCS-51单片机的引脚功能二、控制引脚

◆ALE/PROG(30脚)

片外低8地址锁存有效信号输出端/编程脉冲输入端。单片机在访问片外程序存储器或者数据存储器期间,ALE引脚会输出负跳变信号,P0口作为低8位地址锁存在外部锁存器中,通过ALE引脚可以实现P0口的地址线和数据线分时复用;在不访问片外程序存储器或数据存储器期间,ALE端以时振荡时钟的6分频固定地输出,可用作对外时钟脉冲的输出;在对片内Flash进行编程时,该引脚可以用作输入编程脉冲。

第二节

MCS-51单片机的引脚功能二、控制引脚

◆PSEN(29脚)

外部程序存储器读选通输出端,低电平有效。当单片机需要从外部程序存储器读取程序时,每个机器周期该信号两次有效输出到外部程序存储器,外部储存器允许单片机读取其中的程序。在访问片外数据存储器期间,这两次信号将不出现。第二节

MCS-51单片机的引脚功能

第二节

MCS-51单片机的引脚功能

第二节

MCS-51单片机的引脚功能◆RST/VPD(9脚)

复位信号输入端和备用电源,高电平有效。当单片机开始工作时,此引脚加上超过两个机器周期的高电平,就可实现单片机的重置复位,使单片机回复到初始运行状态。在单片机正常工作时,此引脚是低电平。自动上电时,考虑到振荡器需要一定的起振时间,该引脚上高电平必须持续10ms以上才能保证有效复位。第二节

MCS-51单片机的引脚功能二、并行I/O口引脚

◆输入/输出引脚

P0口(第39~32脚):单片机不外扩存储器与I/O口时,P0口可作为准双向8位输入/输出口,但需要外接上拉电阻。在单片机外扩存储器或I/O口时,P0口可以作为低8位地址线和8位双向数据线的分时复用端口,为双向8位输入/输出口。

P1口(第1~8脚):可以作为准双向8位I/O口使用,具有内部上拉电阻。

P2口(第21~28脚):可以作为准双向8位I/O口使用,内部具有上拉电阻;当单片机外扩存储器或I/O时,P2口作为高8位地址总线使用,与P0输出低8位地址组成16位地址。

P3口(第10~17脚):可以作为准双向8位I/O口使用,具有内部上拉电阻,各个引脚还有第二功能。P3口的第二功能见表2-1。第二节

MCS-51单片机的引脚功能

◆输入/输出引脚-P3口的第二功能端口引脚第二功能说明P3.0RXD串行数据接收端P3.1TXD串行数据发送端P3.2INT0外部中断0P3.3INT1外部中断1P3.4T0定时器/计数器0的外部输入引脚P3.5T1定时器/计数器1的外部输入引脚P3.6WR外部RAM写选通引脚P3.7RD外部RAM读选通引脚第二节

MCS-51单片机的引脚功能

注意:准双向口与双向口的差别。准双向口仅有两个状态。而P0口作为总线使用,口线内无上拉电阻,处于高阻“悬浮”态。故为双向三态I/O口。

为什么P0口要有高阻“悬浮”态?因为P0口作为数据总线用时,多个数据源都挂在数据总线上,当P0口不需要读写其他数据源时,需要与数据总线高阻“悬浮”隔离。

准双向I/O口则无高阻“悬浮”态。

另外,准双向口作通用I/O输入使用时,需先向该口先写入“1”。准双向口与双向口的差别。

至此,40只引脚已介绍,应熟记每一引脚功能,对应用系统硬件电路设计十分重要。03MCS-51单片机中央处理器CPU第三节MCS-51单片机中央处理器CPU一、运算器运算部件以算术逻辑单元ALU为核心,包括累加器ACC、寄存器B、暂存器、程序状态字PSW等许多部件。它能实现数据的算术逻辑运算、位变量处理和数据传输等操作。(一)算术逻辑单元ALU

算术逻辑单元不仅能完成8位二进制的加、减、乘、除、加1、减1及BCD加法的十进制调整等算术运算,还能对8位变量进行逻辑“与”、“或”、“异或”、循环移位、求补、清零等逻辑运算,并具有数据传输、程序转移等功能。第三节MCS-51单片机中央处理器CPU(二)累加器ACC、寄存器B

累加器ACC(简称累加器A)为一个8位寄存器,它是CPU中使用最频繁的寄存器。进入ALU作算术和逻辑运算的操作数多来自于ACC,运算结果也常送回ACC保存。寄存器B是为ALU进行乘/除法运算而设置的。若不作乘除运算时,B可作为通用寄存器使用。第三节MCS-51单片机中央处理器CPU

(三)程序状态字PSW

程序状态字PSW是一个8位的标志寄存器,它保存指令执行结果的特征信息,以供程序查询和判别。其各位的定义如下:

进位标志位C(PSW.7):当CPU进行加减运算过程中,运算结果如果在最高位有进位(加法时)或有借位(减法时),则CY位置1,当运算结果没有进位或者借位时,CY位置0。第三节MCS-51单片机中央处理器CPU

辅助进位(或称半进位)标志位AC(PSW.6):在CPU进行加减法运算过程中,若低半字节的PSW.3位向高半字节的PSW.4位位有进(借)位,则AC由硬件置1,否则AC由硬件置0。

用户自定义标志位F0(PSW.5):用户可根据自己的需要对F0赋予一定的含义,通过软件置位或清零,并根据F0=1或0来决定程序的执行方式,或反映系统某一种工作状态。

奇偶标志位P(PSW.0):若累加器ACC中“1”的个数为奇数,则标志位P置为1;若累加器ACC中“1”的个数为奇数,则P置为0。在串行通信的数据传输中,通常会通过奇偶校验来检验数据传输的可靠性。第三节MCS-51单片机中央处理器CPU

溢出标志位OV(PSW.1):在做无符号的加法或减法时,当运算结果超出了累加器的数值范围(无符号数的范围为0~255),OV位置1,否则OV置0。进行无符号的加或减法时,OV的值与进位标志位CY的值相同;在做有符号数的加法时,当运算结果超出了累加器的数值范围(有符号数的范围为-128~+127)时,即次高位有进位或借位,OV被置1,否则OV被置0。

工作寄存器组选择位RS1、RS0(PSW.4、PSW.3):通过工作寄存器选择位的组合,可以从4个工作寄存器组中选择某一组用于单片机的运行工作中数据的临时保存。

第三节MCS-51单片机中央处理器CPU

工作寄存器组选择位RS1、RS0(PSW.4、PSW.3):通过工作寄存器选择位的组合,可以从4个工作寄存器组中选择某一组用于单片机的运行工作中数据的临时保存。

RS1RS0所选的4组寄存器000区(内部RAM地址00H~07H)011区(内部RAM地址08H~0FH)102区(内部RAM地址10H~17H)113区(内部RAM地址18H~1FH)二、控制器

CPU中的控制器是负责协调指挥各单元的数据传输运作,使得单片机可依照指令的要求完成工作。(一)程序计数器PC

程序计数器PC为一个16位寄存器,不能访问,主要功能是用来指引CPU依其内含有的程序地址来提取相应的指令码,它总是存放着下一条将要执行指令的地址。CPU每提取完一个指令后,PC的值自动加1,如此CPU即可按照PC中的值,逐一提取并执行每一个指令。如果执行到跳转指令如GOTO指令或中断函数时,PC的值将会改变,使CPU能够执行相应子程序或中断函数。第三节MCS-51单片机中央处理器CPU(二)指令寄存器IR和指令译码器ID

指令寄存器IR是用来放置临时从存储器里面取得的指令。当执行一条指令时,首先把该指令从主存取到数据寄存器中,然后再传送至指令寄存器。当指令寄存器中的指令送至指令译码器ID时,ID对该指令中的操作码部分进行译码,把指令转换成所需的电平信号,然后在时序部件定时信号的作用下,产生执行该指令所需的操作控制信号。第三节MCS-51单片机中央处理器CPU

(三)堆栈指针SP

堆栈指针SP是在单片机片内数据存储区域,开辟一个连续的存储空间,用于暂时放置数据和地址,在中断系统中,通常用于保护现场和保存断点,具有先进后出,后进先出的特点。

(四)数据指针寄存器DPTR

8051单片机中内含一个16位的地址指针寄存器DPTR,可以对外部的数据存储器或者程序存储器进行间接寻址,数据指针寄存器DPTR也可以作为两个8位的寄存器(DPL和DPH),分别单独使用。第三节MCS-51单片机中央处理器CPU04MCS-51单片机存储器第四节MCS-51单片机存储器

51单片机的程序存储器可分为片内程序存储器和片外程序存储器,数据存储器也分为片内数据存储器和片外数据存储器。第四节MCS-51单片机存储器(一)片内数据存储器8051单片机的数据存储器分为片内RAM和片外RAM。

8051单片机片内数据存储器共有256B,其中低128字节为数据存储区,地址范围是00H-7FH,按照用于又分为:工作寄存器区、位寻址去、通用RAM区;高128字节是特殊功能寄存器区,地址范围是80H-FFH。8051单片机外部数据存储器共有64KB,地址范围是0000H-FFFFH。第四节MCS-51单片机存储器

8051单片机片内RAM有256B,根据需要分为低128字节RAM区和高128字节的特殊功能寄存器(SFR)区。

低128B(地址范围:00H~7FH)是真正的RAM存储器,按用途划分为通用工作寄存器区、位寻址区、用户RAM区。第四节MCS-51单片机存储器(1)通用工作寄存器区

该区共有4组通用寄存器组,地址范围为00H~1FH,每组有8个工作寄存器R0~R7,共计32个寄存器,用于存放操作数和中间结果等,一般称为通用寄存器。(2)位寻址区

位寻址区是数据存储器的一部分,地址范围为20H~2FH的单元,既可以像普通RAM一样按字节使用,还可以对RAM单元中的每一位进行位操作,因此把该区域称为位寻址区。(3)用户RAM区

用户RAM区的地址范围为30H~7FH,共80个字节的空间,是供用户使用和操作的RAM区。第四节MCS-51单片机存储器

堆栈是在片内RAM中开辟一连续的区域,一般设在2FH地址单元之后的用户RAM区中,用于保存临时数据。堆栈数据存取按“先进后出”或“后进先出”的原则。8051单片机的SP是8位寄存器,堆栈为“向上生长型”,即栈顶地址总是大于栈底地址的。堆栈从栈底地址单元开始,向高端地址延伸,如图2-6所示。

图2-6

堆栈工作示意图

堆栈栈顶的位置由专用的堆栈指针寄存器SP指出。当单片机执行压栈操作时,先执行SP加1的操作,然后再把数据压入堆栈;当数据再次从堆栈取出之后,SP的值自动减1。51单片机复位后SP的初值为07H,所以堆栈实际上是从08H开始存放数据的。用户必须重新给SP赋值以规定其栈底位置。第四节MCS-51单片机存储器堆栈主要是为子程序调用和中断操作而设。用于保护断点和现场。(1)保护断点。无论子程序调用还是中断服务子程序调用,最终都要返回主程序。应预先把主程序的断点在堆栈中保护起来,为程序正确返回做准备。(2)现场保护。执行子程序或中断服务子程序时,要用到一些寄存器单元,会破坏原有内容。要把有关寄存器单元的内容送入堆栈,保存起来,即“现场保护”。

两种操作:数据压入(PUSH)堆栈,数据弹出(POP)堆栈。数据压入堆栈,SP自动加1;数据弹出堆栈,SP自动减1。第四节MCS-51单片机存储器特殊功能寄存器(SFR)区

特殊功能寄存器(SFR,即SpecialFunctionRegisters)又称为专用寄存器,专用于控制、管理片内算术逻辑部件、并行I/O口、串行I/O口、定时器/计数器、中断系统等功能模块的工作。用户在编程时可以设置参数,却不能随意移作它用。在51子系列单片机中,各专用寄存器(PC例外)与片内RAM统一编址,且作为直接寻址字节,可直接寻址。第四节MCS-51单片机存储器序号标识符名称字节地址位地址1ACC累加器E0HE0H~E7H2BB寄存器F0HF0H~F7H3PSW程序状态字D0HD0H~D7H4SP堆栈指针81H5DPTR数据指针(DPH,DPL)83H、82H6P0P0口80H80H~87H7P1P1口90H90H~97H8P2P2口A0HA0H~A7H9P3P3口B0HB0H~B7H10IP中断优先级控制寄存器B8HB8H~BFH11IE中断允许控制寄存器A8HA8H~AFH12TOMD定时器/计数器方式控制寄存器89H第四节MCS-51单片机存储器13TCON定时器/计数器控制寄存器88H88H~8FH14T2CON定时器/计数器2控制寄存器C8HC8H~CFH15TH0定时器/计数器0(高字节)8CH16TL0定时器/计数器0(低字节)8AH17TH1定时器/计数器1(高字节)8DH18TL1定时器/计数器1(低字节)8BH19TH2定时器/计数器2(高字节)CDH20TL2定时器/计数器2(低字节)CCH21RLDH定时器/计数器2重自动装载(高字节)CBH22RLDL定时器/计数器2重自动装载(低字节)CAH23SCON串行口控制寄存器98H98H~9FH24SBUF串行数据缓冲器99H25PCON电源控制及波特率选择寄存器97H第四节MCS-51单片机存储器51单片机C语言中的SFRsfr不是标准C语言的关键字,是Keil中用来定义专用寄存器字节地址的关键字,从而在单片机C51语言程序中可以直接访问这些专用寄存器。用法:sfr变量名=地址值例如:sfrP1=0x90;//专用寄存器P1的地址为90H,对应P1端口的8个I/O引脚/*BYTERegisters*/sfrP0=0x80;sfrP1=0x90;sfrP2=0xA0;sfrP3=0xB0;sfrPSW=0xD0;sfrACC=0xE0;sfrB=0xF0;sfrSP=0x81;sfrDPL=0x82;sfrDPH=0x83;sfrPCON=0x87;sfrTCON=0x88;sfrTMOD=0x89;sfrTL0=0x8A;sfrTL1=0x8B;sfrTH0=0x8C;sfrTH1=0x8D;sfrIE=0xA8;sfrIP=0xB8;sfrSCON=0x98;sfrSBUF=0x99;第四节MCS-51单片机存储器

二、程序存储器第四节MCS-51单片机存储器

51单片机的片内ROM中不只存放用户的应用程序,还将一部分空间划分出来,用于中断处理程序。在系统遇到中断时,会根据中断的类型,自动跳转到ROM中该中断处理程序处执行相应的中断处理服务程序。地址说明0000H~0002H单片机复位后的程序入口地址(占3个单元)0003H~000AH外部中断0的中断服务程序地址(占8个单元)000BH~0012H定时器0的中断服务程序地址(占8个单元)0013H~001AH外部中断1的中断服务程序地址(占8个单元)001BH~0022H定时器1(T1)的中断服务程序地址(占8个单元)0023H~002AH串行口的中断服务程序地址(占8个单元)

程序存储器中的0003H~002AH共40个单元被保留,用于5个中断源的中断服务程序的入口地址,用户不可修改。用户程序在程序存储器中的位置05MCS-51单片机并行I/O端口第五节MCS-51单片机并行I/O端口

(1)P0口用作系统的地址/数据总线用8051外扩存储器或I/O时,P0口作为系统复用的地址/数据总线用。此时,图2-9中的控制信号C为1,一、P0口的工作原理硬件自动使转接开关MUX打向上面,接通反相器输出,同时使“与门”处于开启状态。第五节MCS-51单片机并行I/O端口当输出的“地址/数据”信息为1时,“与门”输出为1,上方的场效应管导通,下方的场效应管截止,P0.n引脚输出为1;当输出的“地址/数据”信息为0时,上方的场效应管截止,下方的场效应管导通,P0.n引脚输出为0。可见P0.x引脚的输出状态随“地址/数据”状态的变化而变化。上方场效应管起到内部上拉电阻作用。一、P0口的工作原理第五节MCS-51单片机并行I/O端口

一、P0口的工作原理第五节MCS-51单片机并行I/O端口

由上分析,P0口具有高电平、低电平和高阻抗输入3种状态的端口,因此,P0口作为地址/数据总线使用时是一真正的双向端口。1.P0口的工作原理第五节MCS-51单片机并行I/O端口

第五节MCS-51单片机并行I/O端口P0口作为通用I/O输入口时,有两种读入方式:“读锁存器”和“读引脚”。当CPU发出“读锁存器”指令时,锁存器的状态由Q端经上方的三态缓冲器BUF1进入内部总线;当CPU发出“读引脚”指令时,锁存器的输出状态=1(即端为0),从而使下方场效应管截止,引脚状态经下方三态缓冲器BUF2进入内部总线。小结:(1)当P0口用作地址/数据总线口使用时,是一个真正的双向口,用作与外部扩展的存储器或I/O连接,输出低8位地址和输出/输入8位数据。(2)当P0口用作通用I/O口使用时,需要在片外接上拉电阻,此时端口不存在高阻抗的悬浮状态,因此是一个准双向口。如果单片机片外扩展了RAM和I/O接口芯片,P0口此时应作为复用的地址/数据总线口使用。如果没有外扩RAM和I/O接口芯片,此时即可作为通用I/O口使用。第五节MCS-51单片机并行I/O端口二、P1口的工作原理P1口只作为通用I/O口使用

P1口作为输入口时,分为“读锁存器”和“读引脚”两种方式。“读锁存器”时,锁存器的输出端Q的状态经输入缓冲器BUF1进入内部总线;“读引脚”时,先向锁存器写1,使场效应管截止,P1.n引脚的电平经输入缓冲器BUF2进入内部总线。第五节MCS-51单片机并行I/O端口1.P1口工作原理

图2-10P1口某一位的位电路结构小结:

P1口由于有内部上拉电阻,没有高阻抗输入状态,故为准双向口。作为输出口时,不需要在片外接上拉电阻。

P1口“读引脚”输入时,必须先向锁存器P1写入1。第五节MCS-51单片机并行I/O端口三、P2口的工作原理P2口用作地址总线口,在内部控制信号作用下,MUX与“地址”接通。当“地址”线为0时,场效应管导通,P2口引脚输出0;当“地址”线为1时,场效应管截止,P2口引脚输出1。P2口用作通用I/O口,在内部控制信号作用下,MUX与锁存器的Q端接通。第五节MCS-51单片机并行I/O端口1.P2口的工作原理CPU输出1时,Q=1,场效应管截止,P2.n引脚输出1;CPU输出0时,Q=0,场效应管导通,P2.n引脚输出0。输入时,分为“读锁存器”和“读引脚”两种方式。“读锁存器”时,Q端信号经输入缓冲器BUF1进入内部总线;“读引脚”时,先向锁存器写1,使场效应管截止,P2.n引脚上的电平经输入缓冲器BUF2进入内部总线。

图2-11P2口某一位的位电路结构第五节MCS-51单片机并行I/O端口P2口小结:

作为地址输出线使用时,P2口可输出外部存储器的高8位地址,与P0口输出的低8位地址一起构成16位地址,共可寻址64KB的地址空间。当P2口作为高8位地址输出口时,输出锁存器的内容保持不变。

作为通用I/O口使用时,P2口为一个准双向口,功能与P1口一样。

一般情况下,P2口大多作为高8位地址总线口使用,就不能再作为通用I/O口。如果不作为地址总线口使用,可作为通用I/O口使用。第五节MCS-51单片机并行I/O端口四、P3口的工作原理(一)P3口结构

P3口的字节地址为B0H,与其他I/O相比,多了一个缓冲器4。P3口除了可作为通用准双向I/O接口外,还增加了引脚第二功能,其结构原理图如下图所示。

图2-12P3口某一位的位电路结构第五节MCS-51单片机并行I/O端口(二)第二输入/输出功能。

当选择第二输出功能时,该位的锁存器需置“1”,使“与非门”为开启状态。当第二输出为1时,场效应管截止,P3.n引脚输出为1;当第二输出为0时,场效应管导通,P3.n引脚输出为0。

当选择第二输入功能时,该位的锁存器和第二输出功能端均应置1,保证场效应管截止,P3.n引脚的信息由输入缓冲器BUF3的输出获得。四、P3口的工作原理第五节MCS-51单片机并行I/O端口(三)第一功能的通用I/O口

当用作通用I/O输出时,“第二输出功能”端应保持高电平,“与非门”为开启状态。CPU输出1时,Q=1,场效应管截止,P3.n引脚输出为1;CPU输出0时,Q=0,场效应管导通,P3.n引脚输出为0。

当用作通用I/O输入时,P3.n位的输出锁存器和“第二输出功能”端均应置1,场效应管截止,P3.n引脚信息通过输入BUF3和BUF2进入内部总线,完成“读引脚”操作。06MCS-51单片机的时序第六节MCS-51单片机的时序产生8051工作时所必需的控制信号,在时钟信号控制下,严格按时序执行指令。执行指令时,CPU首先到程序存储器中取出需要执行的指令操作码,然后译码,并由时序电路产生一系列控制信号完成指令所规定的操作。CPU发的时序信号两类,一类用对片内各个功能部件控制,用户无须了解;另一类用于对片外存储器或I/O端口的控制,这部分时序对于分析、设计硬件接口电路至关重要。第六节MCS-51单片机的时序MCS-51单片机的时序由4个单位构成:(1)振荡周期晶振或者外接振荡脉冲信号的振荡周期,又称节拍,用P表示。时钟脉冲频率的倒数,为MCS-51单片机最小的时序单位,也称为时钟周期。(2)状态周期晶振信号经过时钟电路的二分频后,由两个振荡周期组成一个状态周期,用S表示。状态周期中的两个振荡周期分别称为节拍P1和节拍P2。(3)机器周期晶振信号经过12分频后形成机器周期,一个机器周期由6个状态周期组成,是单片机执行指令的最短时间,用S1、S2、…、S6表示,共12个节拍,依次可表示为S1P1、S1P2、S2P1、S2P2、…、S6P1、S6P2。第六节MCS-51单片机的时序(4)指令周期是指执行一条指令所需要的时间,它以机器周期为单位。8051单片机中指令周期由1-4个机器周期组成,可以分为单周期指令、双周期指令、4周期指令,其中只有乘法和除法是四周期指令。

从指令执行时间看:

单字节和双字节指令一般为单机器周期和双机器周期;

三字节指令都是双机器周期;

乘、除指令占用4个机器周期。第六节MCS-51单片机的时序图2-14CPU时序第六节MCS-51单片机的时序

CPU按照规定时间执行内部操作,在指令的执行过程中,分别在S1P2、S4P2期间读取指令。指令码被读取后送入指令寄存器,供CPU执行,同时PC指针加1。对于单周期双字节指令,CPU在S1P2期间读取指令,同时PC加1;在S4P2期间读取指令的第2个字节,然后PC加1,此时PC将指向下一条指令。

对于单周期单字节指令,CPU在S1P2期间读取指令,同时PC加1,PC指向下一条指令;而在S4P2期间CPU仍将执行读取指令操作,但CPU不作任何操作,读取的指令将被丢弃,同时PC也不执行加1操作。

如果是单字节双周期指令,则在两个机器周期内将分4次读取指令操作码,但是后3次的读取操作均丢弃不用。07MCS-51单片机的辅助电路第七节MCS-51单片机的辅助电路

一、复位电路

复位使单片机复位时内部各功能部件处于一个确定的初始状态,或单片机程序进入死循环时,单片机也需要复位来保证单片机正常运行。当单片机的复位引脚RST上保持两个机器周期以上的高电平信号,单片机即可执行复位操作。复位后各特殊功能寄存器的状态见下表。第七节MCS-51单片机的辅助电路表

复位后各特殊功能寄存器和程序计数器PC状态表寄存器复位状态寄存器复位状态PC0000HTCON00HACC00HSBUF不定B00HTMOD00HPSW00HTH000HSP07HTL000HDPTR0000HTH100HP0~P3FFHTL100HIPxxx00000BSCON00HIE0x000000B

x表示状态不确定。第七节MCS-51单片机的辅助电路

8051单片机复位电路有两种基本形式:上电复位电路和外部按键复位电路。常用的上电复位电路如图2-15(a)所示,在单片机上电瞬间,RST端与VCC端等电位,并且可以使RES端保持一段时间高电平,由此单片机将进行复位操作,随着电容充电电流的减少,RST的高电平将逐渐下降。常用的按键复位电路如图2-15(b)所示,当单片机正在运行中时,按下复位键一段时间后电容被充电。松开按键后,与上电复位电路相同,使单片机实现复位的操作。

(a)自动复位

(b)按键复位

图2-15

MCS-51复位电路图第七节MCS-51单片机的辅助电路

二、复位电路

CPU工作时的时序是由单片机时钟电路产生的,常见的时钟信号产生方式有以下两种:(1)内部时钟方式内部时钟方式电路如图2-16(a)所示,是最常用的时钟方式,通过单片机内部的振荡电路实现,XTAL1和XTAL2引脚端外接由晶振和电容组成的并联谐振电路,一般电容C1和C2的值为30pF,晶体的振荡频率范围在1.2-13MHZ。(2)外部时钟方式外部时方式电路如图2-16(b)所示,由XTAL2引脚接外部振荡器,XTAL1引脚接地。第七节MCS-51单片机的辅助电路

(a)内部时钟方式

(b)外部时钟方式

图2-16

两种常见时钟方式车用单片机原理(含实验与实训)12C51语言基础C51的语言的函数单击此处添加标题单击此处添加标题01C51语言基础第一节C51语言基础一、数据类型数据的不同格式叫做数据类型,C51编译器所支持的数据类型与标准C语言中所使用的数据类型基本相同,见表3-1,其中bit,sbit,sfr以及sfr16不是标准C中所具有的,是C51根据51单片机的结构特点,增加的特殊数据类型。第一节C51语言基础第一节C51语言基础(1)bit位类型。利用bit可以定义一个在RAM位寻址区的位变量,但不能定义位指针和位数组,它的值域是0或者1。(2)特殊功能寄存器sfr。8051单片机的特殊功能寄存器分布在片内数据存储区的地址单元80H~FFH之间,“sfr”数据类型占用一个内存单元。利用它可访问8051单片机内部的所有特殊功能寄存器。例如:sfrP1=0x90这一语句定义了P1端口在片内的寄存器,在程序后续的语句中可以用“P1=0xff”,使P1的所有引脚输出为高电平的语句来操作特殊功能寄存器。第一节C51语言基础(3)特殊功能寄存器sfr16。“sfr16”数据类型占用两个内存单元,用于操作占两个字节的特殊功能寄存器。例如:“sfr16DPTR=0x82”语句定义了片内16位数据指针寄存器DPTR,其低8位字节地址为82H,高8位字节地址为83H。在程序的后续语句中就可对DPTR进行操作。(4)特殊功能位sbit。

sbit是指AT89S51片内特殊功能寄存器的可寻址位。例如:

sfr PSW=0xd0; //定义PSW寄存器地址为0xd0 sbit OV=PSW^2; //定义OV位为PSW.2符号“^”前是特殊功能寄存器名字,“^”后的数字定义特殊功能寄存器可寻址位在寄存器中的位置,取值必须是0~7。第一节C51语言基础二、

数据存储类型与存储模式

(一)存储类型

在讨论C51数据类型时,须同时提及它的存储类型,以及它与8051单片机存储器结构的关系,因为C51定义的任何数据类型必须以一定的方式,定位在8051单片机的某一存储区中,否则没有任何实际意义。

在51单片机中,数据存储区域较多,有片内程序存储器,片外程序存储器,片外数据存储器、片内数据存储器、片内数据存储器又分为SFR区、位寻址区、字节寻址区、工作寄存器区等,为了能够将数据存储在单片机实际的区域中,C51编译器将变量、常量定义成不同存储类型,与MCS-51的实际存储空间的进行对应,见表3-2。第一节C51语言基础表3-2

C51的存储类型与存储空间对应关系存储类型存储空间位置字节地址data片内RAM直接寻址区,片内低128B00H~7FHbdata片内可位寻址区20H~2FHidata片内RAM的256B存储区,要间接寻址00H~FFHpdata片外数据存储区的256B00H~FFHxdata片外RAM64KB空间0000H~FFFFHcode程序ROM0000H~FFFFH第一节C51语言基础

访问片外数据存储区比访问片内数据存储区慢,因为访问片外数据存储区要通过对数据指针加载地址来间接寻址访问。C51提供两种不同的数据存储类型xdata和pdata来访问片外数据存储区

程序存储区只能读不能写,可能在8051单片机内部或者外部,或外部和内部都有,由8051单片机硬件决定,C51提供了code存储类型来访问程序存储区

单片机访问片内RAM比访问片外RAM相对快一些,所以应尽量把频繁使用的变量置于片内RAM。即采用data、bdata或idata存储类型,而将容量较大或使用不太频繁的那些变量置于片外RAM,即采用pdata或xdata存储类型。常量只能采用code存储类型。第一节C51语言基础(二)存储模式

如果在变量定义时略去存储类型标识符,编译器会自动默认存储类型。

进一步由SMALL、COMPACT和LARGE存储模式指令限制。例如,若声明charvar1,则在使用SMALL存储模式下,var1被定位在data存储区,在使用COMPACT模式下,var1被定位在idata存储区;在LARGE模式下,var1被定位在xdata存储区中。第一节C51语言基础SMALL模式。该模式下,所有变量都默认位于8051单片机内部的数据存储器,与使用data指定存储器类型的方式一样。在此模式下,变量访问的效率高,但是所有数据对象和堆栈必须使用内部RAM。COMPACT模式。本模式下所有变量都默认在外部数据存储器的1页(256字节)内,这与使用pdata指定存储器类型是一样的。该类型适用于变量不超过256字节的情况,此限制是由寻址方式决定的,相当于使用数据指针@Ri寻址。与SMALL模式相比,该存储模式的效率比较低,对变量访问的速度也慢一些,但比LARGE模式快。LARGE模式。本模式下所有变量都默认位于外部数据存储器,相当于用@DPTR寻址。通过数据指针访问外部数据存储器的效率较低,特别是当变量为2字节或更多字节时,该模式要比SMALL和COMPACT产生更多的代码。

在固定的存储器地址上进行变量传递,是C51的标准特征之一。第一节C51语言基础表3-3存储模式及其说明存储模式说明SMALL变量定义在片内数据存储器中,与data定义的存储空间一一致,访问速度最快。COMPACT变量定义在分页寻址的片外数据存储器中(默认存储类型是pdata),每页片外数据存储器的长度为256字节,通过寄存器R0和R1(MOVX@Ri)进行间接寻址访问,堆栈位于片内数据存储器中。LARGE变量定义在片外数据存储器中(最大64KB,默认存储类型是xdata),使用数据指针DPTR来间接访问变量(MOVX@DPTR)。第一节C51语言基础三、C51的基本运算6

C语言表达式是由操作数和运算符组成的序列,运算符是表示特定的算术或逻辑操作的符号,也称为操作符。根据所用运算符的不同,表达式也有很多种类。(1)算术运算符运算符号功能举例(设x=10,y=3)运算符号功能举例(设x=10,y=3)+加法z=x+y;//z=13%余数运算z=x%y;//z=1-减法z=x-y;//z=7++递增(增1)

*乘法z=x*y;//z=30--递减(减1)

/除法(或求模运算)z=x/y;//z=3

第一节C51语言基础6运算符号说明举例(设x初值为4)x++先用x的值,再让x加1y=x++;//y为4,x为5++x先让x加1,再用x的值y=++x;//y为5,x为5x--先用x的值,再让x减1y=x--;//y为4,x为3--x先让x减1,再用x的值y=--x;//y为3,x为3(3)关系运算符运算符号说明举例(设a=2,b=3)运算符号说明举例(设a=2,b=3)>

大于a>b;//返回值为0<=小于等于a<=b;//返回值为1<

小于a<b;//返回值为1==等于a==b;//返回值为0>=大于等于a>=b;//返回值为0!=不等于a!=b;//返回值为1(2)自增和自减运算第一节C51语言基础67(4)逻辑运算符运算符号说明举例(设a=2,b=3)&&逻辑与a&&b;//返回值为1||逻辑或a||b;//返回值为1!逻辑非!a;//返回值为0逻辑运算符表逻辑运算符的逻辑真值表ABA&&BA||B!A00001010111001011110第一节C51语言基础(5)位运算符运算符号说明举例(a=0x38、b=0x25、x=0x0f、y=0x3a、z=0x0f)&逻辑与a&b=0x380&0x25=0x20|按位逻辑或a|b=00111000|00100101=00111101=0x3d^按位逻辑异或a^b;a|b=0x1d(00011101)~按位按位取反~x=0xf0<<

按位左移(高位丢弃,低位补0)若y<<2则y=0xe8>>

按位右移(高位补0,低位丢弃)若z>>3则w=0x01第一节C51语言基础6(6)算术运算符的优先级算术运算符的优先级由高到低依次为自增自减(++、--)和取负(-)、乘法除法(*、/)和取模(%)、加和减(+、-)。对同级运算符一般按从左到右的顺序进行计算,但是,由于括号优先级最高,所以括号会改变计算顺序。2.关系运算符和逻辑运算符的优先级关系运算符和逻辑运算符的相对优先级最高的是“!”,其次是“>”、“<”、“>=”和“<=”,是“==”和“!=”,后面是“&”、“^”、“〡”、“&&”,最后是“||”。关系和逻辑运算符的优先级比算术运算符低,像表达式10>1+12和表达式10>(1+12)计算的结果是一样的。在关系或逻辑表达式中可以使用括号来修改计算原来的优先级顺序。第一节C51语言基础四、绝对地址的访问6

(1)绝对宏:

在程序中,用“#include

<absacc.h>

”即可使用其中声明的宏来访问绝对地址。包括:CBYTE、XBYTE、PWORD、DBYTE、CWORD、XWORD、PBYTE和DWORD等,如:xval=XBYTE[0x0002];XWORD[0x0002]=0x2000;#defineDAC0832XBYTE[0xffff];DAC0832=0x80;第一节C51语言基础

(2)_at_关键字:

该关键字用法较简单,直接在数据声明后加上_at_地址常数即可。但需要注意以下问题:

(1)绝对变量不能被初始化。

(2)bit型数据及变量不能用_at_指定。例如:structdat{structdatidata*next;charcode*test;};idatastructdatnum_at_0x42;xdataintval_at_0x8000;第一节C51语言基础五、C51控制语句与程序设计(一)C51的基本结构

1.顺序结构顺序结构是指程序按照自上而下的顺序执行各个代码及程序模块,程序只有一条路可走,没有语句的跳转。顺序结构最常用,也比较简单和理解。

2.选择结构—if、switch语句选择结构一般用于有选择地执行操作,通过判断表达式条件是否成立,来有选择性执行相应程序。选择结构的程序一般由if条件语句、switch开关语句等来构成。分支控制语句有:if语句和switch语句。第一节C51语言基础(1)if语句if语句是用来判定所给定的条件是否成立,并根据判定条件的结果,决定执行哪种操作。C51提供3种形式的if语句:1)形式1:if(表达式){语句}形式1的流程图如图3-1所示,先判断括号中所给定表达式是否成立,如果表达式成立执行大括号中的语句,否则跳过大括号中的语句,直接执行后面的语句。图3-1单分支选择结构图第一节C51语言基础2)形式2:if(表达式){语句1;}else{语句2;}形式2的流程图如图3-2所示,先判断括号中的表达式是否成立,如果括号中的表达式成立就执行第一个大括号中的语句1,否则执行第二个大括号中的语句2,相当于双分支选择结构。图3-2双分支选择结构图第一节C51语言基础3)形式3:if(表达式1){语句1;}elseif(表达式2){语句2;}elseif(表达式3){语句3;}...elseif(表达式m){语句m;}else{语句n;}形式3的流程图如图3-3所示,本形式相当于串行多分支选择结构。先判断表达式1是否成立,如果表达式1成立就则执行语句1,如果表达式条件1不成立,则判断表达式2是否成立,如果表达式2成立,就执行语句2,否则判断表达式3是否成立,直至判断到表达式m是否成立,如果都没有表达式成立,执行最后的语句n。在if语句中含有一个或多个if语句,称为if语句的嵌套。if总是与它后面最近的一个else语句相对应,不会与相隔if的else对应。图3-3多分支选择结构图第一节C51语言基础图3-3多分支选择结构图第一节C51语言基础(2)switch/case语句。根据表达式的值决定要执行的语句组,常用于实现多选一功能。switch(表达式){

case常量表达式1:{语句组1};break;case常量表达式2:{语句组2};break;…case常量表达式m:{语句组m};break;default:

{语句组n};}第一节C51语言基础switch语句的说明如下:1)switch后面括号内的表达式,可以是整型或字符型表达式。2)当switch括号内表达式的值与某一“case”后面常量表达式的值相等时,就执行该“case”后面的语句,然后遇到break语句就会退出switch选择结构,若表达式的值与所有case后的常量表达式的值都不相同,就执行default后面的语句,然后退出switch选择结构。3)每一个case后面常量表达式的值必须互不相同。4)case语句和default语句的出现次序不会影响程序执行的结果。5)当case语句后面没有break语句时,即使执行了相应的case语句,也不会退出当前switch结构,会继续依次执行后面的语句,直到遇到break或结束。6)当所有case后的常量表达式都与switch中的表达式不等时,就执行default语句。第一节C51语言基础在程序执行过程中,很多时候需要循环结构来实现某段程序的重复执行,在C51中有3种语句可以实现循环,分别是:while语句、do-while语句和for语句。(1)while语句while语句的一般形式如下:while(表达式){循环体语句;}while语句的结构流程图如图3-4所示。3.循环结构第一节C51语言基础图3-4

while语句循环结构图while语句特点是:先判断条件,再执行循环体语句,在循环体语句中对条件进行更新,然后再判断条件是否成立,如条件成立,则继续执行循环体,如条件不成立,则退出循环,如条件第一次就不成立,则循环体一次也不执行。第一节C51语言基础(2)do-while语句do-while语句的格式如下:do{循环体语句;}while(表达式)do-while的结构流程图如图3-5所示。先执行一次大括号内的循环体语句,再判断表达式是否成立,当表达式成立时,再重复执行大括号内的循环体语句,直到表达式不成立时,直接跳出dowhile循环体执行后面的语句。

第一节C51语言基础图3-5do-while循环结构图while语句首先判断表达式是否成立,再决定是否执行循环体语句,而do-while语句要先执行一次循环体语句,再去判断表达式是否成立,因此无论表达式是否成立,在do-while语句中循环体至少已经被执行过一次。第一节C51语言基础

(3)for语句for语句经常使用在循环次数已知的循环体中,也可用于循环次数不确定而只给出循环条件情况的循环体中。for语句的格式如下:for(表达式1;表达式2;表达式3){循环体语句;}在for语句中,for括号中的表达式1为初值赋值语句,用于把初值赋值给循环变量;表达式2为条件表达式,一般是一个逻辑或者关系表达式,用来判断循环变量的真假;表达式3为循环变量更新表达式,用于更新循环变量。第一节C51语言基础6for语句后面带三个表达式,它的执行过程如下:第一步:先执行表达式1的赋值。第二步:判断表达式2是否成立,如果表达式2成立,则执行一次循环体中的语句,然后再执行下一步(第三步)的操作,如果表达式2不成立,直接执行第四步。第三步:执行求解表达式3,对循环变量的值进行更新,然后跳转到第二步继续执行。第四步:退出for循环,执行循体结构后面的语句,第一节C51语言基础图3-6for语句程序流程图for语句中3个表达式都是可选项,可以任意省略,但“;”不能省。省1是不对循环变量赋初值;省2是不判断循环条件的真假;省3是不对循环变量操作。for(;;)表示无限循环,相当于while(1)或者do-while(1)。第一节C51语言基础

4.break语句、continue语句、return语句在循环语句执行过程中,可以用break和continue语句用来跳出循环结构,但是二者又有所不同,下面分别介绍。(1)break语句break语句只能在switch开关语句或者循环语句中使用,一般用来跳出循环体或者switch语句,直接执行循环结构后面或者switch语句之后的语句。(2)continue语句continue语句用于结束本次循环,不再执行当前本轮循环,即continue后面的语句不再执行,直接从下一轮循环入口开始执行,直到判断条件不满足为止。(3)return返回语句return返回语句有两种格式:1)return。2)return(表达式)。如果return语句后面带有表达式,则要计算表达式的值,并将表达式的值作为函数的返回值;如果return语句不带表达式,则函数不返回任何值。第一节C51语言基础六、数组简介

数组是同类数据的一个有序结合,用数组名来标识。整型变量的有序结合称为整型数组,字符型变量的有序结合称为字符型数组。数组中的数据,称为数组元素。

数组中各元素的顺序用下标表示,下标为n的元素可以表示为数组名[n]。改变[]中的下标就可以访问数组中的所有的元素。

数组有一维、二维、三维和多维数组之分。C51语言中常用的一维、二维数组和字符数组。第一节C51语言基础(1)一维数组具有一个下标的数组元素组成的数组成为一维数组,一维数组形式如下:类型说明符数组名[元素个数];其中,数组名是一个标识符,元素个数是一个常量表达式,不能是含有变量的表达式:例如:intarray1[8]第一节C51语言基础定义名为array1的数组,包含8个整型元素,在定义数组时,可对数组进行整体初始化,若定义后对数组赋值,则只能对每个元素分别赋值。例如:inta[3]={2,4,6};

/*给全部元素赋值,a[0]=2,a[1]=4,a[2]=6*/intb[4]={5,4,3,2};/*给全部元素赋值,b[0]=5,b[1]=4,b[2]=3,b[3]=2*/第一节C51语言基础(2)二维数组或多维数组具有两个或两个以上下标的数组,称为二维数组或多维数组。定义二维数组的一般形式如下:类型说明符数组名[行数][列数];其中,数组名是一个标识符,行数和列数都是常量表达式。例如:floatarray2[4][3]/*array2数组,4行3列共12个浮点型元素*/第一节C51语言基础6二维数组可以在定义时进行整体初始化,也可在定义后单个地进行赋值。例如:inta[3][4]={1,2,3,4},{5,6,7,8},{9,10,11,12};/*a数组全部初始化*/intb[3][4]={1,3,5,7},{2,4,6,8},{};/*b数组部分初始化,未初始化的元素为0*/第一节C51语言基础(3)字符数组 若一个数组的元素是字符型的,则该数组就是一个字符数组。例如:定义了一个字符型数组a[],有10个数组元素,并且将9个字符(其中包括一个字符串结束标志‘\0’

)分别赋给了a[0]~a[8],剩余的a[9]被系统自动赋予空格字符。chara[10]={‘B’,‘E’,‘I’,‘’,‘J’,‘I’,‘N’,‘G’,‘\0’};/*字符串数组*/第一节C51语言基础(4)字符串数组

字符串数组有别于字符数组。字符数组是一个一维数组,而字符串数组是以字符串作为数组元素的数组,可以将其看成一个二维字符数组,字符串数组中各字符串在结束时,自动添加一个结束符'\0',下面定义一个简单的字符串数组。charname[5][20]={"Li","Wang","Zhao","Chen","Chao"}第一节C51语言基础用双引号括起来的一串字符,成为字符串常量,C51编译器会自动地在字符串末尾加上结束符‘\0’。用单引号括起来的字符为字符的ASCII码值,而不是字符串。例如‘a’表示a的ASCII码值61H,而“a”表示一个字符串,由两个字符a和\0组成。字符串数组name中含有5个字符串元素,每个字符串的长度要小于20,在计算字符串长度时,字符串后面的'\0'也要考虑在内。02C51语言的函数第二节C51语言的函数一、函数的定义与分类

(一)函数的定义

在C51中函数定义的格式如下:函数值类型函数名称(形式参数表){函数体;}第二节C51语言的函数1.函数值类型

函数类型用来说明函数返回值的数据类型。函数值类型在编程时可以省略,若省略,则系统默认函数返回值的数据类型是int。如果函数只执行操作,不需要返回函数值,该函数类型就是空类型或者无类型,用void表示,它表示本函数是没有返回值的。2.函数名称

由用户命名的,可以是任意的字母、数字和下划线组成,但开头不能使用数字。在同一个文件中,函数是不允许与

温馨提示

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

评论

0/150

提交评论