1、第第1 1章章 单片机基础知识单片机基础知识1.1 概 述1.2 单片机系统的组成单片机系统的组成 1.3 单片机中数的表示及编码1.4 习 题1.1.2 1.1.2 单片机及其发展状况单片机及其发展状况 1 1单片机名称的来源单片机名称的来源 根据单片机的物理形态和内容,早期的单片机称为根据单片机的物理形态和内容,早期的单片机称为Single-Chip MicrocomputerSingle-Chip Microcomputer。从仙童公司的第一款单片机。从仙童公司的第一款单片机F-8F-8开始,甚至到开始,甚至到MCS-51MCS-51时期,这些单片机确实准确地体现时期,这些单片机确实准确
2、地体现了了Single-Chip MicrocomputerSingle-Chip Microcomputer的形态和内容。但是,随着的形态和内容。但是,随着单片机发展到单片机发展到MCS-96MCS-96、新一代、新一代80C5180C51、M68HC05M68HC05等系列单片机等系列单片机时,这些单片机面向对象,突出控制功能,在片内集成了许时,这些单片机面向对象,突出控制功能,在片内集成了许多外围电路及外设接口,如多外围电路及外设接口,如A/DA/D、PWMPWM、WDTWDT等,突破了传统等,突破了传统意义的单片机结构,发展成意义的单片机结构,发展成MicrocontrollerMic
3、rocontroller的体系结构,的体系结构,因此,目前国外已经逐步统一称单片机为因此,目前国外已经逐步统一称单片机为MCUMCU(Micro Micro Controller UnitController Unit)。由于它实行嵌入式应用,因此也称为)。由于它实行嵌入式应用,因此也称为嵌入式微控制器。嵌入式微控制器。1.1.3 80C511.1.3 80C51系列单片机简介系列单片机简介 尽管各类单片机很多,但无论从世界范围还是从国内范尽管各类单片机很多,但无论从世界范围还是从国内范围来看,使用最为广泛的还是围来看,使用最为广泛的还是MCS-51MCS-51型单片机,因此本书也型单片机,因
4、此本书也将以将以MCS-51MCS-51型系列为主,来介绍单片机的原理及应用。型系列为主,来介绍单片机的原理及应用。MCS-51MCS-51型系列单片机共有十几种芯片,表型系列单片机共有十几种芯片,表1-11-1列举了比较典列举了比较典型的几种芯片的型号及主要技术性能指标。型的几种芯片的型号及主要技术性能指标。表表1-1:子系列片内ROM形式ROM容量RAM 容量计数器并行口串行口中断源制造工艺无ROM掩膜ROMEPROM片内片外片内片外51子系列8031805187514KB60KB128B64KB2164815HMOS80C3180C5187C514KB60KB128B64KBCHMOS5
5、2子系列8032805287528KB56KB256B64KB3164817HMOS83C25280C25287C2528KB56KB256B64KBCHMOS 80C5180C51型单片机属于型单片机属于IntelIntel公司的公司的MCS-51MCS-51系列单片机,系列单片机,MCS-51MCS-51系列单片机采用两种半导体工艺生产。一种是系列单片机采用两种半导体工艺生产。一种是HMOSHMOS工工艺,即高密度短沟道艺,即高密度短沟道MOSMOS工艺。另外一种是工艺。另外一种是CHMOSCHMOS工艺,即互工艺,即互补金属氧化物的补金属氧化物的HMOSHMOS工艺。表工艺。表1-11-
6、1的芯片型号中带有的芯片型号中带有“C C”的的都为都为CHMOSCHMOS工艺,其余的为一般的工艺,其余的为一般的HMOSHMOS工艺。工艺。CHMOSCHMOS是是CMOSCMOS和和HMOSHMOS的结合,除具有的结合,除具有HMOSHMOS高速度、高密度的高速度、高密度的特点外,还具有特点外,还具有CMOSCMOS低功耗的优点。比如低功耗的优点。比如80518051型的功耗为型的功耗为630mW630mW,而,而80C5180C51的功耗只有的功耗只有120mW120mW。目前,目前,IntelIntel公司将公司将80C5180C51型单片机的内核使用权以专利互型单片机的内核使用权以
7、专利互换或者出售的形式转让给其他的著名换或者出售的形式转让给其他的著名ICIC制造商,如制造商,如PhilipsPhilips、ATMELATMEL、AMDAMD、DallasDallas、SiemensSiemens、LGLG、华邦等。这些公司在、华邦等。这些公司在80C5180C51内核基础上,扩展了针对不同需求的外围电路,如内核基础上,扩展了针对不同需求的外围电路,如A/DA/D、PWMPWM、WDTWDT,引入使用方便并且价格便宜的,引入使用方便并且价格便宜的Flash ROMFlash ROM等,使等,使80C5180C51的功能更加齐全、针对性更强,巩固并发展了的功能更加齐全、针对
8、性更强,巩固并发展了IntelIntel公公司单片机的地位,成为当今世界司单片机的地位,成为当今世界8 8位单片机的主流。位单片机的主流。1.1.4 1.1.4 单片机的特点及应用领域单片机的特点及应用领域单片机的主要特点如下:单片机的主要特点如下:(1 1)很高的性价比。目前许多单片机的价格只要几元人民)很高的性价比。目前许多单片机的价格只要几元人民币。币。(2 2)集成度高,体积小,可靠性好。内部采用总线结构,)集成度高,体积小,可靠性好。内部采用总线结构,减少各芯片间的连线。减少各芯片间的连线。(3 3)控制能力强。单片机的指令丰富,能满足各种工业控)控制能力强。单片机的指令丰富,能满足
9、各种工业控制的要求。制的要求。(4 4)低功耗、低电压,一般在)低功耗、低电压,一般在3V3V6V6V范围内工作,低电压范围内工作,低电压供电的单片机电源下限可达供电的单片机电源下限可达1V1V2V2V,1V1V以下供电的单片机也以下供电的单片机也已诞生,便于生产便携式设备。已诞生,便于生产便携式设备。(5 5)易扩展。可根据需要进行并行或者串行扩展,形成网)易扩展。可根据需要进行并行或者串行扩展,形成网络控制系统。络控制系统。由于单片机的特点比较突出,因此,在各个应用领域都由于单片机的特点比较突出,因此,在各个应用领域都可以见到它的身影,主要的应用领域有:可以见到它的身影,主要的应用领域有:
10、(1 1)工业自动化控制。这是最早采用单片机控制的领域之)工业自动化控制。这是最早采用单片机控制的领域之一,如各种测控系统、一,如各种测控系统、PLCPLC等。等。(2 2)智能化家用电器。用单片机控制来替代传统的电子线)智能化家用电器。用单片机控制来替代传统的电子线路控制是当前家用电器的发展趋势,如空调、洗衣机、电视路控制是当前家用电器的发展趋势,如空调、洗衣机、电视机等。机等。(3 3)智能化仪表。采用单片机的智能化仪表,加强了数据)智能化仪表。采用单片机的智能化仪表,加强了数据处理能力和网络数据传送能力,提高了仪表的档次,如各种处理能力和网络数据传送能力,提高了仪表的档次,如各种探测仪表
11、、自动抄表系统等。探测仪表、自动抄表系统等。(4 4)办公自动化设备。目前的办公设备中多数都嵌入了单)办公自动化设备。目前的办公设备中多数都嵌入了单片机系统,如打印机、复印机、扫描仪等。片机系统,如打印机、复印机、扫描仪等。(5 5)军用航空等尖端领域的应用更加突出。)军用航空等尖端领域的应用更加突出。1.2 1.2 单片机系统的组成单片机系统的组成 当单片机内部的计算机外围功能单元不能满足对象控制当单片机内部的计算机外围功能单元不能满足对象控制要求的时候,通过系统扩展,在外部并行总线上扩展相应的要求的时候,通过系统扩展,在外部并行总线上扩展相应的计算机外围功能单元所构成的系统,称为单片机系统
12、。这个计算机外围功能单元所构成的系统,称为单片机系统。这个定义强调的是单片机系统的硬件组成,而一个完整的单片机定义强调的是单片机系统的硬件组成,而一个完整的单片机系统应该包括硬件系统和软件系统两大部分,如图系统应该包括硬件系统和软件系统两大部分,如图1-21-2所示。所示。图图1-2 1-2 单片机系统结构框图单片机系统结构框图 单片机系统的硬件由单片机芯片和外部接口电路及设备组单片机系统的硬件由单片机芯片和外部接口电路及设备组成。而单片机芯片则包括了中央处理器(成。而单片机芯片则包括了中央处理器(CPUCPU)、存储器)、存储器(ROM/RAMROM/RAM)、)、I/OI/O接口及其他功能
13、单元(定时计数器、中断接口及其他功能单元(定时计数器、中断系统、串行接口)。它们通过系统、串行接口)。它们通过ABAB(地址总线)、(地址总线)、DBDB(数据总(数据总线)、线)、CBCB(控制总线)相互连接,如图(控制总线)相互连接,如图1-31-3所示。所示。1.2.1 1.2.1 单片机系统的硬件组成单片机系统的硬件组成图图1-3 1-3 单片机系统的硬件结构图单片机系统的硬件结构图 1 1微处理器(微处理器(CPUCPU)CPUCPU主要由两部分组成:运算器和控制器。主要由两部分组成:运算器和控制器。(1 1)运算器)运算器:运算器主要完成算术运算和逻辑运算并进行逻辑测试,如零运算器
14、主要完成算术运算和逻辑运算并进行逻辑测试,如零值测试和两个值的比较,通常算术操作产生一个运算结果,值测试和两个值的比较,通常算术操作产生一个运算结果,而一个逻辑操作产生一个判决。运算器主要由以下几部分组而一个逻辑操作产生一个判决。运算器主要由以下几部分组成。成。累加器累加器A A:用来存放参与算术或者逻辑运算的一个操作数:用来存放参与算术或者逻辑运算的一个操作数和运算结果。和运算结果。暂存器暂存器TMPTMP:用来暂时存放参与算术或者逻辑运算的另一:用来暂时存放参与算术或者逻辑运算的另一个操作数。该操作数主要来自其他数据寄存器或者内存单元个操作数。该操作数主要来自其他数据寄存器或者内存单元中。
15、中。算术逻辑单元算术逻辑单元ALUALU:主要完成把传送到微处理器的数据进:主要完成把传送到微处理器的数据进行算术和逻辑运算。行算术和逻辑运算。ALUALU具有两个主要的输入来源,一个累具有两个主要的输入来源,一个累加器,一个来自数据寄存器,它能够完成这两个数的相加和加器,一个来自数据寄存器,它能够完成这两个数的相加和相减,也能够完成某些逻辑运算。相减,也能够完成某些逻辑运算。标志寄存器标志寄存器F F:用来存放:用来存放ALUALU运算结果的标志位,如进位运算结果的标志位,如进位标志、溢出标志等。标志、溢出标志等。例如:将两个数例如:将两个数12H12H和和31H31H相加,在相加之前,操作
16、数相加,在相加之前,操作数12H12H存放在累加器存放在累加器A A中,中,31H31H存放在数据寄存器中,执行两个存放在数据寄存器中,执行两个数相加的控制线发出数相加的控制线发出“加加”操作信号,操作信号,ALUALU就把两个数相加,就把两个数相加,所加结果存入累加器所加结果存入累加器A A中,覆盖原来累加器中,覆盖原来累加器A A中的内容,执行中的内容,执行完后,累加器完后,累加器A A中的内容就是中的内容就是43H43H。(2 2)控制器)控制器 控制器主要是协调和控制整个计算机系统的操作,主要控制器主要是协调和控制整个计算机系统的操作,主要由以下几部分组成。由以下几部分组成。程序计数器
17、程序计数器PCPC:为了能够保证程序能够连续地运行下去,:为了能够保证程序能够连续地运行下去,CPUCPU必须具备某种手段来确定一条指令的地址,程序计数器必须具备某种手段来确定一条指令的地址,程序计数器就是执行这项工作。当执行程序时,就是执行这项工作。当执行程序时,CPUCPU将自动修改将自动修改PCPC的内的内容,使之总是指向下一条指令的存放地址。容,使之总是指向下一条指令的存放地址。指令寄存器指令寄存器IRIR:保存当前正在执行的一条指令。当执行:保存当前正在执行的一条指令。当执行一条指令时,先把它从程序存储器中取出,然后再传送到指一条指令时,先把它从程序存储器中取出,然后再传送到指令寄存
18、器。令寄存器。指令译码器指令译码器IDID:要执行给定指令的操作,必须给操作码:要执行给定指令的操作,必须给操作码译码,以便确定所要求的操作,指令译码器就是负责这项工译码,以便确定所要求的操作,指令译码器就是负责这项工作。操作码一经译码后就向操作控制器发出具体操作的特定作。操作码一经译码后就向操作控制器发出具体操作的特定信号。信号。时序产生器:用来产生脉冲序列和各种节拍脉冲,每个时序产生器:用来产生脉冲序列和各种节拍脉冲,每个节拍脉冲对应于一种操作,就像是体育老师的口令、交响乐节拍脉冲对应于一种操作,就像是体育老师的口令、交响乐团的指挥一样。团的指挥一样。操作控制器:根据指令译码器的信号,产生
19、相应的操作操作控制器:根据指令译码器的信号,产生相应的操作控制信号,以便启动规定的动作,比如一次内存读写操作,控制信号,以便启动规定的动作,比如一次内存读写操作,一次算术逻辑操作,一次输入一次算术逻辑操作,一次输入/输出操作,指挥并控制输出操作,指挥并控制CPUCPU、内存和输入内存和输入/输出设备之间的数据流向。输出设备之间的数据流向。相对控制器而言,运算器的动作是接受控制器的命令而相对控制器而言,运算器的动作是接受控制器的命令而动作的,即运算器所进行的所有操作都是由控制器发出的控动作的,即运算器所进行的所有操作都是由控制器发出的控制信号来指挥的。制信号来指挥的。2 2总线总线 总线(总线(
20、BUSBUS)是计算机各部件之间传送信息的公共通道。)是计算机各部件之间传送信息的公共通道。微机中有内部总线和外部总线两类。内部总线是微机中有内部总线和外部总线两类。内部总线是CPUCPU内部之内部之间的连线,外部总线是指间的连线,外部总线是指CPUCPU与其他部件之间的连线。外部与其他部件之间的连线。外部总线有三种:数据总线总线有三种:数据总线DBDB(Data BusData Bus)、地址总线)、地址总线ABAB(Address BusAddress Bus)和控制总线)和控制总线CBCB(Control BusControl Bus)。)。(1 1)地址总线()地址总线(ABAB):地
21、址总线宽度根据寻址范围来确定):地址总线宽度根据寻址范围来确定的,当寻址范围是的,当寻址范围是4KB4KB212B212B时,需要的地址线宽度为时,需要的地址线宽度为1212位,位,由于由于80C5180C51单片机的寻址范围最多可达单片机的寻址范围最多可达64KB64KB,因此地址总线,因此地址总线宽度为宽度为1616位,由位,由P0P0口经地址锁存器提供低口经地址锁存器提供低8 8位地址(位地址(A0A0A7A7););P2P2口直接提供高口直接提供高8 8位地址(位地址(A8A8A15A15)。因地址信号是)。因地址信号是由由CPUCPU发出的,故地址总线是单方向的。发出的,故地址总线是
22、单方向的。(2 2)数据总线()数据总线(DBDB):由于):由于80C5180C51单片机为单片机为8 8位机,故数据位机,故数据总线宽度为总线宽度为8 8位,用于传送数据和指令,由位,用于传送数据和指令,由P0P0口提供。口提供。(3 3)控制总线()控制总线(CBCB):控制总线随时掌控各种部件的状态,):控制总线随时掌控各种部件的状态,并根据需要向有关部件发出控制命令。并根据需要向有关部件发出控制命令。3 3存储器存储器 存储器的主要功能就是用来存放程序代码和数据。存储器的主要功能就是用来存放程序代码和数据。(1 1)存储器的分类)存储器的分类 按照存储器的存取功能分,可分为:按照存储
23、器的存取功能分,可分为:随机存取存储器(随机存取存储器(Random Access MemoryRandom Access Memory,RAMRAM)。它可)。它可以随机写入和读出,读写速度快,但是断电后,存储的以随机写入和读出,读写速度快,但是断电后,存储的数据就要丢失。主要用来存放各种处理数据。数据就要丢失。主要用来存放各种处理数据。只读存储器(只读存储器(Read Only MemoryRead Only Memory,ROMROM)。它在一般)。它在一般情况下只能读不能写,当然,在满足一定条件下也可以情况下只能读不能写,当然,在满足一定条件下也可以完成写入操作,否则,读的数据又从何而
24、来呢?它的另完成写入操作,否则,读的数据又从何而来呢?它的另外一个特点就是掉电不丢失,能长期保存数据。从写入外一个特点就是掉电不丢失,能长期保存数据。从写入方式来看,方式来看,ROMROM也有很多分类,主要有:掩膜也有很多分类,主要有:掩膜ROMROM、EPROMEPROM、EEPROMEEPROM、FLASHROMFLASHROM和和OTPROMOTPROM(一次性编程(一次性编程ROMROM)。)。按照存储器结构分,可分为:按照存储器结构分,可分为:普林斯顿结构。一般微机只有一个地址空间,普林斯顿结构。一般微机只有一个地址空间,ROMROM和和RAMRAM可以随意安排在这一地址范围内不同的
25、空间,即可以随意安排在这一地址范围内不同的空间,即ROMROM和和RAMRAM的地址在同一个队列里分配不同的地址空间。的地址在同一个队列里分配不同的地址空间。CPUCPU访问存储器时,一个地址对应唯一的存储空间,可以是访问存储器时,一个地址对应唯一的存储空间,可以是ROMROM,也可以是,也可以是RAMRAM,并用同一种指令访问。,并用同一种指令访问。哈佛结构。如哈佛结构。如80C5180C51的存储器结构分程序存储器空间的存储器结构分程序存储器空间和数据存储器空间,总共有和数据存储器空间,总共有4 4个物理存储空间,即片内程个物理存储空间,即片内程序存储器空间、片外程序存储器空间、片内数据存
26、储器序存储器空间、片外程序存储器空间、片内数据存储器空间、片外数据存储器空间,并用不同的指令访问程序空间、片外数据存储器空间,并用不同的指令访问程序存储器和数据存储器,这种程序存储器和数据存储器分存储器和数据存储器,这种程序存储器和数据存储器分开的结构就称为哈佛结构。开的结构就称为哈佛结构。(2 2)存储器的操作)存储器的操作 存储器的操作分为读操作和写操作。存储器的操作分为读操作和写操作。例如,将数据存储器例如,将数据存储器30H30H中的内容中的内容03H03H读出到累加器读出到累加器A A中。中。其步骤如下:其步骤如下:CPUCPU将要读存储空间的地址码将要读存储空间的地址码30H30H
27、送到地址总线上,选通送到地址总线上,选通地址为地址为30H30H的存储单元。的存储单元。CPUCPU的控制器发出的控制器发出“读读”信号,建立存储器到信号,建立存储器到CPUCPU的数据的数据流向。流向。存储器将地址为存储器将地址为30H30H的存储单元中的内容的存储单元中的内容03H03H释放到数据释放到数据总线上。总线上。CPUCPU将数据总线上的数据将数据总线上的数据03H03H读入到累加器读入到累加器A A中。中。注意:读操作不影响原来单元内容,即注意:读操作不影响原来单元内容,即30H30H中的内容还是中的内容还是03H03H,类似计算机操作中的,类似计算机操作中的“复制复制”。例如
28、,将数据例如,将数据10H10H送到地址为送到地址为40H40H的内部数据存储单元中。的内部数据存储单元中。其步骤如下:其步骤如下:CPUCPU将要写入的存储空间的地址码将要写入的存储空间的地址码40H40H送到地址总线上,送到地址总线上,选通地址为选通地址为40H40H的存储单元。的存储单元。将数据将数据10H10H送到数据总线上。送到数据总线上。CPUCPU控制器发出控制器发出“写写”信号,建立信号,建立CPUCPU到存储器的数据流到存储器的数据流向。向。存储器将数据存储器将数据10H10H送入到地址为送入到地址为40H40H的存储单元中。的存储单元中。注意:写操作要改变原来单元的内容,类
29、似计算机操作中的注意:写操作要改变原来单元的内容,类似计算机操作中的“粘贴粘贴”,如果,如果40H40H单元中原来的内容是单元中原来的内容是20H20H,经过这次写操,经过这次写操作后,作后,40H40H单元中的内容就改为单元中的内容就改为10H10H。(3 3)堆栈)堆栈 堆栈就是在单片机堆栈就是在单片机RAMRAM中,专门划出一个区域用来临时中,专门划出一个区域用来临时存放一些重要数据码或者地址码。对于堆栈,应主要掌握以存放一些重要数据码或者地址码。对于堆栈,应主要掌握以下几点。下几点。栈底地址:用来确定堆栈的深度,一般可在程序初始化栈底地址:用来确定堆栈的深度,一般可在程序初始化部分通过
30、对堆栈指针部分通过对堆栈指针SP SP 的赋值来确定,如的赋值来确定,如MOV SP,#60HMOV SP,#60H,就,就是将堆栈的栈底设定为是将堆栈的栈底设定为60H60H(深度为(深度为32B32B)。)。堆栈指针:用来指出当前栈顶的存储单元的地址。堆栈指针:用来指出当前栈顶的存储单元的地址。堆栈原则:堆栈操作遵循堆栈原则:堆栈操作遵循“先进后出先进后出”的原则。的原则。如图如图1-41-4是一堆栈的结构图。通过这个图可以了解以下是一堆栈的结构图。通过这个图可以了解以下几点:几点:这个堆栈的栈底为这个堆栈的栈底为50H50H,在程序初始化过程中可以通过指,在程序初始化过程中可以通过指令令
31、MOV SP,#50HMOV SP,#50H来指定,同时确定堆栈深度为来指定,同时确定堆栈深度为51H51H7FH7FH,在,在具体使用中的堆栈深度根据实际需要保存的数据个数来确定。具体使用中的堆栈深度根据实际需要保存的数据个数来确定。当前堆栈指针当前堆栈指针SPSP的值为的值为54H54H,即当前栈顶为,即当前栈顶为54H54H。这这4 4个数据的压栈顺序为个数据的压栈顺序为10H10H、14H14H、58H58H、64H64H,根据,根据“先先进后出进后出”原则,这原则,这4 4个数据的出栈顺序为个数据的出栈顺序为64H64H、58H58H、14H14H、10H10H。从上面几点看,堆栈与
32、手枪弹夹的结构和工作原理十分从上面几点看,堆栈与手枪弹夹的结构和工作原理十分相似。相似。图图1-4 1-4 堆栈结构示意图堆栈结构示意图 4 4输入输入/输出设备及其接口电路输出设备及其接口电路 单片机系统的输入单片机系统的输入/输出设备也称作输出设备也称作I/OI/O设备,比如键盘、设备,比如键盘、鼠标、显示器、微型打印机等。输入鼠标、显示器、微型打印机等。输入/输出(输出(I/OI/O)接口由大)接口由大规模集成电路组成的规模集成电路组成的I/OI/O器件构成,用来连接主机和相应的器件构成,用来连接主机和相应的I/OI/O设备(如:键盘、鼠标、显示器、打印机等),使得这设备(如:键盘、鼠标
33、、显示器、打印机等),使得这些设备和主机之间传送的数据、信息在形式上和速度上都能些设备和主机之间传送的数据、信息在形式上和速度上都能匹配。不同的匹配。不同的I/OI/O设备必须配置与其相适应的设备必须配置与其相适应的I/OI/O接口。通常,接口。通常,这些接口电路集成在一块芯片上。如这些接口电路集成在一块芯片上。如8255A8255A、81558155、82538253、DAC0832DAC0832、ADC0809ADC0809等扩展芯片。等扩展芯片。1.2.2 1.2.2 单片机系统软件组成单片机系统软件组成 只配备硬件设备的单片机系统,并不能完成我们所需要只配备硬件设备的单片机系统,并不能
34、完成我们所需要实现的功能,硬件是实现功能的载体,而软件是硬件的灵魂,实现的功能,硬件是实现功能的载体,而软件是硬件的灵魂,目前用来设计软件的语言分为三类。目前用来设计软件的语言分为三类。1 1机器语言机器语言 机器语言的主要特点是:机器语言的主要特点是:(1 1)由一组二进制码组成,直接能被计算机识别并执行。)由一组二进制码组成,直接能被计算机识别并执行。(2 2)不同的微处理器,采用不同的机器语言。)不同的微处理器,采用不同的机器语言。(3 3)可读性差,直观性差,容易出错,目前基本不采用。)可读性差,直观性差,容易出错,目前基本不采用。2 2汇编语言汇编语言 汇编语言的主要特点是:汇编语言
35、的主要特点是:(1 1)用助记符代替机器语言中的操作码。)用助记符代替机器语言中的操作码。(2 2)汇编语言翻译成机器语言的方法有两种:一种是手工)汇编语言翻译成机器语言的方法有两种:一种是手工查表汇编,一种是机器汇编。由于机器汇编方便,目前基本查表汇编,一种是机器汇编。由于机器汇编方便,目前基本上都是采用机器汇编。上都是采用机器汇编。(3 3)不同的微处理器采用不同的汇编语言。)不同的微处理器采用不同的汇编语言。(4 4)较直观,可读性好,占用内存少,速度快。)较直观,可读性好,占用内存少,速度快。3.3.高级语言高级语言高级语言的主要特点是:高级语言的主要特点是:(1 1)采用类似人类自然
36、语言的程序设计语言。)采用类似人类自然语言的程序设计语言。(2 2)通过专门的编译程序翻译成机器语言。)通过专门的编译程序翻译成机器语言。(3 3)通用性强,移植性好,不随微处理器的不同而不同。)通用性强,移植性好,不随微处理器的不同而不同。(4 4)目前较流行的有)目前较流行的有C51C51、PL/MPL/M和和BASICBASIC语言。语言。三种语言各有特点,本书介绍的是汇编语言,虽然不同三种语言各有特点,本书介绍的是汇编语言,虽然不同类型单片机的汇编语言有所不同,但还是有很多相似之处,类型单片机的汇编语言有所不同,但还是有很多相似之处,可以举一反三。同时,在掌握汇编语言的基础上,再去掌握
37、可以举一反三。同时,在掌握汇编语言的基础上,再去掌握高级语言的编程,能达到事半功倍的效果。高级语言的编程,能达到事半功倍的效果。1.3 1.3 单片机中数的表示及编码单片机中数的表示及编码 在日常生活中,我们经常使用的是十进制数,而在单片在日常生活中,我们经常使用的是十进制数,而在单片机中,二进制机器编码是它的基本语言,考虑到二进制在书机中,二进制机器编码是它的基本语言,考虑到二进制在书写和阅读方面的缺点,在单片机软件编写过程中,常引入十写和阅读方面的缺点,在单片机软件编写过程中,常引入十六进制数来表示。六进制数来表示。如何进行十进制、二进制、十六进制之间的相互转换,如何进行十进制、二进制、十
38、六进制之间的相互转换,是基本的数字处理能力,这里不再详述。对此有疑问的初学是基本的数字处理能力,这里不再详述。对此有疑问的初学者,可以参考有关的数字电路基础的数据,本书主要介绍正者,可以参考有关的数字电路基础的数据,本书主要介绍正负数在计算机中的表示方法和有关编码知识。负数在计算机中的表示方法和有关编码知识。1.3.1 1.3.1 正数和负数在单片机中的表示方法正数和负数在单片机中的表示方法 在日常数字表示中,有符号数的正负性可以用在日常数字表示中,有符号数的正负性可以用“+”、“-”来表示,但是在计算机数字表示中,有符号数的正负根据其来表示,但是在计算机数字表示中,有符号数的正负根据其最高位
39、是最高位是“0 0”还是还是“1 1”来区分。如在来区分。如在8 8位微机中,位微机中,D7D7位表示位表示这个数的符号,是这个数的符号,是“1 1”,表示负数,是,表示负数,是“0 0”,表示正数,其,表示正数,其余位表示数值位的大小,如图余位表示数值位的大小,如图1-51-5所示。所示。图1-5 8位有符号数的表示方法 【例例1-1】指出指出N1和和N2的值。的值。解:解:由于由于N1N1的的D7D7位为位为1 1,是负数,后面的数值位的值为,是负数,后面的数值位的值为6 6,则,则N1=N1=-6-6;由于由于N2N2的的D7D7位为位为0 0,是正数,后面的数值位的值为,是正数,后面的
40、数值位的值为7 7,则,则N2=+7N2=+7。那么,在计算机中,那么,在计算机中,-6-6和和+7+7的存储形式真的如此吗?我们来的存储形式真的如此吗?我们来看一下下面的例子。看一下下面的例子。【例例1-21-2】求求S=N1+N2=-6+7S=N1+N2=-6+7。解:根据例解:根据例1-11-1的结果,的结果,-6=1000 0110B-6=1000 0110B,+7=0000 0111B+7=0000 0111B,则运算过程如下:则运算过程如下:10000110B N110000110B N1+00000111B N2+00000111B N2 10001101B S=-13 1000
41、1101B S=-13 S=-13S=-13,很明显,结果错误,那么问题出在哪里呢?主,很明显,结果错误,那么问题出在哪里呢?主要是因为有符号数在计算机中的表示方法出现错误。在计算要是因为有符号数在计算机中的表示方法出现错误。在计算机中,有符号数的表示方法有机中,有符号数的表示方法有3 3种:原码、反码和补码。我种:原码、反码和补码。我们上面两个例子采用的都是原码,但是,计算机中,负数是们上面两个例子采用的都是原码,但是,计算机中,负数是以补码形式存储并参与运算的。下面我们来具体了解正负数以补码形式存储并参与运算的。下面我们来具体了解正负数的原码、反码和补码。的原码、反码和补码。1 1正数的原
42、码、反码、补码正数的原码、反码、补码正数的表示最简单,它的原码、反码和补码都一样,即正数的表示最简单,它的原码、反码和补码都一样,即【X X】原原 =【X X】反反 =【X X】补补 =X=X【例例1-31-3】X=+9X=+9,求其原码、反码、补码。,求其原码、反码、补码。解:解:+9=00001001B+9=00001001B,则,则【+9+9】原原 =【+9+9】反反 =【+9+9】补补 =00001001B=00001001B 2 2负数的原码、反码和补码负数的原码、反码和补码负数的原码:符号位为负数的原码:符号位为1 1,其余位为数值位。,其余位为数值位。【例例1-41-4】X=-9
43、X=-9,求,求X X的原码。的原码。解:符号位为解:符号位为1 1,数值位为,数值位为9=00010019=0001001所以,所以,【-9-9】原原 =10001001B=10001001B。负数的反码:原码的符号位不变,其余位取反。负数的反码:原码的符号位不变,其余位取反。【例例1-51-5】X=-9X=-9,求,求X X的反码。的反码。解:解:【-9-9】原原 =10001001B=10001001B,根据符号位不变,其余位取反,根据符号位不变,其余位取反的方法可得,的方法可得,【-9-9】反反 =11110110B=11110110B负数的补码:反码加负数的补码:反码加1 1,即,即
44、【X X】补补 =【X X】反反 +1+1。【例例1-61-6】X=-9X=-9,求,求X X的补码。的补码。解:解:【-9-9】原原 =10001001B=10001001B,【-9-9】反反 =11110110B=11110110B,根据,根据补码等于反码加补码等于反码加1 1,则,则【-9-9】补补 =【-9-9】反反 +1=11110110B+1=11110111B+1=11110110B+1=11110111B 3 3零的原码、反码和补码零的原码、反码和补码零的原码:由于零分为零的原码:由于零分为+0+0和和-0-0,则其原码有两种:,则其原码有两种:【+0+0】原原 =000000
45、00B=00000000B【-0-0】原原 =10000000B=10000000B零的反码也有两种:零的反码也有两种:【+0+0】反反 =00000000B=00000000B【-0-0】反反 =11111111B=11111111B零点补码:由于零点补码:由于+0+0的补码等于原码,的补码等于原码,-0-0的补码等于其反码加的补码等于其反码加1 1,所以,不管是,所以,不管是+0+0还是还是-0-0,它的补码只有一个:,它的补码只有一个:【+0+0】补补 =【-0-0】补补 =00000000B=00000000B综上所述,归纳如下。综上所述,归纳如下。对于正数:对于正数:【X X】原原
46、=【X X】反反 =【X X】补补 =X=X对于负数:对于负数:【X X】反反 =【X X】原原 数值位取反,符号位不变数值位取反,符号位不变【X X】补补 =【X X】反反 +1+1 学会了补码的运算,我们回过来看例学会了补码的运算,我们回过来看例1-21-2,采用补码运算,采用补码运算,【-6-6】补补 =11111010B=11111010B【+7+7】补补 =00000111B=00000111B则则S=-6+7S=-6+7的运算如下:的运算如下:11111010B N111111010B N1+00000111B N2+00000111B N2 00000001B S=1 00000
47、001B S=1结果正确,至此,大家应该明白在计算机中,有符号数的运结果正确,至此,大家应该明白在计算机中,有符号数的运算采用的是数的补码形式。算采用的是数的补码形式。1.3.2 1.3.2 常用编码常用编码 1 1BCDBCD码码 采用二进制码对每一个十进制数进行编码,称为采用二进制码对每一个十进制数进行编码,称为BCDBCD码,用码,用【】BCDBCD表示,例如:表示,例如:51=51=【0101 00010101 0001】BCDBCD,在这里,在这里,【0101 00010101 0001】BCDBCD不能认不能认为是二进制码为是二进制码01010001B01010001B,因为,因为
48、01010001B01010001B的十进制为的十进制为8181,而,而【0101 00010101 0001】BCDBCD的十进制为的十进制为5151,显然存在区别。具体的十,显然存在区别。具体的十进制与进制与BCDBCD码之间的关系如表码之间的关系如表1-21-2所示。所示。表表1-2 8421BCD1-2 8421BCD编码表编码表十 进 制 数8421BCD码十 进 制 数8421BCD码00000501011000160110200107011130011810004010091001 2 2BCDBCD码的加法运算码的加法运算BCDBCD码的加法运算与二进制码的加法运算规则一样,但
49、有时码的加法运算与二进制码的加法运算规则一样,但有时候会出错,例如:候会出错,例如:【0101 10010101 1001】BCD 59BCD 59+【0010 10000010 1000】BCD 28BCD 28 【1000 00011000 0001】BCD 81BCD 81显然,运算结果是错误的,因为在运算过程中,低四位向高显然,运算结果是错误的,因为在运算过程中,低四位向高四位有进位,所以要进行修正,具体的修正条件和方法如下:四位有进位,所以要进行修正,具体的修正条件和方法如下:(1 1)低四位向高四位有进位,低四位加)低四位向高四位有进位,低四位加6 6修正。修正。(2 2)高四位向
50、更高位有进位,高四位加)高四位向更高位有进位,高四位加6 6修正。修正。(3 3)低四位出现非法)低四位出现非法BCDBCD码,低四位加码,低四位加6 6修正。修正。(4 4)高四位出现非法)高四位出现非法BCDBCD码,高四位加码,高四位加6 6修正。修正。(5 5)同一个四位出现两种修正条件,则只需修正一次即可。)同一个四位出现两种修正条件,则只需修正一次即可。【例例1-71-7】已知已知X=X=【0110 00010110 0001】BCDBCD,Y=Y=【0010 01100010 0110】BCDBCD,求,求S=X+YS=X+Y。解:解:【0110 00010110 0001】BC