预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共78页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

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

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