单片机应用技术(C语言版)第4篇C51程序设计入门

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2018/12/27
19
4、 bit型位变量的定义
常说的位变量指的就是bit型位变量。 C51的bit型位变量定义的一般格式为: [存储类型] bit 位变量名1[=初值] [,位变量名2[=初值]] [,…] bit位变量被保存在RAM中的位寻址区 域 例如: bit flag_run=0; static bit send_bit;
[存储类型] [存储区域] 数据类型 变量名1[=初值] [,变量名2[=初值]] [,…] static unsigned char data i=0;
2018/12/27
24
2、 C51变量的存储类型
按照ANSI C,C语言的变量有4种存储类 型: (P71) 动态存储(auto) 静态存储(static) 全局存储(extern) 寄存器存储(register)
2、 16位特殊功能寄存器的定义
定义的一般格式为: sfr16 特殊功能寄存器名=地址常数 地址常数范围:0x80~0xff。 例如(见reg51.h、reg52.h等文件): sfr16 DPTR=0x82; sfr16 T2=0xcc; TH2
2018/12/27
//含TL2和
13
几点说明: 1)定义特殊功能寄存器中的地址必须 在0x80~0xff范围内。 2)定义特殊功能寄存器,必须放在函 数外面作为全局变量。 3)用sfr或sfr16每次只能定义一个特 殊功能寄存器。 4)用sfr或sfr16定义的是绝对定位的 变量(因为名字是与确定地址对应的), 具有特定的意义,在应用时不能像一般变 量那样随便使用。
d、几点说明
1)用sbit定义的位变量,必须能够按位 操作,而不能够对无位操作功能的位定义位 变量。 2)用sbit定义位变量,必须放在函数外 面作为全局位变量,而不能在函数内部定义。 3)用sbit每次只能定义一个位变量。 4)用sbit定义的是一种绝对定位的位变 量(因为名字是与确定位地址对应的),具 有特定的意义,不能随便使用。
2018/12/27 31
3、 C51变量的存储区域(P57)
变量的存储区属性是单片机扩展的概念, 非常重要,它涉及到6个新的关键字。 MCS-51单片机有四个存储空间,分成 三类,它们是片内RAM、片外RAM和 ROM。
2018/12/27
32
表4.2 C51存储区与存储空间的对应关系
关键字
对应的存储空间及范围
2018/12/27
9
表4-1 C51数据类型、长度和数值范围
数据类型
无符号字符型
表示方法
unsigned char unsigned int signed int
长度 1字节 0~255
数值范围
有符号字符型 signed char 1字节 -128~127
无符号整型 有符号整型 2字节 0~65535 2字节 -32768~32767 4字节 0~4294967295
2018/12/27
35
7)定义存储在xdata区域的动态unsigned int数组: unsigned int xdata receiv_buf[50]; 8)定义存储在code区域的unsigned char 数组: unsigned char code a[10]= {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d,0x7d,0x07,0x7f,0x6f}; //定义共阴极数码管段码数组
1、 C51概述
2018/12/27
4
2、
C语言编程的优势
在编程方面,使用C51较汇编语言有诸多 优势: 1)编程容易 2)容易实现复杂的数值计算 3)容易阅读与交流 4)容易调试与维护程序 5)容易实现模块化开发 6)程序可移植性好
2018/12/27 5
用汇编语言编写程序时,必须考虑其存 储器的结构,尤其要考虑其片内数据存储器、 特殊功能寄存器是否正确合理的使用,以及 按照实际地址端口数据的处理。
10
补充: C51特殊功能寄存器与位变量 的定义(P82)
主要内容
1、 2、 3、 4、 8位特殊功能寄存器的定义 16位特殊功能寄存器的定义 sbit型位变量的定义 bit型位变量的定义
2018/12/27
11
1、 8位特殊功能寄存器的定义
定义的一般格式为: sfr 特殊功能寄存器名 = 地址常数 地址常数范围:0x80~0xff。 特殊功能寄存器定义例子(见reg51.h、 reg52.h等文件): sfr P0=0x80; //定义P0寄 存器 sfr P1=0x90; //定义P1口 寄存器 2018/12/27 12 sfr PSW=0xd0; //定义PSW
34
4)定义存储在bdata区域的动态unsigned char变量: unsigned char bdata operate, operate1;
5)定义存储在idata区域的动态unsigned char数组: unsigned char idata temp[20]; 6)定义在pdata区域的动态有符号int数组: int pdata send_data[30];
2018/12/27
16
b、特殊功能寄存器名带位号定义
定义格式为: sbit 位变量名 = 特殊功能寄存器名^ 位号常数 这里的位号常数为0~7。例如: sbit P0_3=P0^3; sbit P1_4=P1^4; sbit OV=PSW^2; //定义PSW的第2 位 sbit ES=IE^4; //定义IE的第4位
2018/12/27
6
3、 C51扩展的关键字
由于单片机在结构及编程上的特殊要求,C51 有自己的特殊关键字,称之为C51扩展的关键字, 下面给出常用的C51扩展的关键字。 _at_ bdata bit code data idata interrupt pdata reentrant sbit sfr sfr16 xdata 这些关键字在后面会陆续接触到,此处先不给 出它们的含义。
2018/12/27 20
数据类型转换(p56)
1)自动转换 把赋值号右边的类型转换成左边的类型。 A: 实型赋予整型 B: 整型赋予实型 C: 字符型赋予整型 D: 整型赋予字符型
2018/12/27
21
2)强制转换 像ANSI C一样,通过强制类型转换 的方式进行转换。如: unsigned int b; float c; b=(int)c;
2018/12/27 29
#include<stdio.h> void main() { int max(int,int);//对被调函数的声明 int A=13,B=3;定义外部变量 printf(“%d\n”,max(A,B)); } int max(int x,int y)//定义子函数 { int z; z=x>y?x:y; return(z); }
2018/12/27
25
(1)动态变量
动态(存储)变量:用auto定义的为动 态变量,也叫自动变量。 作用范围:在定义它的函数内或复合语 句内部。执行时,分配存储空间,结束时释 放存储空间。 定义变量时,auto可以省略
2018/12/27
26
(2)静态变量
静态(存储)变量:用static定义的为静 态变量。函数退出时,变量的值不消失。分 为静态局部和静态全局变量。 静态局部变量:在函数体内定义 静态全局变量:在函数体外部定义
2018/12/27
30
(4)寄存器变量
寄存器(存储)变量:用register定义的 变量为寄存器变量。 寄存器变量存放在CPU的寄存器中,这 种变量处理速度快,但数目少。 C51中的寄存器变量: C51的编译器在 编译时,能够自动识别程序中使用频率高的 变量,并将其安排为寄存器变量,用户不用 专门声明,对C51无实际意义。
2018/1来自百度文库/27
22
4.2 C51变量存储区域
1、 C51变量的定义 2、 C51变量的存储类型 3、 C51变量的存储区域 4、 C51变量定义举例 5、 C51变量的存储模式
2018/12/27
23
1、 C51变量的定义
C51变量定义的一般格式为: [存储类型] 数据类型 [存储区域] 变量名1[=初值] [,变量名2[=初值]] [,…] 或
2018/12/27 14
3、 sbit型位变量的定义
特殊功能寄存器的位声明 一般格式为: sbit 位变量名 = 位地址表达式 这里的位地址表达式有三种形式: 直接位地址 特殊功能寄存器名带位号 字节地址带位号
2018/12/27
15
a、用直接位地址定义位变量
定义特殊功能寄存器的位。例如: sbit P0_0=0x80; sbit P1_1=0x91; sbit RS0=0xd3; //定义PSW的第3 位 sbit ET0=0xa9; //定义IE的第1位
无符号长整型 unsigned long
有符号长整型 signed long 4字节 -2147483648~ 2147483647 浮点型 float 4字节 ±1.1755E-38~ ±3.40E+38 特殊功能寄 sfr 1字节 0~255 2018/12/27 存器型 sfr16 2字节 0~65535
2018/12/27 7
4.1 C51基本数据类型
1、数据类型:数据的不同格式。 2、数据类型分类:基本型(表4.1)、构 造类型(数组、结构体、共同体、枚 举)、指针类型和空类型
2018/12/27
8
在计算机中不能随意给一个变量赋任意 的值,因为变量在单片机的内存中要占空 间的,变量不同,所占的空间不同。 为了合理利用单片机的内存空间,在编 程时要设定合适的数据类型。
单片机应用技术
(C语言版)
第4章 C51程序设计入门
2018/12/27
1
第4章 单片机C语言及程序设计
目录
4.1 4.2 4.3 4.4 C51的基本数据类型 C51变量的存储区域 C51的运算符 数组 4.5 4.6 4.7 4.8 指针 结构 C51程序设计 函数的定义与调用
2018/12/27
若非必要,不要多用静态变量
2018/12/27
27
(3)外部变量
外部(存储)变量:用extern声明的变 量为外部变量,是在其它文件定义过的全局 变量。 用extern声明后,便可以在所声明 的文件中使用。
2018/12/27
28
补充: 函数的定义:函数功能的确立,包括制 定函数名、函数值类型、形参及其类型、 函数体等,是一个完整的、独立的函数 单位。 函数的声明:把函数的名字、函数类型 以及形参类型、个数和顺序通知编译系 统,以便在调用该函数时系统按此进行 对照检查。
17
2018/12/27
c、寄存器地址带位号定义位变量
定义格式为: sbit 位变量名 = 特殊功能寄存器地址^ 位号常数 这里的位号常数同上,为0~7。例如: sbit P0_6=0x80^6; sbit P1_7=0x90^7; sbit OV=0xd0^2; //定义PSW的第2 位 sbit ES=0xa8^4; // 定义 IE 的第 4 位 2018/12/27 18
2
本章内容完全是结合单片机来讲解,也就 是补充C语言在单片机方面的概念、数据定 义和函数定义等。 通过本章学习,使读者能够比较顺利地 编写C51程序。
2018/12/27
3
“C51”概念:把“单片机C语言”称 为“C51”,也称为“Keil C”。
用C51编写单片机程序,与用ANSI C 编写程序的不同之处是,需要根据单片 机存储器结构及内部资源,定义相应的 数据类型和变量。 其它的语法规定、程序结构及程序 设计方法,都与ANSI C相同。
2018/12/27 33
4、 C51变量定义举例
1)定义存储在data区域的动态 unsigned char变量: unsigned char data sec=0, min=0, hou=0; 2)定义存储在data区域的静态 unsigned char变量: static unsigned char data scan_code=0xfe; 3)定义存储在data区域的静态 unsigned int变量: 2018/12/27 static unsigned int data d;
data 片内RAM,直接寻址,低128字节 bdata 片内RAM,位寻址区0x20~0x2f,可字节访 问 idata 片内RAM,间接寻址,256字节,与 @Ri 对 应 片外RAM,低256字节,与MOVX @Ri 对应 pdata xdata 片外RAM,64KB全空间 code ROM空间,64KB全空间
相关文档
最新文档