单片机应用技术 工业和信息化高职高专“十二五”规划教材立项项目 教学课件 ppt 作者 李海涛 第3章 MCS-51系单片机C语言程序设计

上传人:E**** 文档编号:89355754 上传时间:2019-05-23 格式:PPT 页数:78 大小:506KB
返回 下载 相关 举报
单片机应用技术 工业和信息化高职高专“十二五”规划教材立项项目  教学课件 ppt 作者  李海涛 第3章  MCS-51系单片机C语言程序设计_第1页
第1页 / 共78页
单片机应用技术 工业和信息化高职高专“十二五”规划教材立项项目  教学课件 ppt 作者  李海涛 第3章  MCS-51系单片机C语言程序设计_第2页
第2页 / 共78页
单片机应用技术 工业和信息化高职高专“十二五”规划教材立项项目  教学课件 ppt 作者  李海涛 第3章  MCS-51系单片机C语言程序设计_第3页
第3页 / 共78页
单片机应用技术 工业和信息化高职高专“十二五”规划教材立项项目  教学课件 ppt 作者  李海涛 第3章  MCS-51系单片机C语言程序设计_第4页
第4页 / 共78页
单片机应用技术 工业和信息化高职高专“十二五”规划教材立项项目  教学课件 ppt 作者  李海涛 第3章  MCS-51系单片机C语言程序设计_第5页
第5页 / 共78页
点击查看更多>>
资源描述

《单片机应用技术 工业和信息化高职高专“十二五”规划教材立项项目 教学课件 ppt 作者 李海涛 第3章 MCS-51系单片机C语言程序设计》由会员分享,可在线阅读,更多相关《单片机应用技术 工业和信息化高职高专“十二五”规划教材立项项目 教学课件 ppt 作者 李海涛 第3章 MCS-51系单片机C语言程序设计(78页珍藏版)》请在金锄头文库上搜索。

1、第3章 MCS51系单片机C语言程序设计,实训任务3 LED显示电路 3.1 C语言与MCS51单片机 3.2 C51的数据与运算 3.3 C51程序基本结构与控制语句 3.4 函数 3.5 C51构造数据类型,实训任务3 LED显示电路,任务:将09这十个数循环送P0口七段LED上显示 C51程序: #include “reg51.h“ sbit P20=P20; void mDelay(unsigned int DelayTime) unsigned int j=0; for(;DelayTime0;DelayTime-) for(j=0;j125;j+) ; ,实训任务3 LED显示电路

2、,void main() unsigned char str10=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; unsigned char i; P20=1; while(1) for(i=0;i10;i+) P0=stri; mDelay(1000); /*延时1000毫秒*/ ,3.1 C语言与MCS51单片机,在进行单片机应用系统的程序设计时,汇编语言是一种常用的软件工具。它能直接操作硬件,指令的执行速度快。但其指令系统的格式受硬件结构的限制很大,程序不易理解,且难于编写与调试,可移植性也差。目前在单片机的开发应用中,已逐渐开始引入

3、高级语言,C语言就是其中的一种。采用C语言不必对单片机的具体硬件结构和指令系统有深入的了解,也能够编出符合硬件实际的程序。,3.1.1 C语言与MCS51单片机,用C语言编写的MCS51单片机应用程序(本书后面简称为C51程序),虽然不用像汇编语言那样须具体组织、分配存储器资源和处理端口数据,但在C51语言编程中,对数据类型与变量的定义,必须要与单片机的存储结构相关联,否则编译器不能正确地映射定位。 深入理解并应用C51对标准C的扩展是学习C51的关键之一。,3.1.2 C51程序结构,用C语言编写单片机应用程序与标准的C语言程序在语法规则、程序结构及程序设计方法等方面基本相同,但C51程序与

4、标准的C程序在以下几个方面是不一样: (1)C51中定义的库函数和标准C语言定义的库函数不同。标准的C语言定义的库函数是按通用微型计算机来定义的,而C51中的库函数是按MCS-51单片机结构来定义的; (2)C51中的数据类型与标准C的数据类型也有区别,在C51中还增加了几种针对MCS-51单片机特有的数据类型;,3.1.2 C51程序结构,(3)C51变量的存储模式与标准C中变量的存储模式不一样,C51中变量的存储模式是与MCS-51单片机的存储器结构紧密相关; (4)C51与标准C的输入输出处理方式不一样,C51中的输入输出是通过MCS-51串行口来完成的,输入输出指令执行前必须要对串行口

5、进行初始化; (5)C51与标准C在函数使用方面也有一定的区别,C51中有专门的中断函数。,3.2 C51的数据与运算 3.2.1 数据与数据类型,表3-1 Keil Cx51的数据类型,3.2.1 数据与数据类型,C51扩展的数据类型 (1) bit位型 bit是C51编译器的一种扩充数据类型,利用它可定义一个位变量,但不能定义位指针,也不能定义位数组。它的取值是一个二进制位,不是0就是1。 (2)sbit位型 sbit是也是C51编译器的一种扩充数据类型,利用它可从字节中定义一个位寻址对象,来访问片内RAM中的可寻址位或特殊功能寄存器中的可寻址位。,3.2.1 数据与数据类型,(3)sfr

6、/sfr16特殊功能寄存器型 MCS-51单片机内部所有8位的特殊功能寄存器都可以用sfr数据类型来访问,占用一个内存单元,值域为0255。而16位的特殊功能寄存器用sfr16类型来访问。对可位寻址的特殊功能寄存器中的位变量用sbit来定义。,3.2.2 常量与变量,常量是在程序运行过程中其值不能改变的量。而变量是在程序运行过程中其值可以不断变化的量。 一、常量 常量的数据类型可以有整型、浮点型、字符型、字符串型和位标量。常量可用在不必改变值的场合,如固定的数据表、字库等。 1整型常量 整型常量可以表示为十进制形式、十六进制形式加上前缀0(读作零)X或0x或八进制形式用数字0作前缀 。长整型常

7、量在数字后面加字母L。 2浮点型常量 浮点型常量可表示为十进制形式和指数形式。 3字符型常量 字符常量是指用单引号括起来的单个字符。转义字符是一种特殊的字符常量。,3.2.2 常量与变量,4字符串常量 字符串常量是由一对双引号括起来的字符序列。系统会在字符串尾部加上转义字符0作为字符串的结束标志。 5位常量 位常量是一位二进制值0或1。 6符号常量 常量也可以用一个符号来表示。符号常量在使用之前必须先作定义。定义方式如下: # define 标识符 常量 /*用预处理命令,把标识符定义为其后的常量值*/ 例 :# define PI 3.14,3.2.2 常量与变量,二、变量 变量数据类型可以

8、选用C51所有支持的数据类型。 在程序中使用变量必须定义后使用,在C51程序设计中,定义一个变量的格式如下: 存储种类 数据类型 存储器类型 变量名表;,3.2.2 常量与变量,1数据类型 变量的数据类型可以是C51编译器支持的各种数据类型。指定数据类型时要注意变量的数值范围。在程序中应尽可量使用无符号字符变量和位变量。 2变量名 变量名即变量的标识,要使用合法的C语言标识符。合法的C标识符由字母、数字和下划线组成,且必须由字母或下划线开头,字母的大小写不等价。在C51编译器中,标识符的有效位数不能超过32位。,3.2.2 常量与变量,3.存储器类型 MCS-51单片机的存储器结构和一般微型计

9、算机不同,在MCS-51单片机中程序存储器和数据存储严格分开,各有片内和片外两部分,特殊功能寄存器和片内数据存储器统一编址。存储器类型就是说明单片机的存储区域情况。存储器类型指定了该变量在MCS-51单片机中使用的存储区域。 Keil C51编译器能识别的存储器类型有data、bdata、idata 、pdata、xdata、code几种。,3.2.2 常量与变量,表3-3 存储器类型,3.2.2 常量与变量,例: unsigned int code num10=0,1,4,9,16,25,36,49,64,81; unsigned char data x; int idata a=0; sb

10、it flag1=status_10; unsigned char pdata y1;,3.2.2 常量与变量,三、特殊功能寄存器变量 在C51中,允许用户对这些特殊功能寄存器进行访问,访问时必须通过sfr或sfr16数据类型说明符进行定义,定义时指明它们所对应的片内RAM单元的地址,使定义后的特殊功能寄存器变量与51单片机的SFR对应。 特殊功能寄存器变量定义格式如下: sfr 8位特殊功能寄存器名=特殊功能寄存器字节地址常数; sfr16 16位特殊功能寄存器名=特殊功能寄存器字节地址常数; 例如:sfr PSW=0xd0; sfr16 DPTR=0x82;,3.2.2 常量与变量,四、位

11、变量 在C51中,允许用户通过位类型符定义位变量。位类型符有两个:bit和sbit。可以定义两种位变量。 bit位类型符用于定义一般的可位处理位变量。它的定义格式如下: bit 位变量名; 位变量的存储器类型只能是bdata、data、idata。即位变量的空间只能是片内RAM的可位寻址区20H2FH,严格来说只能是bdata。 例如: bit data a1; /*正确*/ bit bdata a2; /*正确*/ bit pdata a3; /*错误*/ bit xdata a4; /*错误*/,3.2.2 常量与变量,sbit位类型符用于定义在可位寻址字节或特殊功能寄存器中的位,定义时须

12、指明其位地址,可以是位直接地址,可以是可位寻址变量带位号,也可以是特殊功能寄存器名带位号。定义格式如下: sbit 位变量名=位地址常数; 例如: sbit CY=oxd7; unsigned char bdata flag; sbit flag0=flag0; sfr P1=0x90; sbit P1_0=P10; sbit P1_2=0x902;,3.2.3 绝对地址的访问,在C51程序中可以使用存储单元的绝对地址来访问存储器。C51提供了三种访问绝对地址的方法: 1使用C51中绝对宏: C51编译器提供了一组宏定义来对51系列单片机的code、data、pdata和xdata空间进行绝对

13、寻址。在头文件absacc.h中定义了8个绝对宏 。宏名为:CBYTE、DBYTE、PBYTE、XBYTE、CWORD、DWORD、PWORD或XWORD。,3.2.3 绝对地址的访问,访问形式如下: 宏名地址 其中:CBYTE以字节形式对code区寻址,DBYTE以字节形式对data区寻址,PBYTE以字节形式对pdata区寻址,XBYTE以字节形式对xdata区寻址,CWORD以字形式对code区寻址,DWORD以字形式对data区寻址,PWORD以字形式对pdata区寻址,XWORD以字形式对xdata区寻址。 在程序中,使用预处理命令“include ”后就可使用其中定义的宏来访问绝对

14、地址。,3.2.3 绝对地址的访问,例如: #include /*将绝对地址头文件包含在文件中*/ #define uchar unsigned char #define uint unsigned int void main(void) uchar var1; uint var2; var1=XBYTE0x0005; /*利用XBYTE0x0005访问片外RAM的0005H字节单元,取单元内容赋值给变量var1*/ var2=XWORD0x0002; /*利用XWORD0x0002访问片外RAM的0004H字单元*/ ,3.2.3 绝对地址的访问,2使用C51扩展关键字_at_ 使用_at_

15、对指定的存储器空间的绝对地址进行访问,一般格式如下: 存储器类型 数据类型说明符 变量名 _at_ 地址常数; 说明: (1)通过这种绝对地址定义的变量不能被初使化; (2)bit型函数及变量不能用_at_指定。 (3)使用_at_定义的变量必须为全局变量。 例如: data char x1 _at_ 0x40; /*在data区中定义字符变量x1,它的地址为40H*/ xdata int x2 _at_ 0x2000; /*在xdata区中定义整型变量x2,它的地址为2000H*/,3.2.3 绝对地址的访问,3通过指针访问 Keil C51编译器允许使用者规定指针指向的存储段,这种指针叫具

16、体指针。使用具体指针的好处是节省了存储空间。采用具体指针的方法,可以实现在C51程序中对任意指定的存储器单元进行访问。 例4-1 通过指针实现绝对地址的访问。 #define uchar unsigned char /*定义符号uchar为数据类型符unsigned char*/ #define uint unsigned int /*定义符号uint为数据类型符unsigned int*/,3.2.3 绝对地址的访问,void main(void) uchar data var1; uchar pdata *p1; /*定义一个指向pdata区的指针p1*/ uint xdata *p2; /*定义一个指向xdata区的指针p2*/ uchar data *p3; /*定义一个指向data区的指针p3*/ p1=0x30; /*p1指针赋值

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号