问题标签 [c51]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
47 浏览

assembly - 将值移动到目标地址(C51 系列)

我创建了一个表格,其中有各种数据。我需要从该表中取出数据,对其进行更改,然后将其写回相同的位置,但是,由于某种原因,数据未写入该位置

这是我的代码

当我遍历代码时,A 从 0 到 100 到 120,然后它应该将其写入地址 3(表中的位置 0),再次取回它,再添加 20,等等... 像这样工作:

我真正需要的是一种访问内存位置、更改它然后更新它的方法。这个:

我一直在阅读各种东西,但找不到有效的答案。例如,这里显示了说明,但没有给出输出示例: http ://www.keil.com/support/man/docs/is51/is51_mov.htm

编辑:我不一定需要完全使用这种方式。我只需要一种方法来拥有一个变量,就像在 C 中一样,并执行以下操作:

整数变量 = 100;

for(;;) 变量 += 20;

0 投票
0 回答
896 浏览

microcontroller - 8051单片机串口如何使用buffer读写

我正在使用 keil c51 编译器。我使用串行端口将数据从我的电脑传输到 MCU,它效果最好。当我将数据从我的 MCU 传输到 PC 时,它也工作得最好。但是,当我将数据传输到 MCU,然后将其存储到缓冲区字符指针并再次从该字符指针缓冲区传输返回到 PC 时,它不起作用并给出垃圾值?

我的这两个功能的代码如下。

以下是功能。1.

0 投票
1 回答
3911 浏览

keil - KEIL for C51 并且有一些错误问题,例如无符号附近的语法错误

我正在为 80C51 使用 Keil,并使用 C51 进行编码。但是,我在编译时遇到了一些问题。我的代码如下:

但是编译器显示 lab7.c(13): error C141: syntax error near 'unsigned'。我不知道为什么会发生这种情况!非常感谢!

0 投票
1 回答
169 浏览

c - 不允许在 C51 中定义包含数组的结构?

不允许在 C51 中包含数组的结构?在我的 C51 程序中定义了一个简单的结构后,

我得到错误:..\SOURCE\MYRINGBUFFER.H(25): error C141: syntax error near '['。很明显,错误与结构中定义的字符数组有关(注释后没有错误)。

我在这里做错了吗?如果没有,无论如何我可以实现我想要做的事情吗?

编辑:所有代码。

0 投票
1 回答
188 浏览

function - Keil C51:同名但参数不同的函数可能存在错误?

这不是一个真正的问题,因为它已经解决了。但我想在这里分享它,因为有人可能会遇到同样的问题。我很想得到一个更深刻的解释。

我正在使用 Keil μvision3 在 C8051F340 上编程(我认为这与这个问题无关)。在我的main.c我有类似的东西:

mobile.c中(忽略不相关的标题、包含、blablabla):

没关系。但是,在我对代码进行了一些修改后,

编译和下载到芯片完成,没有任何错误。虽然我确实发现了一个警告:

*** 警告 L2:参考未解决的外部

符号:GETINPUT

但是我有点懒,我的同事还有很多其他的警告,使我无法阅读。(坏习惯!)

我想学的东西:

  1. 为什么 Keil 允许这样的东西编译没有错误(在 C 中它绝对应该是一个未声明错误的函数)?
  2. 对未解决的外部的参考是什么意思?它找到了具有相同名称的函数,但由于它具有不同的参数而无法解析,或者它只是允许任何函数而不检查它在项目中的存在?我找不到如何从中生成汇编代码,所以我不太确定。
0 投票
2 回答
1288 浏览

c - array [] vs pointer * - 为什么第一个代码在 C 中会失败?

我正在使用 Keil C51 编译器对 8051 微控制器进行编程。由于某种原因,我的代码没有运行——我设法找到了这个错误,但我仍然很难理解它。与另一个相比,为什么第一个代码是错误的?值得注意的是,编译器没有抛出任何错误,代码甚至没有在微控制器上启动。

错误代码:

文件1.h

文件2.c

将这些更改为:

文件1.h

文件2.c

它开始工作了。

此外,这部分代码仅在“array_var[0].property = ...”之类的函数中被引用,但这些函数中没有一个被应用程序调用过。

some_struct 变量在另一个模块中声明。

为什么它会有这样的行为?[] 和 * 我不知道之间有什么区别吗?

EDIT1: 据说指针和数组是不同的东西......但是,“[]”语法与“*”有何不同?我认为编译器只会将它转换为指针,以防方括号为空(就像函数参数一样)。我还认为提供一个数组会导致给我第一个元素的地址。

现在,每个人都在说指针和数组是不同的——但我找不到任何关于它们到底有什么不同的信息。当我将数组作为右值而不是指向其第一个元素的指针时,编译器如何看待它?

0 投票
1 回答
179 浏览

c - 如何在不使用通用指针的情况下引用指向 pdata 或 idata 的指针?

在 8051 目标上使用 Keil C51。我有一组函数,它们带有指向结构的指针。该结构将仅存在于 pdata 或 idata 中。由于大小限制和内存映射魔法,我无法将所有结构压缩到同一个内存空间中。

当我使用通用指针声明我的函数集时,代码大小会大幅增长。作为测试,我用指向 pdata 中结构的指针声明了这些函数。当我这样做时,我的代码大小恢复正常,但我当然会收到 mspace 警告,并且每当我将 idata 中的结构引用到函数中时,我都会指向错误的内存空间。

假设我的方法的前提是合理的,如何允许这些函数在不增加代码大小的情况下获取指向 pdata 或 idata 的指针?

鉴于我可能会做错这一切,我是否忽略了一个更传统的解决这个问题的方法?

0 投票
0 回答
76 浏览

c - C51 - 与指针相关的错误

编辑:当我选中 C51 优化菜单中的“保持变量有序”框时,问题似乎消失了。我仍然不知道是什么导致了问题以及它是否是永久修复。有人知道发生了什么吗?

我正在尝试在 C51 中构建一个图形菜单。我正在使用一个menu_init()功能,将文本显示在 4 行 LCD 屏幕上。函数定义为:

在错误发生时, menu_array是:

数组的初始值设定项是以下文本:

这些就在代码附近,它们是另一个菜单的字符串:

我希望这段代码按顺序打印字符串。然而,事实并非如此,输出是这样的:

调试器验证这个结果:在此处输入图像描述

我不明白发生了什么......我相信这是关于指针衰减的东西,但我无法查明问题所在。我哪里做错了?

0 投票
2 回答
173 浏览

c - 在 Eclipse 索引器中处理 Keil C51 关键字

根据 Keil C51,以下是有效的:

然而,根据 Eclipse 索引器,它不是。我们可以做出以下定义来帮助解决这个问题:

但不幸的是,我们无法重新定义保留关键字“using”,重新定义数字 1 或 2 会很愚蠢。

有没有办法让 Eclipse 索引器解析古老的 8051 代码以获得现代 IDE 的好处?是否有替代 Eclipse 的方法可以提供一种有效的方式来浏览这样的 C 项目?具有等效“Open Call Hierarchy”功能的东西?

0 投票
1 回答
276 浏览

keil - Keil C51 8051 端口 0 I/O

在 Keil C51 中检查这两种情况,并在两种情况下在调试器中观察 P0 外设选项。两种情况结果不同。为什么P0=0xFF;指令不会产生相同的结果?

情况1)

案例2)

案例 1 程序
案例 1 调试时的外围窗口

案例2程序

案例 2 调试时的外围窗口

目标设备 89S52 -- 基于 8051 的微控制器