单片机原理及接口技术-单片机的C语言应用程序设计课件_第1页
单片机原理及接口技术-单片机的C语言应用程序设计课件_第2页
单片机原理及接口技术-单片机的C语言应用程序设计课件_第3页
单片机原理及接口技术-单片机的C语言应用程序设计课件_第4页
单片机原理及接口技术-单片机的C语言应用程序设计课件_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机的

C语言应用程序设计

主讲:武桐§8

单片机的C语言应用程序设计

C语言是一种编译程序设计语言,它兼顾了多种高级语言的特点,并具有汇编语言的功能。

C语言应用于单片机具有以下突出特点:

﹡编译器可自动完成变量存储单元的分配;﹡不必对单片机和硬件接口的结构有很深入的了解;﹡具有良好的移植性。因此,利用C语言编写程序可缩短开发周期,增强程序可读性,便于修改、扩充、研制大规模复杂系统。§8

单片机的C语言应用程序设计

C语言的缺点是生成的目标代码较大,用C语言编写的应用程序必须经单片机的C语言编译器(简称C51),转换生成单片机可执行的代码程序。C51继承了标准C语言的绝大部分特性,基本语法相同,但其本身又在特定的硬件结构上有所扩展。支持MCS–51系列单片机的C语言编译器有很多种。其中KeilC51μVision以它的代码紧凑和使用方便等特点优于其它编译器。本章是针对这种编译器介绍MCS–51单片机C语言程序设计。

C51的程序结构及编译环境C51的数据类型与存储类型AT89S52结构的C51定义KeilC51程序设计§8

单片机的C语言应用程序设计

§8.1C51的程序结构及编译环境C51的程序结构与一般的C语言程序基本相同。C51程序是一个函数的集合,这个集合有且仅有一个名为main的函数,main函数也称为主函数,是程序的起点,也是程序的终点。不论main函数在程序的什么位置,程序总是从main函数开始执行,当main函数所有语句执行完成后,程序执行结束。1、C51的程序结构}voidmain()

/*主函数*/{

}

#include<at89s52.h> /*预处理伪指令*/#defineuintunsignedint /*定义伪指令*/

ucharrcv;

/*变量定义*/uchardataflag sbitflagl=flag^l;

/*位变量定义*/

voiddelay();

/*全局函数定义*/voiddelay() /*函数*/{ucharm;for(m=0;m<1000;m++){};}voldint0(void)interrupt0usingl /*中断服务程序*/{

§8.1C51的程序结构及编译环境C51程序基本由预处理器命令、变量定义、函数组成。C编程时,一般在程序的开始都要引入头文件。如#include<stdio.h>语句,说明该段程序包含了stdio.h头文件。C51程序除了包含C语言标准的头文件外,一般还要包含与单片机硬件有关的头文件,如#include<at89s52.h>语句,说明该段程序包含at89s52.h头文件。1、C51的程序结构§8.1C51的程序结构及编译环境与单片机有关的头文件中一般定义对应单片机累加器A、片内I/O口、可位寻址单元的地址、中断矢量的入口地址以及特殊单元的名称定义等。包含头文件后,经头文件定义的SFR等可以在程序中直接用变量名代替,如在头文件中定义

sfrTMOD=0x89;程序中要给TMOD赋值时,直接利用TMOD=40就可以了,相当于汇编语言中的MOVTMOD,#40§8.1C51的程序结构及编译环境C51程序编写时注意以下几点:﹡每个C51程序都至少包含一个名为main的主函数,也可以包括一个main函数和若干其他函数。因此,函数是C51程序的基本单位。被调用的函数可以是编译器提供的库函数,也可以是用户根据需要自己编制设计的函数。﹡C5l程序总是从main函数开始执行,不管main函数在程序中的什么位置。﹡C51程序中一般包含相关单片机硬件定义的头文件。§8.1C51的程序结构及编译环境C51程序编写时注意以下几点:﹡变量的定义要遵循C5l变量定义原则。﹡C5l程序书写格式自由,一行内可以写一条或几条语句。每条语句最后以分号结束。﹡可以用/*…*/对C51中的某段程序加注释,也可以利用∥对某行内容加注释。§8.1C51的程序结构及编译环境许多公司都开发了C51的集成开发环境及开发系统,常用的C51集成开发环境有KeilC51μVision和MedWin等软件。KeilC51是基于51内核的微处理器软件开发平台,内嵌多种符合当前工业标准的开发工具,可完成工程建立和管理、编译、链接、目标代码的生成、软/硬件仿真等完整的开发流程。MedWin是南京万利电子有限公司推出的配合其Insight仿真器的集成开发环境。2、C51的编译环境及开发过程§8.1C51的程序结构及编译环境C51源程序是ASCII文件,除了应用上述编译环境编写外,也可以采用如EDIT、记事本、写字板等进行编写。C51程序的开发过程如图所示。§8.2C51的数据类型与存储类型

C51的数据类型与一般C语言相同。1、C51的数据类型数据类型长度(bit)长度(byte)值域范围bit10,1

unsignedchar810~255

signedchar81-128~127unsignedint1620~65535signedint162-32768~32767unsignedlong3240~4294967295signedlong324-2147483648~2147483647

float324±1.176E­-38~±3.4E+38(6位数字)Double648±1.176E-38~±3.4E+38(10位数字)一般指针243存储空间0~65535无符号上述数据类型中只有bit和unsignedchar两种数据类型可以直接转换成机器指令。如果不进行负数运算,编程时最好使用无符号格式(unsigned),尽量避免使用大量的、不必要的数据类型,以减轻程序的代码,保证程序的运算速度并减少存储空间。C51中表示十六进制数据时,用0x34表示,与汇编语言中表示的十六进制数34H等价。1、C51的数据类型§8.2C51的数据类型与存储类型

为了书写方便,编程时常使用简化的缩写形式定义数据类型。具体方法是在程序开头使用预处理命令#define。如:#defineucharunsignedchar#defineuintunsignedint这样,在以后的编程中,就可以用uchar代替unsignedchar,用uint代替unsignedint来定义变量。C51编程中变量可以定义成以上数据类型。如:ucharsend_data,rec_data;§8.2C51的数据类型与存储类型

因为C51是面向单片机及其硬件控制系统的开发工具,利用C51编写的程序最后要转换成机器码,并下载到单片机中运行,而单片机中数据存储空间共有4个:片内程序存储器、片外程序存储器、片内数据存储器、片外数据存储器。2、C51数据的存储类型§8.2C51的数据类型与存储类型

利用汇编指令编写程序时指令本身就可确定数据的读写位置。而利用C51编写的程序需要在程序中说明数据的存储空间,这样最后生成的目标代码中的数据才能按要求存储。所以C51编写程序时数据的定义除了前面加上数据类型外,还需要额外增加数据存储空间的说明,目的是将它们定位在相应的存储空间。2、C51数据的存储类型§8.2C51的数据类型与存储类型

根据单片机硬件结构的特点,C51定义了6种存储类型。2、C51数据的存储类型§8.2C51的数据类型与存储类型

存储类型与单片机存储空间的对应关系data直接寻址片内数据存储区,访问速度快bdata可位寻址片内数据存储区,允许位与字节混合访问idata间接寻址片内数据存储区,可访问片内全部RAM地址空间pdata分页寻址片外数据存储区,由:MOVX@R0访问xdata片外数据存储区,由MOVX@DPTR访问code程序代码存储区,由MOVC@A+DPTR访问表8-2C51存储类型与51单片机存储空间的对应关系chardatavar1;bitbdataflags;floatidatax,y,z;unsignedint

pdatavar2;unsignedcharvector[3][4];§8.2C51的数据类型与存储类型

带存储类型的变量的定义的一般格式为:

数据类型存储类型变量名2、C51数据的存储类型变量定义时,有时会略去存储类型的定义,此时,编译器会自动选择默认的存储类型,而默认的存储类型由存储模式决定。

§8.2C51的数据类型与存储类型

C51有3种存储模式SMALL、COMPACT和LARGE,存储模式决定了变量默认的存储类型、参数传递区和无明确存储类型的说明,如表8-3所示。具体采用哪种存储模式可以在C51集成开发环境中选择。3、C51数据的存储模式存储模式参数及局部变量传递区域范围默认存储类型特点SMALL可直接寻址的片内存储器128字节DATA访问方便,所有对象(包括堆栈)都必须嵌入片内RAMCOMPACT分页片外存储器256字节/页PDATA通过Ri间接寻址,堆栈位于片内RAMLARGE片外存储器64KBXDATA通过DPTR间接寻址,效率较低,数据指针不能对称操作§8.3AT89S52结构的C51定义

C51是基于单片机的高级编程语言,因单片机内部有特殊功能寄存器、I/O口、可位寻址单元等,它们都对应某些固定的地址,为了直接访问它们并方便编程,一些C51编译器提供了与标准C语言不兼容、只适用于单片机进行C51编程的关键字,用来定义这些单元。一般将它们定义在头文件中,也可以在编程过程中定义。C51中引入了两个关键字sfr和sbit进行相应的定义。

§8.3AT89S52结构的C51定义

语法:sfr

sfr_name=intconstant;说明:sfr_name必须是一个寄存器的名字,=后面是该寄存器的地址,一般用十六进制表示,必须是常数,不允许带有运算符的表达式,这个常数值必须在特殊功能寄存器地址范围内。范围:用于定义单片机中的特殊功能寄存器、片内I/O接口。

1、关键字sfr§8.3AT89S52结构的C51定义

【例8-1】利用sfr定义P0、P1、PSW、ACC、B、SP、DPL、DPH。

解: sfrP0=0x80;

sfrP1=0x90;

sfrPSW=0xD0;

sfrACC=0xE0;

sfrB=0xF0;

sfrSP=0x81;

sfrDPL=0x82;

sfrDPH=0x83;§8.3AT89S52结构的C51定义

语法:sbit

sbit_name=bitaddress;说明:sbit_name必须是一个位地址的名字,=后面是该位的地址,位地址必须位于单片机的片内可位寻址单元。因为位地址的赋值方法有3种,所以上述语法有3种实现方法。2、关键字sbit(1)sbit

sbit_name=sfr_name^int_constant;

sfr_name必须是已定义的SFR或片内I/O口的名字,

int_constant是该位在sfrname中的位置,数值范围为0~7。这种定义方法相似于汇编中位定义的方法PSW.0。例如:

sfrPSW=0xD0; /*定义PSW地址为0xD0*/

sbitOV=PSW^2; /*定义OV位为PSW.2*/

sbitCy=PSW^7; /*定义cy位为PSW.7*/§8.3AT89S52结构的C51定义

2、关键字sbit(2)sbit

sbit_name=int_constant^int_constant;这种方法是以一个整常数作为基地址,该值必须在0x80~0xFF之间,并能被8整除。前一个int_constant是地址,后一个int_constant是该位在该地址中的位置,数值范围为0~7。例如:

sbitOV=0xD0^2; /*定义OV位地址为OxD2*/

sbitCy=0xD0^7; /*定义cy位地址为0xD7*/§8.3AT89S52结构的C51定义

2、关键字sbit(3)sbit

sbit_name=int_constant;这种方法将位的绝对地址赋给变量,int_constant是位地址,地址必须位于0x80~0xFF之间。例如:

sbitOV=0xD2;/*定义0V位地址为0xD2*/

sbitCy=0xD7;/*定义cy位地址为0xD7*/§8.3AT89S52结构的C51定义

2、关键字sbitC标准规定函数必须“先说明,后调用”,因此,在函数调用之前,要将函数和变量一起说明。C语言程序开始部分通常使用预处理命令,如#include<reg51.h>。该预处理命令通知编译器在对程序进行编译时,将所需要的头文件读入后再一起编译。§8.4KeilC51程序设计1、预处理/*------------------------------------------------------------------------------HeaderfileforAtmelWMt89S51RD2Copyright(c)1998-2002KeilElektronikGmbHandKeilSoftware,Inc.Allrightsreserved----------------------------------------------------------------------------------*/#ifndef__R89S51RD2_H__#ifndef__R89S51RD2_H__sfrP0=0x80; sbitP0_7=P0^7; sbitP0_6=P0^6; …… sbitECI=P1^2; sbitT2EX=P1^1; sbitT2=P1^0; …… …… #endif从这个头文件中可以看出,在REG51RD2.H中定义了特殊寄存器地址以及端口和端口线的地址。把头文件包含进C程序后,在C程序中就可以直接使用这些寄存器并进行位寻址了。一般在“头文件”中包含程序在编译时一些必要的信息。C语言编译软件都会提供一些常用的、不同用途的头文件以供选用。在KeilC51编译器中提供许多库函数,应尽量直接调用,对库函数中没有的功能,特别是一些单片机特定控制功能方面的程序,只能自行编写。为了使用现成的库函数,一般应用在程序的开始处用预处理命令#include<>将有关函数说明的头文件包含进来。§8.4KeilC51程序设计1、预处理C语言是一种表达语言,表达式是由运算符及运算对象所组成的具有特定含义的式子。运算符就是完成某种特定运算的符号。由运算符和表达式可以组成C语言程序的各种语句。运算符按其在表达式中所起的作用,可以分为赋值运算符、算术运算符、增量与减量运算符、关系运算符、逻辑运算符、位运算符等等。§8.4KeilC51程序设计2、运算符与表达式

(1)

赋值运算符

格式:变量=表达式§8.4KeilC51程序设计2、运算符与表达式这里的“=”号就是赋值运算符,它表示将右边表达式的值赋予左边的变量。利用赋值运算符将一个变量与一个表达式连起来的式子就称为赋值表达式。这里的表达式可以是下面介绍的各种运算或者函数,还可以是一个赋值表达式,即允许多重赋值。§8.4KeilC51程序设计x=8;

//将常数8赋予变量xx=y=3;

//将常数3同时赋予变量x和yx=x+5;

//将变量x的值加5后赋予x自己2、运算符与表达式

(1)

赋值运算符

(2)

算数运算符

格式:变量=表达式§8.4KeilC51程序设计2、运算符与表达式这里的“=”号就是赋值运算符,它表示将右边表达式的值赋予左边的变量。利用赋值运算符将一个变量与一个表达式连起来的式子就称为赋值表达式。这里的表达式可以是下面介绍的各种运算或者函数,还可以是一个赋值表达式,即允许多重赋值。汇编语言具有程序结构紧凑、占用存储空间小,实时性强、执行进度快,能直接管理和控制存储器及硬件接口的特点,故此C语言并不能完全替代汇编语言。单独应用汇编语言或C51语言进行编程时,都是应用同一种语言编程,程序应用不同的语言进行编程时,称为混合编程。由于C5l可以缩短程序的开发时

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论