当前位置:
文档之家› 单片机应用技术(C语言版)第4篇C51程序设计入门
单片机应用技术(C语言版)第4篇C51程序设计入门
2018/12/27
19
4、 bit型位变量的定义
常说的位变量指的就是bit型位变量。 C51的bit型位变量定义的一般格式为: [存储类型] bit 位变量名1[=初值] [,位变量名2[=初值]] [,…] bit位变量被保存在RAM中的位寻址区 域 例如: bit flag_run=0; static bit send_bit;
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定义的是绝对定位的 变量(因为名字是与确定地址对应的), 具有特定的意义,在应用时不能像一般变 量那样随便使用。
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 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); }
data 片内RAM,直接寻址,低128字节 bdata 片内RAM,位寻址区0x20~0x2f,可字节访 问 idata 片内RAM,间接寻址,256字节,与 @Ri 对 应 片外RAM,低256字节,与MOVX @Ri 对应 pdata xdata 片外RAM,64KB全空间 code ROM空间,64KB全空间
[存储类型] [存储区域] 数据类型 变量名1[=初值] [,变量名2[=初值]] [,…] static unsigned char data i=0;
2018/12/27
24
2、 C51变量的存储类型
按照ANSI C,C语言的变量有4种存储类 型: (P71) 动态存储(auto) 静态存储(static) 全局存储(extern) 寄存器存储(register)
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}; //定义共阴极数码管段码数组
2
本章内容完全是结合单片机来讲解,也就 是补充C语言在单片机方面的概念、数据定 义和函数定义等。 通过本章学习,使读者能够比较顺利地 编写C51程序。
2018/12/27
3
“C51”概念:把“单片机C语言”称 为“C51”,也称为“Keil C”。
用C51编写单片机程序,与用ANSI C 编写程序的不同之处是,需要根据单片 机存储器结构及内部资源,定义相应的 数据类型和变量。 其它的语法规定、程序结构及程序 设计方法,都与ANSI C相同。
2018/12/27
30
(4)寄存器变量
寄存器(存储)变量:用register定义的 变量为寄存器变量。 寄存器变量存放在CPU的寄存器中,这 种变量处理速度快,但数目少。 C51中的寄存器变量: C51的编译器在 编译时,能够自动识别程序中使用频率高的 变量,并将其安排为寄存器变量,用户不用 专门声明,对C51无实际意义。
无符号长整型 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
d、几点说明
1)用sbit定义的位变量,必须能够按位 操作,而不能够对无位操作功能的位定义位 变量。 2)用sbit定义位变量,必须放在函数外 面作为全局位变量,而不能在函数内部定义。 3)用sbit每次只能定义一个位变量。 4)用sbit定义的是一种绝对定位的位变 量(因为名字是与确定位地址对应的),具 有特定的意义,不能随便使用。
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;
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位
2018/12/27
6
3、 C51扩展的关键字
由于单片机在结构及编程上的特殊要求,C51 有自己的特殊关键字,称之为C51扩展的关键字, 下面给出常用的C51扩展的关键字。 _at_ bdata bit code data idata interrupt pdata reentrant sbit sfr sfr16 xdata 这些关键字在后面会陆续接触到,此处先不给 出它们的含义。
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
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
25
(1)动态变量
动态(存储)变量:用auto定义的为动 态变量,也叫自动变量。 作用范围:在定义它的函数内或复合语 句内部。执行时,分配存储空间,结束时释 放存储空间。 定义变量时,auto可以省略
2018/12/27
26
(2)静态变量
静态(存储)变量:用static定义的为静 态变量。函数退出时,变量的值不消失。分 为静态局部和静态全局变量。 静态局部变量:在函数体内定义 静态全局变量:在函数体外部定义
2018/12/27 31
3、 C51变量的存储区域(P57)
变量的存储区属性是单片机扩展的概念, 非常重要,它涉及到6个新的关键字。 MCS-51单片机有四个存储空间,分成 三类,它们是片内RAM、片外RAM和 ROM。
2018/12/27
32
表4.2 C51存储区与存储空间的对应关系
关键字
对应的存储空间及范围
2018/12/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
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
9
表4-1 C51数据类型、长度和数值范围