单片机C51程序设计基础.ppt
《单片机C51程序设计基础.ppt》由会员分享,可在线阅读,更多相关《单片机C51程序设计基础.ppt(57页珍藏版)》请在三一办公上搜索。
1、第五章 单片机C51程序设计基础,第五章 单片机C51程序设计基础,0、标准C语言一、C51变量定义格式二、C51 运算符、表达式及其规则三、C51 流程控制语句四、C51构造数据类型五、函数六、C51库函数七、C51模块化程序设计,标准C语言,1、C语言程序的基本结构#include 预处理命令char fun1();函数说明float fun2();int x;全局变量说明Viod main()主函数 声明部分 函数体 执行部分 char fun1()功能函数1 声明部分 函数体 执行部分 float fun2()功能函数2 函数体,特点:C语言是函数式语言,函数是程序基本组成C程序必须,
2、且只有一个main不论位置,程序总从主程序开始所有变量必须先定义(规定数据类型),再使用每个语句必须用分号“;”结束使用库函数,必须使用“文件包含”,、函数定义函数返回值类型 函数名(形式参数)形式参数说明局部变量说明函数体语句,一、标准C语言,1、keil C 和 ANSI C 的异同2、变量定义格式3、单片机特有的数据类型,一、C51变量定义格式,1、keil C 和 ANSI C 的异同 C51主要针对51系列单片机的结构进行程序设计2、变量定义格式C语言:存储属性 数据类型 变量名表(普林斯顿型存储结构)C51:存储属性 数据类型 存储类型 变量名表(哈佛型存储结构)例:static
3、unsigned char data x1)存储属性指定变量存放区域的属性。(确定生命周期)内部变量(auto)堆栈中。仅在函数调用时存在,退出消失(默认值)(static)固定地址。始终存在,函数体内可访问。(register)直接使用硬件寄存器,效率高 外部变量(global)固定地址,始终存在,并可访问(默认值)(extern)(static)固定地址。始终存在,若为多文件程序,仅在 所定义的模块文件可访问,一、C51变量定义格式,C51:存储属性 数据类型 存储类型 变量名表2)存储类型确定变量存储区 显式声明 unsigned char data x 默认存储类型,一、C51变量定义
4、格式,C51:存储属性 数据类型 存储类型 变量名表2)存储类型确定变量存储区 显式声明:auto unsigned char data x;unsigned char data x;unsigned char x;默认存储类型:由Cx51编译器存储模式决定 SMALL模式:默认存储类型为 data.快速、高效 COMPACT模式:默认存储类型为 pdata.片外RAM256B,通过R0/R1间接寻址。LARGE模式:默认存储类型为 xdata.空间64KB,通过数据指针DPTR间接寻址。,一、C51变量定义格式,C51:存储属性 数据类型 存储类型 变量名表3)数据类型确定存储单元长度,一、
5、C51变量定义格式,单片机特有的数据类型:bit位变量,值为0或1sbit声明可位寻址空间的一个位sfr特殊功能寄存器,8位sfr16特殊功能寄存器,16位,C语言已有基本数据类型:Char:单字节,可以存放一个字符。Int:整数,对大多数单片机开发软件而言是双字节大小float:单精度浮点数。double:双精度浮点数。Signed、unsigned限定:char、int类型Short、long限定:int类型,C51:存储属性 数据类型 存储类型 变量名表3)数据类型确定存储单元长度,一、C51变量定义格式,3、单片机特殊功能寄存器的C51定义,(1)sfr:声明字节寻址的特殊功能寄存器。
6、例如:sfr P0=0 x80;,(2)sfr16:该关键字对于一些8051派生系列单片机,可以声明其内两个连续地址的特殊功能寄存器(SFR)。例如:sfr16 T2=0 xCC;,(3)sbit:声明可位寻址的特殊功能寄存器标志位。“=”号后将绝对地址赋给变量名,声明形式有以下3种:,用已声明的sfr寄存器名 指定位;例如:sbit KEY_UP=P0 1;/指定P0的第1位连接UP按键。,用寄存器地址 指定位;例如:sbit KEY_UP=0 x801;,直接用寄存器标志位地址。例如:sbit KEY_UP=0 x81;,一、C51变量定义格式,3、单片机特殊功能寄存器的C51定义,(4)
7、8051并行接口及位变量的C51定义,REG51.h和REG52.h这两个头文件,sfr P0=0 x80;sfr P1=0 x90;sfr P2=0 xA0;sfr P3=0 xB0;,AT89X51.H头文件,sbit P0_0=0 x80;sbit P0_1=0 x81;sbit P0_2=0 x82;,sfr SEGDATA=P0;/*数码管数据端口*/sbit SEL0=P1 0;/*数码管0片选端口*/sbit SEL1=P1 1;/*数码管1片选端口*/sbit KEY_SET=P1 7;/*设置按键*/,程序头包含定义SFR的头文件后,可直接使用,为提高程序可读性,可重定义,一
8、、C51变量定义格式,1、算术运算符:*/%2、自增减运算符:+-例:若 int x=3,y;求 y=x+-1,y=+x-1,y=x-+1后的(x,y)结果:(4,2)(4,3)(2,4)3、复合赋值运算符:+=-=*=/=%=4、关系运算=(位右移)例:char c=c|0 x0f;置位 c=c a左移2位并赋值给b,二、C51运算符、表达式及规则,先计算再自+,先自+再计算,7、条件运算符?:if 为真,则返回表达式2的值;为假,则返回表达式3的值 例:a=(b0)?b:-b;if b0,then a=b;if b=0,a=-b8、指针和地址运算符,二、C51运算符、表达式及规则,8、指针
9、和地址运算符,指针数据类型是一种存放指向另一个数据的地址的变量类型。,变量=*指针变量(将指针变量所指向的目标变量的值赋给等号左边的变量)指针变量=&目标变量(将目标变量的地址赋给等号左边的变量),二、C51运算符、表达式及规则,unsigned char data A _at_ 0 x28;/变量A存放在地址0 x28unsigned char data B _at_ 0 x29;/变量B存放在地址0 x29unsigned char data*P _at_ 0 x2A;/指针变量P存放在地址0 x2A;/关键字_at_ 用于指定变量存放的绝对地址A=10;/变量A初值为10B=20;/变量
10、B初值为20P=/变量B的值现在更改为10,二、C51运算符、表达式及规则,8、指针和地址运算符(举例),102029h,ABP,28h29h2ah,100,28 h,10,二、keil-C51语言,9、运算符优先级和结合性,9、运算符优先级和结合性,单目运算符高于双目运算符 算术运算符高于关系运算符 关系运算符高于逻辑运算符*尽可能加括号明确指定操作优先级,二、C51运算符、表达式及规则,三、C51流程控制语句语言,一、C51程序的基本结构及其流程图 三种基本结构:顺序结构、选择结构和循环结构顺序结构选择结构及其流程图(1)串行多分支结构流程图(2)并行多分支结构,三、C51流程控制语句语言
11、,一、C51程序的基本结构及其流程图 三种基本结构:顺序结构、选择结构和循环结构顺序结构选择结构及其流程图循环结构及其流程图,(1)while型循环结构(当量型),(2)do while型循环结构(直到型),二、选择语句 选择语句有三种:if语句、switch/case语句和条件表达式If 语句 三种形式:1、if(表达式)语句1;/if 表达式true,执行语句1 2、if(表达式)语句1;else 语句2;3、if(表达式1)语句1;/级联选择 else if(表达式2)语句2;else if(表达式3)语句3;else 语句 n+1;/所有表达式均不满足时,三、C51流程控制语句语言,三
12、、C51流程控制语句语言,#include/*abs()函数原型包含在该库中*/int y;int ynumber(int x)if(x=0)y=100;else if(x0)y=x+2;else y=abs(x);return(y);,二、选择语句 选择语句有三种:if语句、switch/case语句和条件表达式Switch/case 语句 switch(x)case c1:语句组1;break;/if x=c1,执行语句组1后退出 case c2:语句组2;break;default:语句组 n+1;break;条件表达式?:,三、C51流程控制语句语言,二、循环语句 循环语句有三种:fo
13、r语句、while语句和do-while语句for 语句一般形式:for(初始化;条件表达式;表达式3)循环语句(组);/循环体 用于构成当型循环:先判断后执行,条件为真继续循环,假结束 for()中初始化及表达式可缺省,但两个分号“;”不可缺 例:求i=1+2+3+99+100(i=0100)main()unsignde int data i,sum=0 for(i=1;i=100;i+)sum=sum+i;/循环100次,三、C51流程控制语句语言,二、循环语句 循环语句有三种:for语句、while语句和do-while语句while 循环语句一般形式:while(条件表达式)循环语句(
14、组);/循环体 用于构成当型循环:先判断后执行,条件为真继续循环,假结束do-while 循环语句一般形式:do 循环语句(组);/循环体 while(条件表达式);用于构成直到型循环:先执行循环体,再判断条件为真继续循环,假结束,三、C51流程控制语句语言,main()unsignde int data i,sum;i=sum=0;while(i+100)sum+=i;,main()int a i,sum;i=1;sum=0;do sum+=i;while(i+100);,四、C51构造数据类型,1 数组,2 指针,3 结构体,4 共用体,5 枚举,1、数组一维数组和多维数组 unsignd
15、e char data a5;unsignde char data b23;数组的初始化,例:在LED中循环显示09。#include sfr segcon=P1;sbit bitcon=P20;void main()unsigned char code led10=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90;unsigned int x;/*x=09*/while(1)for(x=0;x=9;x+)segcon=ledx;bitcon=1;/*共阳LED*/delay(2);,四、C51构造数据类型,五、函数,inc
16、lude/预处理命令longfun1();/函数说明floatfun2();int x,y;/全局变量说明,作用域为整个源程序float z;func1()/功能函数1 局部变量说明;/作用域限于函数体内 函数体;Main()/主函数 局部变量说明;/主程序内部定义的变量也为局部变量 主函数体;func2()/功能函数2 局部变量说明;函数体;,一、C语言程序的一般组成结构,五、函数,一、C语言程序的一般组成结构,函数定义函数返回值类型 函数名(形式参数)/形参作用域限于调用期间形式参数说明局部变量说明函数体语句,五、函数,二、C51中断服务程序,1.中断服务函数的定义,返回值类型标识符 函数
17、名()interrupt 中断号 using 寄存器组号 函数体语句;,中断函数不能进行参数传递;中断函数没有返回值;建议定义为void类型 在任何情况下都不能直接调用中断函数,否则会产生编译错误。C51编译器对中断函数自动的现场保护和恢复。(ACC、B、DPH/L、PSW)using 修饰符,用于指定中断函数内部使用的工作寄存器组取值为03 interrupt修饰符,指明函数为中断函数。MCS51对应的中断号为05。该向量包含一个到中断函数入口地址的绝对跳转。,void int1()interrupt 2 using 1 count+;/count为全局变量,例:统计外中断1的中断次数的中断
18、服务程序,五、函数,三、局部变量和全局变量,按作用域范围可分为两种:即局部变量和全局变量。,1.局部变量,局部变量也称为内部变量。作用域仅限与函数内。,局部变量是在函数内作定义说明的。,int f1(int a)/a为形参,函数调用期间有效 int b,c;/b,c局部变量,main()int m,n;/m,n局部变量,作用域限于main函数内,五、函数,三、局部变量和全局变量,按作用域范围可分为两种:即局部变量和全局变量。,2.全局变量,全局变量也称为外部变量,函数外部定义的变量。其作用域是整个源程序。并遵循先定义后使用的原则,int a,b;/外部变量,作用域整个程序void f1()/函
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 C51 程序设计 基础

链接地址:https://www.31ppt.com/p-6449630.html