您好,欢迎访问三七文档
C51的语法C51ProgrammingLanguage2020年2月25日星期二单片机C语言程序设计1C51的语法2020年2月25日星期二单片机C语言程序设计2单片机C语言概述2.1C51的数据类型与运算2.2C51流程控制语句2.3C51的函数2.4C51的指针2.5C51的构造数据类型2.6C51简介单片机应用系统的程序设计,可以采用汇编语言,也可以采用C语言。1.汇编语言对单片机硬件资源直接操作,代码紧凑,执行效率高,但移植性可读性差,维护不方便2.C语言具有良好的可读性、可移植性和基本的硬件操作能力,编程方便,开发效率高2020年2月25日星期二单片机C语言程序设计3C51简介C语言的优势很多:1.程序模块化、结构性好,容易阅读维护2.算法实现容易3.尽可能地隐藏了底层的操作,使得代码移植方便C语言的缺点:1.语言灵活,易出错2.对硬件操作进行了封装,不利于对硬件的学习2020年2月25日星期二单片机C语言程序设计4C51简介汇编语言:ORG0000HLJMPMAINORG0100HMAIN:NOPMOVP1,#00FHACALLDELAYSJMP$ENDC语言:#includereg52.hvoiddelay(unsignedchar)voidmain(){while(1){P1=0x0F;delay(1000);}}2020年2月25日星期二单片机C语言程序设计5汇编语言与C语言比较汇编语言:1.寄存器2.指令(助记符)3.子程序4.直接操作硬件例:MOVR0,#0FHC语言:1.变量2.语句3.函数4.通过封装操作例:inta;a=10;2020年2月25日星期二单片机C语言程序设计6C51的基础知识51系列单片机上的C语言称为C51,是在C语言的基础上发展而来的。C语言程序采用函数结构,程序包含一个主函数main(),主函数调用其他函数,程序从main函数开始执行。2020年2月25日星期二单片机C语言程序设计7C51的基础知识C51程序由标识符、运算符组成:1.普通标识符用来标识源程序中的对象2.关键字是编程语言保留的特殊标识符,具有固定的名称和特定含义2020年2月25日星期二单片机C语言程序设计9C51的数据类型程序的目的是对数据进行操作,数据存放在内存存储单元内。(数据存储器)汇编语言中使用伪指令DB或DW定义数据存储单元,C语言中由编译器根据数据类型预留存储单元。C语言中的数据类型决定了数据量的取值范围、占用存储器的大小及可参与的运算。2020年2月25日星期二单片机C语言程序设计10C51的数据类型数据类型基本类型数值类型位类型整型短整型整型长整型实型单精度型双精度型字符类型构造类型数组类型结构体类型共用体类型枚举类型指针类型空类型2020年2月25日星期二单片机C语言程序设计11C51的数据类型数据类型长度数值范围字符型unsignedchar80~2550~28-1signedchar8-128~127-27~27-1整型unsignedint160~655350~216-1signedint16-32768~32767-215~215-1长整型unsignedlong320~42949672950~232-1signedlong32-2147483648~2147483647-231~231-1浮点型float32±1.175494E-38~±3.402823E+38指针型一般指针24可寻址空间0~65535指针型具体指针8/16可寻址空间0~255/0~655352020年2月25日星期二单片机C语言程序设计12C51的数据类型数据类型长度数值范围bit10、121sbit10、121sfr80~2550~28-1sfr16160~655350~216-12020年2月25日星期二单片机C语言程序设计13C51的数据类型常量:程序运行过程中数值不变的量。1.整型常量:057、47、0x2F2.浮点型常量:3.14、3.14E83.字符型常量:‘a’、‘A’、‘\n’4.字符串型常量:“Welcome!”2020年2月25日星期二单片机C语言程序设计14C51的数据类型程序中一般使用大写标识符来标识不变的量,C51中不变的量通常有三种表示法:1.#definePI472.unsignedcharconstPI=47;3.unsignedcharcodePI=47;2020年2月25日星期二单片机C语言程序设计15C51的数据类型变量:程序运行时数值改变的量。1.51单片机直接支持bit和unsignedchar两种数据类型,其它类型数据都转换成bit或unsignedchar型进行存储2.为减少数据的存储空间和提高程序运行速度,要尽可能地使用unsignedchar型数据C51的数据类型对51系列单片机内部的特殊功能寄存器访问只能采用直接寻址的方式,因此C51扩充了关键字sfr和sfr16对这些寄存器进行定义。1.sfrP1=0x90;2.sfrTMOD=0x89;3.sfr16T2=0xCC;C51的数据类型对51单片机中能够按位寻址的特殊功能寄存器中的位访问,C51扩充了关键字sbit,用于访问位寻址对象。1.sbitKEY=P1^7;2.sbitKEY=0x97;3.sbitKEY=0x90^7;C51的运算符和表达式C语言中除语句外的操作均为运算:1.算术运算符和表达式+:注意溢出-:注意负数*:注意溢出/:注意数据类型%:注意只用于整数2.赋值运算符和表达式=:注意类型自动转换C51的运算符和表达式3.增量减量运算符和表达式++、--:注意i++和++i4.关系运算符和表达式、=、=、、==、!=:结果为逻辑量5.逻辑运算符和表达式&&、||、!:结果为逻辑量6.位运算符和表达式&、|、~、^、、:按位运算循环移位X1&X7C51的运算符和表达式7.复合运算符和表达式+=、-=、*=、/=、%=、=、=、&=、|=、^=:提高编译效率8.逗号运算符和表达式,:连接多个表达式9.条件运算符与表达式?:选择表达式值10.指针运算符和表达式*、&:取地址内容、取变量地址C51的运算符和表达式11.类型转换运算符隐式类型转换:赋值时自动进行强制类型转换:(类型名)变量名12.求占用的字节数的运算符:sizeof()非函数13.运算符的优先级2020年2月25日星期二单片机C语言程序设计22C51的输入输出C51语言本身不提供输入和输出的语句,输入和输出的操作由函数实现。使用时须先用命令#includestdio.h将函数库包含到文件中。C51中的输入和输出数据均针对串行口:1.输出函数printf()、puts()、putchar()2.输入函数scanf()、gets()、getchar()2020年2月25日星期二单片机C语言程序设计23C51的语句C语言程序包括数据描述(由声明部分来实现)和数据操作(由语句来实现)。数据描述主要定义数据结构(用数据类型表示)和数据初值。数据操作的任务是对已提供的数据进行处理,靠语句来实现。2020年2月25日星期二单片机C语言程序设计24C51的语句C51的语句用来向单片机发出操作指令,按功能可分为4类:1.说明语句:说明数据量的类型和赋值,unsignedcharch=10;2.表达式语句:对变量赋值,ch=10;3.空语句:什么都不做,;、{}C51的语句4.控制语句:控制程序的执行顺序条件分支语句:if…else…、switch…case…循环语句:while、do…while、for转移语句:break、continue、gotoC51的语句程序的3种基本控制结构:1.顺序结构2.选择结构3.循环结构AB分支1条件分支2真假循环体条件真假C51的数组数组是一组具有相同数据类型变量的集合。1.一维数组:定义:unsignedchara[5]={0,1,2,3,4};引用:a[0]=0、t=a[4]2.二维数组:定义:floata[2][3]={{1,2,3},{4,5,6}};引用:a[1][2]=5C51的数组3.字符数组:定义:unsignedchara[]={‘E’,‘R’,‘R’,‘O’,‘R’};引用:a[0]=‘E’存储空间:5字节4.字符串数组:定义:unsignedchara[]={“ERROR”};引用:a[4]=‘R’存储空间:6字节,末尾系统自动补‘\0’2020年2月25日星期二单片机C语言程序设计29C51的指针指针:表示一个内存地址的变量。定义:unsignedchardat;unsignedchar*p;使用:p=&dat;//取变量地址dat=*p;//取地址中变量值2020年2月25日星期二单片机C语言程序设计30C51的指针C51支持通用指针变量和指定存储区的指针变量两种类型。1.通用指针:通过该指针可访问所有存储空间,需占用3个字节。unsignedchar*p;2.指定存储区指针:通过该指针只能访问规定的存储空间,需占用1~2字节。unsignedchardata*p;存储器的指针长度短,占用存储器空间少,运行速度快,但指对象具有确定的存储器空间,兼容性不好。C51的函数C51中使用函数将功能进行封装,使程序模块化,提高程序的可重用性。例:intmax(inta,intb){intdat;dat=a=b?a:b;returndat;}2020年2月25日星期二单片机C语言程序设计32C51的函数函数是一种独立功能的程序。C51的函数中断服务函数:服务于中断系统,没有参数和返回值,不需要声明,不能主动调用。void函数名称()interrupt中断编号using寄存器组voidtimer0()interrupt1using12020年2月25日星期二单片机C语言程序设计34C51的预处理编译系统对程序中特殊命令进行预处理,预处理结果和源程序进行编译。1.宏定义(用标识符表示字符串)#define宏名字符串2.文件包含(源文件包含其他文件内容)#include文件名或#include“文件名”3.条件编译(仅编译需要的程序段)#ifdef#else#endif、#ifndef#else#endif、#if#else#endif2020年2月25日星期二单片机C语言程序设计35C51编程举例延时程序的编写:1.考虑到语句执行需要时间,可以利用语句的重复执行进行延时2.使用的循环应便于改变延时的时间3.将延时程序封装成函数便于以后使用0.0003890.0003911.0008612.340424C51编程举例voiddelay(unsignedintt){unsignedinti,j;for(j=0;jt;j++){for(i=0;i123;i++){}}}C51的数据类型几点说明:1.位变量:开关量,0(false)、1(true)不能定义指针和数组,2.字符型:表示字符和数值数值,存储十六进制数字符,存储ASCII码3.整型:表示整数2020年2月25日星期二单片机C语言程序设计39C51的数据类型4.浮点型:格式符合IEEE-754标准的单精度浮点型数据,包含指数和尾数两部分,最高位为符号位5.字符型和整型均有unsigned和signed之分,使用时尽可能采用无符号格式:unsigned表示无符号数,用原码存储signed表示有符号数,用补码存储6.编译器编译时会自动进行类型转换2020年2月25日星期二单片机C语言程序设计40C51的存储种类C51的变量都有相应的存储种类:1.自动变量auto:作用域在定义的函数体或复合语句内部2.外部变量extern:作用域整个程序3.静态变量static:作用域在定义的函数内部或程序结束,变量值一直保存4.寄存器变量register:建议编译器将该变量存储在寄存器中例:staticunsignedcharch;2
本文标题:单片机C语言第2章
链接地址:https://www.777doc.com/doc-3974994 .html