从品牌网站建设到网络营销策划,从策略到执行的一站式服务
使用C51进行单片机编程是事半功倍的事,但是很多算法上以及编译上的问题,往往使用ASM代码更为方便又高效。但不知什么原因,Keil在实现C51夹杂ASM代码比SDCC麻烦很多,方法如下:
站在用户的角度思考问题,与客户深入沟通,找到平定网站设计与平定网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:网站制作、成都做网站、企业官网、英文网站、手机端网站、网站推广、申请域名、虚拟空间、企业邮箱。业务覆盖平定地区。
预处理指令 #pragma asm 开始ASM代码
预处理指令 #pragma endasm 结束ASM代码
如果就这样直接编译的话,会出现以下错误:
error C272: 'asm/endasm' requires src-control to be active
解决方法:在 Files Toolbar 中选中当前C51文件,点右键查看文件选项,将 Generate Assembler SRC File 与 Assemble SRC File 的勾选由灰色变为黑色,即使这两项有效!
这时进行编译没有问题,但是Link时产生了两个警告:
*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
解决方法是需要在 Source Group 中添加一个 LIB 文件,根据专案的内容不同有所区别:
C51S.LIB - 没有浮点运算的 Small model
C51C.LIB - 没有浮点运算的 Compact model
C51L.LIB - 没有浮点运算的 Large model
C51FPS.LIB - 带浮点运算的 Small model
C51FPC.LIB - 带浮点运算的 Compact model
C51FPL.LIB - 带浮点运算的 Large model
LIB 方件在 Keil 安装目录下的 /C51/LIB/ 目录中。
AVR单片机中
asm("nop");
这条语句,其中asm()的作用是指函数内部的参数翻译为汇编指令,其作用是在C语言环境下直接使用汇编指令执行。
nop是一个空等待汇编指令,这个指令执行时,单片机是什么也不做的,仅仅起一个时间延时作用。
对于AVR单片机来与,如果不分频,那么一个振荡周期就是一个指令周期,因此8M晶振时,其一个指令周期时间是1/8000000秒,即125纳秒。
宏定义,定义了一个 _nop_()的宏函数,它的代码是执行汇编指令 nop指令。
汇编中的nop指令 是not operation 没有操作的 意思, 意思就是什么都不做,它的十六进制值 是0x 90.
观所遇问题,知楼主必当世豪杰,关注0x30百度贴吧,与君共谋千秋大业。
成都网站建设公司地址:成都市青羊区太升南路288号锦天国际A座10层 建设咨询028-86922220
成都快上网科技有限公司-四川网站建设设计公司 | 蜀ICP备19037934号 Copyright 2020,ALL Rights Reserved cdkjz.cn | 成都网站建设 | © Copyright 2020版权所有.
专家团队为您提供成都网站建设,成都网站设计,成都品牌网站设计,成都营销型网站制作等服务,成都建网站就找快上网! | 成都网站建设哪家好? | 网站建设地图