《片机C语言》PPT课件.ppt

上传人:za****8 文档编号:16146362 上传时间:2020-09-20 格式:PPT 页数:62 大小:347.02KB
返回 下载 相关 举报
《片机C语言》PPT课件.ppt_第1页
第1页 / 共62页
《片机C语言》PPT课件.ppt_第2页
第2页 / 共62页
《片机C语言》PPT课件.ppt_第3页
第3页 / 共62页
点击查看更多>>
资源描述
单片机C语言,C51特点,结构化语言 丰富的数据类型 便于维护管理 与汇编语言相比,C语言的优点如下: 不要求编程者详细了解单片机的指令系统,但需了解单片机的存储器结构; 寄存器分配、不同存储器的寻址及数据类型等细节可由编译器管理; 结构清晰,程序可读性强; 编译器提供了很多标准库函数,具有较强的数据处理能力。,C51-1:C51基本结构,/功能:控制八个信号灯闪烁程序 #include /定义了MCS-52单片机的特殊功能寄存器 void delay(unsigned char i);/延时函数声明 void main()/主函数 while(1) P1=0 x00;/点亮八个LED delay(200);/延时 P1=0 xff;/熄灭八个LED delay(200);/延时 ,/函数名:delay /函数功能:实现软件延时 /形式参数:unsigned char i; void delay(unsigned char i)/延时函数,无符号字符型变量i为形式参数 unsigned char j,k;/定义无符号字符型变量j和k for(k=0;ki;k+)/双重for循环语句实现软件延时 for(j=0;j255;j+); ,C51的程序结构,#include void delay() ; void main() delay(); P0 = 0 x33; ,程序的入口 函数名固定,且与书写的位置无关 有且仅有一个,库函数或用户自定义的函数 可以有若干个,C51程序大体上是若干函数的集合,C程序基本结构,一个或若干个函数 有(且仅有)一个主函数main 预处理命令 “;”作为语句的结束符 区分大小写。 用/* */或/注释。 Main主函数名;void函数类型,空类型无返回值;()内为形参, 内为函数体,C51编程要点,C语言编程的三大要素,数据 数据类型、数据结构、存储类型 运算 算术运算、关系运算、逻辑运算、位操作 控制 顺序结构、选择结构、循环结构、函数,C语言标识符,C语言中由字母、数字和下划线组成的字符序列称为-标识符。 用于在程序中给变量、符号常量、数组、函数、数据类型等操作对象“起名”。,1编译系统定义标识符 由编译系统定义,具有固定名字和特定含义 分为关键字和预定义标识符 2用户自定义标识符 用于对用户使用的变量、数组、函数等操作对象进行命名。,C语言对标识符的规定,用户自定义标识符: 由字母、数字和下划线构成,但必须以字母或下划线“_”开头,不能以数字开头 不能含有除字母、数字和下划线“_”外的其他字符如:!、 例如:char ch1,c1; unsigned char c2= a ,c3= A;,例如: int a,b;(指定变量、为整型) char x,y; (指定变量x、y为字符型) unsigned int w,u; (指定变量w、u为无符号整型) unsigned char c,d; (指定变量、为无符号字符型),2int 整型 int整型长度为两个字节,用于存放一个双字节数据。 分有符号int整型数signed int和无符号整型数unsigned int,默认值为signed int类型,3long 长整型 long长整型长度为四个字节,用于存放一个四字节数据。分有符号long长整型signed long和无符号长整型unsigned long,默认值为signed long类型。 4float 浮点型 float浮点型在十进制中具有7位有效数字,是符合IEEE754标准的单精度浮点型数据,占用四个字节。 5指针型 指针型本身就是一个变量,在这个变量中存放的是另一个数据的地址。这个指针变量要占据一定的内存单元,对不同的处理器长度也不尽相同。,6bit 位变量 bit类型-定义1个位变量,值为0或1.其存储器类型只能是bdata、data、idata,严格讲只能是:bdata 所有的bit变量都放在80C51内部存储区的可位寻址区,而该区域只有16字节长,所以在某个范围内只能声明最多128个位变量。 bit flag ;/ 定义一个位变量flag bit flag=1 ; / 定义一个位变量flag并赋初值1,对位变量定义的限制 不能定义成一个指针,如不能定义:bit *pointer; 不存在位数组如不能定义:bit b_array 位变量定义时,存储类型只允许为data、bdata或者idata,如果将位变量的存贮类型定义成其它类型都将导致编译出错。,7 sfr类型-用于定义1个8位的特殊功能寄存器 定义形式: sfr 标识符=8位特殊功能寄存器在内部RAM中的实际地址; 标识符可为特殊功能寄存器名或自己任意命名 如:sfr P0=0 x80; sfr PSW=0 xd0; sfr TMOD=0X89;,8 sfr16类型-用于定义1个16位的特殊功能寄存器 定义形式: sfr16 标识符=16位特殊功能寄存器的低字节地址; 51子系列中只有DPTR为16位的特殊功能寄存器: 由DPH和DPL组成,其地址分别为0 x82和0 x83,地址连续。 sfr16 DPTR=0 x82; /*地址为低字节单元的地址*/ 52子系列中T2可定义如下:sfr16 T2=0 xCC; T0和T1不能用sfr16进行定义: sfr16 T0=0 x8A; /*错误,TL0和TH0地址不连续*/ sfr16 T1=0 x8B; /*错误,TL1和TH1地址不连续*/,9sbit 可寻址位 sbit是C51中的一种扩充数据类型,利用它可以访问芯片内部的RAM中的可寻址位或特殊功能寄存器中的可寻址位。 sbit类型-定义bdata区或可位寻址特殊功能寄存器(字节地址的末位为0或8)中的位,值也为0或1. 如:sfr P1=0 x90; sbit P1_0=P10; 或sbit P1_0=0 x900; 或sbit P1_0=0 x90; sbit EA=0 xAF; sbit IT0=0 x88; sbit P=0 xD0; 注:安装Keil软件后,在文件夹“C:keilc51inc”中有一些头文件包含了有关特殊功能寄存器和相应位的定义。,reg51.h头文件内容:,/* BYTE Register */ sfr P0 = 0 x80; sfr P1 = 0 x90; sfr P2 = 0 xA0; sfr P3 = 0 xB0; sfr PSW = 0 xD0; sfr ACC = 0 xE0; sfr B = 0 xF0; sfr SP = 0 x81; sfr DPL = 0 x82; sfr DPH = 0 x83; sfr PCON = 0 x87; sfr TCON = 0 x88; sfr TMOD = 0 x89; sfr TL0 = 0 x8A; sfr TL1 = 0 x8B; sfr TH0 = 0 x8C; sfr TH1 = 0 x8D;,sfr IE = 0 xA8; sfr IP = 0 xB8; sfr SCON = 0 x98; sfr SBUF = 0 x99; /* BIT Register */ /* PSW */ sbit CY = 0 xD7; sbit AC = 0 xD6; sbit F0 = 0 xD5; sbit RS1 = 0 xD4; sbit RS0 = 0 xD3; sbit OV = 0 xD2; sbit P = 0 xD0;,/* TCON */ sbit TF1 = 0 x8F; sbit TR1 = 0 x8E; sbit TF0 = 0 x8D; sbit TR0 = 0 x8C; sbit IE1 = 0 x8B; sbit IT1 = 0 x8A; sbit IE0 = 0 x89; sbit IT0 = 0 x88; /* IE */ sbit EA = 0 xAF; sbit ES = 0 xAC; sbit ET1 = 0 xAB; sbit EX1 = 0 xAA; sbit ET0 = 0 xA9; sbit EX0 = 0 xA8;,Reg51.h头文件内容(续),/* IP */ sbit PS = 0 xBC; sbit PT1 = 0 xBB; sbit PX1 = 0 xBA; sbit PT0 = 0 xB9; sbit PX0 = 0 xB8; /* P3 */ sbit RD = 0 xB7; sbit WR = 0 xB6; sbit T1 = 0 xB5; sbit T0 = 0 xB4; sbit INT1 = 0 xB3; sbit INT0 = 0 xB2; sbit TXD = 0 xB1; sbit RXD = 0 xB0;,/* SCON */ sbit SM0 = 0 x9F; sbit SM1 = 0 x9E; sbit SM2 = 0 x9D; sbit REN = 0 x9C; sbit TB8 = 0 x9B; sbit RB8 = 0 x9A; sbit TI = 0 x99; sbit RI = 0 x98;,总结:,在编程时,如果只强调程序的运算速度而又不进行负数运算,最好采用无符号格式。 无论何时,应尽可能地使用unsgned char、 Bit类型。,C51-3 常量和变量符号常量用大写,变量用小写,1、常量 又称为标量,常量的值在程序执行过程中不能改变,一般用一个标识符号代表一个常量,称为符号常量。,1、使用#define语句定义符号常量 例: #define CONST 60 #define PI 3.1415 2、使用”code”关键字 指定数据的存储位置为程序存储器,C51中常量的定义:,2、变量 有关概念 在程序运行过程中,其值可以改变的量,称为变量,变量名用标识符表示。 变量一般有变量名和变量值组成。变量名为RAM单元地址号,变量值为该单元中存放的内容。 C规定程序中用到的变量必须“先定义后使用” 系统为变量在内存(内部RAM和外部RAM)中分配存储单元,存储变量的值。 编写程序时可以通过变量名来存、取变量值。,例如:unsigned int xdata i, j; unsigned char data ch1,ch2= A;,必须使用合法的标识符作变量名 不能使用关键字为变量命名 变量名一般用小写,长度一般不超过个字符,最长不得大于个字符。 变量名最好也能做到“顾名知意”,变量定义的一般格式:,数据类型 存储器类型 变量名表=初值;,存储器类型-指明变量所在存储器的区域情况,C51根据单片机存储器的结构特点分为以下六种存储类型: 1、data-变量定义在片内RAM可直接寻址的低128B空间中。 如:unsigned char data ch5; 2、idata-变量定义在片内RAM可间接寻址的256B空间中。 如:int idata x=10; 3、bdata-变量定义在片内RAM可位寻址的16B空间中(地址范围:0 x20-0 x2F)。 如:int bdata flag; sbit flag0=flag0; 4、 xdata-变量定义在片外RAM64KB空间中。 如:float xdata f100; 5、 pdata-变量定义在片外RAM低256B空间中。 如:float pdata y; 6、code-变量定义在程序存储器64KB的空间中。 如:#define uchar unsigned char uchar code display =0 x7F,0 xBF,0 xDF,0 xFE,0 xF7;,数据类型说明符 存储器类型 变量名列表=初值;,变量的默认存储类型,如果变量定义时没有明确指明其存储类型(data、idata、bdata、xdata、pdata、code),则编译器编译时根据工程项目的存储模式自动选择存储类型。 三种存储模式: 1、small-小存储模式:变量默认分配在data区。 2、compact-紧凑存储模式:变量默认分配在 pdata区。 3、large-大存储模式:变量默认分配在xdata区。 如:unsigned int i, j=1000; unsigned char ch1,ch2= A;,程序中可以通过预处理命令#pragma声明存储模式,没有明确声明时,系统隐含为small模式。,变量的初始化,变量的初始化指在声明变量的同时对变量赋初值。 例如:int a=5,b=10+2; float x=23.568,y ; char ch1=a; 表示声明变量并对变量存储单元赋值。 第一条语句相当于:int a,b; a=5;b=12; 错误的初始化: int a=3+b,b=5; 改为: int b=5,a=3+b; float m=n=23.16; 改为: float m=23.16, n=23.16;,C51 运算符,1 C语言运算符和表达式简介 算术运算符和算术表达式 赋值运算符和赋值表达式 逗号运算符和逗号表达式 逻辑运算符和逻辑表达式 位运算符和位运算表达式 条件运算符和条件表达式 关系运算符和关系表达式 其他运算符及其运算(指针、下标等),2 运算符的有关概念,作用: 对运算对象完成规定的操作运算 类型: 按运算对象分: 单目:只有一个操作对象,如 :自增运算符( +) 双目:有两个操作对象,如:乘( *),除( /) 三目:有三个操作对象 只有一个:条件运算符(?:) 按功能分: 算术、赋值、关系、逻辑 条件、逗号、位、其他,3 运算符的优先级和结合性,优先级 指各种运算符号的运算优先顺序 例如: 算术运算中先 * / 后 + - a-b*c+d,结合性 指运算符和运算对象的结合方向 分为:从左向右(左结合)和从右向左(右结合) 例如:算术运算符为左结合 a-b+4 赋值运算符为右结合 a= b = 5,注:如果一个操作数两边的运算符优先级不同时,按优先级从高到低结合;如果一个操作数两边的运算符优先级相同时,按结合性处理。,4 各种运算符的表示,+ - * / % + - + - = += -= *= /= %= a=a+1 表达式的值为5,且 a=6, b=5,说明:,+ 和 - - 的运算对象只能是变量, 不能是常量或表达式。 例如: 5+、(a+2)+ 不合法。 右结合性,结合方向为从右到左。 例如: a+ 等价于 -(a+) 而不等价 (-a)+ 如果有多个运算符连续出现时,C编译系统尽可能多的从左到右将多个字符组合成一个运算符 例如: i + j 等价于 ( i+)+j -i+-j 等价于 -(i+)+(-j),8 关系运算符、逻辑运算符及其表达式,无论是关系运算还是逻辑运算,其结果都会得到一个逻辑值。逻辑值只有两个,在很多高级语言中都用“真”和“假”来表示。,由于没有专门的“逻辑值”, C51语言规定:当关系成立或逻辑运算结果为非零值(整数或负数)时为“真”,用“1”表示;否则为“假”,用“0”表示。,关系运算符 种类:= != 结合方向:自左向右 优先级别:,例 ca+b /c(a+b) ab!=c /(ab)!=c a=bc /a=(bc),关系表达式的值:是逻辑值“真”或“假”,用1和0表示,/表达式值1,/表达式值1,/表达式值0,/d=1,/f=0,(1) 关系运算符与关系表达式 (左结合),例 注意区分“=”与“=” int a=0,b=1; if(a=b) printf(“a equal to b”); else printf(“a not equal to b”);,关系运算注意(2),逻辑运算符 种类: ! printf(%d %dn, ab-1); ,11 逗号运算符和逗号表达式,逗号表达式的一般形式 表达式1,表达式2,表达式n 逗号表达式的值 从左向右,依次对表达式求值,最后得到表达式n 的值就是逗号表达式的值,例如: a=5, a+, a* 3 表达式值为 18,且a=6 t=1, t+5, t+ 表达式值为 1,且t=2 x=(a=3*5, a*4 ) 赋值表达式的值为60,且x=60, a=15,小结 本节主要内容是:C的算术、运算符,各种运算符的运算优先级,要求能够正确地书写C的表达式。,
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!