C语言基础与C51程序设计电脑
C51单片机基础学习教程
C51单片机基础学习教程C51单片机是一种常用的8位单片机,广泛应用于工业控制、家用电器和电子产品等领域。
若想学习C51单片机,首先需要掌握C语言的基础知识。
以下是一个C51单片机基础学习教程,介绍了C语言的相关内容,并给出了一个简单的例子。
一、C语言基础1.数据类型:C语言中主要有整型、字符型、浮点型等数据类型。
可以使用关键字来定义变量并赋值。
示例:int num = 10;char ch = 'A';float f = 3.14;2.运算符:C语言中有算术运算符、逻辑运算符、关系运算符等。
可以用于对变量进行运算和比较。
示例:int a = 10, b = 5;int sum = a + b;int result = (a > b) ? a : b;3.控制语句:C语言中有顺序结构、分支结构和循环结构。
可以用于控制程序的执行流程。
示例:if (num > 0)printf("The number is positive.");} else if (num < 0)printf("The number is negative.");} elseprintf("The number is zero.");4.函数:C语言中可以使用函数将代码模块化,并且可以通过参数和返回值传递数据。
示例:int add(int a, int b)return a + b;二、C51单片机入门2. 创建新项目:在Keil软件中创建一个新的项目,并选择C51单片机作为目标芯片。
3. 编写程序:在新建的项目中打开main.c文件,编写C语言程序。
可以使用C语言的代码编写方式。
示例:#include <reg51.h>//定义LED端口sbit LED = P1^0;void mai//设置LED口为输出LED=0;while (1)//LED闪烁LED=~LED;//延时for (int j = 0; j < 100; j++)}}}5. 调试程序:在Keil软件中打开调试窗口,可以对程序进行单步调试,查看程序的执行流程和变量的值。
单片机应用技术(C语言版)第4章C51程序设计入门ppt课件
10.05.2021
完整最新ppt
8
在计算机中不能随意给一个变量赋任意 的值,因为变量在单片机的内存中要占空 间的,变量不同,所占的空间不同。
为了合理利用单片机的内存空间,在编 程时要设定合适的数据类型。
10.05.2021
完整最新ppt
9
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;
sfr 特殊功能寄存器名 = 地址常数
地址常数范围:0x80~0xff。
特殊功能寄存器定义例子(见reg51.h 、reg52.h等文件):
sfr P0=0x80; 存器
//定义P0寄
sfr P1=0x90; 寄存器
//定义P1口
sfr 10.05.2021 PSW=0x完d整0最新;ppt //定义PSW
10.05.2021
完整最新ppt
14
3、 sbit型位变量的定义
特殊功能寄存器的位声明 一般格式为:
sbit 位变量名 = 位地址表达式 这里的位地址表达式有三种形式: 直接位地址 特殊功能寄存器名带位号 字节地址带位号
10.05.2021
完整最新ppt
15
a、用直接位地址定义位变量
定义特殊功能寄存器的位。例如:
sbit P0_0=0x80; sbit P1_1=0x91; sbit RS0=0xd3; //定义PSW的第3 位
单片机C51语言及程序设计
贰
壹
叁
C51编译器在头文件“REG51.H”中定义了全部sfr/sfr16和sbit变量。 用一条预处理命令#include <REG51.H>把这个头文件包含到C51程序中,无需重新定义即可直接使用它们的名称。
应用举例:
片内数据存储器,片外数据存储器和程序存储器。
通常下划线开头的标识符是编译系统专用的,因此在编写C语言源程序时一般不使用以下划线开头的标识符,而将下划线用作分段符。C51编译器规定标识符最长可达255个字符,但只有前32个字符在编译时有效,因此标识符的长度一般不要超过32个字符。
关键字是一种已被系统使用过的具有特定含义的标识符。用户不得再用关键字给变量等命名。C语言关键字较少,ANSI C标准一共规定了32个关键字,见表
变量名具有字母大小写的敏感性,如SUM和sum代表不同的变量。
【存储类别】 数据类型 【存储器类型】 变量名
变量名不得使用标准C语言和C51语言的关键字。
unsigned char data system_status = 0;
//定义system_status为无符号字符型自动变量,该变量位于data区中且初值为0。
sfr或sfr16型 51MCU中有21个SFR,如何定义与这些单元相关的变量?
例如,sfr P0 = 0x80; //定义P0口地址80H sfr PCON = 0x87; //定义PCON地址87H sfr16 DPTR=0x82; //定义DPTR的低端地址82H
单精度浮点数
for
程序语句
构成for循环结构
goto
程序语句
构成goto转移结构
if
程序语句
第3章51系列单片机程序设计(C语言部分)
idata
间接寻址片内数据存储区,可访问片内全部RAM地址空间(256字节)
pdata
分页寻址片外数据存储区(256字节)由MOV @Ri访问(i=0,1)
xdata
片外数据存储区(64 KB)由MOVX @DPTR访问
code
程序存储器64 KB空间,由MOVC @DPTR访问
第3章 51系列单片机程序设计(C部分)
/* Ary37定义为abry[3]的第7位 */
第3章 51系列单片机程序设计(C部分)
3.5 数 组
数组:数组是一组类型相同 有序数据的集合。用数组名 和下标来唯一确定数组中的 元素。
第3章 51系列单片机程序设计(C部分)
3.5.1 一维数组
一、一维数组的定义 形式:类型说明符 数组名 [常量表达式]
使用C51进行编程时,MCS-51片内的I/O口与片外扩展的I/O可以统一在一个头文 件中定义,也可以在程序中(一般在开始的位置)进行定义。
对于MCS-51片内I/O口按特殊功能寄存器方法定义。 例如:
sfr P0=0x80 ; /* 定义P0口,地址为80H */ sfr P1=0x90 ; /* 定义P1口,地址为90H */
第3章 51系列单片机程序设计(C部分)
3.4.3 C51数据的存储类型与MCS-51存储结构
表 3.4.2 C51存储类型与MCS-51存储空间的对应关系
存储类型 与存储空间的对应关系
data
直接寻址片内数据存储区,访问速度快(128字节)
bdata
可位寻址片内数据存储区,允许位与字节混合访问(16字节)
据 浮点型(float) 类
型 指针类型
详细见表3.4.1
单片机基础与应用(C语言版)第3章 C51程序设计基础
选择语句
多分支选择的switch语句, 其一般形式如下: switch(表达式)
{ case常量表达式1: 语句组1;break; case常量表达式2: 语句组2;break; …… case常量表达式n: 语句组n;break; default : 语句组n+1;
} 该语句的执行过程是:首先计算表达式的值,并逐个与case后的常量表达 式的值相比较,当表达式的值与某个常量表达式的值相等时,则执行对应 该常量表达式后的语句组,再执行break语句,跳出switch语句的执行,继 续执行下一条语句。如果表达式的值与所有case后的常量表达式均不相同, 则执行default后的语句组。
位运算
按位或操作符: |
或操作
格式:x|y
规则:对应位均为0时才为0,否则为1 例如, i=i|0x0f; 等同于
i|=0x0f;
主要用途:将1个数的某(些)位置1,其余各位不变
位运算
异或操作
按位异或操作符:^ 格式:x^y 规则:对应位相同时为0,不同时为1
例如, i=i^0x0f; 等同于 i^=0x0f; 主要用途:使1个数的某(些)位翻转(即原来为1的位 变为0,为0的变为1),其余各位不变。
右移运算符“>>”的功能,是把“>>”左边的操作数 的各二进制位全部右移若干位,移动的位数由“>>” 右边的常数指定。进行右移运算时,如果是无符号数, 则总是在其左端补“0”
练习
1 .若x = 10, 则!X的值为真或假? 2. 若a = 3, b = 2, 则if(a&b)的值为真或假? 3. 5 && 0 ||8的值为?
浮点型 指针型 位类型 特殊功能寄存器 16位特殊功能寄存器 可寻址位
第一章 C51程序设计基础
度降低。
由此可见,在C51程序设计过程中,在满足数据要求的情况 下,应尽可能使用unsigned char变量和bit变量。signed char变 量虽然也只占用一个字节,但需要进行额外的操作来测试代 码的符号位,因此会降低代码执行效率。
17
江
阴
职 业
7、 sfr特殊功能寄存器
技
术
学
院 电
sfr也是一种扩充数据类型,点用一个内存单元,值域为
学学练练:例1-1
6
江
阴
职
业
例1-1
技
术
#include <reg51.h>
学
#include <stdio.h>
院
void main(void)
电
{
子
SCON = 0x50;
//串口方式1,允许接收
工
TMOD = 0x20;
//定时器1定时方式2
程
TCON = 0x40;
//设定时器1开始计数
系
说明 声明一个位标量或位类型的函数 声明一个可位寻址变量 声明一个特殊功能寄存器 声明一个16位的特殊功能寄存器 直接寻址的内部数据存储器 可位寻址的内部数据存储器 间接寻址的内部数据存储器 分页寻址的外部数据存储器 外部数据存储器 程序存储器 定义一个中断函数 定义一个再入函数 定义芯片的工作寄存器
程 (2)选择单片机类型,这里我们选择常用的Ateml公司的
系 AT89C51。
(3)建立文件,编辑源文件,注意保存文件时后缀为.c
(4)向项目中添加刚编辑的C文件。
(5)编译。如发现错误根据输出窗口的信息进行修改。
(6)全速运行。此时打开串行窗口,进行观察串行调试窗 口中不断的打出Hello World!“。
零基础学单片机C语言程序设计 第11章 C51串行接口程序设计
(4)执行写发送缓冲器SBUF语句,示例如下:
SBUF=0x76;
//将0x76送入发送缓冲器
(5)在发送移位脉冲的作用下,数据帧依次从TXD引脚发出。
(6)在8位串行数据发送完毕后,也就是在插入停止位的时候,使TI 置1,用以通知CPU可以发送下一帧的数据。此时可以采用查询或者中 断两种方式来获知TI是否置位。当TI置位后,C51程序中清零TI,以便 于发送下一个数据。
串 行 控 制 寄 存 器 (98H)
RXD(P3.2)
11.1.3 串行接口控制寄存器SCON
控制寄存器SCON的字节地址为98H,可进行位寻址。该寄存 器用于选择串行通信的工作方式和某些控制功能,包括接 收/发送控制及设置状态标志等。
D7 D6 D5 D4 D3 D2 D1 D0
字节地址:98H
第11章 C51串行接口程序设计
11.1 51系列单片机的串行接口
51系列单片机内部集成的全双工串行通信接口电路,常称 为UART。该串行接口电路功能很强,不仅可以进行串行异 步数据的发送和接收,也可以作为一个同步移位寄存器使 用。
11.1.1 单片机串行通信概述
单片机和外部设备可以采用并行通信和串行通信两种方法 进行数据传输。
11.3.3 模式1的数据接收及C51程序设计
串行口的工作模式1为10位异步发送接收方式,单片机RXD 引脚为数据接收端。模式1接收数据中的定时信号可以有两 种,接收移位脉冲和接收字符的检测脉冲。
串行口模式1接收数据时的接收移位脉冲,由定时器1的溢 出信号和波特率倍增位SMOD来共同决定,即由定时器1的溢 出率经过16分频或32分频得到。
P1.0 P1.1 单 P1.2 片 P1.3 机 P1.4 1 P1.5 P1.6 P1.7
单片机c51程序设计
单片机c51程序设计单片机C51程序设计是一门结合了硬件知识和软件编程技能的学科,它广泛应用于自动化控制、智能设备、嵌入式系统等领域。
C51单片机是指使用C语言进行编程的8051系列单片机,它具备丰富的指令集和灵活的编程方式。
下面将从单片机的基本概念、C51编程基础、程序设计步骤以及实例分析等方面进行介绍。
单片机的基本概念单片机,又称微控制器,是一种集成了处理器核心、存储器、输入/输出接口等的微型计算机系统。
它具有体积小、功耗低、成本低、可靠性高等特点。
C51单片机是基于Intel 8051微控制器架构的,具有8位数据总线和16位地址总线,支持多种外设接口。
C51编程基础1. C语言基础:熟悉C语言的基本语法,如变量声明、条件语句、循环语句、函数等。
2. 数据类型:了解C51单片机支持的数据类型,包括特有寄存器位操作。
3. 内存结构:掌握C51单片机的内存结构,包括内部RAM、外部RAM、程序存储器等。
4. 中断系统:理解中断的概念和中断服务程序的编写。
5. 定时器/计数器:了解如何使用单片机的定时器/计数器进行时间控制和事件计数。
程序设计步骤1. 需求分析:明确程序设计的目标和功能需求。
2. 系统设计:设计系统的整体架构,包括硬件连接和软件模块划分。
3. 编写代码:根据设计编写C51程序代码,包括初始化代码、主函数、中断服务程序等。
4. 调试:使用仿真软件或实际硬件对程序进行调试,确保程序正确运行。
5. 优化:根据调试结果对程序进行优化,提高效率和稳定性。
6. 测试:进行全面的测试,确保程序在各种条件下都能稳定运行。
实例分析以一个简单的LED闪烁程序为例,介绍C51程序设计的基本流程:```c#include <reg51.h>// 定义LED连接的端口#define LED_PORT P1void delay(unsigned int ms) {unsigned int i, j;for (i = ms; i > 0; i--)for (j = 110; j > 0; j--);}void main() {while (1) {LED_PORT = 0xFF; // 关闭所有LED灯delay(500); // 延时500msLED_PORT = 0x00; // 打开所有LED灯delay(500); // 延时500ms}}```在这个例子中,我们首先包含了8051单片机的寄存器定义文件`reg51.h`,定义了LED灯连接的端口为P1。
c51单片机应用与c语言程序设计(第4版) ——基于机器人工程对象的项目实践
c51单片机应用与c语言程序设计(第4版) ——基于
机器人工程对象的项目实践
《C51单片机应用与C语言程序设计(第4版):基于机器人工程对象的项目实践》是一本介绍C51单片机应用与C语言程序设计的教材。
该教材以机器人工程对象为载体,通过一系列的项目实践,帮助读者掌握C51单片机的应用和C语言程序设计。
以下是该教材的主要内容:
1. C51单片机的基本概念和硬件结构。
2. C语言程序设计的基本语法和程序结构。
3. C51单片机的各种功能模块,如I/O口、定时器、中断、串口等。
4. 机器人的移动控制、传感器检测、语音识别等方面的应用。
5. 基于机器人的综合项目实践,包括机器人的运动控制、传感器检测、语音识别等功能。
该教材的特点是注重实践和应用,通过机器人工程对象将C51单片机和C 语言程序设计的知识点串联起来,让读者在实践中掌握知识和技能。
此外,该教材还提供了丰富的代码实例和项目案例,方便读者学习和参考。
如果你想学习C51单片机应用和C语言程序设计,同时又对机器人技术感兴趣,那么《C51单片机应用与C语言程序设计(第4版):基于机器人工程对象的项目实践》是一本值得推荐的教材。
C51程序设计
C51程序设计C51程序设计是指通过C语言编写的用于C51单片机的程序。
C51单片机是一种基于8051架构的单片机,具有广泛的应用领域,如电子产品、嵌入式系统等。
在本文中,我将讲述C51程序设计的完整内容,并且给出1200多字的详细说明。
首先,C51单片机具有的特点主要有:易于学习和使用、低功耗、功能强大、扩展性好、体积小、性能稳定等。
C51单片机的硬件结构包括中央处理器(CPU)、存储器、输入输出(I/O)端口等。
中央处理器是C51单片机的核心部件,负责执行指令和控制系统的运行。
存储器用于存储数据和程序,包括随机存储器(RAM)和只读存储器(ROM)。
输入输出端口用于与外部设备进行数据交互,如LED灯、数码管、键盘等。
其次,C语言是一种高级程序设计语言,被广泛应用于嵌入式系统和各种应用程序的开发。
C语言的基本语法包括数据类型、变量、运算符、控制语句、函数等。
数据类型用于定义变量的类型,如整型、字符型、浮点型等。
变量是用于存储数据的标识符,可以在程序中进行赋值、读取和修改。
运算符用于进行各种算术、逻辑和位运算操作。
控制语句用于控制程序的执行流程,如条件语句、循环语句等。
函数是程序的基本模块,用于封装可重用的代码块。
在C51程序设计中,需要安装C51编译器,常用的有Keil C51、Keil C51是一种功能强大、易于使用的C51编译器,提供了丰富的库函数和调试工具,可以大大简化程序的开发和调试过程。
安装完编译器后,可以使用C语言编写C51程序,通过编译、烧写和运行等步骤,将程序加载到C51单片机中执行。
C51程序的设计步骤主要包括需求分析、程序设计、编码实现、编译和烧写、调试和测试等。
需求分析是明确程序的功能和性能要求,根据需求进行程序设计。
程序设计是将需求转化为具体的算法和数据结构,设计程序的模块和接口。
编码实现是根据设计的程序,使用C语言实现具体的功能和操作。
编译和烧写是将C源代码编译为可执行文件,并将可执行文件加载到C51单片机中执行。
C51单片机C语言程序设计
C51单片机C语言程序设计单片机C语言程序设计是指使用C语言编写程序来控制和操作单片机的工作。
单片机是一种集成电路,它包含了中央处理器、存储器、输入输出接口等功能模块,广泛应用于嵌入式系统中。
在单片机C语言程序设计中,首先需要了解C语言的基本语法和语法规则。
C语言是一种面向过程的编程语言,具有简洁、高效和可移植等特点。
接下来,要熟悉单片机的硬件结构和寄存器的使用方法,了解单片机的输入输出方式、中断、定时器等功能。
在进行单片机C语言程序设计时,需要按照以下步骤进行:1.设置寄存器和引脚的初始化:根据单片机的型号和需要的功能,设置相关的寄存器和引脚的初始化。
这些初始化可以包括引脚的输入输出模式设置、中断向量表的初始化、定时器的设定等。
2.主程序的编写:主程序是单片机的执行入口,通过主程序可以完成各种功能的实现。
在主程序中,可以定义变量、函数和结构体等。
3.中断程序的编写:中断程序是由硬件触发的,可以在需要时被调用执行。
中断程序可以包括外部中断、定时器中断等。
在编写中断程序时,需要设置相应的中断向量,并完成相应的中断服务程序。
4.函数的编写:函数是实现其中一特定功能的代码段,通过函数可以提高程序的模块化和可重用性。
需要根据实际需求编写相应的函数,并在主程序中调用。
5. 调试和测试:在编写完程序后,需要进行调试和测试。
通过调试和测试可以发现程序中的bug和错误,并进行修复。
可以通过缓慢单步调试、观察变量值和输出结果等方式进行调试和测试。
6.优化和改进:在程序完成后,可以对程序进行优化和改进。
通过优化可以提高程序的性能和效率,减少资源的占用。
可以使用编译优化选项、减少不必要的计算和内存使用等方式进行优化。
以上是单片机C语言程序设计的基本步骤和内容。
在实际操作中,还需要根据具体的需求和硬件平台进行相应的调整和编程。
通过合理的设计和编程,可以实现单片机的各种功能和应用,广泛应用于电子设备、汽车、家电等领域。
无论是初学者还是有经验的程序员,都可以通过单片机C语言程序设计来进一步提高和拓展自己的技能。
秦志强. c51单片机应用与c语言程序设计
秦志强. c51单片机应用与c语言程序设计1.引言现代电子技术越来越发达,各种微型化、智能化的电子产品层出不穷。
而这些电子产品中最基础,最常见的就是微处理器。
其中一个代表性的微处理器就是C51单片机。
而C语言是目前最为流行的软件语言之一,不仅应用广泛,而且易于学习。
本文将介绍C51单片机的应用以及与C语言程序设计的相关知识。
2.C51单片机的基础知识C51单片机是由美国晶体公司(ATMEL)生产的一种8位微处理器,具有低功耗、高性能、高可靠性、多功能等特点。
C51单片机的寄存器较少,但功能强大。
它集成了许多外设,如定时器、串口等。
3.C51单片机的应用范围C51单片机的应用范围较广,主要用于嵌入式系统中,如:电子门铃、计数器、定时器、自动控制系统、温度控制系统等。
另外,C51单片机还可以用于工业控制、汽车电子、通信、家用电器等领域。
4.C语言程序设计基础知识C语言是一种程序设计语言,用于编写高效、可读性强的应用程序。
C语言程序设计包括语法、数据类型、运算符、控制语句、函数、指针等基础知识。
5.C语言程序设计与C51单片机应用的结合在C51单片机应用中,C语言程序设计是必不可少的一部分。
C语言程序设计可以实现对C51单片机的控制和调度。
C语言程序设计还可以将C51单片机与其他电子产品进行联合,实现更广泛的应用。
6.C51单片机和C语言程序设计案例下面是一款基于C51单片机和C语言程序设计的智能化监测系统。
该系统可以监测房间温度、湿度、光照强度等参数,并根据用户设定的阈值进行自动控制。
程序中,通过ADC模块对温度、湿度、光照强度等传感器进行采集。
然后,根据用户设定的阈值和当前值进行比较,控制系统的运行状态。
具体实现步骤如下:1.定义变量。
定义温度、湿度、光照强度等变量。
2.初始化。
对ADC模块进行初始化,启用相应的传感器。
3.采集数据。
使用ADC模块读取传感器的数据,并将其存储在相应的变量中。
4.分析数据。
第4章 C语言基础与C51程序设计
用途
说明
位标量声明
声明一个位标量或位类型的函数
位标量声明
声明一个可位寻址变量
特殊功能寄存器声明
声明一个特殊功能寄存器
特殊功能寄存器声明
声明一个16位的特殊功能寄存器
存储器类型说明
直接寻址的内部数据存储器
存储器类型说明类型说明
间接寻址的内部数据存储器
存储器类型说明
分页寻址的外部数据存储器
第4章 C语言基础与C51程序设计
数据类型 unsigned char char unsigned int int unsigned long long float
* bit sfr sfr16 sbit
长度
大小
1字节 0~255
1字节 -128~+127
2字节 0~65535
2字节 -32768~+32767
(3)C51变量的存储模式与标准C中变量的存储模式不一 样,C51中变量的存储模式是与MCS-51单片机的存储器紧 密相关; (4)C51与标准C的输入输出处理不一样,C51中的输入输 出是通过MCS-51串行口来完成的,输入输出指令执行前必 须要对串行口进行初始化; (5)C51与标准C在函数使用方面也有一定的区别,C51中 有专门的中断函数。
第4章 C语言基础与C51程序设计
2.C语言与MCS-51单片机
用C语言编写MCS-51单片机程序与用汇编语言编写MCS– 51单片机程序不一样。
用汇编语言编写MCS–51单片机程序必须要考虑其存储器 结构,尤其必须考虑其片内数据存储器与特殊功能寄存器的 使用以及按实际地址处理端口数据。
用C语言编写的MCS–51单片机应用程序,则不用像汇编 语言那样须具体组织、分配存储器资源和处理端口数据,但 在C语言编程中,对数据类型与变量的定义,必须要与单片 机的存储结构相关联,否则编译器不能正确地映射定位。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
锐普PPT论坛chinakui转载:
主要内容
1 2 C51语言概述 C51语设计
函数的定义与调用
说明:第4章有以下印刷错误,请给予修正
页码 p98 章节或标题 【例4.2】 分 别使用三种方 法编写下面三 个函数。 原错误 起始地址为 80H的片外RAM 中 更正为 起始地址为80H 的片内RAM中
1.2 MCS-51与标准C
(1)C51中定义的库函数和标准C语言定义的库函数不同。标准 的C语言定义的库函数是按通用微型计算机来定义的,而C51中的库 函数是按MCS-51单片机相应情况来定义的; (2)C51中的数据类型与标准C的数据类型也有一定的区别,在 C51中还增加了几种针对MCS-51单片机特有的数据类型; (3)C51变量的存储模式与标准C中变量的存储模式不一样,C51 中变量的存储模式是与MCS-51单片机的存储器紧密相关; (4)C51与标准C的输入输出处理不一样,C51中的输入输出是通 过MCS-51串行口来完成的,输入输出指令执行前必须要对串行口进 行初始化; (5)C51与标准C在函数使用方面也有一定的区别,C51中有专门 的中断函数。
2. C51语言的基本语法
1.C51数据类型 2.变量的存储种类及存储类型 3.绝对地址访问 4.C51运算符和表达式
2.1 C51的数据类型
基本数据类型
类型 符号 有 整 型 无 有 实 型 有 字 有 符 型 无 关键字 (signed) int (signed) short (signed) long unsigned int unsigned short int unsigned long int float double char unsigned char 数的表示范围 所占位数 16 -32768~32767 16 -32768~32767 32 16 16 32 32 64 8 8 -2147483648~2147483647 0~65535 0~65535 0~4294967295 3.4e-38~3.4e38 1.7e-308~1.7e308 -128~127 0~255
2.2.1 变量的存储种类
存储种类是指变量在程序执行过程中的作用范围。C51 变量的存储种类有四种,分别是自动(auto)、外部(extern) 、静态(static)和寄存器(register)。 1.auto:作用范围在定义它的函数体或复合语句内 部。所有变量默认为自动(auto)变量。 在定义它的函数体或复合语句被执行时,C51才为该变量 分配内存空间,当函数调用结束返回或复合语句执行结束时 ,自动变量所占用的内存空间被释放,这些内存空间又可被 其他的函数体或复合语句使用。可见使用自动变量能最有效 地使用MCS-51单片机内存。
7.位类型 这也是C51中扩充的数据类型,用于访问MCS-51单片机 中的可寻址的位单元。在C51中,支持两种位类型:bit型和 sbit型。它们在内存中都只占一个二进制位,其值可以是 “1”或“0”。 区别:用bit定义的位变量在C51编译器编译时,在不同 的时候位地址是可以变化的,而用sbit定义的位变量必须与 MCS-51单片机的一个可以寻址位单元或可位寻址的字节单元 中的某一位联系在一起,在C51编译器编译时,其对应的位 地址是不可变化的。
6.特殊功能寄存器型
这是C51扩充的数据类型,用于访问MCS-51单片机中的特 殊功能寄存器数据,它分sfr和sfr16两种类型。其中:
sfr为字节型特殊功能寄存器类型,占一个内存单元,利 用它可以访问MCS-51内部的所有特殊功能寄存器; sfr16为双字节型特殊功能寄存器类型,占用两个字节单 元,利用它可以访问MCS-51内部的所有两个字节的特殊功能 寄存器。 在C51中对特殊功能寄存器的访问必须先用sfr或sfr16进 行声明。
2.extern:在一个函数体内,要使用一个已在该函数体外 或别的程序中定义过的外部变量时,该变量在该函数体内要 用extern说明。 文件1为file1.c 文件2为file2.c int i,j; //定义全局变量 extern int i,j;//将i char c; ,j从文件1中复制过来 void func1(int k); extern char c;//将c main() 复制过来 { func2 () func1(20); //调用函数 { ... static float k; } i=j*5/100; func1(int k) //用户定义函数 ... { } ...; } //将i,j和c从文件1带 入文件2
C51的数据类型扩充定义
sfr:特殊功能寄存器定义
sfr16:sfr的16位数据定义
sbit:可位寻址字节或sfr中位的定义
bit:位变量定义
数 据 类 型 bit 长 度 位 大 0或1 小
sfr
sfr16 sbit
1字节
2字节 位
0~255
0~65535 0或1
1.字符型char 有signed char和unsigned char之分,默认为signed char。它们的长度均为一个字节,用于存放一个单字节的 数据。 对于signed char,它用于定义带符号字节数据,其 字节的最高位为符号位,“0”表示正数,“1”表示负数 ,补码表示,所能表示的数值范围是-128~+127; 对于unsigned char,它用于定义无符号字节数据或 字符,可以存放一个字节的无符号数,其取值范围为0~255 。unsigned char可以用来存放无符号数,也可以存放西 文字符,一个西文字符占一个字节,在计算机内部用ASCII 码存放。
3.static:分为局部静态变量和全局静态变量。 在函数体内部定义的静态变量为内部静态变量,它在对应的 函数体内有效,一直存在,但在函数体外不可见,当离开函数 时值不被改变。 外部静态变量作用于仅限于变量被定义的文件中。其它文件 中即使用extern声明也没法使用它。 4.register:
使用register定义的变量称为寄存器变量。它定义的变 量存放在CPU内部的寄存器中,处理速度快,但数目少。C51编 译器编译时能自动识别程序中使用频率最高的变量,并自动将 其作为寄存器变量,用户可以无需专门声明。
★ 汇编语言程序 ORG 0000H L00: MOV R0,#10H ;查找16个字节 MOV R1,#00H MOV DPTR,#2000H L11: MOVX A,@DPTR CJNE A,#00H,L16 ;取出内容与 00H相等吗? INC R1 ;取出个数加1 L16: INC DPTR DJNZ R0,L11 ;未完继续 MOV DPTR,#2100H MOV A,R1 MOVX @DPTR,A ;相同数个数送 2100H L1E: SJMP L1E ★查找零的个数C-51程序 #include <reg51.h> main ( ) { unsigned char xdata *p=0x2000 ;/*指针p指向2000H单元*/ int n=0,i; for(i=0;i<16;i++) { if(*p==0) n++; /* 若 该单元内容为零,则n+1 */ p++; /* 指 针指向下一单元 */ } p=0x2100; /* 指 针p指向2100H单元 */ *p=n; /* 把 个数放在2100H单元中 */ }
2.2.2
变量的存储类型
说明变量所处单片机的存储区域
名称 data 存储空间位置 直接寻址片内RAM低128B 长度 8位 数据范围 0~255
bdata
idata pdata xdata code
可位寻址片内RAM(20-2FH)
间接寻址片全部内RAM 片外RAM低256B 片外RAM全部64K 程序ROM64K
1位
8位 8位 16位 16 位
0/1
0~255 0~255 0~65535 0~65535
存储器类型 data bdata
说
明
直接寻址的片内数据存储器低128B,访问速度 最快 可位寻址的片内数据存储器(地址20H~2FH共 16B、128位)允许位和字节混合访问
idata
pdata xdata
sfr P0= 0x80; /*因P0口的寄存器是可位寻址的*/ sbit P0_0=P0^0; /*所以P0_0为P0中的P0.0引脚*/ 除了以上定义方式外,还可以用P0.0的地址去写,如: sbit P0_0=0x80;
定义变量例: 数据类型 变量名 var1;
unsigned int bit flags;
2.2 变量的存储种类和存储类型
变量是一种在程序执行过程中,其数值不断 变化的量。C51规定变量必须先定义后使用。C51
对变量定义的格式如下:
[存储种类] 数据类型 [存储器类型] 变量名表
定义变量例:
extern unsigned int data var1; static bit data flags; auto unsigned char code vector[10];
2.int整型 分singed int和unsigned int。默认为signed int。 它们的长度均为2个字节,用于存放一个双字节数据。对于 signed int,用于存放两字节带符号数,补码表示,数的 范畴为-32768~+32767。对于unsigned int,用于存放两字 节无符号数,数的范围为0~65535。 3.long长整型 分singed long和unsigned long。默认为signed long 。它们的长度均为四个字节,用于存放一个四字节数据。对 于signed long,用于存放四字节带符号数,补码表示,数 的范畴为-2147483648~+2147483647。对于unsigned long ,用于存放四字节无符号数,数的范围为0~4294967295。