如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
第10章单片机C51语言程序设计基础学习目标学习重点主要内容10.1C51程序的结构10.1C51程序的结构2.1C51程序的结构10.1C51程序的结构C51函数的一般格式如下:[函数类型]函数名([函数形式参数表]//函数说明部分{[数据说明部分];//函数体部分执行语句部分;}其中加[]时,表示其中的内容可以省略。一个函数在程序中可以以三种形态出现。函数定义、函数调用和函数说明。函数定义相当于汇编中的一般子程序。函数调用相当于汇编中调用子程序的CALL语句,在C语言中,更普遍地规定函数调用可以出现在表达式中。函数定义和函数调用不分先后,但若调用在定义之前,那么在调用前必须先进行函数说明。函数说明是一个没有函数体的函数定义,而函数调用则要求有函数名和实参数表。C51中函数分为两大类。一类是库函数,一类是用户定义的函数。库函数是C51在库文件中已定义的函数,其函数说明在相关的头文件中。对于这类函数,用户在编程时只要用include预处理指令将头文件包含在用户文件中,直接调用即可。用户函数是用户自己定义、自己调用的一类函数。从某种意义上来看,C编程实际上是对一系列用户函数的定义。10.2C51数据类型、常量和变量的定义表10-1KeiluVision2C51编译器所支持的数据类型常量是指在程序执行过程中其值不能改变的量。在C51中支持整型常量、浮点型常量、字符型常量和字符串型常量。●(2)浮点型常量●(4)字符串型常量常量可用在不必改变值的场合,如固定的数据表,字库等。常量的定义方式有几种,下面加以说明。#difineFalse0x0;//用预定义语句可以定义常量#difineTrue0x1;//这里定义False为0,True为1在程序中用到//False编译时自动用0替换,同理True替换为1unsignedintcodea=100;//这一句用code把a定义在程序存储器中并赋值constunsignedintc=100;//用const定义c为无符号int常量并赋值以上代码中常量的值都保存在程序存储器中,而程序存储器在运行中是不允许被修改的,所以如果在这两句后面用了类似a=110,a++这样的赋值语句,编译时将会出错。10.2C51数据类型、常量和变量的定义而这里的数据类型则是和前面学习到的各种数据类型的定义是一样的。说明了一个变量的数据类型后,还可选择说明该变量的存储器类型。存储器类型的说明就是指定该变量在C51硬件系统中所使用的存储区域,并在编译时准确的定位。表10-2列出了KeiluVision2所能识别的存储器类型。注意:在87C51芯片中RAM只有低128位,位于80H到FFH的高128位则在52芯片中才有用,并和特殊寄存器地址重叠。10.2C51数据类型、常量和变量的定义●2.对位地址单元的定义10.3C51程序的运算符、表达式及其语法规则●(2)算术运算符●(4)算术运算符的优先级和结合性10.3C51程序的运算符、表达式及其语法规则10.3C51程序的运算符、表达式及其语法规则10.3C51程序的运算符、表达式及其语法规则10.3C51程序的运算符、表达式及其语法规则10.3C51程序的运算符、表达式及其语法规则10.3C51程序的运算符、表达式及其语法规则故对a进行循环右移2位的程序可这样编写:main(){unsignedchara=0xc3,b,c;intn=2;b=a<<(8-n);c=a>>n;a=c¦b;}结果:循环右移前a=11000011。循环右移后a=11110000。对于二进制数来说,左移1位相当于对该数乘2,而右移1位相当于该数除以2,利用这一性质我们可以用移位来做快速乘除法。例如,假如要对某数乘10,使用这种方法将比直接做乘法效率更高——先将该数右移2位再与该数本身相加,然后再左移1位。10.3C51程序的运算符、表达式及其语法规则10.3C51程序的运算符、表达式及其语法规则10.3C51程序的运算符、表达式及其语法规则【例10.7】使用P1口控制八路LED流水灯。电路图如10-6所示。这里87C51的P1引脚为低电平才会点亮LED灯,P1口的八个引脚刚好对应P1口特殊寄存器的八个二进制位,如向P1口送数据0xFE,转换成二进制就是11111110,最低位D0为0这里P1.0引脚输出低电平,LED1被点亮。以此类推,根据自己想要做的效果就可以给端口送对应的值了。现在要求八个LED灯依次从P1.0到P1.7点亮,然后又从P1.7到P1.0依次点亮,循环往复。main(){unsignedcharLEDIndex=0;bitLEDDirection=1;//点亮LED灯的方向标志while(1){if(