最新MCS-51单片机C语言程序设计

合集下载

MCS51单片机C语言编程

MCS51单片机C语言编程

实验二 MCS-51单片机C语言编程练习一. 实验目的1. 了解单片机的C51语言与汇编语言以及标准C语言的异同,掌握C51语言的基本语法知识以及特有的程序设计特点。

2. 掌握使用C51语言进行顺序、分支、循环结构的程序设计方法。

3. 能够使用C51语言,独立设计出具有一定综合性的单片机应用程序,并与汇编语言的相应程序进行比较,加深理解。

4. 对应用问题能抽象出数学模型,绘制软件程序的流程图,并能用C51语言实现。

二.预习与思考1. 预习理论教材中“C51语言程序设计”的相关内容,掌握C51程序设计的基本方法、思路以及设计规范。

2. 预习理论教材中“C51程序设计”的相关例程。

3. 掌握单片机C51语言的调试方法,体会与标准C语言的异同。

4. 思考如何使用C51语言,对顺序、分支、循环结构的单片机应用程序进行设计,重点体会C51语言特有的设计方法与思想。

三. 实验原理1. 单片机的C51语言简介通常,将一些能够对MCS—51系列单片机进行硬件操作的C语言统称为C51语言。

在众多的C51语言中,功能最强、最受用户欢迎的是德国KEIL公司的Keil C51语言。

单片机应用系统的程序设计,既可以采用汇编语言,也可以采用C51语言,两者各具特色。

其中,汇编语言是一种用助记符来代表机器语言的符号语言。

因为它最接近机器语言,所以汇编语言对单片机的操作直接、简捷,编写的程序紧凑、执行效率较高。

但是,不同种类的单片机其汇编语言存在一定的差异。

在一种单片机上开发的应用程序,通常不能直接应用到另一种单片机芯片上,如果进行程序的移植,难度也比较大。

与此同时,汇编语言开发的程序可读性较差,不容易理解,特别是当单片机应用系统的规模比较大时,汇编语言的编程工作量非常大,从而影响应用系统的开发效率。

相对而言,C51语言恰好可以克服汇编语言的一些缺欠。

例如,C51语言可读性好、可移植性高,与自然语言比较接近,并且相同功能的程序使用C51语句的数量要远小于汇编语句。

大学课件MCS51单片机指令系统与汇编语言程序设计

大学课件MCS51单片机指令系统与汇编语言程序设计

ANL C, P ; (C)← (C)∧(P)
其中:P是PSW的第0位,C是PSW的第7位。
(4)字节符号地址(字节名称)加位序号的形式。对于部分特 殊功能寄存器(如状态标志寄存器PSW),还可以用其字节名 称加位序号形式来访问某一位。AC 如:
定义:操作数存放在MCS-51内部的某个工作寄存器Rn (R0~R7)或部分专用寄存器中,这种寻址方式称为 寄存器寻址。
特点:由指令指出某一个寄存器的内容作为操作数。 存放操作数的寄存器在指令代码中不占据单独的一个 字节,而是嵌入(隐含)到操作码字节中。
寻址范围:四组通用寄存器Rn(R0~R7)、部分专用 寄存器( A, B, DPTR, Cy )。
伪指令只出现在汇编前的源程序中,仅提供汇编用的某些控制 信息,不产生可执行的目标代码,是CPU不能执行的指令。
(1)定位伪指令ORG
格式:ORG n
其中:n通常为绝对地址,可以是十六进制数、标号或表达式。
功能:规定编译后的机器代码存放的起始位置。在一个汇编 语言源程序中允许存在多条定位伪指令,但每一个n值都应和前
2.2.2 直接寻址
定义:将操作数的地址直接存放在指令中,这种寻址方式称为 直接寻址。 特点:指令中含有操作数的地址。该地址指出了参与操作的数 据所在的字节单元地址或位地址。计算机执行它们时便可根据 直接地址找到所需要的操作数。
寻址范围:ROM、片内RAM区、SFR和位地址空间。P42
2.2.3 寄存器寻址
定义:指令中给出的操作数是一个可单独寻址的位地址,这种寻址 方式称为位寻址方式。
特点:位寻址是直接寻址方式的一种,其特点是对8位二进制数中 的某一位的地址进行操作。
寻址范围:片内RAM低128B中位寻址区、部分SFR(其中有83位 可以位寻址)。

单片机C51语言及程序设计

单片机C51语言及程序设计
1)将SFR的绝对位地址定义为位变量名



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
程序语句

mcs51单片机c语言程序设计

mcs51单片机c语言程序设计

MCS51单片机的中断系统
MCS51单片机的中断系统是其处理突发事件的重要机制。
MCS51单片机支持多个中断源,包括外部中断、定时器中断等。当某个中断源触发时,单片机可以 暂停当前的任务,转而处理该中断事件,处理完毕后再回到原来的任务继续执行。这使得单片机能够 快速响应突发事件,提高系统的实时性。
通过ADC0809芯片实现 模拟信号到数字信号的 转换,并将结果输出到 LED显示。
04
MCS51单片机的硬件资源与编 程
MCS51单片机的IO端口
MCS51单片机的IO端口是其与外部设备交互的重要接口。
MCS51单片机拥有多个IO端口,每个端口都有一组引脚与之对应,可以用于输 入和输出操作。这些端口可以配置为输入模式或输出模式,以便读取外部设备的 状态或控制外部设备。
MCS51单片机的定时器/计数器
MCS51单片机的定时器/计数器用于产生定时信号和控制时 间间隔。
MCS51单片机内部有多个定时器/计数器,可以用于产生精 确的定时信号或者对外部事件进行计数。这些定时器/计数器 可以独立配置,以适应不同的应用需求。通过定时器/计数器 ,单片机可以实现定时操作、延时操作等功能。
MCS51单片机的串行通信接口
MCS51单片机的串行通信接口是其 与其他设备进行数据交换的重要通道 。
VS
MCS51单片机支持多种串行通信协 议,如UART、SPI等。通过串行通信 接口,单片机可以与其他设备进行数 据交换,实现远程控制、数据采集等 功能。在串行通信过程中,单片机需 要对数据进行格式化、校验等处理, 以确保数据的正确性和可靠性。
MCS51单片机C语言程序的调试方法
仿真调试
使用仿真器进行程序调试,观察程序 运行状态和变量值的变化。

第3章51系列单片机程序设计(C语言部分)

第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

MCS51单片机的C程序设计

MCS51单片机的C程序设计
1、特殊功能寄存器的定义 80C51单片机内部有21个特殊功能寄存器,为了对它们
能够进行直接访问,C51编译器利用扩充的关键字sfr和sfr16对 这些特殊功能寄存器进行定义。sfr的定义方法为:
sfr 特殊功能寄存器名 = 地址常数;
例如:
sfr SCON = 0x90;/*定义串行口控制寄存器,地址为0x90 */ sfr P0 = 0x80; /*定义P0口,地址为0x80 */ sfr16 T2 = 0xCC;/*定义80C52的T2L地址为0xCC,T2H地址为0xCD*/
0,1
1
0,1
8
0~255
16
0~65535
二、C51数据的存储器类型
应用程序中使用的任何数据(变量和常量)必须以 一定的存储器类型定位于单片机的相应的存储区域中。
存储器类型 长度(位) 对应单片机存储器
bdata data idata pdata xdata code
Copyright ©2010 CUGB 2020年2月24日星期一
main() { 局部变量说明; 执行语句; 函数调用(实际参数表); }
Copyright ©2010 CUGB 2020年2月24日星期一
函数1(形式参数说明) { 局部变量说明; 执行语句; 函数调用(实际参数 表);
}
…… …… 函数n(形式参数说明) { 局部变量说明; 执行语句; 函数调用(实际参数 表);
访问片内RAM比访问片外RAM的速度要 快得多,所以对于经常使用的变量应该置于片 内RAM中,即用bdata、data、idata来定义; 对于不经常使用的变量或规模较大的变量应该 置于片外RAM中,即用pdata、xdata来定义。
例如: bit bdata flags; /* 位变量flags定位在片内RAM的位寻址区 */ char data var; /* 字符变量var定位在片内RAM区 */ float idata x,y,z; /* 实型变量x,y,z定位在片内间址RAM区 */ sfr P1=0x90; /* 定义P1口地址为90H */

MCS-51单片机C51程序设计

对C51编译器来说,short类型和int类型相 同,double类型和float类型相同。

19:04
张兴忠制作:
返回目录
14
5.2.2 数据类型
-----C51的数据类型
除此之外,为了更加有利地利用MCS-51的结构,C51还增 加了一些特殊的数据类型,包括bit、sbit、sfr、sfr16。 数据类型如表5-2所示。
C51编译器针对MCS-51单片机硬件在下列几方面 对ANSI C进行了扩展。 1) 扩展了专门访问MCS-51单片机硬件的数据类型;
2) 存储类型按MCS-51单片机存储空间分类;
3) 存储模式遵循存储空间选定编译器模式;
4) 指针分为通用指针和存储器指针; 5) 函数增加了中断函数和再入函数。
19:04
19:04
张兴忠制作:
返回目录
16
5.2.2 数据类型
2.int整型
-----int整型
int整型长度为2B,用于存放一个双字节数据。
signed int表示的数值范围是-32768~+32767,字 节中最高位表示数据的符号,0表示正数,1表示负 数。
unsigned int表示的数值范围是0~65535。
第5章 MCS-51单片机C51程序设计
5.5.3 循环结构程序
5.5.4 查表程序
5.6 C51程序设计实例 5.6.1 单片机内/外部资源应用 程序设计 5.6.2 C51语言和MCS-51汇编语 言混合编程 5.6.3 编程优化的概念 习题与思考题
返回目录
5.4.4 对被调函数的说明
5.4.5 中断函数
标识符用来标识源程序中某个对象的名字,这些对
象可以是语句、数据类型、函数、变量、数组等。

第三章 MCS51系列单片机的C语言及其编程

bit LockBit; bit SwitchSta = 0; sfr P0 = 0x80; sbit Switch = P0^1; int bdata ibase; char bdata bary[4]; sbit mybit0 = ibase^0; sbit mybit1 = bary[0]^7;
位型(bit)
1. 程序的基本构成
数据结构 算法
基本类型
字符型(char) 整型(int) 长整型(long) 浮点型(float) 双精度浮点型(double) 数组(array) 构造类型 结构体(struct) 共用体(union) 枚举型(enum) 指针类型 双精度浮点型
2. C51的数据结构 C51的数据结构
• 循环控制
先判断后执行:for(;;), while… 先判断后执行:for(;;), while… 先执行后判断:do…while… 先执行后判断:do…while…
第三节 函数和指针
• 指针是C语言的一个重要概念,使用指针可以使程 指针是C
序简洁、紧凑、高效。
变量名和变量值 内存单元地址和内存单元内容 变量的指针和指向变量的指针变量
第一节
MCS51的系统开发流程及 MCS51的系统开发流程及 KeilC简介 KeilC简介
目标分析 硬件设计 软件设计
仿真与调试 开发完成
1、单片机系统及的开发流程 • 单片机系统是软硬件综合体
• 开发工具的选择
(1) 开发软件的选择 (2) 仿真器的选择
2、KeilC集成开发环境简介
第二节 C51编程及其使用 C51编程及其使用
• C51中,各个函数的地位是平等的,在定义函数时,不 C51中 各个函数的地位是平等的,在定义函数时, 能堪套定义

MCS-51单片机的C语言程序设计基础

enum Week (Mon= 1,Tue,Wed,Thu,Fri,Sat,Sun);
上例的枚举就使week值从1到7,这样的赋值也符合我们日常生活中对周次时序关系的定义。使 用枚举就如变量一样,但在程序中不能为其赋值。 定义类型在某种程度上同枚举类型相似,因为定义允许用一个文本串代替另一个文本串,例如 :
表3-1 C51语言所支持的数据类型
注:(1)Bit:位标量。 Bit位标量是C51语言的一种扩充数据类型,利用它可定义一个位标量,但不能定:义位指针,也不能定 义位数组。它的值是一个二进制数,不是0就是1,类似一些高级语言中的Boolean类型中的TRUE和FALSE 。 (2)SFR:特殊功能寄存器。 SFR也是一种扩充数据类型,占用一个内存单元(8位),值域为O~255。利用它可以访问MCS-51单 片机内部的所有特殊功能寄存器。如用SFR Pl=O*90这一条语句定义PI(T作寄存器),则其为P1端口在片 内的寄存器,在后面的语句中我们可以用P1= 255(对Pl端口的所有引脚置高电平)之类的语句来操作特殊 功能寄存器。 (3)SFR16: 16位特殊功能寄存器。 SFR16占用两个内存单元(1 6位),值域为0~65 535。SFR16和SFR -样用于操作特殊功能寄存器,所 不同的是它用于操作占两个字节的寄存器,如定时器TO和Tl。 (4)Sbit:可寻址位。 Sbit是C51中的一种扩充数据类型,利用它可以访问芯片内部的RAM中的可寻址位或特殊功能寄存器中 的可寻址位,如先前定义:
看了上面的例子,就会发现枚举值不用赋值就能使用,这是因为在枚举列表中,每一项名称代 表一个整数值,在默认的情况下,编译器会自动为每一项赋值,第一项赋值为0,第二项为1……如w 色ek中的Sun为0,Fri为5。C语言也允许对各项值作初始化赋值,要注意的是在对某项值初始化后, 它的后续各项值也随之递增,如:

MCS51单片机C语言程序设计基础


本章主要内容
• C51变量声明
• C51的IO口操作
• C51的中断响应方法
• C51的定时器操作
• C51的串行口操作
• C51的外部总线扩展操作
2.1 C51语言变量声明
但在C语言编程中,对数据类型与变量的定义必须 要与单片机的存储结构相关联,否则编译器就不能正 确的映射。 所以用C语言编写单片机应用程序是要根据单片机 的结构及内部资源定义相应的C语言中的数据类型和 变量。 用C语言编写的应用程序必须经单片机的C语言编 译器,将源代码转换成单片机的可执行程序。支持 MCS-51系列单片机的编译器有很多,比较著名也是 实际应用最多的是KEIL/Franklin编译器。这也是这门 课使用的编译器。
;双字节无符号数加法 程序 (R3R4+R6R7)=(R3R4) ;入口 :R3,R4,R6,R7 NADD :MOV A,R4 ADD A,R7 MOV R4,A MOV A,R3 ADDC A,R6 MOV R3,A RET unsigned int val_1, val_2; unsigned int val_add; val_add = val_1 + val_2;
第二章 MCS51单片机C语言程序设计
C语言具有很强的表达能力,并具 有较高的可移植性,提供了种类丰富的 运算符和数据类型,可以直接实现对系 统硬件的控制。 相对于汇编语言,使用C语言进行 系统开发可以大大缩短开发周期,明显 增强程序的可读性,便于改进和扩充。
本章就介绍使用C语言开发8051系 列单片机程序的方法。
三、C51存储模式
表2.4 存储模式说明 存储模式 说明
SMALL
参数及局部变量放入可直接寻址的片内存储区 (最大128个字节),默认存储类型是data,访 问方便。所有对象都嵌入片内RAM中。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档