知识链接
一、单片机技术应用系统认识
(一)单片机概述
1.用Proteus设计第一个LED控制电路
Proteus是英国Labcenter Electronics公司开发的多功能EDA(电子设计自动化)软件。Proteus不仅是模拟电路、数字电路、模/数混合电路的设计与仿真平台,也是目前较先进的单片机和嵌入式系统的设计与仿真平台。它实现了在计算机上完成从原理图与电路设计、电路分析与仿真、单片机代码级调试与仿真、系统测试与功能验证到形成PCB(印制电路板)的完整的电子设计、研发过程。
按照项目描述要求,点亮一个LED的电路由AT89S52单片机和一个LED构成。AT89S52单片机是美国Atmel公司生产的低电压、高性能8位单片机,具有丰富的内部资源。使用AT89S52单片机无须外部存储器。
LED加正向电压发光,反之不发光。一般接法是阳极接高电平,阴极接单片机的某一输出口线,当该输出口线为低电平时,LED点亮;当输出口线为高电平时,LED熄灭。这样只要编程控制单片机该输出口,就可控制LED亮或灭。
在本项目描述中,LED的阳极通过220Ω限流电阻器后连接到5V电源上,限流电阻器在这里起到了限流作用,使通过LED的电流被限制在十几毫安左右。P1.0引脚接LED阴极,P1.0引脚输出低电平时对应的LED点亮,输出高电平时对应的LED熄灭。LED点亮电路的设计将在项目实施中详细介绍。
2.单片机的概念
单片微型计算机简称单片机,是典型的嵌入式微控制器(Microcontroller Unit),常用英文字母缩写MCU表示单片机。单片机又称单片微控制器,它是将计算机的主要部件(CPU、RAM、ROM、定时器/计数器、输入/输出接口电路等)集成在一块大规模的集成电路中,形成芯片级的微型计算机。它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上,和计算机相比,单片机缺少了外围设备等。概括地讲,一个芯片就成了一台计算机。自单片机问世以来,就在控制领域得到广泛应用,特别是近年来,许多功能电路都被集成在单片机内部,如A/D(模/数)、D/A(数/模)、PWM(脉冲宽度调制)、WDT(把关定时器,俗称“看门狗”)、I2C总线接口等,极大地提高了单片机的测量和控制能力。现在所说的单片机已突破了微型计算机(Microcomputer)的传统内容,更准确的名称应为微控制器(Mi-crocontroller),虽然仍称其为单片机,但应把它认为是一个单片形态的微控制器。
(二)单片机的历史及发展概况
根据单片机发展过程中各个阶段的特点,其发展历史大概可划分为以下4个阶段:
第一阶段(1974年起):单片机的初级阶段。因工艺限制,单片机采用双片的形式,而且功能简单。
第二阶段(1976年起):低性能单片机阶段。以Intel公司制造的MCS-48系列单片机为代表。
第三阶段(1978年起):高性能单片机阶段。这个阶段推出的单片机普遍带有串行I/O口、多级中断处理系统、16位定时器/计数器,片内ROM、RAM容量加大,且寻址范围可达64KB,有的还内置有A/D转换器。这类单片机的代表是Intel公司的MCS-51系列,Motorola公司的6805和Zilog公司的Z8等。
第四阶段(1983年至今):8位单片机的巩固发展以及16位单片机、32位单片机推出阶段。此阶段的主要特征是一方面发展16位单片机、32位单片机及专用型单片机;另一方面不断完善高档8位单片机,改善其结构,以满足不同用户的需要。16位单片机的典型产品如Intel公司生产的MCS-96系列单片机。而32位单片机除了具有更高的集成度外,其振荡频率已达20MHz或更高,这使32位单片机的数据处理速度比16位单片机快许多,性能与8位、16位单片机相比,具有更大的优越性。
计算机厂家已投放市场的产品就有70多个系列,500多个品种。单片机的产品已占整个微机(包括一般的微处理器)产品的80以上,其中8位单片机的产量又占整个单片机产量的60以上,因此可以看出,8位单片机在最近若干年里,在工业检测、控制应用上将继续占有一定的市场份额。
(三)单片机的特点及应用领域
单片机已渗透到人们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通信与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等,这些都离不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械以及各种智能机械了。因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。
1.单片机的特点
(1)小巧灵活、成本低、易于产品化。能组装成各种智能式测控设备及智能仪器仪表。
(2)可靠性好,应用范围广。单片机芯片本身是按工业测控环境要求设计的,抗干扰性强,能适应各种恶劣的环境,这是其他机种无法比拟的。
(3)易扩展,很容易构成各种规模的应用系统,控制功能强。单片机的逻辑控制功能很强,指令系统有各种控制功能指令,可以对逻辑功能比较复杂的系统进行控制。
(4)具有通信功能,可以很方便地实现多机和分布式控制,形成控制网络和远程控制。
2.单片机的应用领域
(1)工业控制:单片机具有体积小、控制功能强、功耗低、环境适应能力强、扩展灵活和使用方便等优点。用单片机可以构成形式多样的控制系统、数据采集系统、通信系统、信号检测系统、无线传感系统、测控系统、机器人等应用控制系统。例如,工厂流水线的智能化管理、电梯智能化控制、各种报警系统,与计算机联网构成二级控制系统等。
(2)智能仪器仪表:广泛应用于仪器仪表中,结合不同类型的传感器,可实现诸如电压、电流、功率、频率、湿度、温度、流量、速度、厚度、角度、长度、硬度、元素、压力等物理量的测量。采用单片机控制使得仪器仪表数字化、智能化、微型化,且功能比起采用电子或数字电路更加强大。例如,精密的测量设备(电压表、功率计、示波器、各种分析仪)。
(3)网络和通信:现代的单片机普遍具备通信接口,可以很方便地与计算机进行数据通信,为在计算机网络和通信设备间的应用提供了极好的物质条件,通信设备基本上都实现了单片机智能控制,从手机、电话机、小型程控交换机、楼宇自动通信呼叫系统、列车无线通信,到日常工作中随处可见的移动电话、集群移动通信、无线电对讲机等。
(4)家用电器:家用电器广泛采用了单片机控制,从电饭煲、洗衣机、电冰箱、空调机、彩电、其他音响视频器材,到电子秤量设备和白色家电等。
(5)导弹与控制:导弹控制、鱼雷制导控制、智能武器装备、飞机导航系统等都有单片机的应用。
(6)汽车电子产品:单片机在汽车电子产品中的应用非常广泛,例如汽车中的发动机控制器、基于CAN总线的汽车发动机智能电子控制器、GPS导航系统、ABS防抱死系统、制动系统、胎压检测等都有单片机的应用。
此外,单片机在工商、金融、科研、教育、电力、通信、物流和国防航空航天等领域都有着十分广泛的用途。
(四)单片机的分类
1.按厂家分类
(1)美国的英特尔(Intel)公司、摩托罗拉(Motorola)公司、国家半导体(NS)公司、爱特梅尔(Atmel)公司、微芯(Microchip)公司、罗克韦尔(Rockwell)公司、齐格洛(Zilog)公司、仙童(Fairchid)公司、得州仪器(TI)公司等。
(2)日本的东芝(Toshiba)公司、富士通(Fujitsu)公司、松下(Panasonic)公司、日立(Hitachi)公司、日电(NEC)公司、夏普(Sharp)公司等。
(3)荷兰的飞利浦(Philips)公司、德国的西门子(Siemens)公司、韩国现代(Hyundai)公司、中国台湾省的华邦(Winbond)公司等。
2.按字长分类
字长是CPU的主要技术指标之一,指的是CPU一次能并行处理的二进制位数。
(1)4位单片机:4位单片机的控制功能较弱,CPU一次只能处理4位二进制数。这类单片机常用于计算器、各种形态的智能单元以及作为家用电器中的控制器。典型产品有NEC公司的UPD75××系列、NS公司的COP400系列、Panasonic公司的MN1400系列、Rockwell公司的PPS/1系列、Fujitsu公司的MB88系列、Sharp公司的SM××系列、Toshiba公司的TMP47×××系列等。
(2)8位单片机:8位单片机的控制功能较强,品种最为齐全,由于其片内资源丰富和功能强大,主要在工业控制、智能仪表、家用电器和办公自动化系统中应用。代表产品有Intel公司的MCS-48系列和MCS-51系列、Microchip公司的PIC16C××系列和PIC17C××系列以及PIC1400系列、Motorola公司的M68HC05系列和M68HC11系列、Zilog公司的Z8系列、Philips公司的80C51系列(与MCS-51兼容)、Atmel公司的AT89系列(与MCS兼容)、NEC公司的UPD78××系列等。
①51系列单片机:8031/8051/8751是Intel公司早期的产品。应用早,影响大,已成为世界上的工业标准。后来很多芯片厂商以各种方式与Intel公司合作,也推出了同类型的单片机,如同一种单片机的多个版本一样,虽都在不断地改变制造工艺,但内核却一样,也就是说这类单片机指令系统完全兼容,绝大多数引脚也兼容;在使用上基本可以直接互换。一般统称这些与8051内核相同的单片机为“51系列单片机”。51系列单片机目前已有多种型号,市场上目前供货比较足的芯片主要有Atmel的51芯片、52芯片,Hyundai的GMS97系列,Winbond的78e52、78e58、77e58等。
②PIC系列单片机:由美国Microchip公司推出的PIC单片机系列产品,首先采用了RISC(Reduced Instruction Set Computer,精简指令集计算机)结构的嵌入式微控制器,其高速度、低电压、低功耗、大电流LCD驱动能力和低价位一次性可编程(OTP)技术等都体现出单片机产业的新趋势。
③AVR系列单片机:AVR系列单片机是1997年由Atmel公司研发出的增强型内置Flash的RISC高速8位单片机。AVR系列单片机可以广泛应用于计算机外围设备、工业实时控制、仪器仪表、通信设备、家用电器等各个领域。
(3)16位单片机:CPU是16位的,运算速度普遍高于8位机,有的单片机的寻址能力高达1MB,片内含有A/D和D/A转换电路,支持高级语言。这类单片机主要用于过程控制、智能仪表、家用电器以及作为计算机外围设备的控制器等。典型产品有Intel公司的MCS-96/98系列、Motorola公司的M68HC16系列、NS公司的783××系列、TI公司的MSP430系列等。
(4)32位单片机:32位单片机的字长为32位,是单片机的顶级产品,具有极高的运算速度。代表产品有Intel公司的MCS-80960系列、Motorola公司的M68300系列、Hitachi公司的Super H(简称SH)系列等。
3.按制造工艺分类
(1)HMOS工艺:高密度短沟道MOS工艺,具有高速度、高密度的特点。
(2)CHMOS(或HCMOS)工艺:互补的金属氧化物的HMOS工艺,是CMOS和HMOS的结合,具有高密度、高速度、低功耗的特点。Intel公司产品型号中若带有字母“C”,Motorola公司产品型号中若带有字母“HC”或“L”,通常为CHMOS工艺。
二、单片机应用系统的开发过程
单片机应用系统指以单片机(MCU)为核心,配以一定的外围电路和软件,能实现某种或几种功能的应用系统。单片机应用系统的开发由以下几部分组成:①硬件设计;②软件设计;③硬件、软件的抗干扰设计;④电子工艺设计;⑤调试方案设计。
(一)单片机应用系统设计过程
1.设计前的准备工作
(1)可行性调研:分析现有参考资料,从理论上、实际条件上分析具备的立项条件。
(2)系统总体方案设计:下达项目任务书及技术指标,确定系统软硬件完成功能和方法,反复推敲设计,完善总体方案设计。
2.应用系统的硬件设计
(1)单片机选择设计:速度、功耗、端口数量、功能的选择设计。
(2)单片机系统扩展部分设计:I/O端口、RAM、ROM扩展部分设计。
(3)应用功能模块设计:采集、测量、控制、通信等模块设计。
3.应用系统的软件设计
(1)功能软件:完成各种实质性功能的程序,如测量、计算、打印、显示等。
(2)应用软件:协调功能软件与应用的关系(主程序)。
4.电子工艺设计
完成对系统整体结构、面板设计和电路板设计等,确保产品可靠性和电磁兼容性。
5.调试方案设计
完成对系统功能、技术指标调试时所用到的调试技术、方法、数据、自检辅助电路设计。
(二)单片机应用系统的传统开发方式——在线仿真技术
一个单片机应用系统经过调研、总体设计、硬件设计、软件设计、制板、元件安装,以及在系统的程序存储器中放入编制好的应用程序,系统即可运行。但一次性成功几乎是不可能的,需要通过调试来发现错误并加以改正。为了能调试程序,检查硬件、软件运行状态,就要借助某种开发工具模拟用户实际的单片机,并能随时观察运行的中间过程而不改变运行中原有的数据、性能和结果,从而进行模仿现场的真实调试。完成这一在线仿真工作的开发工具是单片机在线仿真器,如图1-1所示。之所以称为仿真器,是因为它们经常用来模拟嵌入式系统中的中央处理器。通常来说,它通过一个插头插在一个与CPU一样的底座上。由于是模拟主处理器,仿真器可以在程序员的控制下做任何处理器可以做的操作。
图1-1 单片机在线仿真器
单片机在线仿真器必须具有以下基本功能:
(1)能输入和修改用户的应用程序。
(2)能对用户系统硬件电路进行检查与诊断。
(3)能将用户源程序编译成目标码并固化到EPROM中。
(4)能以单步、断点、连续方式运行用户程序正确反映用户程序执行的中间结果。
(5)不占用户单片机资源和RAM空间。
(三)单片机应用系统的新开发方式——在线编程技术
随着电子技术的日益发展,芯片的规模越来越大,封装日趋小型化,相应地对系统板级调试的困难也在加大。在传统的调试方式中,频繁调试和更换程序需要频繁地插拔芯片,开发效率极低。随着单片机技术的发展,出现了可以在线编程的单片机。这种在线编程目前有两种实现方法:在系统编程(ISP)和在应用编程(IAP)。
ISP技术一般是通过单片机专用的串行编程接口对单片机内部的Flash存储器进行编程。
IAP技术是从结构上将Flash存储器映射为两个存储体,当运行一个存储体上的用户程序时,可对另一个存储体重新编程,之后将控制从一个存储体转向另一个存储体。ISP的实现一般需要很少的外部电路辅助实现,而IAP的实现更加灵活,通常可利用单片机的串行接口接到计算机的RS-232口,通过专门设计的固件程序来编程内部存储器。例如,Atmel公司的单片机AT89S8252就提供了一个SPI串行接口对内部程序存储器编程,而SST公司的单片机SST89C54内部包含两块独立的存储区,通过预先编程在其中一块存储区中的程序就可以通过串行接口与计算机相连,使用PC上专用的用户界面程序直接下载程序代码到单片机的另一块存储区中。
ISP和IAP为单片机的实验和开发带来了很大的方便和灵活性,也为广大单片机爱好者带来了福音。利用ISP和IAP,不需要编程器就可以进行单片机的实验和开发,单片机芯片可以直接焊接到电路板上,调试结束即成成品,甚至可以远程在线升级或改变单片机中的程序。
三、逻辑数据的表示
单片机作为微型计算机的一个分支,其基本功能就是对数据进行大量的算术运算和逻辑操作,但是它只能识别二进制数。对于接下来研究的8位单片机,数的存在方式主要有位(bit)、字节(byte,B)和字(word)。
1.位
所谓“位”就是1位二进制数,是单片机内部数据处理的最小单位,即“1”或“0”,用来表示信息的两种不同状态。例如,开关的“通”和“断”、电平的“高”和“低”等。
2.字节
字节是计算机中表示存储容量的最常用的基本单位。规定1字节由8个二进制位构成,即1字节等于8比特(1B=8bit),既可以表示实际的数,也可以表示多个状态的组合信息。8位单片机处理的数据绝大部分都是8位二进制数,也就是以字节为单位的,单片机执行的程序也以字节形式存放在存储器中。
字节是一个比较小的单位,常用的还有KB和MB等。
1KB=1024B
1MB=1024KB=1024×1024B
3.字与字长
2字节组成1个字,即16位二进制数。它代表计算机处理指令或数据的二进制数位数,是计算机进行数据存储和数据处理的运算单位。通常称16位是1个字,32位是1个双字,64位是2个双字。
字长:字的位数称为字长。不同档次的机器有不同的字长。例如,一台8位机,它的1个字就等于1字节,字长为8位;一台16位机,它的1个字就等于2字节,字长为16位。
四、单片机中数制的表示方法
了解十进制数、二进制数、十六进制数之间的关系和运算方法,是学习单片机的基础。
(一)十进制数、二进制数、十六进制数
1.十进制数(Decimal)
十进制数的主要特点:基数为10,由0、1、2、3、4、5、6、7、8、9十个数码构成。进位规则是“逢十进一”。
所谓基数是指计数制中所用到的数码个数,如十进制数共有0~9十个数码,所以基数是10。当某一位数计满基数时就向它邻近的高位进一,十进制数的进位规则是“逢十进一”。十进制数一般在数的后面加符号D表示,D可以省略。任何一个十进制数都可以展开成幂级数形式。例如:
123.45D=1×102+2×101+3×100+4×10-1+5×10-2
其中,102、101、100、10-1、10-2为十进制数各数位的权。
2.二进制数(Binary)
二进制数的主要特点:基数为2,由0、1两个数码构成。进位规则是“逢二进一”。
二进制数一般在数的后面加符号B表示,B不可省略。二进制数也可以展开成幂级数形式。例如:
1011.01B=1×23+0×22+1×21+1×20+0×2-1+1×2-2=11.25D
其中,23、22、21、20、2-1、2-2为二进制数各数位的权。
3.十六进制数(Hexadecimal)
十六进制数的主要特点:基数为16,由0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F十六个数码构成,其中A、B、C、D、E、F分别代表十进制数的10、11、12、13、14、15。进位规则是“逢十六进一”。
十六进制数一般在数的后面加符号H表示,H不可省略。十六进制数也可以展开成幂级数形式。例如:
123.45H=1×162+2×161+3×160+4×16-1+5×16-2=291.26953125D
其中,162、161、160、16-1、16-2为十六进制数各数位的权。
十六进制数与二进制数相比,大大缩短了数的位数,一个4位的二进制数只需要1位十六进制数表示,计算机中普遍用十六进制数表示。表1-1为十进制数、二进制数、十六进制数的对应关系。
表1-1 十进制数、二进制数、十六进制数的对应关系
(二)数制转换
1.二进制数与十六进制数的转换
(1)二进制数转换为十六进制数。采用4位二进制数合成为1位十六进制数的方法,以小数点为界分成左侧整数部分和右侧小数部分。整数部分从小数点开始,向左每4位二进制数一组,不足4位在数的前面补0;小数部分从小数点开始,向右每4位二进制数一组,不足4位在数的后面补0,然后每组用十六进制数码表示,并按序相连即可。
【例1.1】把转换为十六进制数。
(2)十六进制数转换为二进制数。将十六进制数的每位分别用4位二进制数码表示,然后它们按序连在一起即为对应的二进制数。
【例1.2】把2BD4H和20.5H转换为二进制数
解: 2BD4H=0010101111010100B
20.5H=00100000.0101B
2.二进制数与十进制数的转换
(1)二进制数转换为十进制数。将二进制数按权展开后求和即得到相应的十进制数。
【例1.3】把1001.01B转换为十进制数。
解: 1001.01B=1×23+0×22+0×21+1×20+0×2-1+1×2-2=9.25
(2)十进制数转换为二进制数。十进制数转换为二进制数一般分为两步,即将整数部分和小数部分分别转换成二进制数的整数部分和小数部分。
整数部分转换通常采用“除2取余法”即用2连续去除十进制数,每次把余数单独写出,直到商为0,依次记下每次除的余数,然后按先得到的余数为最低位,最后得到的余数为最高位的次序依次排列,就得到转换后的二进制数。
【例1.4】将十进制数47转换为二进制数。
解:
则47=101111B。
小数部分转换通常采用“乘2取整法”,即依次用2乘小数部分,记下每次得到的整数,直到积的小数为0,最先得到的整数为小数的最高位,最后得到的整数为小数的最低位。积的小数有可能连续乘2达不到0,这时转换出的二进制小数为无穷小数,可根据精度要求保留适当的有效位数即可。
【例1.5】将十进制数0.8125转换为二进制数。
解:
则0.8125=0.1101B。
3.十六进制数与十进制数的转换
(1)十六进制数转换为十进制数。将十六进制数按权展开后求和即得到十进制数。
【例1.6】将十六进制数3DF2H转换为十进制数。
解: 3DF2H=3×163+13×162+15×161+2×160=15858
(2)十进制数转换成十六进制数。十进制数转换为十六进制数的方法与十进制数转换为二进制数的方法相似,整数部分和小数部分分别转换。整数部分采用“除16取余法”,小数部分采用“乘16取整法”。
【例1.7】将十进制数47转换成十六进制数。将十进制数0.48046875转换成十六进制数。
解:
则47=2FH。
则0.48046875=0.7BH。
从例1-7可以看出十进制数转换为二进制数的步骤较多,而十进制数转换为十六进制数的步数较少,以后将十进制数转换为二进制数,可先将其转换为十六进制数,再由十六进制数转换为二进制数,可以减少许多计算步骤。例如:
47=2FH=101111B
(三)二进制数的运算
二进制数的运算比较简单,包括算术运算和逻辑运算,这里简要介绍一下算术运算,逻辑运算将结合单片机的逻辑运算指令在项目3中进行介绍。
1.加法运算
运算规则:0+0=0,0+1=1+0=1,1+1=10(向高位进位)。
例如:
2.减法运算
运算规则:0-0=0,1-0=1,1-1=0,0-1=1(向高位借位)。
例如:
3.乘法运算
运算规则:0×0=0,0×1=1×0=0,1×1=1。
两个二进制数的乘法运算与十进制数乘法类似,用乘法的每一位分别去乘被乘数的每一位,所得结果的最低位与相应乘数位对齐,最后把所得结果相应相加,就得到两个数的积。
【例1.8】求1010B×1001B的积。
解:
则1010B×1001B=1011010B。
由例1.8可知,二进制数的乘法运算实质上是由“加”(加被乘数)和“移位”(对齐乘数位)两种操作实现的。
4.除法运算
除法运算是乘法运算的逆运算。与十进制数类似,从被除数的最高位开始取出除数相同的位数,减去除数,够减商记为1,不够减商记为0,然后将被除数的下一位移到余数上,重复前面的减除数操作,直到被除数的位数都下移为止。
【例1.9】求11001011B÷110B的值。
解:
则11001011B÷110B=100001B,余数101B。
综上所述,二进制数的加、减、乘、除运算,可以归纳为加、减、移位3种操作。后文中所要讲述的单片机都有相应的操作指令。
(四)原码、反码、补码
前面已经提到,在8位单片机中,数是以字节为单位的,即以8位二进制数的形式存在,每字节存放数的范围为0~255,这样的数又称无符号数。而现实中数是有符号的,单片机包括微型计算机表示符号数的方法:规定用最高位表示数的符号,并且规定0表示“+”,1表示“-”。其余位为数值位,表示数的大小,8位有符号数的结构如图1-2所示。
图1-2 8位有符号数的结构
例如,+1表示为00000001B,-1表示为10000001B,为区别实际的数和它在单片机中的表示形式,把数码化了的带符号位的数称为机器数,把实际的数称为机器数的真值。00000001B和10000001B为机器数,+1和-1分别为它们的真值。双字节数和多字节数有类似的结构,最高位为符号位,其余位为数值位。单片机中机器数的表示方法有3种形式:原码、反码和补码。
1.原码(trueform)
符号位用0表示“+”,用1表示“-”,数值位与该数绝对值一样,这种表示机器数的方法称为原码表示法。
正数的原码与原来的数相同,负数的原码符号位为1,数值位与对应的正数数值位相同。
[+1]原=00000001B,[-1]原=10000001B,显然8位二进制数原码表示的范围为-127~+127。
0的原码有两种表示方法:+0和-0。[+0]原=00000000B,[-0]原=10000000B。
2.反码(one’scomplement)
一个数的反码可以由它的原码求得,正数的反码与正数的原码相同,负数的反码符号位为1,数值位为对应原码的数值位按位取反。例如:
[+1]反=[+1]原=00000001B。
[-1]反=11111110B。
[+0]反=[+0]原=00000000B。
[-0]反=11111111B。
8位二进制数反码表示的范围为-127~+127。
3.补码(two’s complement)
补码的概念可以通过调钟表的例子来理解。假设现在钟表指示的时间是4点,而实际的时间是6点,现有两种方法来校正,一是顺时针拨2h,是加法运算,即4+2=6;二是逆时针拨10h,是减法运算,但4-10不够减,由于钟表是12h循环,该拨时的方法可由下式表示:12(模)+4-10=6,与顺时针拨时是一致的,数学上称为按模12的减法。可见4+2的加法运算和4-10按模12的减法是等价的。类似的还有按模的加法运算,两个数的和超过模,只保留超过的部分,模丢失。这里的2和10是互补的,数学上的关系为:[X]补=模+X。
8位二进制数满256向高位进位,256自动丢失,因此8位二进制数模为28=256。
一个数的补码可由该数的反码求得。正数的补码与正数的反码和原码一致,负数的补码等于该数的反码加。例如:
[+1]补=[+1]原=[+1]反=00000001B。
[-1]补=11111111B。
[-0]反=11111111B,加1得00000000B,所以:
[-0]补=00000000B=[+0]补,0的补码只有一种表示方法。
8位二进制数补码的表示范围为-128~+127。8位二进制数的原码、反码、补码的对应关系如表1-2所示。
表1-2 8位二进制数的原码、反码、补码的对应关系
续表
单片机指令处理数据的运算都是对机器数进行运算。请注意观察下面的例子。
【例1.10】单片机处理1-2的过程。
解:
从该例可以看出,对于加减运算,数据是用补码表示的,运算的结果也是用补码表示的数。单片机(微机)处理数据时,加减法用补码,乘除法用原码。
【例1.11】求-5的补码,再将结果作为原码,求其补码。
解:
从该例可以看出,对于一个负数进行两次求补过程,又得到这个数本身,正数的原码和补码又是一致的,可以得出结论:原码和补码是互补的。相互转换的方法和步骤也是一样的。在进行四则运算时经常需要进行原码和补码的相互转换。
(五)8421BCD码
单片机只能对二进制数进行运算处理,而人们习惯用十进制数,人和单片机交流时就需要经常进行二进制数和十进制数的转换,既浪费时间,也会影响单片机的运行速度和效率。为避免上述情况,计算机和单片机中常用BCD码(BinaryCodedDecimalCode),用二进制数对每位的十进制数编码,数据形式为二进制数,但保留了十进制数的权,便于人们识别,BCD码的种类很多,最常用的是8421BCD码,它用4位二进制数的十进制数的数码进行编码,8421分别代表每位的权,用0000B~1001B分别代表十进制数的0~9,表1-3为它们的对应关系。
表1-3 BCD码与十进制数的对应关系
BCD码在书写时通常加方括号,并以BCD作为下标,例如:52D=[01010010]BCD。MCS-51系列单片机中只有BCD码的加法运算,因此本书也只介绍BCD码的加法运算。
由于8421BCD码是用4位二进制数表示的,4位二进制数是“逢十六进一”,而BCD码高位和低位之间是“逢十进一”,单片机运算时把其作为二进制数处理。因此,两个BCD码相加时,当低4位向高4位进位,或高4位向更高位进位时,需要对该4位加六调整,高、低位出现非法码(即1010~1111)时,对应4位也要加六调整。
【例1.12】BCD码X=23,Y=49,求X+Y。
解:
【例1.13】BCD码X=28,Y=49,求X+Y。
解:
(六)ASCII码
在单片机中,除了要处理数字信息,在某些应用场合也需要处理一些字符信息,要对这些字符信息进行二进制编码后,单片机才能识别和处理。目前普遍采用ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)编码表,如表1-4所示。
ASCII码用7位二进制数,共128个字符,其中包括数码0~9,英文字母,标点符号和控制字符。数码“0”的编码为0110000B,即30H,字母A的编码为1000001B,即41H。
表1-4 ASCII编码表
五、单片机应用系统入门的有效方法和基本条件
单片机是一门课程,因此,学习单片机与学习其他课程的基本方法是一样的。就是要加强理解、强化记忆,做到在理解的基础上记忆;单片机更是一门技术,学习它的最终目标是要用好它,要能用它来解决实际问题。因此,实践环节尤其重要,只有通过实践,才能展现单片机的价值、体会到单片机的精髓,激发起学好这门课程的动力。
1.加强理解
理解是学习和记忆一切知识的前提。学习单片机尤其强调理解。许多学生学不好单片机,抱怨单片机的内容太难,其根本原因就是方法不对,还像中学阶段一样在死记硬背。为了做到理解,通常要完成以下3步:
(1)课前预习,便于理解。高职教育的一个突出特点就是学时压缩,所以老师讲课的进度可能比较快,而单片机课程本身又确实比较抽象,因此建议大家养成课前预习的好习惯。在预习中弄个半懂,听课的效率会提高几倍。
(2)课后复习,巩固理解。我们常有这样的体会:在课堂上感到挺明白的内容,课下时间一长就忘了。因此,课后必须及时巩固,加深理解。
(3)勤做练习,深入理解。高职院校的学生有个普遍特点:不愿意做练习题。可能大家认为,高职教育培养的是动手能力,做题是应试教育的事情。笔者认为,这种想法有些偏颇。高职教育培养的动手能力是建立在一定基础之上的,而多做题多动脑恰恰是形成思路、打好基础的一种重要手段。
2.强化记忆
学习单片机,仅做到理解还不行,该记的内容一定要记。不记忆单片机的一些基本和必要的内容就谈不上应用。试想,一个连指令或语句格式都记不住的人,能编出程序吗?至少编不出好的程序。因此,我们强调的是理解基础上的记忆。在记忆时,首先要树立一定能够牢记以上内容的自信心,根据教学经验,高职学生不是记不住而是不相信自己能记住;其次是在理解的基础上记忆,并注意要将记忆的内容转化为空间形象。
3.多练多实践
单片机是微型计算机的一个分支,因此它的学习方法必然带有计算机的一些特点。学过计算机、用过计算机的人都有体会:计算机是“玩”出来的。只学不练,用不好计算机,单片机也是一样。因此,要求大家一定要重视实践环节,多上机练习(如果有条件,应该把所有的作业拿到单片机系统上调出来)。那种满足于“上课能听懂,教材能看懂”的想法是要不得的。有些问题,别人讲半天,你也未必明白,拿到实验室一做自然就清楚了。有句话叫“百闻不如一见”,我们说学习单片机是“百闻不如一练”。