- 5
- 0
- 约5.92千字
- 约 22页
- 2018-03-09 发布于湖北
- 举报
第七章 单片机混合编程
第七章 单片机与C语言的混合编程
一、混合编程的原则
对于一个程序,整体程序框架,大部分的程序用c语言编写,有些要求严格定时等要求的用汇编语言编写,有时可以达到较好的效果。
C51函数声明 转换后的函数名 说 明 void func1(void) FUNC1 无参数传递,函数名不改变 type func2(args) _FUNC2 有参数传递,前加“_”,通过寄存器传递 type func3(args) reentrant -?FUNC3 重入函数,有参数传递,前加“_?”,通过堆栈传递(在调用时也用寄存器传递,在函数中再转存入堆栈中) 混合编程最关键的问题是参数传递,也就是在连接时,不同语言编写的程序,参数是如何传递的。已经知道,c51有一套严格的参数传递规定,一般来说用汇编编写的程序变量的传递参数所使用的寄存器是无规律的,汇编语言较随便。因此混合编程中,汇编语言服从c51的规定。按照C51 的参数传递标准可让你的程序有很好的可读性,并有利于维护。编写出来的函数很容易和C 编写的函数进行连接,如果你用汇编编写的函数和C编译器编译出来的代码风格一样的话,连接器将能够对你的数据段进行覆盖、分析。
二、编译、连接的规则
1、 C51中函数名的转换规则
2、几个概念:
编译
将源程序翻译成单片机可以执行的目标代码,产生一个目标文件(.OBJ)C51编译器的段名规则
1)段名
段名包含源程序文件名、存储类型和名字,名字就相当与C程序中的函数名。注意:所有的段名都被转换为大写字符保存,因此混合编程时,用汇编语言编写段名要用大写。
存储类型用前缀表示:
段名前缀 存储区类型 说 明 ?PR? code 可执行程序段 ?CO? code 程序存储器中的常数数据段 ?BI? bit 内部数据存储区的位类型数据段 ?BA? bdata 内部数据存储区的可位寻址的数据段 ?DT? data 内部数据存储区的数据段 ?FD? far 外部数据存储区的far型数据段 ?FC? const far 程序存储器中的far型常数数据段 ?ID? idata 内部数据存储区的间接寻址的数据段 ?PD? pdata 外部数据存储区的分页数据段 ?XD? xdata 外部数据存储区的一般数据段 ?C? 库文件 C源程序编译后,段名的形式如下:
?PR?XIAOYAN?SHUIL
?C?LIB_CODE
其中:XIAOYAN?为名称,SHUIL为文件名,?PR?为段名前缀 ,含义如下:
5、设置变量地址
有时候我们希望把变量存储在指定的地点,特别是在主控制器初始化SRAM之后,从8051系统才开始工作的情况,在这种情况下两个系统必须在存储器分配上达成一致。如果你不想在编译时才给变量分配地址,Keil C可以让你指定变量的存储地址。例如你想定义一个整型变量并把它初始化为0x4050, 用C是不能够把变量指定在某个地址的,另外你也不能指定位变量的地址,但是对于不需要初始化的变量你可以使用关键字_at_来指定地址。
你的变量将分配在DATA段中下面是一个指定地址的例子
unsigned char data byteval _at_ 0x32;
关键字_at_的另一个功能是能通过给I/O器件指定变量名,为你的输入输出器件指定变量名。例如你在XDATA段的地址0x4500处有一个输入寄存器,你可以通过下面的代码为它指定变量名:
unsigned char xdata inpreg _at_ 0x4500;
以后在读该输入寄存器的时候只要使用变量名inpreg就可以了。
三、 C51项目中汇编语言文件的格式
1、声明部分
1)模块名定义格式(在文件开始)
NAME 模块名
用关键字NAME说明模块名
2)子程序代码段声明格式(在模块名定义之后)如:
?PR?[_|_?]函数名1(子程序名1)?模块名 SEGMENT CODE
?PR?[_|_?]函数名2(子程序名2)?模块名 SEGMENT CODE
:
?PR?[_|_?]函数名n(子程序名n)?模块名 SEGMENT CODE
主要说明符号类型,分配空间。
3)子程序被调用属性声明格式(紧接前面)如:
PUBLIC [_|_?]函数名1(子程序名1)
PUBLIC [_|_?]函数名2(子程序名2)
:
PUBLIC [_|_?]函数名n(子程序名n)
用PUBLIC说明该模块可以与其他子程序、模块共享。调用它的模块必须在模块开头包含外部函数说明EXTERN
3、 用汇编语言编程时段声明格式
设汇编文
您可能关注的文档
- 第一章第一节认识计算机.ppt
- 第一章第二节 重要的体内能源.ppt
- 第一章第一节《元素周期表》第二课时ppt课件2.ppt
- 第一章第二节曲柄连杆机构.ppt
- 第一章第二节碱金属元素.ppt
- 第一章第三节《运动的快慢》1.ppt
- 第一章水文学概论.ppt
- 第一章通信技术概论_通信技术基础.doc
- 第一章马克思主义中国化的历史进程和理论成果_003.doc
- 第一章中国的疆域与人口复习(71张ppt).ppt
- 2025年北京市门头沟区中考一模英语试题.docx
- 2025年北京市门头沟区中考二模英语试题.docx
- 2025年北京市丰台区中考二模英语试题.docx
- 2025年中考英语考前冲刺模拟卷 (北京专用) 解析卷.docx
- 2025年中考英语考前冲刺模拟卷 (北京专用) 原卷.docx
- 2025年肩颈按摩仪行业社媒趋势数据分析.docx
- 2025年人身险行业信用回顾与2026年展望.docx
- 合同法买卖合同培训课件.ppt
- 2025年全球食物系统与SDG研究报告-食物供给、食者健康、生态平衡的整体治理.docx
- 2025下半年四川乐山市川投峨眉铁合金(集团)有限责任公司对考前自测高频考点模拟试题最新.docx
最近下载
- 西门子S7-1200 PLC编程与应用 第2版 参考试卷.docx VIP
- 西门子S7-1200 PLC编程与应用第2版参考试卷B附答案.doc VIP
- 西门子S7-1200 PLC编程与应用第2版参考试卷A附答案.docx VIP
- 制鞋技术之成型后段技术培训教材01.pdf VIP
- 【新教材】人教PEP版(2024)四年级下册英语全册教案(含教学计划).docx
- 西门子S7-1200PLC编程与应用(第2版)刘华波课后习题答案.docx
- 云计算导论-全套PPT课件.pptx
- 智能网联汽车导航定位技术PPT全套完整教学课件.pptx
- 人教PEP版四年级下册英语全册教学设计(配2026年春改版教材).docx
- 一、什么是西部计划.doc VIP
原创力文档

文档评论(0)