




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
、KEIL2023-03-0117:44抽象难懂,再没有个实际操作图例,就很让人觉得云里雾里。在这里我就针对KEIL①混合编程的必要性:也就是为什么需要混合编程,初学者肯定会觉得,我CCICCvoiddelay(void);就是无反回参数的,intreaddata(void);就是有返回参数的。还有就是有参数传递和无参数voiddelay(void)unsignedintadd(unsignedcharaa,unsignedcharbb);C编程就会说起存放器最多传递三个函数,这样可以产生高效代码。在参数返回时存放器的传递规律为:下面我们用实际的混合编程操作来讲讲如何实现函数的调用及参数的传递。2.0注释,但是英文版。用哪个版本都无所谓,只要用着习惯功能够用就行。下面是版本信息:是报告出错:Error:can”texecute”E:\old_pc\txz001\单片机c51\KEIL4\C51\BIN\C51.EXE””E:\old_pc\txz001\单片机c51\KEIL2_70\Keil2\C51\BIN\C51.EXE”KEIL“环境设置”的如以下图:tools.iniKEIL构造一般是这样的:我们KEILuvision2UV2TOOLS.INITOOLS.INI观察红笔圈出的[C51]下的路径了吗?将它修改正确指向你硬盘上KEIL下C51名目,存盘,运行KEIL我们在KEIL里创立一个的工程TEST1。在这个工程里我们添加了两个文main.c:#include<AT89X52.H>externvoiddelay(void);main(void){delay;}delay.c#defineucharunsignedcharvoiddelay(void){uchari;for(i=255,i>0,i--);}可以看出,这两个文件里的程序很简洁,主程序里先定义了一个外部函数delay.cfor255delay.c,鼠标右击它消灭以下图。选择“文件”delay.c”属性”后如以下图:分别点击它们两次使它呈黑色钩选状态。如以下图。delay.src用记事本翻开这个delay.src文件。觉察它就是一个汇编文件。;.\delay.SRCgeneratedfrom:delay.c;COMPILERINVOKEDBY:; c51\KEIL2_70\Keil\C51\BIN\C51.EXEdelay.cBROWSEDEBUGOBJECTEXTENDSRC(.\delay.SRC)NAMEDELAY?PR?delay?DELAY SEGMENTCODEPUBLICdelay;#defineucharunsignedchar;voiddelay(void)RSEG?PR?delay?DELAYdelay:USING0;SOURCELINE#2;{uchari;;SOURCELINE#3; for(i=255;i>0;i--);;SOURCELINE#4;----Variable”i?040”assignedtoRegister”R7”----MOVR7,#0FFH?C0001:DJNZR7,?C0001;};SOURCELINE#5?C0004:RET;ENDOFdelayENDNAMEDELAY?PR?delay?DELAY SEGMENTCODEPUBLICdelayRSEG?PR?delay?DELAYdelay:USING0MOVR7,#0FFH?C0001:DJNZR7,?C0001?C0004:RETEND现在看看是不是很简呢。在标号delay:前是程序的说明,就是定义函数的名字,delay:标号后就是汇编的程序局部了。里面的标号最好也别乱改。添加你要操作的程序就行了,好!delay.asm文件。回到KEIL界面,KEILdelay.cdelay.asmC例子了。下面我们可以对这个汇编了程序进展一些修改看它是否仍能很好的工作。LCD12864put.c。我们先修改主程序如下://****************// 主函数//****************main(void){ucharaa,bb;TMOD=0x01;//T011600TR0=1;//计数器开头计数//delay;//调用汇编的子函数TR0=0;//停顿计数LcmInit;//初始化LCD12864LcmClear;//LCDLcmPutstr(0,28,“C&ATEST“);//显示LcmPutstr(3,0,“TH0:“);LcmPutstr(3,24,uchartostr(aa));LcmPutstr(3,46,“TL0:“);LcmPutstr(3,70,uchartostr(bb));LcmPutstr(5,0,“BLOG:://“);LcmPutstr(6,18,“hi.baidu/txz01“);LcmPutstr(“mailto:TXZ001@139“7,8,“Email:TXZ001@139“);T0delay前开头计数,调用1,就是说用了一个脉冲的时间。12MTR0=1;TR0=0;本身就用去了一个脉冲。好!现在我们将那个delay语句启用,但我将汇编内的语句给清空。也就是说我把汇编程序如下:NAMEDELAY?PR?delay?DELAY SEGMENTCODEPUBLICdelayRSEG?PR?delay?DELAYdelay:RETENDRET写,运行!如以下图:4NAMEDELAY?PR?delay?DELAY SEGMENTCODEPUBLICdelayRSEG?PR?delay?DELAYdelay:movr7,#100djnzr7,$RETEND在标号delay:下面我加了两行,我们计算一下,第一行MOVr7,#100要用一个r7,$100241206看来计算的没错呀!我们再循环多些:NAMEDELAY?PR?delay?DELAY SEGMENTCODEPUBLICdelayRSEG?PR?delay?DELAYdelay:movr7,#100 ;1loop:movr6,#50 ;100djnzr6,$ ;50×100×2djnzr7,loop ;100×2RETEND。再次编译烧写运行!40,低位数值为66,则总数=40×256+66=10306。精准吧!好了!无参函数的调用就争论到此。下面接着说说带参数据函数的调用:Umain.c12864put.c主函数main如下:#include<AT89X52.H>#include<intrins.H>#defineucharunsignedchar#defineuintunsignedintexternvoidLcmClear(void); //清屏externvoidLcmInit(void); 初始化externvoidLcmPutstr(ucharrow,uchary,uchar*str在设定位置显示字符串LCD〔0-7〕LCD〔0-127〕//str:是字符串的首地址externuintadd(ucharaa,ucharbb);externvoidinttostr(uintintval,uchardata*str);ucharstr[6];//定义四个字节空间用来存放数值转换成的字符值//****************// 主函数//****************main(void){ucharaa,bb;uintcc;aa=145;bb=236;cc=add(aa,bb);LcmClear;//LCDLcmPutstr(0,28,“C&ATEST“);//显示inttostr(aa,str);LcmPutstr(3,0,str);LcmPutstr(3,18,“+“);inttostr(bb,str);LcmPutstr(3,36,str);LcmPutstr(3,54,“=“);inttostr(cc,str);LcmPutstr(3,72,str);//LcmPutstr(3,46,“TL0:“);//LcmPutstr(3,70,uchartostr(bb));LcmPutstr(5,0,“BLOG:://“);LcmPutstr(6,18,“hi.baidu/txz01“);LcmPutstr(“mailto:TXZ001@139“7,8,“Email:TXZ001@139“);while(1);}add.c,add.c#defineucharunsignedchar#defineuintunsignedintuintadd(ucharaa,ucharbb){uintcc;cc=aa+bb;return(cc);}aabbccadd.c它产生srcadd.src文件:;.\add.SRCgeneratedfrom:add.c;COMPILERINVOKEDBY:; c51\KEIL2_70\Keil\C51\BIN\C51.EXEadd.cBROWSEDEBUGOBJECTEXTENDSRC(.\add.SRC)NAMEADD??PR?_add?ADD SEGMENTCODEPUBLIC_add;#defineucharunsignedchar;#defineuintunsignedint;;uintadd(ucharaa,ucharbb)RSEG?PR?_add?ADD_add:USING0;SOURCELINE#4;----Variable”bb?041”assignedtoRegister”R5”----;----Variable”aa?040”assignedtoRegister”R7”----;{;SOURCELINE#5; uintcc;; cc=aa+bb;;SOURCELINE#7MOVA,R5ADDA,R7MOVR7,ACLRARLCAMOVR6,A;----Variable”cc?042”assignedtoRegister”R6/R7”----; return(cc);;SOURCELINE#8;};SOURCELINE#9?C0001:RET;ENDOF_addEND我们还是将注释的局部删去,这样便于我们分析:NAMEADD??PR?_add?ADD SEGMENTCODEPUBLIC_addRSEG?PR?_add?ADD_add:USING0MOVA,R5ADDA,R7MOVR7,ACLRARLCAMOVR6,ARETEND现在我们首先来看函数名,上面我们讲过的那个无参数函数delay的调用,产就是有参数函数的特征C语言函数名转变为汇编函数名的规律为:无参数传递时voidfunc(void) voidfunc(void)reentrant----_?FUNC。的命名,然后去修改成我们想做的汇编程序就行了。R5AAR7AR7,后面的几句是将刚刚相加的C,R6,然后返回。比照本篇最上面给的那两张表我们可以看出Cadd.caabbR7,R6。完全符合参数传递表asm文件后替换掉原来的C子程序:编译、烧写后运行:编里将它改成乘法试试,_add:下面的语句全都改掉,程序如下?NAMEADD??PR?_add?ADD SEGMENTCODEPUBLIC_addRSEG?PR?_add?ADD_add:USING0MOVA,R7MOVB,R5的高位值在B中,低位值在A中MOVR7,A ;将低位值传给R7R6,BR6RETEND还能正常运行并正确,改完后仍编译烧写运行:总结:C(2023.3.15)类别:默认分类|添加到搜藏|扫瞄(2070)|评论(35)一篇:18、模数转换ICADC0809的使用制... 烧写器的制做与调...相关文章:转:keilC•【09.08.15KeilCkeil混合编程的几个tips •Keil模式设置和编程事项keil混合编程 •KEILC51的多模块编程keilC51•KeilC51E2PROM...
keilC更多>>最近读者:登录您就出现在这eyouisblyygy10fwxh1LizidaYJQ_wuyaheyanWZG09月球1485 01 ne 86 zi 24 土豆1网友评论:windxiang9470
2023-03-0118:30|回复址感谢啦。2 2023-03-0119:14|回复回复windxiang9470:刚刚在网上找了一下,还真没找到我用的版本,都是3.0txz001 了,而且只要复制过来就能用。你要是想要我考给你吧!3windxiang94704
2023-03-0119:31|回复呵呵,恩,那我加你QQ吧,我的是2814532912023-03-0209:08|回复或者帮我发邮箱吧“mailto:281453291@
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- -天津市五区县重点校2024-2025学年高二上学期1月期末考试 化学试题(解析版)
- 2021年云南、贵州二级建造师机考《建设工程施工管理》真题汇编
- 风电场风机检修规程
- 苹果平板如何制作
- 2025年咖啡师职业技能测试卷:咖啡饮品口感与品质提升策略试题
- 2025年FRM金融风险管理师考试风险投资与风险管理试卷
- 2025年征信行业自律管理征信数据质量试题库
- 2025年成人高考《语文》语言逻辑训练题库实战演练
- 2025年安全生产法规考试题库:法律法规解读与真题解析
- 人力资源配置合理化方案书
- 《病例随访汇报》课件
- 2025江苏省沿海开发集团限公司招聘23人高频重点提升(共500题)附带答案详解
- 2024年09月2024华夏金融租赁有限公司校园招聘笔试历年参考题库附带答案详解
- 锂电池技术研发生产合同
- 【MOOC期末】《英美文学里的生态》(北京林业大学)期末中国大学慕课MOOC答案
- 眼镜定配工(初级)理论知识要素细目表
- 重晶石采购合同范例
- 《肺细胞病理学》课件
- 2024年共青团入团考试题库及答案
- 2019北师大版高中英语单词表全7册
- 中国心力衰竭诊断和治疗指南2024解读(完整版)
评论
0/150
提交评论