第3章-C51语言编程基础.ppt
上传人:天马****23 上传时间:2024-09-14 格式:PPT 页数:78 大小:1MB 金币:10 举报 版权申诉
预览加载中,请您耐心等待几秒...

第3章-C51语言编程基础.ppt

第3章-C51语言编程基础.ppt

预览

免费试读已结束,剩余 68 页请下载文档后查看

10 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第3章C51语言编程基础1)机器语言定义:处理器能直接执行的二进制代码特点:效率高、但不易于使用3)高级语言独立于机器、面向过程的、接近于人的自然语言。语言:FORTRAN、C语言特点:与硬件无关、易于交流和使用、运行效率低KeilC51语言是在标准C的基础上,针对51单片机的硬件特点进行扩展,并向51单片机上移植的高效、简洁的实用高级语言。3、C51与标准C的区别(5)头文件的不同。51头文件把单片机内部的硬件资源如定时器、中断、I/O等所相应的功能寄存器写入头文件内。(6)程序结构的差异。由于51单片机硬件资源有限,编译系统不允许太多的程序嵌套。其次,C51语言不支持标准C的递归特性。3.2C51语言程序设计基础2)C51扩展的数据类型(4种扩展的数据类型)(2)特殊功能寄存器sfr地址单元80H——FFH之间的片内数据存储区;“sfr”数据类型占用一个内存单元;利用它可以访问51单片机内部的所有特殊功能寄存器。sfrSBUF=0x99;例如:(4)特殊功能位sbit片内特殊功能寄存器的可寻址位。习题:片内I/O口P1口的P1.0寻址位置成高电平sbit位变量名=位地址常数;习题:片内I/O口P1口的P1.0寻址位置成低电平3)数据存储类型bdata(1)DATA区。DATA区指片内RAM的低128字节的空间,可直接寻址;寻址是最快的,应该把经常使用的变量放在DATA区。(2)BDATA区。BDATA区是内部RAM可位寻址的16字节存储区(字节地址为20H~2FH)中的128个位。在这个区中声明变量就可进行位寻址。(3)IDATA区。IDATA区是片内RAM的0-256字节的存储区,只能间接寻址,速度比直接寻址慢。(4)PDATA区和XDATA区。PDATA区和XDATA区位于片外存储区;PDATA区指的是外部数据存储区0—256字节。XDATA区指的是外部数据区64KB内的任何地址。(5)程序存储区CODE。CODE区是程序存储区,储存的数据是不可改变的。4)数据存储器模式C51编译器设定的存储器模式:SMALL、COMPACT和LARGE三种模式。2、C51语言的绝对地址访问1)绝对宏C51编译器提供了一组宏定义对code、data、pdata和xdata空间进行绝对寻址。这组宏定义放在absacc.h头文件中:【例】片内RAM、片外RAM定义的程序如下:#include<absacc.h>#definePORTEXBYTE[0xFFC0]/*将PORTE定义为外部I/O,地址为0xFFC0*/#defineNRAMDBYTE[0x40]/*将NRAM定义为片内RAM,地址为0x40*/习题使用绝对宏将片内RAM20H的字节地址单元全部置1。习题:使用绝对宏读取片外RAMF000H字节地址单元的内容。2)_at_关键字使用关键字_at_可对指定的存储器空间的绝对地址进行访问。格式:[存储类型]数据类型变量名_at_地址常数;【例】使用关键字_at_实现绝对地址的访问。dataunsignedchary1_at_0x50;/*在data区定义字节变量y1,地址为50H*/xdataunsignedinty2_at_0x4000;/*在xdata区定义字变量y2,地址为4000H*/voidmain(void){y1=0xff;y2=0x1234;……while(1);}习题:使用关键字_at_读取片内RAM60H单元的内容。【例】使用关键字_at_将片外RAM2000H开始的连续20个字节单元清0。dataunsignedcharbuffer[8]_at_0x40;voidmain(void){unsignedcharj;for(j=0;j<8;j++){buffer[j]=0;}}C51语言的基本运算与标准C类似,主要包括算术运算、关系运算、逻辑运算、位运算和赋值运算及其表达式等。1)算术运算符2)关系运算符3)逻辑运算符4)位运算符01001000&00110111【例】以字节操作方式对I/O口P1的P1.5清0,P1.1置为1,其他位保持不变。sfrP2=0xA0;P2=P2|0x10;sfrP0=0x80;charflag;flag=P0&0x40;4、C51的分支与循环程序结构if(x>y){max=x;}格式:if(x>y){max=x;}else{max=y;}习题:比较变量x和变量y,把二者最小值赋给变量min;习题:如果变量x满足关系10<x<20,则把变量y置成1;否则把y置成0。voidmain