已阅读5页,还剩72页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.,第3章C51语言编程基础,.,1)机器语言定义:处理器能直接执行的二进制代码特点:效率高、但不易于使用,10110110000000001011010100000000,ADDA,#19,3.1编程语言KeilC51简介,1、编程语言,2)汇编语言定义:以助记符的形式表示机器语言特点:速度快、体积小、但依赖于硬件体系,.,3)高级语言独立于机器、面向过程的、接近于人的自然语言。语言:FORTRAN、C语言特点:与硬件无关、易于交流和使用、运行效率低,X=X+1;,编译器链接器,X=X+1;,程序员,1001001010110010,高级语言程序,机器码,单片机如何执行程序指令?,.,KeilC51语言是在标准C的基础上,针对51单片机的硬件特点进行扩展,并向51单片机上移植的高效、简洁的实用高级语言。,与汇编语言相比的特点:(1)可读性好。(2)可模块化开发。(3)可移植性好。(4)生成的代码效率较低。,2、KeilC51语言简介,对于51单片机,目前广泛使用的是KeilC51语言,简称C51语言。,.,3、C51与标准C的区别,(1)库函数的不同。例如库函数printf和scanf,在标准C中,这两个函数通常用于屏幕打印和接收字符,而在KeilC51中,主要用于串行口数据的收发。,(3)C51的变量存储模式与标准C中的变量存储模式不一样。标准C是在通用计算机中只有一个程序和数据统一寻址的内存空间。51单片机存储区可分为内部数据存储区、外部数据存储区以及程序存储区。,(4)标准C语言没有处理单片机中断的方法。C51中有专门处理中断的中断函数。,(2)数据类型有一定的区别。在标准C的基础上又扩展了4种类型。,.,(5)头文件的不同。51头文件把单片机内部的硬件资源如定时器、中断、I/O等所相应的功能寄存器写入头文件内。(6)程序结构的差异。由于51单片机硬件资源有限,编译系统不允许太多的程序嵌套。其次,C51语言不支持标准C的递归特性。,4、KeilC51的开发工具KeilVision3,KeilVision3是德国Keilsoftware公司开发的C51语言开发软件。这个软件集成了文件编辑处理、编译链接等功能。,.,3.2C51语言程序设计基础,1、数据类型与存储类型,1)数据类型,.,2)C51扩展的数据类型(4种扩展的数据类型),(1)位变量bitbit的值可以是1(true),或0(false)。,bit变量名;,格式:,例如:,bitflag;flag=0;,.,(2)特殊功能寄存器sfr地址单元80HFFH之间的片内数据存储区;“sfr”数据类型占用一个内存单元;利用它可以访问51单片机内部的所有特殊功能寄存器。,sfrP1=0 x90;/定义了P1为片内的P1口寄存器;P1=0 xff;/把P1口的所有输出引脚设置为高电平。,例如:,sfr寄存器变量名=字节地址常数;,格式:,.,sfrSBUF=0 x99;,习题:往串行发送数据缓冲寄存器SBUF写入80,SBUF=80;,习题:从P0口寄存器读取数据,存放到任意一个变量X。,sfrP0=0 x80;intx;,x=P0;,.,例如:,(3)特殊功能寄存器sfr16“sfr16”数据类型占两个内存单元;用于操作占两个字节的特殊功能寄存器。,sfr16DPTR=0 x82;/定义了片内16位数据指针寄存器DPTR,/低8位字节地址为82H,/高8位字节地址为83H。DPTR=0 x1234;,sfr16寄存器变量名=字节地址常数;,格式:,字节地址为82H、83H存放的数据分别是多少?,.,(4)特殊功能位sbit片内特殊功能寄存器的可寻址位。,“”前是特殊功能寄存器的名字;“”的后面数字是特殊功能寄存器可寻址位在寄存器中的位置,取值必须是0-7。,sbit位变量名=特殊功能寄存器位位置;,格式:,sfrPSW=0 xd0;/定义PSW寄存器地址为0 xd0sbitFO=PSW5;/定义F0位为PSW.5F0=0;,例如:,.,习题:片内I/O口P1口的P1.0寻址位置成高电平,sfrP1=0 x90;sbitP1_0=P10;P1_0=1;,习题:从P2口的P2.7读取数据,存放到任意一个位变量X。,sfrP2=0 xA0;sbitP2_7=P27;bitx;x=P2_7;,.,sbit位变量名=位地址常数;,sbitCY=0 xD7;/*CY位地址为0 xD7*/sbitOV=0 xD2;/*OV位地址为0 xD2*/if(CY=1),例如:,格式:,.,习题:片内I/O口P1口的P1.0寻址位置成低电平,sbitP1_0=0 x90;P1_0=0;,在头文件AT89X51.h中定义了常用的特殊功能寄存器和可寻址位。#include,sfrP1=0 x90;sbitP1_0=0 x90;两者区别?,6,.,3)数据存储类型,数据存储类型是指数据存放在51单片机的哪一个存储器空间。,.,bdata,data,idata,pdata,xdata,code,.,(1)DATA区。DATA区指片内RAM的低128字节的空间,可直接寻址;寻址是最快的,应该把经常使用的变量放在DATA区。,unsignedchardatasystem_status=0;unsignedintdataunit_id8;,例如:,格式:数据类型【存储类型】变量名;,.,(2)BDATA区。BDATA区是内部RAM可位寻址的16字节存储区(字节地址为20H2FH)中的128个位。在这个区中声明变量就可进行位寻址。,例如:,unsignedcharbdatastatus_byte;unsignedintbdatastatus_word;sbitstat_flag=status_byte4;if(status_word15)stat_flag=1;,.,(3)IDATA区。IDATA区是片内RAM的0-256字节的存储区,只能间接寻址,速度比直接寻址慢。,unsignedcharidatasystem_status=0;floatidatavalue;,例如:,.,(4)PDATA区和XDATA区。PDATA区和XDATA区位于片外存储区;PDATA区指的是外部数据存储区0256字节。XDATA区指的是外部数据区64KB内的任何地址。,unsignedcharxdatasystem_status=0;unsignedintpdataunit_id8;,例如:,.,(5)程序存储区CODE。CODE区是程序存储区,储存的数据是不可改变的。,unsignedcharcodea9=0 x00,0 x01,0 x02,0 x03,0 x04,0 x05,0 x06,0 x07,0 x08;,例如:,.,4)数据存储器模式C51编译器设定的存储器模式:SMALL、COMPACT和LARGE三种模式。,若声明charvar1;在SMALL模式下,var1被定位在data存储区;在COMPACT模式下,var1被定位在idata存储区;在LARGE模式下,var1被定位在xdata存储区中。,.,2、C51语言的绝对地址访问,C51语言提供了两种比较常用的访问绝对地址的方法,对片内RAM、片外RAM及I/O进行访问。,绝对地址,.,1)绝对宏C51编译器提供了一组宏定义对code、data、pdata和xdata空间进行绝对寻址。这组宏定义放在absacc.h头文件中:,CBYTE以字节形式对code区寻址;CWORD以字形式对code区寻址;DBYTE以字节形式对data区寻址;DWORD以字形式对data区寻址;XBYTE以字节形式对xdata区寻址;XWORD以字形式对xdata区寻址;PBYTE以字节形式对pdata区寻址;PWORD以字形式对pdata区寻址。,#define变量名绝对宏字节地址,格式,绝对宏,.,【例】片内RAM、片外RAM定义的程序如下:#include#definePORTEXBYTE0 xFFC0/*将PORTE定义为外部I/O,地址为0 xFFC0*/#defineNRAMDBYTE0 x40/*将NRAM定义为片内RAM,地址为0 x40*/,main()PORTE=0 x3D;NRAM=0 x01;,/*数据3DH写入地址0 xFFC0的外部I/OPORTE*/,/*将数据01H写入片内RAM的40H单元*/,.,习题使用绝对宏将片内RAM20H的字节地址单元全部置1。,#include#defineMDBYTE0 x0020/*将M定义为外部RAM,地址为0 x0020*/,main()M=0 xff;,.,习题:使用绝对宏读取片外RAMF000H字节地址单元的内容。,#include#defineWRAMXBYTE0 xF000,main()charx;x=WRAM;,7,.,2)_at_关键字使用关键字_at_可对指定的存储器空间的绝对地址进行访问。格式:存储类型数据类型变量名_at_地址常数;,地址常数:指定变量的绝对地址,位于存储器空间之内;使用_at_定义的变量必须为全局变量。,.,【例】使用关键字_at_实现绝对地址的访问。dataunsignedchary1_at_0 x50;/*在data区定义字节变量y1,地址为50H*/xdataunsignedinty2_at_0 x4000;/*在xdata区定义字变量y2,地址为4000H*/voidmain(void)y1=0 xff;y2=0 x1234;while(1);,.,习题:使用关键字_at_读取片内RAM60H单元的内容。,dataunsignedcharM_at_0 x60;voidmain(void)unsignedchary;y=M;,.,【例】使用关键字_at_将片外RAM2000H开始的连续20个字节单元清0。,voidmain(void)unsignedchari;for(i=0;iy,则把x赋给变量max。,习题:比较变量x和变量y,如果x和y相等,则把0赋给变量max。,if(x=y)max=0;,.,格式:,if(表达式)语句1;else语句2;,.,if(xy)max=x;elsemax=y;,比较变量x和变量y,如果xy,则把x赋给变量max;否则把y赋给变量max。,.,习题:比较变量x和变量y,把二者最小值赋给变量min;,if(xy)min=y;elsemin=x;,.,习题:如果变量x满足关系10x10),9,.,voidmain()sfrP2=0 xA0;sfrP1=0 x90;sbitP24=P24;sbitP10=P10;,习题:如果读取P2口的P2.4位为1,则把P1口的P1.0置成0。,if(P24=1)P10=0;,.,if(表达式1)语句1;elseif(表达式2)语句2;elseif(表达式n)语句n;else语句n+1;,多分支if语句,.,当成绩90时,输出verygood,当80成绩90时,输出good,当60成绩=80)printf(“good);elseif(score=60)printf(“pass);elseprintf(“fail);,.,多分支switch语句,switch(表达式1)case常量表达式1:语句1;break;case常量表达式2:语句2;break;case常量表达式n:语句n;break;default:语句n+1;,格式:,.,switch,表达式1,语句1,语句2,语句n,语句n+1,式1,式2,式n,default,case,.,switch(key)case1:y=1;break;case2:y=2;break;case3:y=4;break;default:;,在单片机程序设计中,常用switch语句作为键盘中按键的判别。当按下键的键号变量key=1,则变量y=1;键号变量key=2,则变量y=2;键号变量key=4,则变量y=3;没有按下键,则变量y不变。,.,key=2;switch(key)case1:y=1;case2:y=2;case3:y=4;default:;,习题:读程序执行的结果y=?,.,2)循环结构控制语句,while(表达式)循环体;,格式:,表达式,循环体,假(0),真(非0),先判断表达式,后执行循环体。,while语句,.,main()inti=0;intr;while(i3)i+;y=i;,i+执行几次?,y=?,r=3,习题:读程序执行的结果y=?,.,main()inti=3;intr;while(i6)i+;y=i;,y=?,习题:读程序执行的结果y=?,.,do循环体;while(表达式);,格式:,表达式,循环体,假(0),真(非0),;不可省略!切记!,先执行循环体,后判断表达式。,do-while语句,.,main()inti=0;inty;doi+;while(i3);y=i;,i+执行几次?,y=?,习题:读程序执行的结果y=?,.,main()inti=0;inty=0;doi+;y=y+i;while(y20);,习题:读程序执行的结果y=?,.,for(表达式1;表达式2;表达式3)语句;,格式:,for语句,.,main()inti,y;y=0;for(i=1;i4;i+)y=y+i;,y=?,习题:读程序执行的结果y=?,.,main()inti,y;y=1;for(i=2;i6;i+)y=y+i;,y=?,习题:读程序执行的结果y=?,.,3)break语句和continue语句,break功能:跳出switch结构;在循环语句中,终止并跳出本层循环。,continue功能:结束本次循环,跳过本层循环体中尚未执行的语句,执行循环体的判断。,.,#definePI3.1415main()intr;floatarea;for(r=1;r100)break;printf(r=%d,area=%.2fn,r,area);,计算r=1到r=10的圆面积,直到面积大于100时停止。,运行结果:r=1,area=3.14r=2,area=12.57r=3,area=28.27r=4,area=50.26r=5,area=78.54,结束整个for循环,.,把100200之间不能被3整除的数输出。,main()intn;for(n=100;n=200;n+)if(n%3=0)continue;printf(“%d,n);,结束本次循环,循环体的剩余语句被忽略,执行表达式3,进入下一循环。,.,main()intn;for(n=100;n=200;n+)if(n%3=0)break;printf(“%d,n);,习题:读程序执行的结果?,.,习题:循环检测P1.0引脚,只有检测P1.0为低电平时,循环结束。,sfrP1=0 x90;sbitP10=P10;main()while(1)if(P10=0)break;,.,5、数组,数组是用来存储一组相同数据类型的数据结构。,一维数组格式:,数据类型,变量名,N;,inta10;,inta5=1,2,3,4,5;,初始化:,charb10;,.,求下列数组的和。,inta5=1,2,3,4,5;,main()inta5
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医院年度人力资源管理总结报告
- 工程施工安全监督终止申请书模板
- 新药研发各阶段流程详解
- 外卖配送员安全操作规范手册
- 幼儿园日常保健管理手册
- 小学科学期中测试质量分析报告范本
- 自力式调节阀产品说明书及使用指南
- 2025年农业精准种植服务合同协议
- 四年级英语PEP版复习资料汇编
- 项目阶段总结报告写作模板
- 软件框架互操作研究-洞察阐释
- 体育俱乐部公司策划方案
- 上下级沟通技巧
- 国资委面试题及答案
- 2025年中国功能食品市场现状分析及前景预测报告
- 吸入麻醉临床实践中国专家共识(2024版)
- 幼儿园示范公开课:大班语言绘本《跑跑镇》教案
- 科技部直属事业单位招聘笔试真题2024
- GB/T 12643-2025机器人词汇
- 2025重庆租房合同8篇
- 上海市农村房地一体宅基地确权登记工作实施方案
评论
0/150
提交评论