
《单片机C语言概述》PPT课件.ppt
74页单片机原理及应用前言:前言:1.1.为什么开这门课?为什么开这门课?2.2.学好这门课需要的基础知识?学好这门课需要的基础知识?3.3.怎样掌握这门课?怎样掌握这门课?4.4.课程内容课程内容5.5.要求1.1.为什么开这门课?为什么开这门课?((1 1)专业的需要)专业的需要 电气工程及其电气工程及其自动化、电子技术自动化、电子技术 不需要人的干预自动工作、仪表的智能化不需要人的干预自动工作、仪表的智能化((2 2)工作的需要)工作的需要 自动化产品、仪器仪表自动化产品、仪器仪表2.2.需要的基础知识?需要的基础知识?单片机硬件基础、单片机硬件基础、C C语言基础语言基础3.3.怎样掌握这门课?怎样掌握这门课?程序设计程序设计= =算法算法+ +语言语言(1)(1)重点:算法重点:算法------框图框图(2)(2)兴趣兴趣4.4.课程内容课程内容((1 1)概述)概述((2 2)软件工具)软件工具((3 3))C C语言基础语言基础((4 4)中断、定时器)中断、定时器/ /计数器、串行口的计数器、串行口的C C语言语言编程基础编程基础((5 5)键盘)键盘/ /显示、模拟量的显示、模拟量的C C语言编程基础语言编程基础5.5.要求要求自觉学习自觉学习快乐学习快乐学习认真学习认真学习第1章单片机及C51概述 本章内容Single Chip Microcomputer什么是单片机?单片机主要生产厂家及机型单片机的应用及发展趋势单片机的历史及发展概况单片机C语言的概述1. 什么是单片机 1、微型计算机硬件结构 ——常见的微机外形台式微机台式微机立式微机立式微机便携式微机便携式微机微型计算机硬件结构 ——微机硬件组成 显示器显示器主机主机键盘键盘鼠标鼠标微型计算机硬件结构 ——内部结构内部结构 运 算 器控 制 器CPU存 储 器输输入入出出接接口口电电路路输输入入出出设设备备输输入入出出设设备备输输入入出出接接口口电电路路硬件系统微型计算机系统微型计算机系统微型计算机系统微型计算机系统运 算 器控 制 器CPU存 储 器输输入入出出接接口口电电路路输输入入出出设设备备输输入入出出设设备备输输入入出出接接口口电电路路硬件系统软软件件系系统统+硬硬件件系系统统————构构成成微微机机的实体和装置的实体和装置软件系统软件系统与与硬件系统硬件系统共同共同构成实用的微机系统,两构成实用的微机系统,两者是者是相辅相成、缺一不可相辅相成、缺一不可的。
的 软件系统软件系统————微机系统所微机系统所使用的各种程序的总称使用的各种程序的总称这种计算机系统通常由多块印刷电路板制成:这种计算机系统通常由多块印刷电路板制成:多板机多板机 主板显卡声卡存储器接口网卡输入输出接口内存条2 2、单片微型计算机、单片微型计算机CPU输输入入出出设设备备输输入入出出设设备备软软件件系系统统+单片微型计算机系统单片微型计算机系统硬件系统单单片片微微型型计计算算机机是是指指集集成成在在一一个个芯芯片片上上的的微微型型计计算算机机,,简称单片机简称单片机 ———— 单片机实质上就是一个单片机实质上就是一个芯片芯片输输入入接接口口设设备备输输出出接接口口设设备备运 算 器控 制 器存 储 器单片机内部结构示意图 C P U 存 储 器定 时 器 / 计 数 器 中 断 系 统P0-P3TxDRxD TINT并行I/O口串行I/O口单片机应用系统单片机应用系统 硬件硬件+软软件件单单片片机机+接口接口电路电路及外及外设等设等单片机应用系统单片机应用系统由硬件和软件组成硬件是应用系统的基础软件是在硬件的基础上对其资源进行合理调配和使用,从而完成应用系统所要求的任务,二者相互依赖,缺一不可2. 单片机的发展概况ß 1971年Intel公司制造出第一片微型机芯片4004之后,开始了微型机时代。
将微处理器、存储器和外围设备集成到一块 芯 片 上 , 这 就 是 单 片 微 型 计 算 机 ( Single Chip Microcomputer),简称单片机ß单片机是应工业测控而诞生的,它的结构与指令功能都是按照工业控制要求设计的,故也叫单片微控制器(SCM Single Chip Microcontroller),ß它在控制领域大显身手,装入到各种智能化产品之中,所以又称为嵌入式微控制器(Embedded Microcontroller),也有文献中称为微控制器单元( MCU Microcontroller Unit )Intel4004和采用4004的计算器一种8位嵌入式微控制器C8051F020实验设备2.1 单片机的发展历史(1) ß第一阶段(1974年-1976年):初级阶段Þ 因受工艺技术水平的限制,单片机结构和功能都很简单例如仙童公司生产的F8单片机,内部仅有8位CPU,64字节RAM和2个并行口,还需一些其他芯片才能组合成一台完整的微型机 ß第二阶段(1976年-1978年):低性能阶段Þ 以美国INTEL公司的MCS-48为代表该系列单片机内集成有8位CPU、并行I/O接口、一个8位的定时/计数器、片内64或128字节RAM,程序存储空间最大4KB,但无串行通信口,不宜多机使用。
2.1 单片机的发展历史(2)ß第三阶段(1978年-1983年):高性能阶段Þ 仍采用8位CPU,但有多级中断功能、串行通信接口、16位的定时/计数器,片内ROM、RAM容量加大,寻址空间范围可达64KB,有的片内还带有A/D转换器接口Þ 生产厂家众多,产品系列也特别多,主要有INTEL公司的MCS-51,MOTOROLA公司的6801和ZILOG公司的Z8等Þ 具有优异的性价比,获得了广泛应用尤其是MCS-51系列,特别适合于控制应用,在我国教育和经济建设等各个领域大显身手,经久不衰,是我国单片机应用的主流系列2.1单片机的发展历史(3)ß第四阶段(1983年~):新一代阶段Þ 单片机的含义已发生了根本改变目前仍然保留单片机这一习惯叫法,但实际是指“Single-chip Microcontroller”新一代单片机有如下几方面特点:1.CPU仍以8位为主流,并不断完善另一方面发展了16位、32位的单片机早期多使用CISC(Complex Instruction Set Computer)系统结构,近来RISC(Reduced Instruction Set Computer)单片机已大力发展。
RISC单片机中,除指令集精简外,一般都用单字长指令和流水线操作方法,大大加快了指令的运行速度2.1单片机的发展历史(4)Þ 2.按片内程序存储器的类型不同分为:ROM型、EPROM型、无ROM(Romless)型和低成本的OTP(One Time Programmable ROM)型、E2PROM型近年来,Flash ROM已获得了普遍发展由于Flash ROM可多次写入,有些公司称之为MTP(M-Time Programmable ROM)型Flash ROM的普遍使用,也导致了ISP(In-System Progammable)技术的迅速发展可扩展容量有的已突破64KB,达到2MB以上片内RAM已有2KB以上的产品,可扩展容量也可达到2MB以上 2.1单片机的发展历史(5)Þ 3.产品日趋复杂化、多样化、专用化在原来微型机结构的基础上,集成嵌入了一些外设与一些外设驱动单元,如通用接口、看门狗(Watchdog)、A/D和D/A、LCD驱动单元、遥控键盘、语音接口、串行总线I2C,甚至通用串行总线USB(Universal Serial Bus)、控制器局域网CAN(Controller Area Network)等。
某些公司把数字信号处理器DSP(Digital Signal Processor)也嵌入了单片机内2.1单片机的发展历史(6)Þ 4. 多采用CMOS工艺,出现双时钟、低电压单片机,大大降低了系统功耗时钟速度大幅提高,有的已达100MHz以上引脚数过去多为40PIN,现在已向两个方向发展——多引脚(100PIN以上)和少引脚(20PIN以下)封装形式多样化,有DIP、SH-DIP、OFP、SQFP、HQFP、TQFP、PGA、BGA、PLCC等3.1 综述 自单片机诞生以来的近30年中,单片机已有70多个系列的近500个机种国际上较有名、影响较大的公司及他们的产品如下所述:§ Intel公司的MCS—48、MCS—51、MCS—96系列;★§ Motorola公司的6801、6802、6803、6805、68HCll系列产品;§ Zilog公司的Z8、Super8系列产品;§ 仙童(Fairchild)公司和Mostek公司的F8、3870系列产品;§ NEC公司的μCOM—87系列产品;§ Rockwell公司的6500、6501系列产品;§ Atmel、PHILIPS 、LG等公司的51兼容机。
3. 单片机主要生产厂家及机型 根据近年来国外实地考察,Intel公司的单片机在市场上占有量为67%,其中MCS—51系列产品又占54%在我们国内虽然上述各公司的产品均有引进,但由于各种原因,至今在我国所应用的单片机仍然是以MCS—48、MCS—51、MCS—96为主流系列随着这一系列的深入开发,其主流系列的地位会不断巩固下去因而我们在此主要介绍Intel公司的单片机系列3.2 MCS-51系列和AT89系列单片机 MCS-51是指由美国INTEL公司生产的一系列单片机的总称,这一系列单片机包括了好些品种,如8031,8051,8751,8951,8032,8052,8752,8952等,其中8051是最早最典型的产品,该系列其它单片机都是在8051的基础上进行功能的增、减、改变而来的,所以人们习惯于用8051来称呼MCS-51系列单片机,而8031是前些年在我国最流行的单片机,所以很多场合会看到8031的名称1) MCS-51系列MCS-51系列单片机分类 资源资源 配置配置子子 系列系列 片内片内ROMROM形式形式 片片 内内 ROM ROM 容容 量量 片片 内内 RAM RAM 容容 量量定时定时/ /计数器计数器中中断断源源 无无ROMROMEPREPROMOME E2 2PROPROM M5151子系列子系列803180318051805187518751 895189514KB4KB128B128B 2 2××16165 55252子系列子系列803280328052805287528752 895289528KB8KB256B256B 3 3××16166 6 INTEL公司将MCS-51的核心技术授权给了很多其它公司,所以有很多公司在做以8051为核心的单片机,当然,功能或多或少有些改变,以满足不同的需求,其中89C51就是这几年在我国非常流行的单片机,它是由美国ATMEL公司开发生产的。
AT89C51- 低功耗(CMOS工艺),内含4KB闪存,可编程或使用编程器重复编程,与MCS-51指令和引脚完全兼容,且价格较低2)AT89系列3.3 典型的8位单片机产品(1) ß1.Intel 公司的单片机 Þ 其产品有MCS-48、MCS-51和MCS-96三大系列几十个型号的单片机 MCS-51系列单既包括三个基本型号8031(无ROM型)、8051(ROM型)、8751(EPROM型) Þ 8051是世界上产量排名第二的著名单片机CPUß2.ATMEL公司的单片机 Þ ATMAL公司在1994年以E2PROM技术和Intel公司的80C31单片机核心技术进行交换,从而取得80C31核的使用权先进的Flash技术和80C31核相结合,生产出具有8051结构的Flash型和EEPROM型单片机(尤其是89C51和89C52) 3.3 典型的8位单片机产品(2)ß3.Silicon Laboratories公司的单片机 Þ C8051F系列是一种典型的高性能单片机 ,完全集成混合信号系统级芯片(SOC System of Chip),完全兼容MCS-51Þ 采用流水线(pipe line)技术,不再区分时钟周期和机器周期,提高了指令执行效率。
Þ 具备控制系统所需的模拟和数字外设,包括看门狗、ADC、DAC、电压比较器、电压基准输出、定时器、PWM、定时器捕捉和方波输出等,并具备多种总线接口,包括UART、SPI、SMBUS(与I2C兼容)总线以及CAN总线C8051F系列单片机采用Flash ROM技术,集成JTAG,支持编程 3.3 典型的8位单片机产品(3)ß4. Motorola公司的单片机 Þ8位机有68HC05、68HC08和68HC11几种68HC05是Motorola公司推出的一种采用HCMOS技术的8位单片机,是世界上产量排名第一的著名单片机CPU ß5. TOSHIBA公司的单片机 Þ具有功能强、可靠性高、价格低等特点,特别适合于空调、电冰箱等家电产品 ßPhilips公司的单片机 ÞPhilips公司生产8051结构的80C51系列8位单片机、采用8051结构的16位单片机、以68000为核的16位单片机 4. 单片机的应用及发展趋势 4.1 4.1 单片机单片机的特点的特点 体积小,重量轻电源单一,功耗低功能强,价格低运行速度快,抗干扰能力强,可靠性高可以嵌入到电子产品中可以嵌入到电子产品中————嵌入式应用系统嵌入式应用系统4.1 单片机的应用(1)ß1.在智能仪表中的应用Þ 广泛地应用于电力系统、交通运输工具、计量等各种仪器仪表之中,使仪器仪表智能化。
ß2.在机电一体化中的应用Þ 机电一体化产品是指集机械技术、微电子技术、自动化技术和计算机技术于—体,具有智能化特征的机电产品 ß3.在实时控制中的应用 Þ 如对工业上各种窑炉的温度、酸度、化学成分的测量和控制汽车电子中微型控制器的使用越来越多 4.1 单片机的应用 (2)ß4.单片机在分布式多机系统中应用 Þ 分布式多机系统具有功能强、可靠性高的特点在比较复杂的系统中,都采用分布式多机系统 ß5.单片机在家用电器等消费类领域中的应用 Þ 目前家用电器几乎都是单片机控制的电脑产品.例如:空调、冰箱、洗衣机、微波炉、彩电、音响、家庭报警器、电子宠物、、MP3等4.2 单片机的发展趋势 (1)ß1.低成本高度集成的单片机片上系统(SOC)Þ 重要发展趋势,是寻求应用系统在芯片上的最大化解决方案因此,专用单片机的发展自然形成了SoC化趋势 ß2. 8位单片机的市场份额依然领先Þ “让事情尽可能简单”的原则有助于更快地完成系统设计、验证并投入生产,同时减少潜在问题ß3. 处器理的多核结构 Þ 在数字通信和网络中的应用, 对处理器提出了更高的要求为适应这种情况,现在已出现多核结构的处理器。
4.2 单片机的发展趋势 (2)ß4.功耗更低 Þ 新推出的单片机的功耗越来越小,很多单片机都有多种工作方式,包括等待、暂停、休眠、空闲、节电等工作方式ß5.电压范围更宽 Þ 扩大电源电压范围以及在较低电压下仍然能工作是现在新推出的单片机的一个特点 ß6.工艺更先进和封装更小 Þ 现在单片机的封装水平已大大提高, 有越来越多的单片机采用了各种贴片封装形式,以满足便携式手持设备的需要 4.2 单片机的发展趋势 (3)ß7.开发形式、手段和工具 Þ 目前借助于JTAG接口构成JTAG调试器,直接从CPU 获取调试信息而使得产品的设计简化,从而使得开发工具的价格反而要低于ICE Þ 用高级语言代替汇编语言也渐成趋势,典型的单片机都推出了自己的C 编译器其中Keil C51 的编译效率已达到很高水平 Þ RTOS 的引入解决了嵌入式软件开发标准化的难题,促进嵌入式开发软件的模块化和可移植化,为软件工程化管理打下基础 2. 2. 单片机应用单片机应用 工业方面工业方面民用方面民用方面数据处理方面数据处理方面仪表方面仪表方面汽车方面汽车方面电讯方面电讯方面单片机技术的应用遍布国民经济与人民生活的各个领域5.5.单片机的单片机的C C语言概述语言概述 ß5 5..1 C1 C语言与单片机编程语言与单片机编程ß5 5..2 C512 C51程序程序ß5 5..3 C513 C51编程举例编程举例 5.1 C5.1 C语言与单片机编程语言与单片机编程一、单片机的一、单片机的C语言的特点语言的特点1.无需了解机器硬件及其指令系统,只需了解无需了解机器硬件及其指令系统,只需了解51的存的存储器结构;储器结构;2.C51能方便管理寄存器存储器和数据类型等细节问题,能方便管理寄存器存储器和数据类型等细节问题,但对硬件控制有限,而汇编可以完全控制硬件资源;但对硬件控制有限,而汇编可以完全控制硬件资源;3.C51在小应用程序中产生的代码量大,执行速度慢,在小应用程序中产生的代码量大,执行速度慢,但在较大的程序代码中效率高;但在较大的程序代码中效率高;4.C51程序由若干模块组成,具有良好的模块化结构,程序由若干模块组成,具有良好的模块化结构,便于改进和扩充;便于改进和扩充;5.C51具有良好的可读性和可维护性,而汇编在大程序具有良好的可读性和可维护性,而汇编在大程序开发中开发难度增加,可读性差;开发中开发难度增加,可读性差;6.C51有丰富的库函数,大大的减少用户的编程量,缩有丰富的库函数,大大的减少用户的编程量,缩短编程与调试时间,提高软件的开发效率;短编程与调试时间,提高软件的开发效率;7.汇编程序当机型改变时,无法直接移植使用,而汇编程序当机型改变时,无法直接移植使用,而C能能在不同类型的机器上运行,可移植性好在不同类型的机器上运行,可移植性好 标准标准C语言也称语言也称ANSI C语言。
单片机的语言单片机的C与标准与标准C之间有许之间有许多相同的地方,也有其自身的一些特点不同的嵌入式多相同的地方,也有其自身的一些特点不同的嵌入式C语言编语言编译系统之所以与译系统之所以与ANSI C语言有不同的地方,这样是由于它们所语言有不同的地方,这样是由于它们所针对的硬件系统不同,对单片机就称为针对的硬件系统不同,对单片机就称为C51语言,二者不同主要语言,二者不同主要体现在一些几个方面体现在一些几个方面1.库函数:标准库函数:标准C的库函数是按照通用计算机来定义的,而的库函数是按照通用计算机来定义的,而C51的库的库函数是按照单片机的应用情况来定义的;函数是按照单片机的应用情况来定义的;2.数据类型:在数据类型:在C51中增加了几种针对单片机的特有数据类型如单中增加了几种针对单片机的特有数据类型如单片机包含位操作空间和丰富的位操作指令;片机包含位操作空间和丰富的位操作指令;3.变量的存储模式:变量的存储模式:C51变量的存储模式与变量的存储模式与51的存储器紧密相关从的存储器紧密相关从数据类型上数据类型上51有片内、片外程序存储器,片内、片外数据存储器有片内、片外程序存储器,片内、片外数据存储器。
在片内程序存储器中,又有直接寻址区和间接寻址区,分别为:在片内程序存储器中,又有直接寻址区和间接寻址区,分别为:CODE\DATA\XDATA\IDATA,及根据及根据51单片机特点而设定的单片机特点而设定的PDATA类型使用不同存储器将会影响程序执行的效率,不同的类型使用不同存储器将会影响程序执行的效率,不同的模式对应不同的硬件系统和不同的编译结果但标准模式对应不同的硬件系统和不同的编译结果但标准C对存储模式对存储模式要求不高要求不高4.输入输入/输出:输出:C51的输入的输入/输出是通过输出是通过51的串口来完成的,输入输出的串口来完成的,输入输出指令执行前必须对串口进行初始化指令执行前必须对串口进行初始化5.函数使用:函数使用:C51中有专门的中断函数中有专门的中断函数二、单片机的二、单片机的C语言与标准语言与标准C语言的比较语言的比较三、单片机的三、单片机的C语言与汇编语言的比较语言与汇编语言的比较 在国内,汇编语言在单片机开发过程中是比较流行的开发工具在国内,汇编语言在单片机开发过程中是比较流行的开发工具长期以来对编译效率的偏见及不少程序员对使用汇编开发硬件的习长期以来对编译效率的偏见及不少程序员对使用汇编开发硬件的习惯性,使得惯性,使得C在很多地方遭到冷落。
优秀的程序员写出的汇编程序在很多地方遭到冷落优秀的程序员写出的汇编程序的确有执行效率高的优点,但汇编的可移植性和可读性差,使得使的确有执行效率高的优点,但汇编的可移植性和可读性差,使得使用其开发出来的产品在维护和功能升级时的确有极大的困难,从而用其开发出来的产品在维护和功能升级时的确有极大的困难,从而导致整个系统的可靠性和可维护性比较差而使用导致整个系统的可靠性和可维护性比较差而使用C语言进行嵌入语言进行嵌入式系统的开发,有着汇编不可比拟的优势式系统的开发,有着汇编不可比拟的优势1.编程调试灵活方便;编程调试灵活方便;2.生成的代码编译效率高;生成的代码编译效率高;3.模块化开发;模块化开发;4.可移植性好;可移植性好;5.便于项目的维护便于项目的维护【【例例1-11-1】】将外部数据存储器的将外部数据存储器的000BH000BH和和000CH000CH单元单元的内容相互交换的内容相互交换 ß用汇编语言编写源程序如下:用汇编语言编写源程序如下:ßORG 0000HßMOVDPTR, #000BHßMOVXA, @DPTR ;将;将000BH的内容送入的内容送入AßMOVR7, A ;暂存;暂存000BH的内容的内容ßINCDPTRßMOVXA, @DPTR ;将;将000CH的内容读入的内容读入AßMOVDPTR, #000BHßMOVX@DPTR, AßINC DPTRßMOVA, R7ßMOVX@DPTR, AßSJMP $ßENDC C语言编程:语言编程:ß#include
个单元汇编语言源程序如下:汇编语言源程序如下:ß Result EQU 20Hß ORG 0000Hß LJMP STARTßSTART: MOV SP, #60H;主程序主程序ß MOV A, #123ß LCALL BINTOBCDß SJMP $ßBINTOBCD: MOV B, #100 ;设置转换子程序设置转换子程序ß DIV ABß MOV Result,A;除以除以100得百位数得百位数ß MOV A, Bß MOV B, #10ß DIV ABß MOV Result+1, A ;余数除以余数除以10得十位数得十位数ß MOV Result+2, B ;余数为个位数余数为个位数ß RETß END调试结果:片内调试结果:片内RAM20H,21H,22H中的数值分别为中的数值分别为01H,02H,03HC51C51源程序如下:源程序如下: ßvoid main(void)ß{ unsigned char Result[3];ß unsigned char Number;ß Number=123;ß Result[0]=Number/100;//除以除以100得百位得百位ß Result[1]=(Number%100)/10;//余数除以余数除以10得十位得十位ß Result[2]=Number%10;//余数为个位余数为个位ß while(1);//等待暂停等待暂停ß}【【例例1-31-3】】二进制数转换成二进制数转换成ASCIIASCII码程序。
码程序ß将累加器将累加器A A中的内容分为两个中的内容分为两个ASCIIASCII码,码,并存入并存入ResultResult开始的两个单元开始的两个单元汇编语言源程序如下:汇编语言源程序如下:ß Result EQU 20Hß ORG 0000Hß LJMP STARTßSTART: MOV SP, #40Hß MOV A, #00011010Bß LCALL BINTOHEXß SJMP $ßBINTOHEX: MOV DPTR, #ASCIITABß MOV B, A ß SWAP Aß ANL A, #0FH;取取A的高的高4位位ß MOVC A, @A+DPTRß MOV Result, Aß MOV A, Bß ANL A, #0FH;取取A的低的低4位位ß MOVC A, @A+DPTRß MOV Result+1, Aß RETßASCIITAB: DB '0123456789ABCDEF'ß END调试结果:片内调试结果:片内RAM 07H中的数据为中的数据为7BH;; 而而08H,09H,0AH中的数据分别为中的数据分别为01H,02H,03HC51C51源程序如下:源程序如下: ßcode unsigned char ASCIITAB[16]="0123456789ABCDEF";ßvoid main(void)ß{ unsigned char Result[2];ß unsigned char Number;ß Number=0x1a;ß Result[0]=ASCIITAB[Number/16];//高高4位位ß Result[1]=ASCIITAB[Number&0x0f];//低低4位位ß while(1);ß}调试结果:调试结果:片内片内RAM 07H中的数据为中的数据为1AH;;08H,09H中的数据分别为中的数据分别为31H,41H5.2 C515.2 C51程序程序ß本节主要介绍本节主要介绍C51C51程序的结构、规范、注意程序的结构、规范、注意事项、标识符、关键字等。
事项、标识符、关键字等ß一、一、C51C51的程序结构的程序结构ß二、二、C51C51编程规范及注意事项编程规范及注意事项ß三、三、C51C51的标识符与关键字的标识符与关键字一、一、C51C51的程序结构的程序结构ß#include
这几部分完全类似于这几部分完全类似于C C语言的程序结构语言的程序结构ß预处理命令部分预处理命令部分常用常用#include#include命令来包含一些程序中用到的头文件命令来包含一些程序中用到的头文件这些头文件中包含了一些库函数以及其他函数的声明及定义这些头文件中包含了一些库函数以及其他函数的声明及定义ß自定义函数声明部分自定义函数声明部分用来声明源程序中自定义的函数用来声明源程序中自定义的函数ßmainmain()主函数()主函数是整个是整个C51C51程序的入口不论程序的入口不论mainmain()函数位于程()函数位于程序代码中的哪个位置,序代码中的哪个位置,C51C51程序总是从程序总是从mainmain()函数开始执行的函数开始执行的ß自定义函数部分自定义函数部分是是C51C51源程序中用到的自定义函数的函数体源程序中用到的自定义函数的函数体ß除了扩展名为除了扩展名为“.c.c”的源程序文件,的源程序文件,C51C51程序还支持扩展名为程序还支持扩展名为“.h.h”的头的头文件以及扩展名为文件以及扩展名为“.lib.lib”的库文件等的库文件等ß在一般的编译系统中,通常以项目(工程)结构来管理复杂的在一般的编译系统中,通常以项目(工程)结构来管理复杂的C51C51程序文件。
例程序文件例如如Keil μVision2Keil μVision2编译环境中,整个项目结构如图编译环境中,整个项目结构如图1-11-1所示ß在这里整个项目由项目文件管理、项目文件扩展名为在这里整个项目由项目文件管理、项目文件扩展名为“.Uv2.Uv2”整个工程项目中可整个工程项目中可以包含如下几类文件以包含如下几类文件ß头文件头文件用来包含一些库函数,系统变量声明以及将不同的用来包含一些库函数,系统变量声明以及将不同的C C文件连接起来文件连接起来ßC C源文件源文件是是C51C51程序的主要部分,用来实现特定的功能程序的主要部分,用来实现特定的功能C C源文件可以有一个,也源文件可以有一个,也可以按照不同的功能分成多个,但所有这些可以按照不同的功能分成多个,但所有这些C C源文件中有且仅有一个可以包含一源文件中有且仅有一个可以包含一个个main( )main( )主函数ß库文件库文件是实现特定功能的函数库,供是实现特定功能的函数库,供C C源文件调用源文件调用ß编译中间文件是源程序在编译链接过程中生成的中间文件,其中包含了文件编译编译中间文件是源程序在编译链接过程中生成的中间文件,其中包含了文件编译调试的信息。
调试的信息ß可烧录文件可烧录文件是编译系统生成的可以烧录到单片机内部供执行的文件,类似于是编译系统生成的可以烧录到单片机内部供执行的文件,类似于“.exeexe”可执行文件在可执行文件在C51C51语言中,一般扩展名为语言中,一般扩展名为“.hex.hex”或者或者“.bin.bin”等 二、二、C51C51编程规范及注意事项编程规范及注意事项1 1.注释:.注释: 注释语句只对代码起到功能描述的作用,在实注释语句只对代码起到功能描述的作用,在实际的编程链接过程中不起作用在际的编程链接过程中不起作用在C51C51语言中可以语言中可以通过两种方式不是表示注释内容通过两种方式不是表示注释内容1 1)用)用“////”开头来注释一行:开头来注释一行:如如“////变量声明变量声明”2 2)用)用“/*/*”符号开头,并以符号开头,并以“* */ /”符号结束符号结束 如用如用“/*/*声明整型变量声明整型变量ch*/ch*/” 本方法灵活多变,可以注释多行如:本方法灵活多变,可以注释多行如: printf( printf(“ch=%d\nch=%d\n”,/*,/*整型变量整型变量ch*/ch);ch*/ch); 一个好的一个好的C51C51源程序应该添加必要的注释内容。
源程序应该添加必要的注释内容2 2.命名.命名 在进行程序设计时,经常需要自定义一些函数或变量在进行程序设计时,经常需要自定义一些函数或变量一般来说,重要符合一般来说,重要符合C51C51命名规范即可通过编译但是,为命名规范即可通过编译但是,为了便于源程序的理解和交流,在进行命名时应注意以下几点:了便于源程序的理解和交流,在进行命名时应注意以下几点: 自定义函数或者变量的名称最好能反映该函数或变量的功自定义函数或者变量的名称最好能反映该函数或变量的功能用途因此,需要选用有意义的单词或者字母组合来表示因此,需要选用有意义的单词或者字母组合来表示例如例如MAXMAX表示最大值、表示最大值、MINMIN表示最小值等表示最小值等 变量名通常加上表示数据类型的前缀,例如变量名通常加上表示数据类型的前缀,例如“ucSendDataucSendData”的前缀的前缀“ucuc”表示表示unsigned charunsigned char 在命名时不要和系统保留的标识符以及关键字产生冲突或在命名时不要和系统保留的标识符以及关键字产生冲突或者歧义3 3.格式.格式 为了程序阅读方便,在进行为了程序阅读方便,在进行C51C51程序设计时,在程序结构以及语句书程序设计时,在程序结构以及语句书写格式方面应注意以下几点:写格式方面应注意以下几点: 虽然虽然C51C51语言对语言对main( )main( )函数放置位置没有限定,但为了程序阅读的方函数放置位置没有限定,但为了程序阅读的方便,最好把它放置在所有自定义函数的前面,即依次为头文件声明、自便,最好把它放置在所有自定义函数的前面,即依次为头文件声明、自定义函数以及全局变量声明、定义函数以及全局变量声明、main( )main( )函数、自定义函数。
函数、自定义函数 C51C51语句可以写在一行上也可以写在多行上为了程序理解的方便,最语句可以写在一行上也可以写在多行上为了程序理解的方便,最好将每个语句单独写在一行,并加以注释有时某几个相连的语句或者好将每个语句单独写在一行,并加以注释有时某几个相连的语句或者共同执行某个功能则可以放置在一行共同执行某个功能则可以放置在一行 对于源程序文件不同结构部分之间要留有空行例如,头文件声明、对于源程序文件不同结构部分之间要留有空行例如,头文件声明、自定义函数声明、自定义函数声明、main( )main( )函数以及自定义函数之间均要空一行,来明显函数以及自定义函数之间均要空一行,来明显区分不同结构区分不同结构 对于对于ifif、、whilewhile等块结构语句中的等块结构语句中的“{ {”和和“} }”要配对对齐,以便于程序阅要配对对齐,以便于程序阅读时能够理解该结构的起始和结束读时能够理解该结构的起始和结束 源代码安排时可以通过适当的空格以及源代码安排时可以通过适当的空格以及TabTab键来实现代码对齐键来实现代码对齐三、三、C51C51的标识符与关键字的标识符与关键字ß1 1.标识符.标识符ß标识符常用来声明某个对象的名称,如变量和常量的声明、数组和结标识符常用来声明某个对象的名称,如变量和常量的声明、数组和结构的声明、自定义函数的声明以及数据类型的声明等。
示例如下构的声明、自定义函数的声明以及数据类型的声明等示例如下ßint count;int count;ßvoid Function1( );void Function1( );ß在上面的例子中,在上面的例子中,countcount为整型变量的标识符,为整型变量的标识符,Function1Function1为自定义函为自定义函数的标识符数的标识符ß在在C51C51语言中,标识符可以由字母、数字(语言中,标识符可以由字母、数字(0 0~~9 9)或者下划线)或者下划线“_ _”组成,组成,最多可支持最多可支持3232个字符ßC51C51标识符的第一个字符必须或者下划线标识符的第一个字符必须或者下划线“_ _”,例如,例如“untunt”、、“ch_1ch_1”等等都是正确的,而都是正确的,而“5count5count”则是错误的标识符则是错误的标识符ß另外,另外,C51C51的标识符区分大小写,例如的标识符区分大小写,例如“countcount”和和“COUNTCOUNT”代表两个代表两个不同的标识符,不同的标识符,使用标识符时应注意以下几点:使用标识符时应注意以下几点: 在命名在命名C51C51标识符时,需要能够清楚地表达其功能含义,这标识符时,需要能够清楚地表达其功能含义,这样有助于阅读和理解源程序。
样有助于阅读和理解源程序 C51C51的标识符原则上可以使用下画线开头,但有些编译系统的标识符原则上可以使用下画线开头,但有些编译系统的专用标识符或者预定义项是以下划线开头的为了程序的的专用标识符或者预定义项是以下划线开头的为了程序的兼容性和可移植性,所以建议一般不使用下划线开头来命名兼容性和可移植性,所以建议一般不使用下划线开头来命名标识符 尽量不要使用过长的标识符,以便于使用和程序理解方便尽量不要使用过长的标识符,以便于使用和程序理解方便 自定义的自定义的C51C51标识符不能使用标识符不能使用C51C51语言保留的关键字,也不能语言保留的关键字,也不能和用户已使用的函数名或和用户已使用的函数名或C51C51库函数透明例如库函数透明例如“charchar”是关键是关键字,所以不能作为标识符使用字,所以不能作为标识符使用5.3 C515.3 C51编程举例编程举例 通过通过5151内部功能部件的简单应用的例子,加深对内部功能部件的简单应用的例子,加深对5151程序程序结构及单片机的结构及单片机的C51C51语言编程的理解语言编程的理解例例1-51-5】】PROTEUSPROTEUS仿真电路如图所示仿真电路如图所示: :8 8个发光二极管个发光二极管D1D1~~D8D8经限流电阻分别接至经限流电阻分别接至P1P1口口8 8个引脚,阳极共同接高电平。
个引脚,阳极共同接高电平 编程实现发光二极管的流水点亮,即按照编程实现发光二极管的流水点亮,即按照D1→D2→D1→D2→…→D8→D8的顺序,每次点亮一个发光二极管,一段时的顺序,每次点亮一个发光二极管,一段时间后熄灭该发光二极管,然后点亮下一个发光二极管,重复间后熄灭该发光二极管,然后点亮下一个发光二极管,重复循环C51C51源程序如下:源程序如下:ß#include
编程实现当开关动作时,对应的发光二极管亮或灭ß汇编语言源程序如下:汇编语言源程序如下:ßORG 0000HßMOV P0,#0FFHßLOOP:MOV A,P0ßMOV P1,AßSJMP LOOPßC51C51语言源程序如下:语言源程序如下:ß#include
ß机器周期频率机器周期频率: :f fcy=0.5MHzcy=0.5MHz,,T Tcy=12/6Mz=2μscy=12/6Mz=2μsß定时器预置值(初值)定时器预置值(初值)N N: : 2 28 8- -N N = =T T/ /T Tcy=cy=T T*fcy*fcy=50=50ß N= N=206=0CEH206=0CEHß定时器定时器/ /计数器计数器0 0工作于方式工作于方式2 2,定时方式,其方式控制字,定时方式,其方式控制字:TMOD=02H:TMOD=02Hß在程序中,头文件在程序中,头文件reg51.hreg51.h中定义了中定义了80518051的的I/OI/O端口、特殊功能寄存器和端口、特殊功能寄存器和特殊功能位等符号,在程序中直接使用主程序完成特殊功能位等符号,在程序中直接使用主程序完成T0T0的初始化,的初始化,CPUCPU开开中断,然后进入无限循环,等待中断,然后进入无限循环,等待P1.0P1.0引脚上的方波输出引脚上的方波输出ß方波输出由中断服务函数方波输出由中断服务函数timer0timer0()产生Interrupt 1Interrupt 1将将timer0()timer0()声明声明为为T0T0的中断服务函数,而的中断服务函数,而using 3using 3使中断发生时切换到寄存器组使中断发生时切换到寄存器组3 3,这样,这样可以减少中断现场保护的时间,提高中断服务的实时性。
可以减少中断现场保护的时间,提高中断服务的实时性C51C51源程序清单如下:源程序清单如下:ß/***********200μs 周期方波发生程序周期方波发生程序**************/ß#define T0_VALUE 0xCEß#define TMOD_VALUE 0x02/*定时器定时器/计数器计数器0方式控制字方式控制字*/ß#include
语言的特点ß((2 2))C51C51的程序结构的程序结构ß((3 3))C51C51的编程规范及注意事项的编程规范及注意事项ß建立:建立:ß((1 1)和硬件结合)和硬件结合ß((2 2)有规范)有规范ß((3 3)结构)结构。












