- 1、本文档共43页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
课件:单片机第五章:C语言程序设计分解.ppt
5.2.5 硬件资源访问 4.存储器绝对地址的访问 absacc.h中包含了一些宏定义,使用这些宏可以显示使用存储器绝对地址,如 #define CBYTE ((unsigned char volatile code *) 0) CBYTE代表程序存储器地址0000H的字节单元 把每个存储区定义成一个字节或字数组,对指定地址的访问使用数组元素引用的形式 5.2.6 指针 1.基于存储器的指针 与源程序中存储器类型有关,编译时即可确定其长度。这种指针的长度可以为1个字节(data *、idata *、pdata *)或2个字节(code *、xdata *) char data *str; 指向data字符的指针 int xdata *num; 指向整形数据 long code *pow; 指向长整形代码 THANK YOU SUCCESS * * 可编辑 5.2.6 指针 char data *str; 指向data字符的指针 int xdata *num; 指向整形数据 long code *pow; 指向长整形代码 上述三个指针变量长度分别为1、2、2字节。指针变量自身所占用的存储位置还能定义 char data *xdata str; int xdata *data num; long code *idata pow; 5.2.6 指针 2.通用指针 与标准C语言指针的定义相同 使用3个字节存储指针内容(地址值)。第一个字节存放存储器类型,第二和第三节分别存放该指针所指对象地址的高字节和低字节 5.2.6 指针 2.通用指针 一般指针包括3个字节:1个字节存储类型和2个字节偏移地址,即 地址 +0 +1 +2 内容 存储器类型 偏移地址高位字节 偏移地址低位字节 其中,第一字节代表了指针的存储器类型,存储器类型编码如下: 存储器类型 idata xdata pdata data code 值 1 2 3 4 5 5.2.6 指针 char *str; 指向字符的指针 int *num; 指向整形数据的指针 第1字节放存储器类型,2、3字节放该指针所指对象地址的高、低字节。 xdata int x ;x位于外部RAM中 int *data px, *data py; px = x ;赋值语句,px指向x py = 0x021234 ; py指向外部RAM的1234H单元 *px = 1000 ;单元内容赋值1000 *py = -1 ;单元内容赋值FFFFH 5.3 C语言程序结构 单片机C语言程序与标准C程序一样,具有固有的模块化思想 各种功能由函数实现 整体上就是一个函数逐级调用的树状结构 程序的入口为main函数,在每个函数内部可以使用结构化程序设计技术的三种结构 5.3.1 函数 1.函数定义 [返回值类型] 函数名称(参数表) [ { small | compact | large } ] [ reentrant ] [ interrupt n ] [ using n ] 若省略返回值类型部分,默认为整型(int) 可以指定该函数的存储模式,以取代默认值 若使用了using,编译程序将产生切换工作寄存器组的代码 对于有返回值的函数,不能使用using,因为返回值是通过寄存器传递的 5.3.1 函数 参数个数 char或字节指针 int或2字节指针 long或float 通用指针 1 R7 R6、R7 R4~R7 R1~R3 2 R7 R5 R4、R5 R6、R7 R4~R7 R1~R3 3 R7 R5 R3 R2、R3R4、R5 R6、R7 ? R1~R3 2.参数传递 参数用于向函数传递数据,作为函数的输入。 传统C语言中参数是通过堆栈传递的,单片机中是通过存储器或寄存器传递的。 传递参数的寄存器分配 5.3.1 函数 3.返回值 总是通过寄存器送回的 返回值类型 寄存器 描述 bit CY标志 – char,unsigned char,或1字节指针 R7 – int,unsigned int,或2字节指针 R6 R7 最高有效位在R6中,最低有效位在R7中 long或unsigned long R4~R7 最高有效位在R4中,最低有效位在R7中 float R4~R7 32位IEEE格式 通用指针 R1~R3 存储器类型在R3中,最高有效位在R2中,最低有效位在R1中 5.3.1 函数 4.内部函数和外部函数 如果一个函数只能在其定义的文件
文档评论(0)