1.3 计算机系统组成

计算机系统主要包括硬件系统和软件系统两大部分。

1.3.1 计算机硬件组成

1.微型计算机硬件结构

微处理器是计算机的核心部件,如果把一台计算机比作一个加工厂,微处理器就是这个加工厂的总调度和核心加工车间。

微处理器主要由算术逻辑运算部件(ALU)、累加器、控制逻辑部件、程序计数器及通用寄存器等组成。把微处理器芯片、存储器芯片、输入/输出(I/O)接口芯片等部件通过一组通用的信号线(内总线)连接在印制电路板上,称为主机。主机的I/O接口通过一组通用的信号线(总线)把外部设备(如键盘、显示器及必要的I/O装置)连接在一起,构成了微型计算机,如图1-5所示。

图1-5 微型计算机硬件结构

2.存储器

存储器具有记忆功能,用来存放数据和程序。计算机中的存储器主要有随机存储器(RAM)和只读存储器(ROM)两种。随机存储器一般用来存放程序运行过程中的中间数据,计算机掉电时数据不再保存。只读存储器一般用来存放程序,计算机掉电时信息不会丢失。

在计算机中,二进制数的每一位是数据的最小存储单位。将8位(bit)二进制数称为一个字节(Byte),字节是计算机存储信息的基本数据单位。

存储器的容量常以字节为单位表示如下。

1Byte=8bit

1024B=1KB

1024KB=1MB

1024MB=1GB

1024GB=1TB

若存储器内存容量为64MB,即表示其容量为

64MB=64×1024KB

=64×1024×1024B

在51单片机中,存储器容量一般可扩展为64KB,即64×1024=65536个字节存储单元。

3.总线

总线是连接计算机各部件之间的一组公共的信号线。一般情况下,可分为系统总线和外总线。

系统总线是以微处理器为核心引出的连接计算机各逻辑功能部件的信号线。利用系统总线可把存储器、输入/输出接口等部件通过标准接口方便地挂接在总线上,如图1-5所示。

微处理器通过总线与各部件相互交换信息,这样可灵活机动、方便地改变计算机的硬件配置,使计算机物理连接结构大大简化。但是,由于总线是信息的公共通道,各种信息相互交错,非常繁忙,因此,CPU必须分时地控制各部件在总线上相互传送信息,也就是说,总线上任一时刻只能有一个挂在总线上的设备传送一种信息。所以,系统总线应包括地址总线(AB)、控制总线(CB)和数据总线(DB)。

1)地址总线(AB):CPU根据指令的功能需要访问某一存储器单元或外部设备时,其地址信息由地址总线输出,然后经地址译码单元处理。地址总线为16位时,可寻址范围为216=64K,地址总线的位数决定了所寻址存储器容量或外设数量的范围。在任一时刻,地址总线上的地址信息唯一对应某一存储单元或外部设备。

2)控制总线(CB):由CPU产生的控制信号是通过控制总线向存储器或外部设备发出控制命令的,以使在传送信息时协调一致地工作。CPU还可以接收由外部设备发来的中断请求信号和状态信号,所以控制总线可以是输入、输出或双向的。

3)数据总线(DB):CPU是通过数据总线与存储单元或外部设备交换数据信息的,故数据总线应为双向总线。在CPU进行读操作时,存储单元或外设的数据信息通过数据总线传送给CPU;在CPU进行写操作时,CPU把数据通过数据总线传送给存储单元或外设。

4.输入/输出(I/O)接口

CPU通过接口电路与外部输入、输出设备交换信息,如图1-5所示。

一般情况下,外部设备种类、数量较多,而且各种参数(如运行速度、数据格式及物理量)也不尽相同。CPU为了实现选取目标外部设备并与其交换信息,必须借助接口电路。一般情况下,接口电路通过地址总线、控制总线和数据总线与CPU连接;通过数据线(D)、控制线(C)和状态线(S)与外部设备连接。

在微机系统中,常常把一些通用的、复杂的I/O接口电路制成统一的、遵循总线标准的电路板卡,CPU通过板卡与I/O设备建立物理连接,使用十分方便。

1.3.2 计算机软件系统

软件就是程序,软件系统就是计算机上运行的各种程序、管理的数据和有关的各种文档。

根据软件功能的不同,软件可分为系统软件和应用软件。

使用和管理计算机的软件称为系统软件,包括操作系统、各种语言处理程序(如C51编译器)等软件,系统软件一般由商家提供给用户。

应用软件是用户在计算机系统软件资源的平台上,为解决实际问题所编写的应用程序。在计算机硬件已经确定的情况下,为了让计算机解决各种不同的实际问题,就需要编写相应的应用程序。随着市场对软件需求的膨胀和软件技术的飞速发展,常用的应用软件已经标准化、模块化和商品化,用户在编写应用程序时可以通过指令直接调用。

1.3.3 计算机语言及程序设计

计算机语言是实现程序设计、以便人与计算机进行信息交流的必备工具,又称程序设计语言。

1.计算机语言

计算机语言可分为3类:机器语言、汇编语言、高级语言。

机器语言(又称二进制目标代码)是CPU硬件唯一能够直接识别的语言,在设计CPU时就已经确定其代码的含义。人们要计算机所执行的任何操作,最终都必须转换为相应的机器语言,CPU才能识别和控制执行。CPU系列不同,其机器语言代码的含义也不同。

由于机器语言必须为二进制代码描述,不便于记忆、使用和直接编写程序,为此产生了与机器语言相对应的汇编语言。

汇编语言使用人们便于记忆的符号来描述与之相应的机器语言,机器语言的每一条指令,都对应一条汇编语言的指令。但是,用汇编语言编写的源程序必须翻译为机器语言,CPU才能执行。把汇编语言源程序翻译为机器语言的工作由“汇编程序”完成,整个翻译过程称之为“汇编”。

用汇编语言编写的程序运行速度快、占用存储单元少、效率高,在单片机应用系统中,使用汇编语言编写应用程序较为普遍,但程序设计者必须熟悉单片机内部资源等硬件设施。

目前,社会上广泛使用的是高级语言(如C语言),是一种接近人们习惯的程序设计语言,它使用人们所熟悉的文字、符号及数学表达式来编写程序,使程序的编写和操作都显得十分方便。由高级语言编写的程序称为“源程序”。在计算机内部,源程序同样必须翻译为CPU能够接受的二进制代码所表示的“目标程序”,具有这种翻译功能的程序称为“编译程序”,如图1-6所示。

每一种高级语言都有与其相应的编译程序。在计算机内运行编译程序,才能运行相应的高级语言所编写的源程序。

图1-6 源程序编译过程

2.程序设计

下面给出计算机在处理简单问题时,程序设计的一般步骤。

1)确定数据结构。依据任务提出的要求,规划输入数据和输出的结果,确定存放数据的数据结构。

2)确定算法。针对所确定的数据结构来确定解决问题的步骤。

3)编程。根据算法和数据结构,用程序设计语言编写程序,存入计算机中。

4)调试。在编译程序环境下,编译、调试源程序,修改语法错误和逻辑错误,直至程序运行成功。

5)整理源程序并总结资料。

3.算法

所谓算法,是为解决某一特定的问题,所给出的一系列确切的、有限的操作步骤。

程序设计的主要工作是算法设计,有了一个好的算法,就会产生质量较好的程序。程序实际上是用计算机语言所描述的算法。也就是说,依据算法所给定的步骤,用计算机语言所规定的表达形式去实现这些步骤,即为源程序。

在算法设计中应遵循下面几个准则。

1)可执行性。算法是编写程序代码的主要依据,算法设计中的每一步骤,都必须是所使用的高级语言能够描述的操作。

2)确定性。算法中每一操作步骤必须有确切的含义。也就是说,该操作对于相同的输入必能得出相同的结果。

3)有穷性。一个算法必须在有限的操作步骤完成后,得出正确结果,才能够使算法结束。

4)输入。一个算法,可以有零个、一个或多个特定对象的输入。

5)输出。一个算法,其主要目的是求解问题,可以有一个或多个与输入相关的输出。

目前,一般采用自然语言、一般流程图和N-S结构流程图对算法进行描述。

常用一般流程图符号如图1-7所示。

图1-7 常用流程图符号

4.结构化程序设计

对同一个需要求解的问题,不同的算法会编出不同的程序。

结构化程序要求程序设计者不能随心所欲地编写程序,而要按一定的结构形式来设计、编写程序。在程序设计时,大家都共同遵守这一规定,使程序清晰、易读、易修改。

(1)结构化程序设计步骤

结构化程序设计步骤如下。

1)自顶向下,逐步求精。所谓自顶向下,就是首先从全局出发进行整体设计,然后依据整体设计向下层逐层分解。所谓逐步求精,就是对上一层任务逐层进行细化。一般来说,一个大的任务可以分解为若干个子任务,而每个子任务又可以继续分解为若干个更小的子任务,这样向下逐层细化直至每个子任务仅处理一个简单容易实现的问题。

2)模块化设计。所谓模块化,就是在程序设计时,由自顶向下,逐步求精所得出的一个个子任务的处理程序,称为“功能模块”。一个大的程序,就是由若干个这样的功能模块组成的,在整体设计部署下,编程实际上成为若干个小问题的处理。每一块模块可以分配给不同的程序设计者去完成,这样,编程不再是一件十分复杂和困难的事情。

(2)结构化程序特点

由结构化算法得出的功能模块应具备下述特点。

1)一个模块处理一个特定的小问题。

2)每一个模块可以独立地进行编程、调试。

3)除最上层外,每层功能模块可接受上层调用。

4)每一个模块编程只能使用顺序结构、选择结构和循环结构(3种基本结构)描述。

已经证明,这3种基本结构组成的算法可以解决任何复杂的问题。本书使用的汇编语言及C语言具有结构化程序设计的功能和特征。

【例1-1】 求S=1+2+3+…+99+100的值的算法描述方式。

(1)用自然语言描述

设一整型变量i,并令i=1(这里的“=”不同于数学里的“等号”,它表示赋值,把1赋给i,以下类同)。

1)设一整型变量s存放累加和。

2)每次将i与s相加后存入s。

3)使i值增1,取得下次的加数。

4)重复执行上步,直到i的值大于100时,执行下一步。

5)将累加和s的值输出。

(2)用一般流程图描述

如图1-8所示,用一般流程图描述的流程图由顺序结构和循环结构组成。

图1-8 一般流程图