资源预览内容
第1页 / 共57页
第2页 / 共57页
第3页 / 共57页
第4页 / 共57页
第5页 / 共57页
第6页 / 共57页
第7页 / 共57页
第8页 / 共57页
第9页 / 共57页
第10页 / 共57页
亲,该文档总共57页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第10章 单片机C51语言程序设计基础中国铁道出版社 单片机原理与应用第二版学习目标掌握C51程序设计的基本方法及特点制掌握C语言在单片机开发中程序的语法规则了解C语言在单片机开发中程序的结构特点中国铁道出版社 单片机原理与应用第二版学习重点C语言在单片机应用系统中程序设计实例的分析和讨论 “C51”程序设计的特点 C语言程序设计的基本方法 中国铁道出版社 单片机原理与应用第二版主要内容 任务任务1 1:学习:学习C51C51程序的结构程序的结构 10 10 单片机单片机C51C51语言程序设计基础语言程序设计基础 任务任务2 2:C51C51数据类型、常量和变量的定义数据类型、常量和变量的定义 任务任务3 3:C51C51程序的运算符及其语法规则程序的运算符及其语法规则 任务任务4 4:掌握掌握C51C51程序设计特点程序设计特点 任务任务5 5:理解理解C51C51程序设计举例程序设计举例中国铁道出版社 单片机原理与应用第二版10.1 C51程序的结构 C51与标准c的区别c51在语法规则、程序结构及程序设计方法等与标准的C语言程序设计相同。 主要区别在于:(1)C51语言编写单片机应用程序时,需根据单片机存储结构及内部资源定义相 应的数据类型和变量,而标准的C语言程序不需要考虑这些问题 。(2)C51中变量的存储模式是与MCS-51单片机的存储器紧密相关;(3)C51中的数据类型与标准C的数据类型也有一定的区别,在C51中还增加了几种针对MCS-51单片机特有的数据类型;(4)C51与标准C的输入输出处理不一样,C51中的输入输出是通过MCS-51串行口来完成的,输入输出指令执行前必须要对串行口进行初始化;(5)C51与标准C在函数使用方面也有一定的区别,C51中有专门的中断函数。中国铁道出版社 单片机原理与应用第二版10.1 C51程序的结构 10.1.1 C51程序的结构特点 介绍介绍 C51语言与标准C语言的不同之处在于,C51语言根据单片机存储结构及内 部资源定义了相应的C语言中的数据类型和变量,C51程序结构与一般C语言没 有什么差别。一个C51程序大体上是一个函数定义的集合,在这个集合中有且 仅有一个名为main()函数(主函数)。主函数是程序的入口,主函数中的所有 语句执行完毕,则程序执行结束。在C51中,函数定义由类型、函数名、参数表和函数体四部分组合而成 函数名是一个标识符,标识符是大小写可区别的,最长为255个字符。参数表 是用圆括号括起来的若干参数,项与项之间用逗号隔开。函数体是用大括号括 起来的若干C语句,语句与语句之间用分号隔开,最后一个语句一般是return (在主函数中可以省略)。每一个函数都返回一个值,该值由return语句中的 表达式指定(省略时为零)。函数的类型就是返回值的类型,函数类型(除整 型外)均需在函数名前加以指定。 中国铁道出版社 单片机原理与应用第二版2.1 C51程序的结构 举例举例 以87C51单片机最小系统 的P1.0口控制一个LED发光管 的亮和灭为例来介绍C51程序 的一般格式。图10-1为其控 制电路图。图10-1 87C51 P1.0口控制LED灯电路图 中国铁道出版社 单片机原理与应用第二版10.1 C51程序的结构#include / 包括一个51标准内核的头文件 sbit P10=P10; / 头文件中没有定义的I/O口就要自己来定义 void main() / 主程序 unsigned int n;do for(n=0;n 大于 = 大于等于 3,结果为真(1),而10= =100,结果为假(0)。 注意:关系运算符等于“= =”是由两个“=”组成。中国铁道出版社 单片机原理与应用第二版10.3 C51程序的运算符、表达式及其语法规则 2. 2.关系运算符的优先级 图10-4 各种运算符优先级规则图前四种关系运算符 (,=) 优先级相同, 后两种也相同;前四种优先级高于后两种。 关系运算符的优先级低于算术运算符。 关系运算符的优先级高于赋值运算符。 各种运算符的优先级规则如图10-4所示。 【例10.1】 c a+b 等效于c(a+b) a b ! = c 等效于(ab)!=c a= = bc 等效于a = (bc) 关系运算符的结合性为左结合。 关系表达式:用关系运算符将两个表达式(算术表达式、关系表达式、逻辑表达式 及字符表达式等)连接起来的式子,称为关系表达式。 关系表达式的结果:由于关系运算符总是二目运算符,它作用在运算对象上产生的 结果为一个逻辑值(即真或假)。C语言以“1”代表真,以“0”代表假。中国铁道出版社 单片机原理与应用第二版10.3 C51程序的运算符、表达式及其语法规则 10.3.3 C51逻辑运算符、表达式及优先级 1. 1. 逻辑运算符 &:逻辑与(AND); :逻辑或(OR); !:逻辑非(NOT)。 “&”和“”是双目运算符,要求有两个运算对象;而“!”是单目运算符, 只要求一个运算对象。 C51逻辑运算符与算术运算符、关系运算符、赋值运算符之间的关系:其中“! ”运算符优先级最高,算术运算符次之,关系运算符再次之,之后是&和,赋 值运算符最低。 2. 2.逻辑表达式 用逻辑运算符将关系表达式或逻辑量连接起来的式子称为逻辑表达式。 逻辑表达式的值应该是一个逻辑量“真”或“假”。逻辑表达式的结合性为自左向 右。 逻辑表达式的值与关系表达式的值相同,以0代表假,以1代表真。中国铁道出版社 单片机原理与应用第二版10.3 C51程序的运算符、表达式及其语法规则 【例10.2】若a = 4,b = 5,则: 因为a = 4为真,所以!a为假(0)。 因为a、b为真,两者相或也为真。a & b为真(1)。!a & b为假(0)。因为!优先级 高于&,故先执行!a,值为假(0),而0 & b为0,故结果为假(0)。通过上面的例子可以看出,系统给出的逻辑运算结果不是0就是1,不可能是其他值 。这与后面讲到的位逻辑运算是截然不同的,应该注意区别逻辑运算与位逻辑运算这两 个不同的概念。在由多个逻辑运算符构成的逻辑表达式中,并不是所有逻辑运算符都被执行,只是 在必须执行下一个逻辑运算符后才能求出表达式的值时,才执行该运算符。由于逻辑运 算符的结合性为自左向右,所以对于&(逻辑与)运算符来说,只有左边的值不为假( 0)才继续执行右边的运算。对于(逻辑或)运算符来说只有左边的值为假才继续进 行右边的运算。 【例10.3】若a = 1,b = 2,c = 3,d = 4;m,n原值为1, 则求表达式(m = a b ) & (n = c d ) 由于a b为假(0),即m = 0,故无须再执行右边的&(n = cd)运算,即可确定 表达式值为假(0);而表达式(m = a b) (n = c d ) 由于a d为假(0),即m = 0,故需继续向右执行,又由于c d为假(0),即n = 0,两者相或()结果为0, 故表达式值为0。中国铁道出版社 单片机原理与应用第二版10.3 C51程序的运算符、表达式及其语法规则 10.3.4 C51位操作及其表达式 1. 1. 位操作运算符 &:按位与。 :按位或。 :按位异或。 :按位取反。 :位右移。 除了按位取反运算符以外,以上位操作运算符都是两目运算符,即要求运算符两 侧各一个运算对象。 位运算对象只能是整型或字符型数,不能为实型数据。【例10.4】若a=54H=01010100B,b=3BH=00111011B 则表达式c=a&b的值为10H, 【例10.5】若a = A5H = 10100101,b = 37H = 00110111,则表达式c = a b的 值为92H。 中国铁道出版社 单片机原理与应用第二版10.3 C51程序的运算符、表达式及其语法规则 2. 2. “位左移”和“位右移”运算符( ) 位左移、位右移运算符 ,用来将一个数各二进制位的全部左移或右移若 干位,移位后,空白位补0,而溢出的位舍弃。移位运算并不能改变原变量本身,除 非我们将移的结果赋给另一变量。 【例10.6】若a =11000011B = 0C3H,将a值右循环位移两位。 其实现过程分析如下:a右循环n位,即将a中原来左面 (8-n) 位右移n位,而将原来右端的n位移到最左 面n位。 上述问题可以由下列步骤来实现: (1)将a的右端n位先放到b的高n位中b=an; (3)将b,c进行或运算a=cb;中国铁道出版社 单片机原理与应用第二版故对a进行循环右移2位的程序可这样编写: main() unsigned char a=0xc3,b,c;int n=2; b=an;a=cb; 结果:循环右移前a = 11000011。 循环右移后a=11110000。 对于二进制数来说,左移1位相当于对该数乘2,而右移1位相当于该数除以2,利 用这一性质我们可以用移位来做快速乘除法。例如,假如要对某数乘10,使用这 种方法将比直接做乘法效率更高先将该数右移2位再与该数本身相加,然后 再左移1位。10.3 C51程序的运算符、表达式及其语法规则 中国铁道出版社 单片机原理与应用第二版10.3 C51程序的运算符、表达式及其语法规则 【例10.7】对片外I/O接口的位操作。在控制系统中,位操作方式比算术方式更频繁地被使用。以8051片外I/O接口为例 ,这种I/O接口的字长为1B(8位),在实际控制应用中,人们常常想要改变I/O接口中 某一位的值而不影响其他位,当这个口的其他位正在点亮报警灯,或命令A/D转换器开 始转换的时候,用这一位可以启动或关闭一部电动机。正像前面已经提过的那样,有些 I/O接口是可以位寻址的(例如8051片内I/O接口),但大多数片外附加I/O接口只能对 整个字节作出响应。因此要想在这些地方实现单独位控制(或线控制),就要采用位操 作。 单片机内部端口用sfr定义,外部并行口用指针定义,指针的定义在absacc.h头文件中 。例如: #include #define PORTA XBYTE 0xffc0 void main () PORTA=(PORTA & 0xbf) 0x04; 在上面的程序片段中,定义了一个片外I/O接口变量PORTA,其地址在片外数据存储区的 0xffc0上。在main()函数中,PORTA= (PORTA & 0xbf) 0x04;作用是先用&运算符将 PORTA.6位置成低电平,然后使用0x04运算将PORTA.2位置成高电平。中国铁道出版社 单片机原理与应用第二版10.3 C51程序的运算符、表达式及其语法规则 10.3.5自增减运算符、复合运算符及其表达式 1. 1.自增减运算符 自增减运算符的作用是使变量值自动加1或减1。例如: + i,- i在使用i之前,先使i值加(减)1。 i +,i -在使用i之后,再使i值加(减)1。 粗略地看,+ i 和i +的作用都相当于i = i +1,但不同之处在于+ i先执行i = i +1,再使用i的值,而i +则是先使用i的值,再执行i = i +1。 【例10.8】若i值原来为5,则 j = + i:j值为6,i值也为6;j = i +:j值为5,i值为6 【例10.9】若i原值为3,则表
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号