找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2039|回复: 5
打印 上一主题 下一主题
收起左侧

我的C语言嵌套汇编哪有问题?

[复制链接]
跳转到指定楼层
楼主
ID:328334 发表于 2018-11-27 19:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "reg52.h"
#include<intrins.h>        
sbit beep=P1^5;
void del(void)
{
#pragma asm
del3:mov r5,#100
del2:mov r6,#100
del1:mov r7,#25
del0:nop
            nop
                        djnz r7,del0
                        djnz r6,del1
                        djnz r5,del2
#pragma endasm
}
void main()
{
while(1)
{
  beep=~beep;
         del(void);
}
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:155507 发表于 2018-11-27 19:42 | 只看该作者
使用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/ 目录中。


回复

使用道具 举报

板凳
ID:328334 发表于 2018-11-27 19:44 | 只看该作者
我嵌套其他汇编完全没问题,就是精准延时的特别难弄
回复

使用道具 举报

地板
ID:119159 发表于 2018-11-27 20:20 | 只看该作者
    选中 Project  窗口中的C  文件,比如CX1.C,并右键,选择“Options  for  ...”,点击右边的“Generate Assembler SRC File”和“Assemble SRC File”,使复选框的打钩由灰色变成黑色状态(双击即可);
build的时候需要在SOURCE GROUP 1中插入相关的LIB库文件

最后一行
del();
回复

使用道具 举报

5#
ID:434498 发表于 2018-11-27 20:32 | 只看该作者
程序还行,nice
回复

使用道具 举报

6#
ID:401564 发表于 2018-11-28 08:16 | 只看该作者
不过是延时,你还不如看编译之后汇编代码来改,只要C可以正确编译,都是可以看到对应函数的汇编代码,然后可以根据汇编代码来修改延时时长
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表