欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    C51语言编程基础.ppt

    • 资源ID:5417045       资源大小:491.50KB        全文页数:77页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    C51语言编程基础.ppt

    第3章 C51语言编程基础,1)机器语言定义:处理器能直接执行的二进制代码特点:效率高、但不易于使用,10110110 00000000 10110101 00000000,ADD A,#19,3.1 编程语言Keil C51简介,1、编程语言,2)汇编语言 定义:以助记符的形式表示机器语言 特点:速度快、体积小、但依赖于硬件体系,3)高级语言独立于机器、面向过程的、接近于人的自然语言。语言:FORTRAN、C语言特点:与硬件无关、易于交流和使用、运行效率低,X=X+1;,编译器链接器,X=X+1;,程序员,1001001010110010,高级语言程序,机器码,单片机如何执行程序指令?,Keil C51语言是在标准C的基础上,针对51单片机的硬件特点进行扩展,并向51单片机上移植的高效、简洁的实用高级语言。,与汇编语言相比的特点:(1)可读性好。(2)可模块化开发。(3)可移植性好。(4)生成的代码效率较低。,2、Keil C51语言简介,对于51单片机,目前广泛使用的是Keil C51语言,简称C51语言。,3、C51与标准C的区别,(1)库函数的不同。例如库函数printf和scanf,在标准C中,这两个函数通常用于屏幕打印和接收字符,而在Keil C51中,主要用于串行口数据的收发。,(3)C51的变量存储模式与标准C中的变量存储模式不一样。标准C是在通用计算机中只有一个程序和数据统一寻址的内存空间。51单片机存储区可分为内部数据存储区、外部数据存储区以及程序存储区。,(4)标准C语言没有处理单片机中断的方法。C51中有专门处理中断的中断函数。,(2)数据类型有一定的区别。在标准C的基础上又扩展了4种类型。,(5)头文件的不同。51头文件把单片机内部的硬件资源如定时器、中断、I/O等所相应的功能寄存器写入头文件内。(6)程序结构的差异。由于51单片机硬件资源有限,编译系统不允许太多的程序嵌套。其次,C51语言不支持标准C的递归特性。,4、Keil C51的开发工具Keil Vision3,Keil Vision3是德国Keil software公司开发的C51语言开发软件。这个软件集成了文件编辑处理、编译链接等功能。,3.2 C51语言程序设计基础,1、数据类型与存储类型,1)数据类型,2)C51扩展的数据类型(4种扩展的数据类型),(1)位变量bit bit的值可以是1(true),或0(false)。,bit 变量名;,格式:,例如:,bit flag;flag=0;,(2)特殊功能寄存器sfr 地址单元80HFFH之间的片内数据存储区;“sfr”数据类型占用一个内存单元;利用它可以访问51单片机内部的所有特殊功能寄存器。,sfr P1=0 x90;/定义了P1为片内的P1口寄存器;P1=0 xff;/把P1口的所有输出引脚设置为高电平。,例如:,sfr 寄存器变量名=字节地址常数;,格式:,sfr SBUF=0 x99;,习题:往串行发送数据缓冲寄存器SBUF写入80,SBUF=80;,习题:从P0口寄存器读取数据,存放到任意一个变量X。,sfr P0=0 x80;int x;,x=P0;,例如:,(3)特殊功能寄存器sfr16“sfr16”数据类型占两个内存单元;用于操作占两个字节的特殊功能寄存器。,sfr16 DPTR=0 x82;/定义了片内16位数据指针寄存器DPTR,/低8位字节地址为82H,/高8位字节地址为83H。DPTR=0 x1234;,sfr16 寄存器变量名=字节地址常数;,格式:,字节地址为82H、83H存放的数据分别是多少?,(4)特殊功能位 sbit 片内特殊功能寄存器的可寻址位。,“”前是特殊功能寄存器的名字;“”的后面数字是特殊功能寄存器可寻址位在寄存器中的位置,取值必须是0-7。,sbit 位变量名=特殊功能寄存器 位位置;,格式:,sfr PSW=0 xd0;/定义PSW寄存器地址为0 xd0sbit FO=PSW 5;/定义F0位为PSW.5F0=0;,例如:,习题:片内I/O口P1口的P1.0寻址位置成高电平,sfr P1=0 x90;sbit P1_0=P10;P1_0=1;,习题:从P2口的P2.7读取数据,存放到任意一个位变量X。,sfr P2=0 xA0;sbit P2_7=P27;bit x;x=P2_7;,sbit 位变量名=位地址常数;,sbit CY=0 xD7;/*CY位地址为0 xD7*/sbit OV=0 xD2;/*OV位地址为0 xD2*/if(CY=1),例如:,格式:,习题:片内I/O口P1口的P1.0寻址位置成低电平,sbit P1_0=0 x90;P1_0=0;,在头文件AT89X51.h中定义了常用的特殊功能寄存器和可寻址位。#include,sfr P1=0 x90;sbit P1_0=0 x90;两者区别?,6,3)数据存储类型,数据存储类型是指数据存放在51单片机的哪一个存储器空间。,bdata,data,idata,pdata,xdata,code,(1)DATA区。DATA区指片内RAM的低128字节的空间,可直接寻址;寻址是最快的,应该把经常使用的变量放在DATA区。,unsigned char data system_status=0;unsigned int data unit_id8;,例如:,格式:数据类型【存储类型】变量名;,(2)BDATA区。BDATA区是内部RAM可位寻址的16字节存储区(字节地址为20H 2FH)中的128个位。在这个区中声明变量就可进行位寻址。,例如:,unsigned char bdata status_byte;unsigned int bdata status_word;sbit stat_flag=status_byte4;if(status_word15)stat_flag=1;,(3)IDATA区。IDATA区是片内RAM的0-256字节的存储区,只能间接寻址,速度比直接寻址慢。,unsigned char idata system_status=0;float idata value;,例如:,(4)PDATA区和XDATA区。PDATA区和XDATA区位于片外存储区;PDATA区指的是外部数据存储区0256字节。XDATA区指的是外部数据区64KB内的任何地址。,unsigned char xdata system_status=0;unsigned int pdata unit_id8;,例如:,(5)程序存储区CODE。CODE区是程序存储区,储存的数据是不可改变的。,unsigned char code a9=0 x00,0 x01,0 x02,0 x03,0 x04,0 x05,0 x06,0 x07,0 x08;,例如:,4)数据存储器模式C51编译器设定的存储器模式:SMALL、COMPACT和LARGE三种模式。,若声明 char var1;在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#define PORTE XBYTE0 xFFC0/*将PORTE定义为外部I/O,地址为0 xFFC0*/#define NRAM DBYTE0 x40/*将NRAM定义为片内RAM,地址为0 x40*/,main()PORTE=0 x3D;NRAM=0 x01;,/*数据3DH写入地址0 xFFC0的外部I/O PORTE*/,/*将数据01H写入片内RAM的40H单元*/,习题 使用绝对宏将片内RAM 20H的字节地址单元全部置1。,#include#define M DBYTE0 x0020/*将M定义为外部RAM,地址为0 x0020*/,main()M=0 xff;,习题:使用绝对宏读取片外RAM F000H字节地址单元的内容。,#include#define WRAM XBYTE0 xF000,main()char x;x=WRAM;,7,2)_at_关键字使用关键字_at_可对指定的存储器空间的绝对地址进行访问。格式:存储类型 数据类型 变量名 _at_ 地址常数;,地址常数:指定变量的绝对地址,位于存储器空间之内;使用_at_定义的变量必须为全局变量。,【例】使用关键字_at_实现绝对地址的访问。data unsigned char y1 _at_ 0 x50;/*在data 区定义字节变量 y1,地址为50H*/xdata unsigned int y2 _at_ 0 x4000;/*在xdata区定义字变量 y2,地址为4000H*/void main(void)y1=0 xff;y2=0 x1234;while(1);,习题:使用关键字_at_读取片内RAM 60H单元的内容。,data unsigned char M _at_ 0 x60;void main(void)unsigned char y;y=M;,【例】使用关键字_at_将片外RAM 2000H开始的连续20个字节单元清0。,void main(void)unsigned char i;for(i=0;i20;i+)bufferi=0;,xdata unsigned char buffer20 _at_ 0 x2000;,data unsigned char buffer8 _at_ 0 x40;void main(void)unsigned char j;for(j=0;j8;j+)bufferj=0;,习题:使用关键字_at_把片内RAM 40H单元开始的8个单元内容清0。,8,C51语言的基本运算与标准C类似,主要包括算术运算、关系运算、逻辑运算、位运算和赋值运算及其表达式等。1)算术运算符,3、C51的基本运算,2)关系运算符,关系表达式,int x=3;int y=6;int R;,R=x y;,3)逻辑运算符,逻辑表达式,int x=0;int y=1;int R;,R=x,4)位运算符,01001000&11111111,00001000 2,01001001|11111111,01001000&00110111,01000000|11111111,00001000 3,习题:,【例】以字节操作方式对I/O口P1的P1.5清0,P1.1置为1,其他位保持不变。,P1.5,P1.1,sfr P1=0 x90;P1=(P1,P1.0,sfr P2=0 xA0;P2=P2|0 x10;,习题:以字节操作方式,把P2口的P2.4位置成1,其它位保持不变。,sfr P0=0 x80;char flag;flag=P0,习题:以字节操作方式,读取P0口的P0.6位是否为1?,4、C51的分支与循环程序结构,程序结构分为三类:顺序结构、分支结构、循环结构。,1)分支结构控制语句,格式,二分支if语句,if(表达式)语句;,if(xy)max=x;,比较变量x和变量y,如果xy,则把 x 赋给变量max。,习题:比较变量x和变量y,如果x和y相等,则把0赋给变量max。,if(x=y)max=0;,格式:,if(表达式)语句1;else 语句2;,if(xy)max=x;else max=y;,比较变量x和变量y,如果xy,则把 x 赋给变量max;否则把 y 赋给变量max。,习题:比较变量x和变量y,把二者最小值赋给变量min;,if(xy)min=y;else min=x;,习题:如果变量x满足关系10 x20,则把变量y置成1;否则把y置成0。,if((x10),9,void main()sfr P2=0 xA0;sfr P1=0 x90;sbit P24=P24;sbit P10=P10;,习题:如果读取P2口的P2.4位为1,则把P1口的P1.0置成0。,if(P24=1)P10=0;,if(表达式1)语句1;else if(表达式2)语句2;else if(表达式n)语句n;else 语句n+1;,多分支if语句,当成绩90时,输出verygood,当80成绩90时,输出good,当60成绩80时,输出pass,当成绩60时,输出fail。,int score;if(score=90)printf(“very good);else if(score=80)printf(“good);else if(score=60)printf(“pass);else printf(“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)case 1:y=1;break;case 2:y=2;break;case 3:y=4;break;default:;,在单片机程序设计中,常用switch语句作为键盘中按键的判别。当按下键的键号变量key=1,则变量y=1;键号变量key=2,则变量y=2;键号变量key=4,则变量y=3;没有按下键,则变量y不变。,key=2;switch(key)case 1:y=1;case 2:y=2;case 3:y=4;default:;,习题:读程序执行的结果 y=?,2)循环结构控制语句,while(表达式)循环体;,格式:,表达式,循环体,假(0),真(非0),先判断表达式,后执行循环体。,while语句,main()int i=0;int r;while(i3)i+;y=i;,i+执行几次?,y=?,r=3,习题:读程序执行的结果 y=?,main()int i=3;int r;while(i6)i+;y=i;,y=?,习题:读程序执行的结果 y=?,do 循环体;while(表达式);,格式:,表达式,循环体,假(0),真(非0),;不可省略!切记!,先执行循环体,后判断表达式。,do-while语句,main()int i=0;int y;do i+;while(i3);y=i;,i+执行几次?,y=?,习题:读程序执行的结果 y=?,main()int i=0;int y=0;do i+;y=y+i;while(y20);,习题:读程序执行的结果 y=?,for(表达式1;表达式2;表达式3)语句;,格式:,for语句,main()int i,y;y=0;for(i=1;i4;i+)y=y+i;,y=?,习题:读程序执行的结果 y=?,main()int i,y;y=1;for(i=2;i6;i+)y=y+i;,y=?,习题:读程序执行的结果 y=?,3)break语句和continue语句,break功能:跳出switch结构;在循环语句中,终止并跳出本层循环。,continue功能:结束本次循环,跳过本层循环体中尚未执行的语句,执行循环体的判断。,#define PI 3.1415main()int r;float area;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()int n;for(n=100;n=200;n+)if(n%3=0)continue;printf(“%d,n);,结束本次循环,循环体的剩余语句被忽略,执行表达式3,进入下一循环。,main()int n;for(n=100;n=200;n+)if(n%3=0)break;printf(“%d,n);,习题:读程序执行的结果?,习题:循环检测P1.0引脚,只有检测P1.0为低电平时,循环结束。,sfr P1=0 x90;sbit P10=P10;main()while(1)if(P10=0)break;,5、数组,数组是用来存储一组相同数据类型的数据结构。,一维数组格式:,数据类型,变量名,N;,int a 10;,int a5=1,2,3,4,5;,初始化:,char b 10;,求下列数组的和。,int a5=1,2,3,4,5;,main()int a5=1,2,3,4,5;int i,sum;sum=0;for(i=0;i5;i+)sum=sum+ai;,习题:求数组a5中能被2整除的数的和。,int a5=10,2,33,54,15;,main()int a5=1,2,3,4,5;int i,sum;sum=0;for(i=0;i5;i+)if(sumi%2=0)sum=sum+ai;,二维数组格式:,数据类型,变量名,N M;,int a32;,int a32=1,2,3,4,5,6;,行数,列数,求下列数组的和。,main()int a32=1,2,3,4,5,6;int i,j,sum;sum=0;for(i=0;i3;i+)for(j=0;j2;j+)sum=sum+aij;,int a32=1,2,3,4,5,6;,求下列数组的和。,6、C51语言的中断函数,函数是一个完成某个相关功能的代码段;,C51程序只有一个主函数main(),并且从主函数函数开始运行;,中断服务函数,格式:,函数类型 函数名()interrupt n using n,interrupt n:表示中断号,n的值为0 4;,using n:表示寄存器组号,n的值为0 3;,作业:,6、编程实现,P1口各引脚输出高电平。,7、用两种方法编程实现,P2口的P1.7位置成高电平。,P67 1,2,3,4,8、编程实现,如果读取P0.0位为1,则P1.0输出高电平。,main()int i=0;int y;while(i6)i+;y=i;,9、读程序执行的结果 y=?,main()int i,y;y=0;for(i=2;i5;i+)y=y+i;,10、读程序执行的结果 y=?,

    注意事项

    本文(C51语言编程基础.ppt)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开