第3章C51语言编程基础.ppt
《第3章C51语言编程基础.ppt》由会员分享,可在线阅读,更多相关《第3章C51语言编程基础.ppt(77页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第3 3章章 C51C51语言编程基础语言编程基础1 1)机器语言)机器语言定义:处理器能直接执行的二进制代码定义:处理器能直接执行的二进制代码特点:效率高、但不易于使用特点:效率高、但不易于使用10110110 00000000 10110101 00000000ADD AADD A,#19#193.1 3.1 编程语言编程语言Keil C51Keil C51简介简介1、编程语言、编程语言2 2)汇编语言)汇编语言 定义:以助记符的形式表示机器语言定义:以助记符的形式表示机器语言 特点:速度快、体积小、但依赖于硬件体系特点:速度快、体积小、但依赖于硬件体系3)高级语言)高级语言独立于机器、
2、面向过程的、接近于人的自然语言。独立于机器、面向过程的、接近于人的自然语言。语言:语言:FORTRAN、C语言语言特点:与硬件无关、易于交流和使用、运行效率低特点:与硬件无关、易于交流和使用、运行效率低X=X+1;X=X+1;编译器编译器链接器链接器X=X+1;程序员程序员高级语言程序高级语言程序机器码机器码单片机如何执行程序指令?单片机如何执行程序指令?Keil C51Keil C51语言是在标准语言是在标准C C的基础上,针对的基础上,针对5151单片机的硬件特点进行单片机的硬件特点进行扩展,并向扩展,并向5151单片机上移植的高效、简洁的实用高级语言。单片机上移植的高效、简洁的实用高级语
3、言。与汇编语言相比的特点:与汇编语言相比的特点:(1)可读性好)可读性好。(2)可模块化开发。)可模块化开发。(3)可移植性好。)可移植性好。(4)生成的代码效率较低。)生成的代码效率较低。2 2、Keil C51Keil C51语言简介语言简介对于对于5151单片机,目前广泛使用的是单片机,目前广泛使用的是Keil C51Keil C51语言,简称语言,简称C51C51语言。语言。3 3、C51C51与标准与标准C C的区别的区别(1 1)库函数的不同。库函数的不同。例如库函数例如库函数printfprintf和和scanfscanf,在标准,在标准C C中,这中,这两个函数通常用于屏幕打印
4、和接收字符,而在两个函数通常用于屏幕打印和接收字符,而在Keil C51Keil C51中,主要用中,主要用于串行口数据的收发。于串行口数据的收发。(3 3)C51C51的变量存储模式与标准的变量存储模式与标准C C中的变量存储模式不一样。中的变量存储模式不一样。标准标准C C是在通用计算机中只有一个程序和数据统一寻址的内存空间。是在通用计算机中只有一个程序和数据统一寻址的内存空间。5151单片机存储区可分为内部数据存储区、外部数据存储区以及程序单片机存储区可分为内部数据存储区、外部数据存储区以及程序存储区。存储区。(4 4)标准标准C C语言没有处理单片机中断的方法。语言没有处理单片机中断的
5、方法。C51C51中有专门处理中断的中断函数。中有专门处理中断的中断函数。(2 2)数据类型有一定的区别。数据类型有一定的区别。在标准在标准C C的基础上又扩展了的基础上又扩展了4 4种类型。种类型。(5 5)头文件的不同。头文件的不同。5151头文件把单片机内部的硬件资源如定时器、中断、头文件把单片机内部的硬件资源如定时器、中断、I/OI/O等所相等所相应的功能寄存器写入头文件内。应的功能寄存器写入头文件内。(6 6)程序结构的差异。程序结构的差异。由于由于5151单片机硬件资源有限,编译系统不允许太多的程序嵌套。单片机硬件资源有限,编译系统不允许太多的程序嵌套。其次,其次,C51C51语言
6、不支持标准语言不支持标准C C的递归特性。的递归特性。4 4、Keil C51Keil C51的开发工具的开发工具Keil Keil Vision3Vision3Keil Keil Vision3Vision3是德国是德国Keil softwareKeil software公司开发的公司开发的C51C51语言开发软件。语言开发软件。这个软件集成了文件编辑处理、编译链接等功能。这个软件集成了文件编辑处理、编译链接等功能。3.2 C513.2 C51语言程序设计基础语言程序设计基础1 1、数据类型与存储类型、数据类型与存储类型1 1)数数据据类类型型2)C51扩展的数据类型(扩展的数据类型(4种扩
7、展的数据类型)种扩展的数据类型)(1 1)位变量)位变量bitbit bit bit的值可以是的值可以是1 1(truetrue),或),或0 0(falsefalse)。)。bit bit 变量名;变量名;格式:格式:例如:例如:bit flag;bit flag;flag=0flag=0;(2 2)特殊功能寄存器)特殊功能寄存器sfrsfr 地址单元地址单元80H80HFFHFFH之间的片内数据存储区;之间的片内数据存储区;“sfrsfr”数据类型占用一个内存单元;数据类型占用一个内存单元;利用它可以访问利用它可以访问5151单片机内部的所有特殊功能寄存器。单片机内部的所有特殊功能寄存器。
8、sfr P1=0 x90sfr P1=0 x90;/定义了定义了P1P1为片内的为片内的P1P1口寄存器;口寄存器;P1 =0 xffP1 =0 xff;/把把P1P1口的所有输出引脚设置为高电平。口的所有输出引脚设置为高电平。例如:例如:sfr sfr 寄存器变量名寄存器变量名 =字节地址常数;字节地址常数;格式:格式:sfr SBUF=0 x99sfr SBUF=0 x99;习题:习题:往串行发送数据缓冲寄存器往串行发送数据缓冲寄存器SBUF写入写入80SBUF=80SBUF=80;习题:习题:从从P0口寄存器读取数据,存放到任意一个变量口寄存器读取数据,存放到任意一个变量X。sfr P0
9、=0 x80sfr P0=0 x80;int xint x;x=P0 x=P0;例如:例如:(3 3)特殊功能寄存器)特殊功能寄存器sfr16sfr16“sfr16sfr16”数据类型占两个内存单元;数据类型占两个内存单元;用于操作占两个字节的特殊功能寄存器。用于操作占两个字节的特殊功能寄存器。sfr16 DPTR=0 x82sfr16 DPTR=0 x82;/定义了片内定义了片内1616位数据指针寄存器位数据指针寄存器DPTRDPTR,/低低8 8位字节地址为位字节地址为82H82H,/高高8 8位字节地址为位字节地址为83H83H。DPTR=0 x1234;DPTR=0 x1234;sfr
10、16 sfr16 寄存器变量名寄存器变量名 =字节地址常数;字节地址常数;格式:格式:字节地址为字节地址为82H、83H存放的数据分别是多少?存放的数据分别是多少?(4 4)特殊功能位)特殊功能位 sbitsbit 片内特殊功能寄存器的可寻址位。片内特殊功能寄存器的可寻址位。“”前是特殊功能寄存器的名字;前是特殊功能寄存器的名字;“”的后面数字是特殊功能寄存器可寻址位在寄存器中的位置,的后面数字是特殊功能寄存器可寻址位在寄存器中的位置,取值必须是取值必须是0-70-7。sbit sbit 位变量名位变量名 =特殊功能寄存器特殊功能寄存器 位位置;位位置;格式:格式:sfr PSW =0 xd0
11、sfr PSW =0 xd0;/定义定义PSWPSW寄存器地址为寄存器地址为0 xd00 xd0sbit FO =PSW 5 sbit FO =PSW 5;/定义定义F0F0位为位为PSW.5PSW.5F0=0;F0=0;例如:例如:习题:片内习题:片内I/OI/O口口P1P1口的口的P1.0P1.0寻址位置成高电平寻址位置成高电平 sfr sfr P1 =0 x90 P1 =0 x90;sbit P1_0=P10sbit P1_0=P10;P1_0 =1P1_0 =1;习题:习题:从从P2口的口的P2.7读取数据,存放到任意一个位变量读取数据,存放到任意一个位变量X。sfr sfr P2 =
12、0 xA0 P2 =0 xA0;sbit P2_7=P27sbit P2_7=P27;bit xbit x;x=P2_7x=P2_7;sbit sbit 位变量名位变量名=位地址常数;位地址常数;sbit CY =0 xD7sbit CY =0 xD7;/*CY/*CY位地址为位地址为0 xD7*/0 xD7*/sbit OV =0 xD2sbit OV =0 xD2;/*OV/*OV位地址为位地址为0 xD2*/0 xD2*/ifif(CY=1CY=1)例如:例如:格式:格式:习题:片内习题:片内I/OI/O口口P1P1口的口的P1.0P1.0寻址位置成低电平寻址位置成低电平sbit P1_
13、0 =0 x90sbit P1_0 =0 x90;P1_0 =0P1_0 =0;在头文件在头文件AT89X51.hAT89X51.h中定义了常用的特殊功能寄存器和可寻址位。中定义了常用的特殊功能寄存器和可寻址位。#include#include sfr sfr P1 =0 x90 P1 =0 x90;sbit P1_0=0 x90sbit P1_0=0 x90;两者区别?两者区别?63 3)数据存储类型)数据存储类型数据存储类型是指数据存放在数据存储类型是指数据存放在5151单片机的哪一个存储器空间。单片机的哪一个存储器空间。bdatadataidatapdataxdatacode(1 1)D
14、ATADATA区。区。DATADATA区指片内区指片内RAMRAM的低的低128128字节的空间,可直接寻址;字节的空间,可直接寻址;寻址是最快的,应该把经常使用的变量放在寻址是最快的,应该把经常使用的变量放在DATADATA区。区。unsigned char unsigned char datadata system_status=0;system_status=0;unsigned int unsigned int datadata unit_id8;unit_id8;例如:例如:格式:格式:数据类型数据类型【存储类型存储类型】变量名;变量名;(2 2)BDATABDATA区。区。BDAT
15、ABDATA区是内部区是内部RAMRAM可位寻址的可位寻址的1616字节存储区(字节地址为字节存储区(字节地址为20H20H 2FH2FH)中的)中的128128个位。个位。在这个区中声明变量就可进行位寻址。在这个区中声明变量就可进行位寻址。例如:例如:unsigned char bdata status_byte;unsigned int bdata status_word;sbit stat_flag=status_byte4;if(status_word15 )stat_flag=1;(3 3)IDATAIDATA区。区。IDATAIDATA区是片内区是片内RAMRAM的的0-2560-
16、256字节的存储区,只能间接寻址,字节的存储区,只能间接寻址,速度比直接寻址慢。速度比直接寻址慢。unsigned char idata system_status=0;float idata value;例如:例如:(4 4)PDATAPDATA区和区和XDATAXDATA区。区。PDATAPDATA区和区和XDATAXDATA区位于片外存储区;区位于片外存储区;PDATAPDATA区指的是外部数据存储区区指的是外部数据存储区0 0256256字节。字节。XDATAXDATA区指的是外部数据区区指的是外部数据区64KB64KB内的任何地址。内的任何地址。unsigned char xdata
17、 system_status=0;unsigned int pdata unit_id8;例如:例如:(5 5)程序存储区)程序存储区CODECODE。CODECODE区是程序存储区,储存的数据是不可改变的。区是程序存储区,储存的数据是不可改变的。unsigned char unsigned char codecode a9 a9=0 x00,0 x01,0 x02,0 x03,0 x04,0 x05,0 x06,0 x07,0 x08;=0 x00,0 x01,0 x02,0 x03,0 x04,0 x05,0 x06,0 x07,0 x08;例如:例如:4 4)数据存储器模式)数据存储器模
18、式C51C51编译器设定的存储器模式:编译器设定的存储器模式:SMALLSMALL、COMPACTCOMPACT和和LARGELARGE三种模式。三种模式。若声明若声明 char var1char var1;在在SMALLSMALL模式下,模式下,var1var1被定位在被定位在datadata存储区;存储区;在在COMPACTCOMPACT模式下,模式下,var1var1被定位在被定位在idataidata存储区;存储区;在在LARGELARGE模式下,模式下,var1var1被定位在被定位在xdataxdata存储区中。存储区中。2 2、C51C51语言的绝对地址访问语言的绝对地址访问C5
19、1C51语言提供了两种比较常用的访问绝对地址的方法,语言提供了两种比较常用的访问绝对地址的方法,对片内对片内RAMRAM、片外、片外RAMRAM及及I/OI/O进行访问。进行访问。绝对地址绝对地址1)绝对宏)绝对宏C51编译器提供了一组宏定义对编译器提供了一组宏定义对code、data、pdata和和xdata空间空间进行绝对寻址。这组宏定义放在进行绝对寻址。这组宏定义放在absacc.h头文件中:头文件中:CBYTE 以字节形式对以字节形式对code区寻址;区寻址;CWORD 以字形式对以字形式对code区寻址;区寻址;DBYTE 以字节形式对以字节形式对data区寻址;区寻址;DWORD
20、以字形式对以字形式对data区寻址;区寻址;XBYTE 以字节形式对以字节形式对xdata区寻址;区寻址;XWORD 以字形式对以字形式对xdata区寻址;区寻址;PBYTE 以字节形式对以字节形式对pdata区寻址;区寻址;PWORD 以字形式对以字形式对pdata区寻址。区寻址。#define#define 变量名变量名 绝对宏绝对宏 字节地址字节地址 格式格式绝对宏绝对宏【例例】片内片内RAMRAM、片外、片外RAMRAM定义的程序如下:定义的程序如下:#include#include#define PORTE XBYTE0 xFFC0#define PORTE XBYTE0 xFFC0
21、/*/*将将PORTEPORTE定义为外部定义为外部I/OI/O,地址为地址为0 xFFC0*/0 xFFC0*/#define NRAM DBYTE0 x40#define NRAM DBYTE0 x40/*/*将将NRAMNRAM定义为片内定义为片内RAMRAM,地址为地址为0 x40*/0 x40*/main()main()PORTE=0 x3D;PORTE=0 x3D;NRAM=0 x01;NRAM=0 x01;/*/*数据数据3DH3DH写入地址写入地址0 xFFC00 xFFC0的外部的外部I/O I/O PORTE*/PORTE*/*/*将数据将数据01H01H写入片内写入片内R
22、AMRAM的的40H40H单元单元*/习题习题 使用绝对宏使用绝对宏将片内将片内RAM 20HRAM 20H的字节地址单元全部置的字节地址单元全部置1 1。#include#include#define M DBYTE0 x0020#define M DBYTE0 x0020/*/*将将M M定义为外部定义为外部RAMRAM,地址为地址为0 x0020*/0 x0020*/main()main()M=0 xff;M=0 xff;习题:习题:使用绝对宏读取片外使用绝对宏读取片外RAM F000HRAM F000H字节地址单元的内容。字节地址单元的内容。#include#include#defin
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C51 语言 编程 基础
限制150内