单片机C语言程序设计.doc_第1页
单片机C语言程序设计.doc_第2页
单片机C语言程序设计.doc_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第四章 单片机C语言程序设计4.1 C语言与MCS-51单片机4.1.1 C语言的特点及程序结构一C语言的特点1语言简洁、紧凑,使用方便、灵活。2运算符丰富。3数据结构丰富。具有现代化语言的各种数据结构。4可进行结构化程序设计。5可以直接对计算机硬件进行操作。6生成的目标代码质量高,程序执行效率高。7可移植性好。4.3.3 存储模式 C51编译器支持三种存储模式:SMALL模式、COMPACT模式和LARGE模式。不同的存储模式对变量默认的存储器类型不一样。(1)SMALL模式。SMALL模式称为小编译模式,在SMALL模式下,编译时,函数参数和变量被默认在片内RAM中,存储器类型为data。(2)COMPACT模式。COMPACT模式称为紧凑编译模式,在COMPACT模式下,编译时,函数参数和变量被默认在片外RAM的低256字节空间,存储器类型为pdata。(3)LARGE模式。LARGE模式称为大编译模式,在LARGE模式下,编译时函数参数和变量被默认在片外RAM的64K字节空间,存储器类型为xdata。4.3.4 绝对地址的访问一使用C51运行库中预定义宏 C51编译器提供了一组宏定义来对51系列单片机的code、data、pdata和xdata空间进行绝对寻址。规定只能以无符号数方式访问,定义了8个宏定义,其函数原型如下:#define CBYTE(unsigned char volatile*)0x50000L) #define DBYTE(unsigned char volatile*)0x40000L) #define PBYTE(unsigned char volatile*)0x30000L)#define XBYTE(unsigned char volatile*)0x20000L) #define CWORD(unsigned int volatile*)0x50000L) #define DWORD(unsigned int volatile*)0x40000L) #define PWORD(unsigned int volatile*)0x30000L) #define XWORD(unsigned int volatile*)0x20000L) 这些函数原型放在absacc.h文件中。使用时须用预处理命令把该头文件包含到文件中,形式为:#include 。 其中:CBYTE以字节形式对code区寻址,DBYTE以字节形式对data区寻址,PBYTE以字节形式对pdata区寻址,XBYTE以字节形式对xdata区寻址,CWORD以字形式对code区寻址,DWORD以字形式对data区寻址,PWORD以字形式对pdata区寻址,XWORD以字形式对xdata区寻址。【例】绝对地址对存储单元的访问#include /*将绝对地址头文件包含在文件中*/#include /*将寄存器头文件包含在文件中*/#define uchar unsigned char /*定义符号uchar为数据类型符unsigned char*/#define uint unsigned int /*定义符号uint为数据类型符unsigned int*/void main(void) uchar var1; uint var2;var1=XBYTE0x0005; /*XBYTE0x0005访问片外RAM的0005字节单元*/var2=XWORD0x0002; /*XWORD0x0002访问片外RAM的0002字单元*/.while(1); 在上面程序中,其中XBYTE0x0005就是以绝对地址方式访问的片外RAM 0005字节单元;XWORD0x0002就是以绝对地址方式访问的片外RAM 0002字单元。二通过指针访问 采用指针的方法,可以实现在C51程序中对任意指定的存储器单元进行访问。【例】 通过指针实现绝对地址的访问。#define uchar unsigned char /*定义符号uchar为数据类型符unsigned char*/#define uint unsigned int /*定义符号uint为数据类型符unsigned int*/void func(void)uchar data var1;uchar pdata *dp1; /*定义一个指向pdata区的指针dp1*/uint xdata *dp2; /*定义一个指向xdata区的指针dp2*/uchar data *dp3; /*定义一个指向data区的指针dp3*/dp1=0x30; /*dp1指针赋值,指向pdata区的30H单元*/dp2=0x1000; /*dp2指针赋值,指向xdata区的1000H单元*/*dp1=0xff; /*将数据0xff送到片外RAM30H单元*/*dp2=0x1234; /*将数据0x1234送到片外RAM1000H单元*/dp3=&var1; /*dp3指针指向data区的var1变量*/*dp3=0x20; /*给变量var1赋值0x20*/三使用C51扩展关键字_at_ 使用_at_对指定的存储器空间的绝对地址进行访问,一般格式如下: 存储器类型 数据类型说明符 变量名 _at_ 地址常数; 其中,存储器类型为data、bdata、idata、pdata等C51能识别的数据类型,如省略则按存储模式规定的默认存储器类型确定变量的存储器区域;数据类型为C51支持的数据类型。地址常数用于指定变量的绝对地址,必须位于有效的存储器空间之内;使用_at_定义的变量必须为全局变量。【例】通过_at_实现绝对地址的访问。#define uchar unsigned char /*定义符号uchar为数据类型符unsigned char*/#define uint unsigned int /*定义符号uint为数据类型符unsigned int*/void main(void)data uch

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论