第3章单片机C语言程序设计2_第1页
第3章单片机C语言程序设计2_第2页
第3章单片机C语言程序设计2_第3页
第3章单片机C语言程序设计2_第4页
第3章单片机C语言程序设计2_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

一.指针变量的定义数据类型说明符[存储器类型]*指针变量名;例:int*p1;/*定义一个指向整型变量的指针变量p1*/char*p2;/*定义一个指向字符变量的指针变量p2*/chardata*p3;/*定义一个指向字符变量的指针变量p3,该指针访问的数据在片内数据存储器中,该指针在内存中占一个字节*/charxdata*p4;/*定义一个指向字符变量的指针变量p4,该指针访问的数据在片外数据存储器中,该指针在内存中占两个字节*/二.指针变量的引用

指针变量是存放另一变量地址的特殊变量,指针变量只能存放地址。指针变量使用时注意两个运算符:&和*。

“&”是取变量的地址,“*”是取变量的内容指针变量经过定义之后可以象其他基本类型变量一样引用。例如:intx,*px,*py;/*变量及指针变量定义*/px=&x;

/*x的地址赋给指针变量px,使px指向变量x*/*px=5;/*等价于x=5*/py=px;

/*指针变量py也指向x*/例:定义一个指向外部RAM(2000H)的指针变量a,一个指向内部RAM(40H)的指针变量b,并把2000H单元的内容存放到40H单元。ucharxdata*a;uchardata*b;a=0X2000;b=0X40;*b=*a;例:将地址为2010H的1字节二进制数(<256),转换成BCD码,保存在地址为2000H开始的存储单元中(高位在低地址)。【例】通过指针实现绝对地址的访问。#defineucharunsignedchar/*定义符号uchar为数据类型符unsignedchar*/#defineuintunsignedint/*定义符号uint为数据类型符unsignedint*/voidmain(void){uchardatavar1;ucharpdata*dp1;/*定义一个指向pdata区的指针dp1*/uintxdata*dp2;/*定义一个指向xdata区的指针dp2*/uchardata*dp3;/*定义一个指向data区的指针dp3*/dp1=0x30;/*dp1指针赋值,指向pdata区的30H单元*/dp2=0x1000;/*dp2指针赋值,指向xdata区的1000H单元*/*dp1=0xff;*dp2=0x1234;dp3=&var1;*dp3=0x20;}三.通过指针访问采用指针的方法,可以实现在C51程序中对任意指定的存储器单元进行访问。【例】通过_at_实现绝对地址的访问。#defineucharunsignedchar/*定义符号uchar为数据类型符unsignedchar*/#defineuintunsignedint/*定义符号uint为数据类型符unsignedint*/voidmain(void){dataucharx1_at_0x40;/*在data区中定义字节变量

x1,它的地址为40H*/xdatauintx2_at_0x2000;/*在xdata区中定义字变量

x2,它的地址为2000H*/x1=0xff;x2=0x1234;......while(1);}1、简单C语言举例main的函数体:main函数中的所有操作(或:语句)都在这一对{}之间。也就是说main函数的所有操作都在main函数体中。语句:执行某种功能的指令。C语言的每条语句都用“;”作为结束标志。一个函数中可以有多条语句。例1.1voidmain(){ printf(“ThisisaCprogram.\n”);}主函数:每个C语言程序都必须有一个main函数,它是每一个C语言程序的执行起始点(入口点)。C语言的程序结构赋值语句:将整数123赋给整型变量a,将整数456赋给整型变量b。a,b两个变量分别为123,456。每条语句均用“;”结束。例1.2:voidmain(){ inta,b,sum; a=123; b=456; sum=a+b; printf(“sum=%d\n”,sum);}变量声明:声明了三个具有整数类型的变量a,b,sum。C语言的变量必须先声明再使用。将a,b两变量内容相加,然后将结果赋值给整型变量sum。此时sum的内容为579。调用库函数输出sum的结果。%d为格式控制表示sum的值以十进制整数形式输出。D.5C51函数

1.函数:是一段可以重复调用,功能相对独立完整的程序段。2.C语言是函数型语言,函数是程序的基本组成单位,其中包括1个主函数和多个子函数。3.C语言函数从定义角度看,可以分为标准库函数和用户函数两类。(1)标准库函数是C语言系统提供的,用户无需定义,只需在程序前包含该函数原型的头文件,在程序中便可直接调用,如:printf、gets等。(2)用户自定义函数是用户按需要编写的函数,一般情况下标准函数库不可能包含用户所需的所有功能,用户需要编写自定义函数实现部分特殊功能。

D.5.1函数概述

D.5.2函数的定义和调用一、函数定义指编写函数功能的程序块。由函数头和函数体组成。

1.函数头是函数定义的第一行,它指定函数名、函数的返回值数据类型和形式参数表。

2.函数体用花括号括起来,类似于复合语句。

函数定义的格式如下:

[返回值类型]函数名(类型符1形参1,……,类型符n形参n)

{

说明语句;执行语句;

}

⑴函数的返回值类型:可以是各种基本数据类型和复杂数据类型,返回值类型缺省时,编译系统默认为int,对于无返回值函数,其返回类型用void说明。⑵函数名:与变量名一样是一种标识符,定义规则也与变量名一样,一般情况下通过函数名能理解函数的功能。⑶形式参数表:是指函数定义时在圆括号中列出的各个形式参数名及其数据类型,形参用于函数被调用时接收主调函数实参输入的数据。可以0个、1个或者多个。若函数是无参数函数,没有形参,但圆括号不能省略,并且可用void说明。(4)函数体:由说明语句和执行语句组成,说明语句可定义函数所使用的变量;执行语句描述函数的具体操作,也可以调用函数实现函数嵌套。

(5)若函数体内没有语句,则该函数是空函数,不执行任何操作,但是花括号不能省略。(6)对于有返回值函数,在函数体的执行语句中应用return语句返回函数执行结果,且保证返回结果的数据类型与函数头定义的返回值数据类型一致。二、函数的调用

函数调用:主调函数使用被调函数的过程。有三种形式

1.函数调用语句:函数名(实参表);主要用于无返回值函数。

2.函数表达式:y=3+sum(x1,x2);

主要用于有返回值函数。

3.函数参数:printf(“%d”,sum(x1,x2));

注意:主调函数只能调用已存在的被调函数。(1)若被调函数为库函数,则在源程序的开始处应用#include命令包含含有被调函数原型的头文件;(2)若被调函数为自定义函数,则被调函数应在主调函数前定义,或在调用被调函数前先声明被调函数。三、函数的声明1.声明被调函数的原型,包括被调函数名、返回值类型、形参表。2.声明函数原型可以照写函数定义时的函数头,再加分号即可,

如:intsum(intx1,intx2);3.若被调函数声明在源程序的所有函数定义之前,该被调函数可以被任何函数调用;若被调函数声明在某个函数中,则该被调函数只能被这个函数调用。例输入两个整数,输出其中较大的值。#include<stdio.h>intmax(inta,intb){if(a>b)returna;elsereturnb;}voidmain(){

intx,y,z;printf("inputtwonumbers:\n");scanf("%d%d",&x,&y);z=max(x,y);printf("maxmum=%d",z);}#include<stdio.h>//包含I/O函数库intmax(inta,intb);//对max函数进行声明voidmain()//主函数{ intx,y,z; printf("inputtwonumbers:\n"); scanf("%d%d",&x,&y); z=max(x,y); printf("maxmum=%d",z);}intmax(inta,intb){ if(a>b) returna; else returnb;}D.5.3全局变量和局部变量一、不同1.定义位置不同(1)全局:定义在源程序定义部分的变量称全局变量;(2)局部:定义在函数说明部分的变量称局部变量,函数形参属于局部变量。2.作用域不同(1)全局变量对所有的函数是可见的,所有函数可以使用它;(2)局部变量只对定义它的函数可见,只能在定义它的函数中使用,其它函数不能使用它。二、注意1.一个源程序中的各个全局变量不能同名,各个函数中的局部变量可以同名。2.在一个函数中,当全局变量与局部变量同名时,全局变量不起作用,局部变量起作用。3.全局变量定义时未初始化,系统自动默认初值为0;局部变量定义时未初始化,其初值不确定。D.5.4中断服务程序中断服务程序类似于子函数,子函数由主调函数调用触发执行;中断服务程序由外设向CPU申请中断触发执行。中断服务程序的定义也类似于函数定义,如下所示:

[返回值类型]函数名()interruptn[usingm]{

说明语句; 执行语句;

}关键字interrupt后面的n是中断类型号,取值范围0~31,根据中断服务程序对应的中断源填写。3.5.4中断服务程序MCS-51单片机主要中断源的中断类型号和中断向量如表3-9所示。n中断源中断向量0外中断00003H1定时计数器0000BH2外中断10013H3定时计数器1001BH4串行口0023H保留保留8*n+33.5.4中断服务程序关键字using后面的m是中断服务程序使用的工作寄存器组别,取值0~3。该项可以缺省,由编译器选择一个工作寄存器组

温馨提示

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

评论

0/150

提交评论