本书是针对目前最通用的单片机8051和最流行的程序设计语言——C语言,以KEIL公司最新版本8051单片机开发套件讲解单片机的C语言应用程序设计的教材。该套件的编译器有支持经典8051及8051派生产品的版本,统称为Cx51。Windows集成开发环境µVision2把µVisionl用的模拟调试器dScope与集成环境无缝结合起来,使用更方便,支持的单片机品种更多。全书共十三章,既有单片机的基础部分,即Cx51的基础部分:数据与运算、流程控制语句、构造数据类型及函数与程序结构;又有Cx51的应用部分:内部资源、扩展资源、输出控制、数据采集、机间通信及人机交互的C编程。本书还对软件工程推崇的模块化编程技术有所阐述,还特别为实时控制的精确定时讲述了与汇编语言的混合编程技术。本书各章均配备了足够数量的习题,可供师生选用。
本书的特点是取材于最新原文资料,总结实际教学和应用经验,实例较多,实用性强。本书中C语言是针对8051特有结构描述的,这样,即使是无编程基础的人,也可通过本书学习单片机的C编程。
本书可作大专院校师生、培训班师生和全国大学生电子设计竞赛的教材,也可作从事单片机应用的技术人员的参考用书。
第一章 单片机基础知识
1.1 8051单片机的特点
1.2 8051的内部结构
1.3 8051的系统扩展
1.4 8051指令系统
1.5 实用程序设计
习题一
第二章 C与8051
2.1 8051的编程语言
2.2 Cx51编译器
2.3 KEIL 8051开发工具
2.4 DEIL Cx51编程实例
2.5 Cx51程序结构
习题二
第三章 Cx51数据与运算
3.1 数据与数据类型
3.2 常量与变量
3.3 Cx51数据的存储类型与8051存储器结构
3.4 8051特殊功能寄存器(SFR)及其Cx51定义
3.5 8051并行接口及其Cx51定义
3.6 位变量(BIT)及其Cx51定义
3.7 Cx51运算符.表达式及其规则
习题三
第四章 Cx51流程控制语句
4.1 C语言程序的基本结构及其流程图
4.2 选择语句
4.3 循环语句
习题四
第五章 Cx51构造数据类型
5.1 数组
5.2 指针
5.3 结构
5.4 共用体
5.5 枚举
习题五
第六章 Cx51函数
6.1 函数的分类
6.2 函数的定义
6.3 函数的参数和函数值
6.4 函数的调用
6.5 数组.指针作为函数的参数
习题六
第七章 模块化程序设计
7.1 基本概念
7.2 模块化程序开发
7.3 汇编和编译
7.4 覆盖和共享
7.5 库和链接器/定位器
7.6 混合编程
7.7 程序优化
习题七
第八章 8051内部资源的C编程
8.1 中断
8.2 定时器/计数器
8.3 串行口
习题八
第九章 8051扩展资源的C编程
9.1 可编程外围定时器8253
9.2 可编程外围并行接口8255
9.3 实时时钟/日历芯片146818
9.4 可编程接口芯片8155
习题九
第十章 8051输出控制的C编程
10.1 8位D/A芯片DAC0832
10.2 12位D/A芯片AD7521
10.3 步进电机控制
习题十
第十一章 8051数据采集的C编程
11.1 8位A/D芯片ADC0809
11.2 12位A/D芯片AD574
11.3 V/F变换芯片AD650
11.4 频率量的测量
习题十一
第十二章 8051机间通信的C编程
12.1 点对点的串行异步通信
12.2 多机通信
习题十二
第十三章 8051人机交互的C编程
13.1 键盘和数码显示
13.2 可编程键盘/显示接口芯片8279
13.3 语章芯片TSP5220
13.4 TPμp打印机
13.5 字符型LCD显示模块
13.6 点阵型LCD显示模块
习题十三
附录A μVision2集成开发环境使用
A.1 菜单栏命令
A.2 创建应用
A.3 调试程序
附录B KEIL Cx51上机指南
B.1 编程器
B.2 A x51宏汇编器
B.3 链接器/定位器和实用工具
北京航空航天大学出版社1997年出版的以KEIL公司C51编译器DOS版本为基础的《单片机的C语言应用程序设计》,受到广大单片机用户的欢迎。1999年出版的《单片机的C语言应用程序设计(修订版)》补充了单片机基础知识和各章习题,使其成为一些学校的单片机教材。此次第3版则对修订版进行了Windows环境使用的升级。
KEII公司C51编译器DOS版本曾通过美国Franklin公司在市场上销售多年,最早传人我国并得到广泛使用的是FranklinC51 V3.2版本。随着时间的推移,KEII。公司的产品不断升级,V5.0以上版本C51编译器就配有基于Windows的µVision集成开发环境和dScope软件模拟调试程序。现KEIL公司的编译器有支持经典8051和8051派生产品的版本,统称为Cx51。新版本µVision2把µVisionl用的模拟调试器dScope与集成开发环境无缝结合起来,界面更友好,使用更方便,支持的单片机品种更多。广州周立功单片机发展有限公司已取得KEIL公司8051单片机开发套件的代理权,为国内单片机高级语言编程者提供技术支持。笔者以KEIL公司最新使用手册为蓝本,在《单片机的C语言应用程序设计(第3版)》中进行了Windows环境使用的升级。第3版中使用基于Windows的~Vision2集成开发环境对原书的样例程序重新进行编译,并把µVision2集成开发环境使用和编译器、汇编器、链接器的控制命令包含进来,且重新整理KEILCx51上机指南作为附录部分。其他部分包括浮点数据存储、一般指针的存储器类型、样例程序和混合编程等根据新的版本进行相应的变动。
单片机体积小,重量轻,具有很强的灵活性,而且价格不高,越来越得到广泛的应用。8051在小到中型应用场合很常见,已成为单片机领域的实际标准。20世纪80年代中期,Intel公司将8051内核使用权以专利互换或出售形式转给世界许多著名IC制造厂商,如Philips,Atmel,Dallas,Infineon,ADI,TI,Winbond和Cygnal公司等。这样,8051就变成有众多制造厂商支持的、发展出上百个品种的大家族。到目前为止,其他任何一个单片机系列均未发展到如此的规模。20世纪90年代,Philips公司推出支持16位计算的XA系列。XA系列是16位单片机,又可完全兼容8051的指令系统。Intel推出的80C25l也是与8051在机器代码级兼容。随着硬件的发展,8051软件工具已有C级编译器及实时多任务操作系统RTOS(Real Time Operating System)。在RTOS的支持下,单片机的程序设计更简单,更可靠,实时性更强,因而8051是单片机教学的首选机型。C语言是一种编译型程序设计语言。它兼顾了多种高级语言的特点,并具备汇编语言的功能。用C语言来编写目标系统软件,会大大缩短开发周期,且明显地增加软件的可读性,便于改进和扩充,以研制出规模更大、性能更完备的系统。用C语言进行8051单片机程序设计是单片机开发与应用的必然趋势。单片机的程序设计应该以C语言为主,以汇编语言为辅。汇编语言掌握到只要可以读懂程序,在时间要求比较严格的模块中进行程序的优化即可。采用C语言也不必对单片机和硬件接口的结构有很深入的了解,编译器可以自动完成变量的存储单元的分配,编程者就可以专注于应用软件部分的设计,大大加快软件的开发速度。采用C语言可以很容易地进行单片机的程序移植工作,有利于产品中单片机的重新选型。
随着国内单片机开发工具研制水平的提高,现在的单片机仿真器普遍支持C语言程序的调试,为单片机编程使用C语言提供了便利的条件。C语言的模块化程序结构特点,可以使程序模块大家共享,不断丰富。C语言的可读性的特点,更容易使大家借鉴前人的开发经验,提高自己的软件设计水平。采用C语言,可针对单片机常用的接口芯片编制通用的驱动函数;可针对常用的功能模块、算法等编制相应的函数。这些函数经过归纳整理可形成专家库函数,供广大的单片机爱好者使用和完善。这样可大大提高国内单片机软件设计水平。国外嵌入式系统的程序设计也是采用C语言,可以借鉴其编程经验进行交流,以达到和国际接轨的目的。过去长时间困扰人们的“高级语言产生代码太长,运行速度太慢,不适合单片机使用”的致命缺点已被大幅度地克服。目前,8051上的C语言的代码长度,在未加入人工优化的条件下,已经做到了最优汇编程序水平的1.2~1.5倍,可以说,比得上中等程序员的水平。只要有好的仿真器的帮助,用人工优化关键代码就是很简单的事了。如果谈到开发速度、软件质量、结构严谨性和程序坚固性等方面,则C语言的完美决非汇编语言编程所能比拟的。
本书为教材。第一章为单片机基础知识。第二章从讨论8051的编程语言及其特点出发,给出了国际上现有各种C51编译器的性能比较,然后通过一个KEILCx51的编程实例讲解C语言的结构。第三章列举了逻辑和算术操作数。这些数据对嵌入式应用很重要。单片机有多个存储空间——程序、数据和表格等,而且寻址不同,因此了解8051的各种类型的变量和各种类型的存储空间很重要。第四章讲解了分支和循环结构,是结构化编程方法的基础。其中解释了结构化编程的思想,如包括在循环开头和结尾处检测的不同。第五章为构造的数据类型,是函数的基础。此章包括结构、数组、指针和联合;实例包括内插比较到直接计算的查表使用。第六章阐述函数和程序结构,并有函数值的传进、传出和变量的存储类型及作用域。第七章为使用多个文件开发程序进行混合编程,是现代编程的关键。当几个编程者共同来开发一个项目时,模块化程序设计不再是因高级语言速度慢而采用汇编编程的一种技术,而是便于管理的有组织编程的关键。第八章是针对8051系列内部资源中断、定时器/计数器和串行口的编程及使用。这些是单片机最有特色的部分,是设计精巧系统的关键。第九章为8051扩展资源的编程,介绍并行接口芯片、可编程计数芯片和实时时钟/日历芯片的扩展及应用编程。第十章为输出控制通道的D/A变换和步进电机控制的编程。第十一章为数据采集通道的A/D转换及V/F变换的编程。第十二章为单片机的通信编程。第十三章为人机界面LED/LCD、键盘、语音芯片与单片机的接口及编程。具有实际经验的设计者或系统开发者,会发现本书实例极具参考价值,由参考程序开发实用程序,将会使自己的程序更有效。对于已有其他语言的编程经验并熟悉单片机硬件的读者,通过此书的工作实例来学习一种语言,会比使用其他教科书快得多,且许多实例可直接在新的设计项目中采用。对于单片机应用课程的学生或面临设计项目的人员,本书提供了通常用于嵌入式系统的硬件及使用8051的实用程序,甚至一些8051系列应用的原理图也可以拷贝到。
本书取材于最新原文资料,总结实际教学和应用经验,编程实例丰富,内容覆盖面广。希望本书能对单片机的教学和应用推广工作起到一定的作用。由于程序和图表较多,难免有误漏之处,恳请读者批评指正。