2014年C8051F单片机课件(鲍可进)第3章 51单片机编程语言费.pptVIP

2014年C8051F单片机课件(鲍可进)第3章 51单片机编程语言费.ppt

  1. 1、本文档共126页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* 也可以用比较不等转移指令CJNE A,B,CONTINUE * 实际上整个内部RAM都是IDATA区 * 京江可不讲 * A8+7=AF,SFR的位地址都是以其字节地址为起始地址的 * 函数指针的使用 int add(int a,int b){return a+b}; int sub(int a,int b){return a-b}; main() { int (*pFunc)(int,int); //定义函数指针变量pFunc int x,y; pFunc=add; //对函数指针变量赋值 x=(*pFunc)(3,4); pFunc=sub; y=(*pFunc)(5,3); } 上例运行完成后,x=7,y=2。 3.3.7 C与汇编的混合编程 C和汇编混合编程的应用: 如果执行的操作很难用C代码来完成(如使用BCD码),或者使用汇编来编写代码比用C更加有效率,或者对时间要求很严格的功能用C来编程不是很保险,用户希望用汇编来编写这部分程序,但是又不愿意仅仅因为这么一小部分就把整个程序都用汇编来进行设计。这时就必须使用C和汇编语言混合编程,即把汇编编写的程序和C编写的程序连接起来。 混合编程时可能要进行以下转换: 函数名的转换 全局变量的转换 寄存器参数传递方式 函数的返回值 (1)函数名的转换 C51按以下规则将源程序的函数名转换成目标文件的函数名。 函数声明 转换的符号名 说明 void func(void) FUNC 无参数的函数,将函数名变为大写形式,其它不变 void func(char) _FUNC 带参数的函数,函数名变为大写形式,函数名前加”_”前缀, void func(void) reentrant _?FUNC 再入函数,函数名变为大写形式,函数名前加”_?”前缀, (2)全局变量的转换 C51把每个模块中的相同存储器类型的全局变量组合在同一个数据段中,数据段名由两个问号中间加一个存储器类型符号及紧接着的模块名(modulname)组成。这里的模块是指源文件,模块名是不带路径和扩展名的源文件名。 (2)全局变量的转换 数据类型 保存区域 存储器类型符号 全局变量转换后的段名 常数段 CODE CO ?CO?模块名 XDATA数据类型 XDATA XD ?XD?模块名 DATA数据类型 DATA DT ?DT?模块名 IDATA数据类型 IDATA ID ?ID?模块名 BIT数据类型 BIT BI ?BI?模块名 BDATA数据类型 BDATA BA ?BA?模块名 PDATA数据类型 PDATA PD ?PD?模块名 (3)寄存器参数传递方式 CX51编译器允许利用CPU的寄存器来传递最多3个函数参数。这种方法由于无需读写内存,因此可以有效地提高系统的性能。 传递参数 char,指针(单字节) int,指针(双字节) long,float 通用指针 参数1 R7 R6,R7 R4-R7 R1-R3 参数2 R5 R4,R5 R4-R7 R1-R3 参数3 R3 R2,R3 R1-R3 (4)函数的返回值 函数总是用CPU寄存器来保存函数的返回值,下表列出了不同的返回值所使用的寄存器。 (4)函数的返回值 返回类型 寄存器 描述 bit 进位标志(CF) char R7 unsigned char 单字节指针 int R6R7 高字节在R6,低字节在R7 unsigned int 双字节指针 long R4-R7 高字节R4,低字节在R7 unsigned long float R4-R7 32位IEEE格式 通用指针 R1-R3 存储器类型在R3,高字节在R2,低字节R1 内联汇编代码 也可以通过预编译指令”asm”来在C函数中嵌入汇编语句,编译时在命令行加入”src”选项,在”asm”和”endasm”中的代码将被复制到输出的SRC文件中。 注意:如果不指定”src”选项,编译器将忽略在”asm”和”endasm”中的代码,即编译生成的代码中不会实现汇编语句功能。必须先编译得到.src文件,然后对.src进行编译得到.obj文件。 3.3.8 程序设计的三种基本结构 顺序结构 从前往后依次执行语句。从整体上看所有程序都是顺序结构,只不过中间某些部分是由选择结构或循环结构构成,选择结构或循环结构部分执行完成后,程序重新按顺序结构向下执行。 选择结构 程序由多路分支构成,在程序的一次执行中根据指定的条件,选择执行其中的一条分支,而其他分支上的语句被直接跳过。C语言中可由if语句和switch语句构成选择结构。 循环结构 当某个条件成立时,重复执行某个程序段。C语言中可用for、while、do…while三种语句构成循环结构。 3.3.9 使用C5

文档评论(0)

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档