最新MCS-51单片机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单片机指令系统与汇编语言程序设计
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编译器在头文件“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单片机的中断系统
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语言部分)
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程序设计
能够进行直接访问,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程序设计
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)
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语言程序设计基础
上例的枚举就使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中。
51单片机C语言程序设计-图文
/* 名称:8 只 LED 左右来回点亮 说明:程序利用循环移位函数_crol_和_cror_形成来回滚动的效果
*/ #include<reg51.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int //延时 void DelayMS(uint x) {
case 2: //东西向黄灯闪烁,绿灯关闭 DelayMS(300); YELLOW_A=~YELLOW_A;GREEN_A=1; if(++Flash_Count!=10) return; //闪烁 5 次 Flash_Count=0; Operation_Type=3; break;
case 3: //东西向红灯,南北向绿灯亮 RED_A=0;YELLOW_A=1;GREEN_A=1; RED_B=1;YELLOW_B=1;GREEN_B=0; DelayMS(2000); Operation_Type=4; break;
3 Ykcsh 呈献
0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff }; //延时 void DelayMS(uint x) {
uchar i; while(x--) {
for(i=0;i<120;i++); } } //主程序 void main() { uchar i; while(1) { //从数组中读取数据送至 P0 和 P2 口显示
uchar i; while(x--) {
for(i=0;i<120;i++); } } //主程序 void main() { uchar i; P2=0x01; while(1) {
MCS51单片机C语言
第2章 MCS-51系列单片机的指令统及汇编语言程序设计
2.1.2 MCS-51单片机寻址方式
– 3. 存放器寻址
– 例:MOV A,R7 ;将通用存放器R7中的
数送
给A,即(A)←(R7)
– 操作数〔源操作数〕存放在当前工作存放器组 中某个存放器中,这种寻址方式称为存放器寻 址。
– 存放器寻址方式的寻址范围包括:
第2章 MCS-51系列单片机的指令统及汇编语言程序设计
2.1.2 MCS-51单片机寻址方式
– 5. 变址寻址
• 例:MOVC A,@A+DPTR ;将地址为 (A)+(DPTR)的 ROM单元中的数送 给A
• 操作数是以(DPTR)为基址,(A)为变址,将两者之 和作为地址,找出该地址对应的ROM单元,再将该 单元的数送给A,这种寻址方式称为变址寻址方式。
第2章 MCS-51系列单片机的指令统及汇编语言程序设计
2.1.2 MCS-51单片机寻址方式
– MCS-51指令系统的7种寻址方式,概括起来如下表所 示。
7种寻址方式及其寻址空间
第2章 MCS-51系列单片机的指令统及汇编语言程序设计
2.2 MCS-51单片机指令系统
• MCS-51单片机指令系统有5类共111条指令, 按照功能分类,可以分为以下五大类:
加器
A,即(A)←(30H)
– 操作数〔源操作数〕是直接给出内部RAM中某
个单元的地址或名称〔特殊功能存放器〕,这 种寻址方式称为直接寻址 。
– 直接寻址方式的寻址范围包括:
– 〔1〕内部RAM的128个单元。
– 〔2〕特殊功能存放器。
– 应当说明的是,直接寻址方式是对所有特殊功 能存放器读/写的唯一寻址方式。
第4章MCS-51系列单片机C语言程序设计
第4章 MCS-51系列单片机C语言程序设计
4.1 MCS-51系列单片机的C编译器
1.Tasking Crossview51 Tasking公司原名为BSO/Tasking,是一家专业开发和销 售嵌入式系统软件工具的公司,于1974年创建于荷兰。 Tasking公司一直为Intel、LSI、Motorola、Philips、Siemens、 Texas Instruments等著名半导体厂商的微处理器、数字信号 处理器(DSP)以及单片机编写高级语言编译器等配套软件开 发工具,先后开发过8 bit、16 bit、32 bit、64 bit的 MCU/DSP/RISC交叉编译程序。该公司生产多种单片机的交 叉模拟程序(Simulators),可在无目标机的情况下模拟单片机 的运行以及I/O口的行为。
第4章 MCS-51系列单片机C语言程序设计
上面提到的这些C51编译器都非常相似,特别是Keil C51和 IAR EW8051编译器的集成开发环境的外观和使用方法甚至与可 视化C/C++的开发环境相似。它们都支持用户采用模块化结构开 发和设计大的、复杂的应用程序,在视窗操作系统中使用集成开 发环境编译、汇编、连接多模块结构程序都可以由IDE代理一次 性完成。
这些C51的集成开发环境都提供无需硬件仿真器(Hardware Debugger)的模拟仿真器(Simulator),在单片机应用系统的软件中, 有些代码与单片机的硬件无关,开发这部分代码时可以利用模拟 仿真器实现快速仿真。
本书中的C语言程序源码都是在IAR EW8051集成开发环境下 编写的,有关IAR EW8051集成开发环境(IDE)的使用说明请参考 下一节的内容,或者直接到IAR System公司的主页() 下载IAR EW8051集成开发环境学习版及其用户手册或IAR EW8051 C编译器用户手册。
MCS-51单片机C语言程序设计
格式如下:
类型
函数名(参数表)
参数说明;
{
数据说明部分;
执行语句部分;
}
Page 8
吉林大学整通理信pp工t 程学院
2021/3/4
C51程序结构说明: 1)C语言是由函数构成的。
一个C源程序至少包含一个函数,也可以包含一个main 函数和若干其他函数。函数是C程序的基本单位。
2)函数分为2大类: 一类是库函数,一类是用户自定义函数。库函数是C51 在库文件中已定义的函数,其函数说明在其头文件中 。用户函数是用户自己定义,自己调用的一类函数。
2021/3/4
二、C51编译器 用C语言编写的应用程序必须经单片机的C语言
编译器(简称C51),转换生成单片机可执行的代码程 序。支持MCS–51系列单片机的C语言编译器有很多 种。如: American Automation
IAR Avocet Dunfield Shareware Bso/Tasking KEIL/Franklin
Page 11
吉林大学整通理信pp工t 程学院
2021/3/4
C51程序开发过程 C51源程序是一个ASCII文件,可以用任何标准的
ASCII文件编辑器来编写,如:写字板,记事本等。
C51程序机构与一般C语言没有什么差别,程序的书 写格式自由度高,灵活性强,有较大的任意性。
Page 12
吉林大学整通理信pp工t 程学院
Page 6
吉林大学整通理信pp工t 程学院
2021/3/4
三、C51程序结构 C51源程序大体上是一个函数定义的集合,集合中 仅有一个名为main的主函数。主函数是程序的入口 ,主函数中所有语句执行完毕,则程序执行完成。
第2章 MCS-51单片机C程序设计
2、什么是C语言?C语言有什么特点?
C语言是一种结构化的高级语言。 优点:可读性好、移植容易,可直接实现对系 统硬件的控制。 缺点:占用资源较多,执行效率没有汇编高。
第2章 MCS-51单片机C程序设计
量则需要重新定义。
第2章 MCS-51单片机C程序设计
延安大学西安创新学院
变量名不得使用标准C语言和Cx51语言的关键字。
Cx51扩展的若干关键字一览表
第2章 MCS-51单片机C程序设计
延安大学西安创新学院
数据结构定义举例 unsigned char data system_status = 0; 初值为零 变量名为system_status 位于片内RAM区 无符号字符型 自动型
第2章 MCS-51单片机C程序设计
延安大学西安创新学院
快捷键在程序调试中的使用 项目进行编译、连接后 Ctrl+F5进入调试状态 F10单步执行 F11跟踪到函数内部
第2章 MCS-51单片机C程序设计
延安大学西安创新学院
Cx51编译器在头文件“reg51.h”中定义了全部sfr/sfr16和sbit变 量。
用一条预处理命令#include <reg51.h>把这个头文件包含到 C51程序中,无需重定义即可直接使用它们的名称。
第2章 MCS-51单片机C程序设计
可见,C51指针变量突出了两个问题: 1)指针变量自身位于哪个存储区域; 2)该指针的值指向的是哪个存储区域里的地址。
第2章 MCS-51单片机C程序设计
延安大学西安创新学院
例1 unsigned char xdata * pi; 解:若编译器默认的存储类型为data,则指针pi自身被存 放在data区内,它是指向 xdata 存储区的无符号字符型变量。
51单片机的C语言应用基础程序设计
0x80~0xFF。
例如: sfr SCON=0x98; /* 串口控制寄存器地址98H */
sfr TMOD=0x89; /* 定时器/计数器方式控制寄存器地址89H */
单片机的C语言应用程序设计
对于位寻址的SFR中的位,C51的扩充功能支持特殊
位的定义,像SFR一样不与标准C兼容,使用“sbit”来
{ flag=1;
/* INT1中断服务程序,使用第2组工
作寄存器 */ /* 设置标志 */
status=p1;
} void main(void) { IP=0x04 ; IE=0x84 ;
/* 存输入口状态 */
/* 置INT1为高优先级中断 */ /* INT1开中断,CPU开中断 */
单片机的C语言应用程序设计
absacc.h是C51中绝对地址访问函数的头文件,将PORTA定义
为外部I/O口,地址为 FFC0H,长度为8位。 一旦在头文件或程序中对这些片外I/O口进行定义后,在程序 中就可以自由使用变量名与其实际地址的联系,以便使程序员能 用软件模拟51的硬件操作。
单片机的C语言应用程序设计
1.5 51内部资源使用的C语言编程
sbit OV=0XD0^2 ;
/* 定义OV位地址是D0H字节
中的第2位 */
sbit CY=0XD0^7 ;
/* 定义CY位地址是D0H字节中
的第7位 */
单片机的C语言应用程序设计 第三种格式:sbit bit-name = int constant; "="后的int constant为寻址位的绝对位地址。例如: sbit OV=0XD2 ; sbit CY=0XD7 ; /* 定义OV位地址为D2H */ /* 定义CY位地址为D7H */