徐爱钧,长江大学教授,中国科协湖北省自动化学会理事,湖北省精品课程《单片机原理及应用》负责人。长期从事自动化及单片机与嵌入式系统应用的教学、科研工作,获得湖北省科学技术进步奖等多项奖励。公开出版《智能化测量控制仪表原理与设计》(第3版)、《Keil Cx51 V7.0单片机高级语言编程与uVsion2应用实践》(第2版)、《单片机原理实用教程》(第2版)、《ARM嵌入式应用技术》、《IAR EWARM V5嵌入式系统应用编程与开发》等著作和教材10余部。在《仪器仪表学报》等核心期刊上发表学术论文60多篇。
第1章 8051单片机与KeilC51基础1
1.1 8051单片机的存储器组织结构 1
1.2 Keil C51开发工具6
1.3 C51简单编程与调试 6
第2章 C51程序设计基础16
2.1 标识符与关键字 16
2.2 C51程序设计的基本语法 18
2.2.1 数据类型 18
2.2.2 常量 20
2.2.3 变量及其存储模式 22
2.2.4 用typedef重新定义数据类型 25
2.2.5 运算符与表达式 26
2.3 C51程序的基本语句 39
2.3.1 表达式语句 39
2.3.2 复合语句 40
2.3.3 条件语句 41
2.3.4 开关语句 43
2.3.5 循环语句 45
2.3.6 返回语句 50
2.4函数 51
2.4.1 函数的定义 51
2.4.2 函数的调用形式 54
2.4.3 对被调用函数的说明 54
2.4.4 函数的参数与返回值 56
2.4.5 实际参数的传递方式 58
2.4.6 函数的递归调用与再入函数 59
2.4.7 中断函数与寄存器组定义 60
2.5 函数变量的存储方式 62
2.5.1 局部变量与全局变量 62
2.5.2 变量的存储种类 64
2.5.3 函数的参数和局部变量的存储器模式 68
2.6 数组 69
2.6.1 数组的定义与引用 69
2.6.2 字符数组 70
2.6.3 数组作为函数的参数 73
2.7 指针 76
2.7.1 指针与地址 76
2.7.2 指针变量的定义 77
2.7.3 指针变量的引用 79
2.7.4 指针变量作为函数的参数 80
2.8 数组的指针 81
2.8.1 用指针引用数组元素 81
2.8.2 字符数组指针 83
2.8.3 指针的地址计算 84
2.9 函数型指针 86
2.10 返回指针型数据的函数 88
2.11 指针数组与指针型指针 89
2.11.1 指针数组 89
2.11.2 指针型指针 92
2.11.3 抽象型指针 94
2.12 结构体、联合体与枚举 95
2.12.1 结构体变量的定义与引用 95
2.12.2 结构体变量的初值 98
2.12.3 结构体数组 99
2.12.4 结构体型指针 100
2.12.5 将结构体作为函数的参数 101
2.12.6 将结构体型指针作为函数的参数 103
2.13 联合体变量的定义与引用105
2.14 枚举变量的定义与引用 109
2.15 预处理器 110
2.15.1 不带参数的宏定义 111
2.15.2 带参数的宏定义 112
2.15.3 文件包含 114
2.15.4 条件编译 114
2.15.5 其他预处理命令 117
第3章 Vision4集成开发环境 118
3.1 Vision4的下拉菜单 120
3.1.1 File菜单 121
3.1.2 Edit菜单 122
3.1.3 View菜单 126
3.1.4 Project菜单 128
3.1.5 Flash菜单 139
3.1.6 Tools菜单 139
3.1.7 SVCS菜单 141
3.1.8 Window菜单 142
3.1.9 Help菜单 142
3.2 Vision4中的调试器 143
3.2.1 Debug状态下窗口分配与View菜单 145
3.2.2 通过Debug菜单进行程序代码调试 150
3.2.3 通过Peripherals菜单观察仿真结果 156
3.3 Vision4的调试命令 157
3.3.1 显示和更新存储器内容命令 159
3.3.2 程序执行控制命令 163
3.3.3 断点管理命令 166
3.3.4 其他通用命令 169
3.4 Vision4的表达式 178
3.4.1 表达式的组成 178
3.4.2 Vision4表达式与C语言表达式之间的差别 183
3.4.3 Vision4表达式应用举例 183
3.5 Vision4的函数 186
3.5.1 内部函数 187
3.5.2 用户函数 192
3.5.3 信号函数 194
3.5.4 Vision4函数与C51函数的差别 196
第4章 C51编译器 197
4.1 C51编译器简介 197
4.2 C51编译器控制命令详解 200
4.2.1 源控制命令 200
4.2.2 列表控制命令 203
4.2.3 目标控制命令 208
4.3 Keil C51编译器对ANSIC的扩展235
4.3.1 存储器类型与编译模式 235
4.3.2 关于bit,sbit,sfr,sfr16数据类型 237
4.3.3 一般指针与基于存储器的指针及其转换 241
4.3.4 C51编译器对ANSIC函数定义的扩展 242
4.4 C51编译器的数据调用协议 249
4.4.1 数据在内存中的存储格式 249
4.4.2 目标代码的段管理 250
4.5 C51编译器的特殊支持 252
4.5.1 Analog Device公司的Aduc8xxB2系列 253
4.5.2 Atmel 89x8252及衍生产品 253
4.5.3 Dallas 80C320/420/520/530 254
4.5.4 Dallas 80C390/400/5240及衍生产品 254
4.5.5 Infineon 80517/509/537及衍生产品 255
4.5.6 NXP 8xC750/751/752 256
4.5.7 NXP 8xC51Mx 256
4.5.8 NXP和AtmelWM系列的双数据指针 256
4.6 用户配置文件 257
4.6.1 启动代码文件 257
4.6.2 变量初始化文件 259
4.6.3 基本I/O函数文件 260
4.6.4 分组配置文件 261
4.7 与汇编语言程序的接口 262
4.8 与PL/M51程序的接口272
4.9 绝对地址访问 273
4.9.1 采用扩展关键字“_at_”或指针定义变量的绝对地址 273
4.9.2 采用预定义宏指定变量的绝对地址 274
4.9.3 采用链接定位控制命令指定变量的绝对地址 275
4.10 C51的库函数 276
4.10.1 字符函数CTYPE.H 277
4.10.2 标准I/O函数STDIO.H 283
4.10.3 字符串函数STRING.H 291
4.10.4 标准函数STDLIB.H 299
4.10.5 数学函数MATH.H 305
4.10.6 绝对地址访问ABSACC.H 312
4.10.7 内部函数INTRINS.H 313
4.10.8 变量参数表STDARG.H 317
4.10.9 全程跳转SETJMP.H318
4.10.10 计算结构体成员的偏移量STDDEF.H 319
4.10.11 创建测试条件ASSERT.H 319
第5章 A51宏汇编器321
5.1 符号与表达式 323
5.2 汇编伪指令 327
5.2.1 段控制指令 328
5.2.2 符号定义指令 331
5.2.3 存储器初始化指令 334
5.2.4 存储器保留指令 335
5.2.5 过程声明指令(仅用于Ax51) 336
5.2.6 程序链接指令 338
5.2.7 地址控制指令 339
5.2.8 其他指令 340
5.3 宏处理器 340
5.3.1 标准宏处理器 341
5.3.2 嵌套宏定义 344
5.3.3 宏调用 345
5.3.4 C宏处理器349
5.3.5 MPL宏处理器 351
5.3.6 MPL函数 353
5.3.7 MPL条件处理函数 357
5.3.8 MPL字符串处理函数 360
5.4 汇编控制命令 362
5.4.1 汇编控制命令详解 363
5.4.2 条件汇编命令 371
第6章 BL51/Lx51链接定位器与实用工具 375
6.1 BL51/Lx51的链接定位方式375
6.1.1 链接定位中的数据段处理 375
6.1.2 链接定位器的引用 378
6.1.3 应用程序在存储器空间中的定位 379
6.1.4 数据覆盖 381
6.1.5 代码分组 383
6.1.6 分组配置 385
6.2 链接定位控制命令详解 393
6.2.1 列表文件控制命令 393
6.2.2 输出文件控制命令 397
6.2.3 段与存储器定位控制命令 401
6.2.4 高级语言控制命令 418
6.3 符号转换工具 425
6.3.1 Intel HEX文件格式与符号转换工具 425
6.3.2 引用符号转换工具OH51/OHX51 426
6.3.3 引用分组目标文件转换工具OC51 428
6.4 库管理器LIBx51 428
第7章 RTX51实时多任务操作系统432
7.1 RTX51一般介绍 432
7.2 RTX51技术参数 437
7.3 使用RTX51TINY的要求和限定 439
7.4 RTX51 TINY的任务管理 440
7.5 RTX51 TINY的配置 442
7.6 RTX51 TINY的系统函数 444
7.7 RTX51 TINY应用系统调试 449
第8章 8051单片机片内资源的C51应用
编程 464
8.1 编写C51应用程序的基本原则 464
8.2 C51应用中的一些常见问题与解决方法 465
8.3 8051单片机中断系统应用编程 468
8.3.1 外部中断源扩展 468
8.3.2 中断嵌套 470
8.4 8051单片机定时器/计数器应用编程473
8.4.1 定时器方式应用 474
8.4.2 计数器方式应用 478
8.6 8051单片机串行口应用编程 483
8.6.1 8051串行口实现串/并转换应用编程 483
8.6.2 8051串行口的通信方式应用编程 487
8.7 P89C51RD2单片机片内FLASH在应用中编程的C51驱动程序 504
8.8 80C552单片机内部A/D转换器的C51驱动程序 517
8.8.1 80C552单片机简介 517
8.8.2 80C552内部ADC的应用 519
8.8.3 使用80C552内部ADC的C51驱动程序523
第9章 8051单片机片外扩展的C51应用编程 529
9.1 LED数码管显示接口应用编程 529
9.1.1 软件译码和动态扫描的LED数码管显示接口应用编程 530
9.1.2 8位共阴极LED数码管驱动器MAX7219应用编程 532
9.2 非编码矩阵键盘接口应用编程 538
9.2.1 采用8155实现的矩阵键盘及数码管显示接口应用编程 539
9.2.2 采用8279实现的矩阵键盘及数码管显示接口应用编程 544
9.3LCD液晶模块显示接口应用编程 550
9.3.1 点阵字符型LCD显示接口应用编程 551
9.3.2 12864点阵图型LCD显示接口应用编程562
9.3.3 内置T6963C控制器的点阵图型LCD显示接口应用编程 570
9.4 D/A与A/D转换接口应用编程 580
9.4.1 DAC0832转换接口应用编程 581
9.4.2 串行接口DAC芯片MAX517应用编程 584
9.4.3 ADC0809转换接口应用编程 588
9.4.4 ICL7135转换接口应用编程 592
9.4.5 串行接口ADC芯片TLC549应用编程 596
9.5 单片机I2C总线扩展应用编程 600
9.5.1 I2C总线简介 600
9.5.2 I2C总线通用驱动程序 603
9.5.3 I2C接口器件24C04的读/写程序 606
9.6 8051单片机存储器扩展与测试应用编程 610
9.6.1 测试8051应用系统总线与扩展存储器的C51驱动程序 610
9.6.2 8051扩展FLASH存储器在系统编程的C51驱动程序 613
第10章 KeilC51综合应用编程实例626
10.1 有关C51编程的若干实际应用技巧626
10.2 C51与汇编语言混合编程与生成应用库文件 632
10.2.1 C51与汇编语言混合编程 632
10.2.2 在Vision4中生成应用库文件 634
10.3 在Vision4中应用硬件目标板 635
10.3.1 带MON51监控程序的硬件目标板 636
10.3.2 带FLASHMON51监控程序的硬件目标板 640
10.4 红外遥控系统设计 642
10.4.1 功能要求 642
10.4.2 硬件电路设计 642
10.4.3 软件程序设计 643
10.5 简易电子琴设计650
10.5.1 功能要求 650
10.5.2 硬件电路设计 650
10.5.3 软件程序设计 650
10.6 带农历的电子万年历设计655
10.6.1 功能要求 655
10.6.2 硬件电路设计 655
10.6.3 软件程序设计 658
10.7 电子密码锁设计671
10.7.1 功能要求 671
10.7.2 硬件电路设计 671
10.7.3 软件程序设计 671
10.8 DS18B20多点温度监测系统设计 687
10.8.1 功能要求 687
10.8.2 硬件电路设计 688
10.8.3 软件程序设计 692
10.9 STH11数字温-湿度测量系统设计 700
10.9.1 功能要求 700
10.9.2 硬件电路设计 700
10.9.3 软件程序设计 704
10.10 单片机SD卡读/写接口设计 710
10.10.1 功能要求 710
10.10.2 硬件电路设计 710
10.10.3 软件程序设计 712
附录AKeilC51与ANSI C的差别 717
附录BKeilC51不同版本的差别 719
附录C 代码优化723
附录DC51编译器的限制 726
附录E 关于配套光盘及硬件目标板727
参考文献 728
本书详细介绍了V9.00版本的Keil C51编译器和Vision4的强大功能和具体使用方法,完整地介绍了最新版本C51编译器控制命令,给出了全部C51运行库函数及其应用范例,对Keil C51软件包中各种应用工具都作了详细介绍,阐述了Vision4新增加的各种功能和应用方法,包括软件模拟调试和硬件目标板实时在线仿真。本书的特点是强调先进性和实用性,给出了大量应用实例。
#include<reg51.h>#define uint unsigned int#define uchar unsigned charsbit spk=P3^0;sbit k0=P3^...
用c51单片机做AD转换,只要用一个简单的延时就可以,没必要动用定时器这么高级的东西,DMA就更别提了,我写了很多程序,还真没有人能用C51实现DMA,DMA一般在arm系列和FPGA等的高级嵌入式里...
访问外部数据存储器时,P2口是高8位地址线选第一片时高8位地址线 必须P2.5=0, P2.4=1,其余地址线任意选第二片时高8位地址线 必须P2.5=1, P2.4=0 其余地址线任意
德国Keil公司*推出的C51编译器是一种符合工业标准的8051 C语言开发工具,在业界获得了广泛应用,被公认为是最有效的单片机开发手段之一。Keil公司于2010年推出了全新的开发环境Vision4,其中集成了V9.00版本的C51编译器、Debug调试器、RTX51 Tiny实时操作系统等,全面支持8051单片机主流产品及其众多的派生系列。
Keil C51编译器具有如下优点。
(1)经过优化编译后生成的代码,其效率接近于汇编语言生成的代码。
(2)支持所有8051系列单片机,提供对所有外围硬件部件的操作。
(3)无论在有无工作寄存器区转换的情况下,都能产生快速中断代码。
(4)支持Atmel,Dallas,Infineon,Philips和Temic等公司8051衍生产品上的双数据指针及高速算术单元(arithmeticunits)。
(5)能够在整个应用程序中执行全局寄存器优化。
(6)所有应用工具均可产生详细警告信息和错误信息,帮助用户处理难以寻找的问题。
(7)支持再入功能和寄存器区的独立代码,便于中断服务程序和多任务应用程序的执行。
(8)采用分组方式执行代码分组和调试,用户程序代码可以轻松突破64KB空间的限制。
全新集成开发环境Vision4具有强大的项目管理功能,包括源程序文件、开发工具选项以及编程说明等。Vision4内部集成了一个器件数据库(devicedatabase),其中储存了各种型号单片机的片上存储器和集成外围功能信息,通过器件数据库可以自动设置C51编译器、A51汇编器、BL51/Lx51连接定位器、Debug调试器等开发工具的功能选项,充分满足用户使用特定单片机的要求。集成仿真调试功能允许在统一的Vision4环境下进入Debug调试器,提供纯软件模拟仿真(Simulator)和多种硬件驱动调试。Simulator可以在没有单片机硬件的条件下在PC上用纯软件模拟方式完成单片机应用程序仿真调试,硬件驱动Monitor-51可以将带有MON51监控程序的硬件目标板与Vision4无缝连接,直接对目标板进行仿真调试而无须采用昂贵的硬件仿真器。
本书完整地阐述了Keil C51开发工具的功能和使用方法,力求先进性和实用性,给出了大量具体应用实例,不仅介绍了Keil C51自带Simulator软件模拟仿真调试方法,还介绍了Keil C51与Proteus软件联机,实现8051单片机在线虚拟仿真调试方法,同时对广大读者所关心的利用MON51监控程序设计自己硬件目标板的方法做了详细介绍,并在随书光盘中给出了硬件目标板的电路原理图。
全书共分10章:
第1章阐述8051单片机存储器结构,以及在Vision4集成开发环境下进行C51程序设计和编译调试的基本方法。
第2章阐述C51程序设计基础知识,详细介绍C51的数据类型、基本语法、变量及其存储模式、函数、数组与指针等。
第3章阐述Vision4集成开发环境,详细介绍了工作环境、目标程序的仿真调试以及各种应用选项的设置方法。
第4章阐述Keil C51编译器,介绍了各种编译控制命令、数据调用协议,给出了全部C51库函数及其应用范例。
第5章阐述A51宏汇编器,介绍了各种汇编伪指令、宏处理以及汇编控制命令。
第6章阐述BL51/Lx51链接定位器与实用工具,详细介绍了各种链接控制命令、符号转换工具OH51、库管理工具LIB51的使用方法。
第7章阐述RTX51实时多任务操作系统,介绍了RTX51 TINY的功能和使用方法。
第8章阐述8051单片机片内资源的C51应用编程,介绍了C51编程的基本原则、常见问题与解决方法,给出了中断系统、定时器/计数器、串行口、片内FLASH IAP等资源的具体应用实例。
第9章阐述8051单片机片外扩展的C51应用编程,给出了LED数码管、非编码矩阵键盘、点阵字符型和点阵图型LCD、D/A及A/D转换、I2C总线扩展、外部存储器扩展等具体应用实例。
第10章阐述Keil C51综合应用编程,介绍了C51编程的若干实际应用技巧,C51与汇编语言混合编程方法以及如何在Vision4中应用硬件目标板,给出了红外遥控系统、简易电子琴、带农历的电子万年历、电子密码锁、DS18B20多点温度监测系统、STH11数字温-湿度测量系统、单片机SD卡读写接口等大量综合应用实例。2100433B
89C51单片机论文 摘要:为了方便初学者使用单片机的各种片内资源以及 一些常用的外围扩展芯片,设计开发了基于 51系列单片机 的系统板。同时,该板还可做为学习各种仿真器所需的目标 板。 关键词: 89c51 单片机; tlc 2543 ; tlc5615 the development and application based on 51 series mcu system board li li,shao xinhui (changcheng institute of metrology&measurement,avic,beijing100095,china) abstract:in order to facilitate the beginner to use all kinds of microcontroller chip internal resources
介绍了一种基于C51单片机和光纤技术的液位测量仪的系统设计。采用浮动机构跟踪液位,用光码盘将线位移转换为角位移。光通断的变化信号由光纤传输到测量室,并转换为电脉冲,单片机对脉冲记数即测量出液位大小。用两套光纤来确定液位变化的方向。该系统能够实现液位计量、超限报警、声光显示、串口通讯等功能。分辨率达1mm,测量精度为±2mm,本质安全防爆。
本书作为《单片机原理及应用——基于Proteus和Keil C》的姊妹篇,在保持原教材结构和风格的基础上,取消了其中的汇编语言内容,将节省的空间用于加强C51语言内容。
本书在C51内容编排上做了较大改进:在集中介绍了执行语句、变量、指针、数组和函数等C51基本内容之后,安排了LED控制、独立开关检测、行列式键盘扫描、数码管静态和动态显示等与单片机I/O口相关的C51应用内容,以此缩短编程语言与单片机应用的教学时间差。中断函数及片外RAM访问等与单片机硬件相关的C51内容则穿插到后续原理章节里介绍。采用这种集中与分散相结合,理论与应用相结合的方案,有望促使读者更好地掌握C51与单片机内容,为今后的工程应用打下扎实基础。 为方便读者学习,本书每章都有小结和习题,书末附有与教学进度相呼应的实验指导及相关阅读材料,还配有相关课程网站。
本书可作为高等工科院校机械类、电气与电子信息类、计算机类各专业48~64学时要求的教材,也可作为从事嵌入式应用系统设计、生产从业人员的岗位培训教材及自学参考书。
本书以89C51为典型机型,结合大量实例,并以Keil C51作为主要编程和调试工具,由浅入深地讲解了单片机的工作原理及应用技术。全书共分为9章,主要内容包括:单片机基础知识与数制编码、单片机汇编语言程序设计、单片机C51语言程序设计、中断系统与定时/计数器、串行接口、单片机接口技术、单片机应用系统开发。本书将单片机技术的硬件和软件、理论和实践、情境化设计项目等进行了有机的结合,使读者可以在接近实际开发的过程中较完整地学习单片机技术及开发工具的使用,实现了教、学、做的合一。
本书以8051单片机为主线,以工程项目和科技竞赛为实例背景,按照案例驱动教学模式,由浅入深地讲述了51单片机的硬件结构、C51语言编程方法、单片机内部资源、单片机应用系统的接口设计、STC系列最新单片机、综合应用设计以及科技竞赛研究成果,并介绍了相应的开发工具。