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

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

±1.176E-38~±3.40E+38(6位有效数 字) ±1.176E-38~±3.40E+38(10位有效 数字) 0~65535(存储空间)
百度文库
指针
24
3
二、C51数据类型修饰符
表2.2 C51存储类型修饰符
存储类型 与存储空间的对应关系 data bdata 直接寻址片内数据存储区,访问速度快(128字节),值 域 0~127 可位寻址片内数据存储区,允许位与字节混合访问(16 字节,值域0~127
本章主要内容
• C51变量声明
• C51的IO口操作
• C51的中断响应方法
• C51的定时器操作
• C51的串行口操作
• C51的外部总线扩展操作
2.1 C51语言变量声明
但在C语言编程中,对数据类型与变量的定义必须 要与单片机的存储结构相关联,否则编译器就不能正 确的映射。 所以用C语言编写单片机应用程序是要根据单片机 的结构及内部资源定义相应的C语言中的数据类型和 变量。 用C语言编写的应用程序必须经单片机的C语言编 译器,将源代码转换成单片机的可执行程序。支持 MCS-51系列单片机的编译器有很多,比较著名也是 实际应用最多的是KEIL/Franklin编译器。这也是这门 课使用的编译器。
三、C51存储模式
表2.4 存储模式说明 存储模式 说明
SMALL
参数及局部变量放入可直接寻址的片内存储区 (最大128个字节),默认存储类型是data,访 问方便。所有对象都嵌入片内RAM中。
参数及局部变量放入分页片外存储区(最大256 个字节),默认存储类型是pdata,通过寄存器 COMPACT R0和R1间接寻址,栈空间位于8051系统内部数 据区。 LARGE 参数及局部变量都放入片外数据存储器(最大 64K),默认存储类型为xdata,使用DPTR访问。 访问效率较低。
第二章 MCS51单片机C语言程序设计
C语言具有很强的表达能力,并具 有较高的可移植性,提供了种类丰富的 运算符和数据类型,可以直接实现对系 统硬件的控制。 相对于汇编语言,使用C语言进行 系统开发可以大大缩短开发周期,明显 增强程序的可读性,便于改进和扩充。
本章就介绍使用C语言开发8051系 列单片机程序的方法。
xdata
code
二、C51数据修饰符
表2.3 其他修饰符
修饰符名称
const
功能
指示被修饰的变量或者指针是常量
volatile
指示被修饰的变量或者指针可由多种原因被修改, 禁止优化。常用于修饰多个函数公用的变量。
三、C51变量声明举例
C51变量声明格式:
[存储类型]+[类型说明]+[修饰符]+[标示符]=[初值]
idata
pdata
间接寻址片内数据存储区,可访问片内全部RAM地址空 间(256字节,值域0~255
分页寻址片外数据存储区,,由MOVX @Ri访问(i=0,1), 值域 0~255 片外数据存储区(64KB)由MOVX @DPTR访问,值域 0~65535 程序存储器64KB空间,由MOVC @DPTR访问,值域 0~65535
auto register static extern char unsigned char int unsigned int long unsigned long float double bit sfr sfr16 sbit data bdata idata pdata xdata code const volatile value=初值
一、C51数据类型
表2.1 C51支持的数据类型
数据类型 bit unsigned char signed char unsigned int signed int unsigned long signed long float double 长度(bit 长度 ) (byte) 1 8 8 16 16 32 32 32 64 1 1 1 2 2 4 4 4 8 0,1 [0,255] [-128,127] [0,65535] [-32768, 32767] [0, 4294967295] [-2147483648, 2147483647] 值域
;双字节无符号数加法 程序 (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;
unsigned char xdata val; signed char data string; bit bdata val_bit;
unsigned char xdata *pval;
unsigned char code *pcode;
code应用举例
unsigned char code tab[4]={0x00,0x01,0x02,0x03}; void main(void) { unsigned char i,j=0; for(i=0; i<4; i++){ j = j+tab[i]; } } 9: MOV 10: MOV MOV MOVC ADD MOV 11: for(i=0; i<4; i++){ R6,A j = j+tab[i]; A,R6 DPTR,#tab(0x001E) A,@A+DPTR A,R7 R7,A }
四、C51特殊功能寄存器(SFR)的C51定义
MCS-51单片机中除了PC和4组工作寄存器外,其他的所有 寄存器均为特殊功能寄存器(SFR),分散在片内RAM区 的高128字节中,地址范围为80H~0FFH。 为能直接访问SFR,Franklin C51提供了自动定义方法,与 标准C语言不兼容,只适用于MSC-51单片机进行编程。一 般将特殊功能寄存器定义放在头文件中,一般为reg51.h。 特殊功能寄存器的定义语法为: sfr sfr_name = int constant 例如: sfr SCON=0x98; SCON = 0x01;
相关文档
最新文档