讲稿《嵌入式系统应用技术》“二”.ppt
《讲稿《嵌入式系统应用技术》“二”.ppt》由会员分享,可在线阅读,更多相关《讲稿《嵌入式系统应用技术》“二”.ppt(98页珍藏版)》请在三一办公上搜索。
1、嵌入式系统应用技术,二、51单片机编程语言(C51)赵玉昆,3.3 C51语言,3.3.1 标识符、关键字和运算符3.3.2 数据类型3.3.3 常量及变量3.3.4 C51语言中的特殊数据类型3.3.5 数组和指针3.3.6 程序设计的3种基本结构3.3.7 函数3.3.8 预处理功能3.3.9 C与汇编的混合编程(略)3.3.10 使用C51编译器时的注意事项习题、补充习题,3.3.1 标识符、关键字和运算符,1。标识符2。关键字3。运算符,1。标识符,用于变量名、函数名、数组名、类型名字母、下划线开头,后跟字母、下划线、数字大小写敏感例如:var、VAR,2。关键字,又叫保留字,已由系统
2、占用例如:char、for、if等注释:在C51中,使用“/*/”和“/”进行注释“/*/”中所有字符均为注释,包括回车换行“/*/”不能嵌套“/”到本行结束均为注释例如:var1=a+b;/*这里是注释*/var2=a*b;/这里是注释,3。运算符,(1)算术运算符(2)关系运算符和逻辑运算符(3)操作运算符,(1)算术运算符,+加-减*乘/除%取模(求余)+自加1-自减1,自加(+)、自减(-),先取值,再自加(自减):例如:设x的初值为4y=x+;结果:y=4,x=5y=x-;结果:y=4,x=3先自加(自减),再取值:例如:设x的初值为4y=+x;结果:y=5,x=5y=-x;结果:y
3、=3,x=3注意:+、-只能用于变量,不能用于常量和表达式,(2)关系运算符和逻辑运算符,运算结果是逻辑量(真=非0、假=0)大于=大于等于小于=小于等于=等于!=不等于&与|或!非注意:=是等于运算符,=是赋值操作,(3)操作运算符,位运算符:举例(设x=0 x55,y=0 x37)z=0 x2a,赋值运算符=,是二元运算符,左边是变量(左值),右边是表达式例如:x=y+3;复合赋值运算符:+=、-=、*=、/=、%=、=、,逗号运算符,,作用是将几个表达式串在一起,成为逗号表达式运算顺序是从左到右,最右边表达式的值是逗号表达式的值例如:x=(y=5,z=y+3);结果为y=5,z=8,x=
4、8,条件运算符(?:),代替简单的if-else语句是三元运算符,格式为:表达式1?表达式2:表达式3当表达式1为真,则采用表达式2,否则采用表达式3例如:z=(ab?3:5);/由于ab为假,所以z=5if(ab)z=3;/简单的if语句elsez=5;,强制类型转换符(),格式为:(类型名)(表达式)例如char x;x=7.2/2;/警告,类型不匹配x=(int)(7.2/2);/结果x=3例如(C51中,整型的低地址存放高字节)int x=0 x1234,*p2;char y1,y2,*p1;p1=(char*),Sizeof运算符,计算某数据类型、变量、表达式的字节数例如:int x
5、;y=sizeof(x);/相当于 y=2注意:sizeof不是函数,字节数的计算是在编译时完成。,其他几种运算符,“/p是指针,*p是p指向单元的值。y=10,其他几种运算符,“*”指针运算符。取指针指向单元的值“/a3是数组中第3个单元的值,3.3.2 数据类型,1。基本数据类型2。指针3。特殊数据类型4。结构、联合、枚举和位域5。用typedef定义数据类型,1。基本数据类型,整型有符号char字符型1字节-128+127int整型2字节-32768+32767long长整型4字节-231+231-1无符号unsigned char字符型1字节0255unsigned int整型2字节0
6、65535unsigned long长整型4字节0-232-1浮点型float浮点型4字节注意:C51中,整型的低地址存放高字节。(大端模式),2。指针,*指针型13字节指针本身是个变量,存放指向另一个数据的地址。在3.3.5中详细介绍,3。特殊数据类型,8051相关数据类型,在3.3.4中详细介绍bit1位sbit1位sfr1字节sfr162字节,4。结构、联合、枚举和位域,构造类数据类型略。,5。用typedef定义数据类型,给已有数据类型起个新名字格式为:typedef原类型名新类型名例如:typedef unsigned char uchar;/定义uchar为无符号字符型uchar
7、i;/等价于unsigned char i;通常使用以下预定义,使其简洁:typedef unsigned charuchar;typedef unsigned intuint;typedef unsigned longulong;,3.3.3 常量及变量,1。常量2。变量及变量的属性,1。常量,又称标量,其值在运行时不能改变(1)整型常量10,-20,0 x10(2)浮点型常量1.2,2e3(3)字符型常量A,%(4)字符串型常量“Hello”,(1)整型常量,十进制,如345,-23等八进制,以0开头,如034表示十进制的28十六进制,以0 x开头,如0 x12表示十进制的18在数字后面加
8、“L”,构成长整型常量,如2048L等,(2)浮点型常量,小数形式如:0.12、-.3、0.指数形式如:12.3e8、-1.9E-2等,(3)字符型常量,用单引号括起一个字符表示,如:A、$等其值等于该字符的ASCII码不可显示的控制字符,用“”加字符组成转义符表示常用转义符:0空字符(NULL)0 x00r回车0 x0dn换行0 x0a单引号0 x27”双引号0 x22反斜杠0 x5c,(4)字符串型常量,用双号括起一个字符串表示,如:“Hello”,“I am”等字符串中的双引号要用转义符“表示字符串以0结尾字符串保存在字符型数组中例如:char arr4=“ABC”;等价于 char a
9、rr4=A,B,C,0;等价于 char arr4=0 x41,0 x42,0 x43,0;,注意:字符常量与字符串常量是不同的。字符常量A,是字符类型,占1字节字符串常量“A”,是字符型数组,占2字节,(4)字符串型常量,辨析:char x,arr=“ABC”;x=A;x=“A”;arr1=x;arr=x;arr=A;arr1=A;arr=ABC;arr=ABC;arr1=ABC;,数组名是指针类型的常量arr,字符串常量是指针类型的常量abc,数组单元是普通变量arr1,没有字符串变量,可保存在字符数组,2。变量及变量的属性,其值在运行时可以改变。必须先定义后使用。变量定义的格式:存储种类
10、 存储器类型 数据类型 变量名例如:static data char x1(1)局部变量和全局变量(2)存储种类(3)存储区域(4)存储器类型(5)存储模式,(1)局部变量和全局变量,局部变量在函数内部定义、只有本函数可以使用。退出函数时释放。全局变量在函数外部定义、各函数都可使用。始终不释放。例如:char quanju;/定义全局变量void func1(void)char jubu;/定义局部变量quanju=34;/使用全局变量jubu=12;/使用局部变量,(1)局部变量和全局变量,局部变量在函数内部定义、只有本函数可以使用。退出函数时释放。例如:void func1(void)ch
11、ar x1=12;/定义局部变量,在进入函数时赋初值x1+;/使用局部变量void func2(void)char x2;/定义局部变量,初值未知x2=x1;/x1不可见,(1)局部变量和全局变量,局部变量在函数内部定义、只有本函数可以使用。退出函数时释放。例如:void main(void)func1();func1();/再次调用,局部变量的初值仍旧未知void func1(void)char x1;/定义局部变量,初值未知x1+;/退出时x1释放,(1)局部变量和全局变量,全局变量在函数外部定义、各函数都可使用。始终不释放。例如:char y1=0 x22;/定义全局变量void mai
12、n(void)func1();func2();void func1(void)char x1=0 x11;/定义局部变量y1+=x1;/y1可见/退出时y1不释放,(2)存储种类,有4种:auto自动默认(可省略)extern外部在多个源程序时使用static静态退出函数时不释放register寄存器建议编译器使用CPU寄存器,(1)局部变量和全局变量,static修饰局部变量,退出函数时不释放例如:void main(void)func1();func1();/再次调用,局部变量的初值仍旧未知void func1(void)static char x1=3;/定义静态局部变量,在main前时
13、赋初值=3x1+;/退出时x1不释放,(3)存储区域,程序区,内部RAM区,外部RAM区,code程序区,存放代码、常数、表格等,data内部RAM区bdata位寻址区,存放位变量idata内部RAM区,用R0寻址,xdata外部RAM区,用DPTR寻址pdata外部RAM区,用R0寻址,(4)存储器类型,code、data、bdata、idata、xdata、pdata例如:data char var1;/内部RAM区的字符型变量code char text=“ENTER”/程序区的字符型数组xdata unsigned long array100;/外部RAM区的长整型数组idata fl
14、oat x,y,z;/内部RAM区间址访问的浮点变量 pdata int dim;/外部RAM区分页访问的整型变量xdata unsgned char v843;/外部RAM区无符号字符三维数组bdata char flags;/位寻址区的字符变量,可位操作说明:数据类型与存储区修饰符的位置可互换。data char var1;等效与char data var1;,(5)存储模式,用于指定默认的存储器类型存储模式所有变量默认为small小模式datacompact紧凑模式pdatalager大模式xdata注意:通常,small存储模式可以生成最快及最有效的代码。,3.3.4 C51语言中的特
15、殊数据类型,1。位变量2。可位寻址的对象3。特殊功能寄存器4。绝对变量地址,1。位变量,位变量类型可用于声明变量、函数参数、函数返回值。例3.15 位变量使用bit done_flag=0;/位变量bit testfunc(bit flag1,bit flag2)/函数返回为位类型./函数参数为位类型return(0);/返回位类型值位变量存储在内部RAM位寻址区,最多128个。不能将指针指向位变量(位变量不能间接寻址)没有位变量数组,2。可位寻址的对象,是指既可以同时用字节寻址和位寻址访问的对象。存放在内部RAM位寻址区,最多16字节用bdata存储器类型声明bdata char ibase
16、;/可位寻址的字符型变量sbit mb0=ibase0;/ibase的第0位sbit mb7=ibase7;/ibase的第7位ibase=0 x55;/字节操作,mb0=1,mb7=0mb0=0;/位操作,ibase=0 x54注意:bdata只能修饰全局变量,不能用于局部变量。,3。特殊功能寄存器,(1)sfr定义8位SFR例如:sfr P1=0 x90;/P1端口,地址为0 x90(2)sfr16定义16位SFR例如:sfr16 T2=0 xCC;/定时器2,T2L 0 xCC,T2H 0 xCD(3)sbit定义可位寻址单元(包含SFR)的位例如:定义P1.7(位地址为0 x97),可
17、用3种方式sbit P17=P17;/用已定义SFR名第几位sbit P17=0 x907;/用SFR地址第几位sbit P17=0 x97;/用位地址SFR通常在包含文件中预定义,3.3.5 数组和指针,1。数组2。指针,1。数组,数组定义:数据类型 数组名常量1 常量2.常量n数组定义例子char a2;/定义一维字符数组,有2个元素char b4=1,2,3;/定义数组,并赋初值char c=1,2,3;/定义数组,并赋初值,用初值决定尺寸3char d5=“ABC”;/定义数组,指定尺寸,并赋初值char e=“ABC”;/定义数组,并赋初值,用初值决定尺寸4注意:C语言数组下标总是从
18、0开始数组只能在定义时初始化多维数组的第n维变化最快,第1维变化最慢char f23=1,2,3,4,5,6;,2。指针,(1)指针与地址的概念(2)指针变量的引用(3)数组的指针(4)函数的指针,(1)指针与地址的概念,变量经过编译连接后,确定在存储器中的地址。指向某个变量首地址的量称作“指针”。存放指针的变量称为指针变量。指针变量的定义:数据类型*指针变量名data int a,b;/整型变量data char c,d;/字符型变量data int data*e;/指向整型变量的指针data char data*f;/指向字符型变量的指针e=/e指向的单元赋值,e=,*e=0 x1234;
19、,(1)指针与地址的概念,C51有2种类型指针:通用指针,(灵活,效率低,尽量不用)具体指针,(严格,效率高,尽量使用),通用指针,声明时不指定指向的存储器类型。数据类型*变量名占3字节使用时可以指向任何存储区域内的变量。char*s;/指向字符类型的通用指针data char dx;/data区的变量xdata char xx;/xdata区的变量code char cx=9;/code区的常量s=/指针s指向code区,可以,具体指针,声明时指定指向的存储器类型。数据类型 存储器类型*变量名例如:char xdata*b;占1字节(指向idata、data、bdata、pdata),或占2
20、字节(指向xdata、code)。使用时只能指向指定存储区域内的变量。char data*a;/指向data区字符的具体指针char xdata*b;/指向xdata区字符的具体指针data char dx;/data区的变量xdata char xx;/xdata区的变量a=/指向xdata区字符的指针,存放在data中,也可以:char xdata*data b;,(2)指针变量的引用,指针使用时,必须先赋值,再引用。char data*a;/指向data区字符的指针data char b;/data区字符a=/向a赋值非地址量,错误2个与指针相关的运算符“*”:指针运算符,作用是通过指针
21、变量间接访问它所指向的变量。“&”:取地址运算符,作用是取得变量的首地址,即指针。,(3)数组的指针,一个数组包含多个元素。数组元素的地址是连续的。C语言规定,数组名是个指针常量,等于数组首地址数组首地址=数组 0的地址int data*a;/指向data区整型的指针data int b2;/data区整型数组a=b;/指向数组a=/指向b1/由于整型占2字节,实际上指针的值+2,效果一样,a的值=0 x50,a的值=0 x52,(3)数组的指针,辨析:(指针+1)int x2=0 x1234,0 x5678,x1,x2,*px;char y3=0 x23,0 x45,0 x67,0 x89,
22、y1,y2,*py;px=x;py=(char*)x;x1=*(px+1);x2=*(py+1);y1=*(px+1);y2=*(py+1);px=(int*)y;py=y;x1=*(px+1);x2=*(py+1);y1=*(px+1);y2=*(py+1);,/px指向x0/py指向x0的高位/x1=0 x5678:x1/x2=0 x0034:x0的低位,自动转换/y1=0 x78:x1的低位,自动转换/y2=0 x34:x0的低位/px指向y0,包含y1/py指向y0/x1=0 x6789:y2、y3/x2=0 x0045:y1,自动转换/y1=0 x89:y2、y3,自动转换去低位/y
23、2=0 x45:y1,(4)函数的指针,C语言规定,函数名是个指针,等于函数的入口地址指向函数指针变量的定义函数返回类型(*指针变量名)(函数参数列表)例如:int add(int a,int b);/声明函数addint x;int(*pfun)(int a,int b);/定义函数指针pfun=add;/pfun指向add函数x=(*pfun)(3,4);/即x=add(3,4);,此括号表示是指针变量,必须,此括号表示指向函数,必须,3.3.6 程序设计的3种基本结构,1。语句2。顺序结构3。选择结构4。循环结构,1。语句,以分号为结束标志(1)常用控制语句:if.else.、for()
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式系统应用技术 讲稿 嵌入式 系统 应用技术
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-6343616.html