问题标签 [8051]
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.
c - 使用 SDCC (Little Endian) 编译器时这个算法有什么问题?
我是 C 编程的新手,我正在为我的 MCU 开发固件应用程序。当我使用 KEIL 编译器(Big Endian)时,此方法工作正常,但当我切换到 SDCC 编译器(Little Endian)时,它无法正常工作。有人可以解释我做错了什么吗???
目标设备是基于 8051 架构的 Silicon Labs C8051F320。
添加:首先,我现在将 MotorSteps 和 MotorSpeed 更改为无符号整数。 在我的调试器中,由于某种原因,如果我在 if 语句行设置断点,在此函数 MotorSteps = 00 的第一个入口处,因此 t 也应该分配为 0,但调试器显示 t=0.031497(十进制)。如果我将调试器切换为以十六进制显示,t = 0x3d010300。这就像 t 永远不会被分配......
sleep - 如何在 8051 微控制器上等待一秒钟?
我应该编写一个程序,将一些值发送到寄存器,然后等待一秒钟,然后更改值。问题是,我找不到将停止操作一秒钟的指令。
c - 是否所有 C 编译器都允许函数返回结构?
我正在使用 C 语言编写程序,并将 SDCC 编译器用于 8051 架构设备。我正在尝试编写一个名为 GetName 的函数,该函数将从闪存中读取 8 个字符并以某种形式返回字符数组。我知道不可能在 C 中返回一个数组,所以我尝试使用这样的结构来完成它:
我还没有对这个函数的任何引用,但由于某种原因,我收到一个编译器错误,上面写着“函数无法返回聚合”。这是否意味着我的编译器不支持返回结构的函数?还是我只是做错了什么?
linker - 为什么在C程序中使用结构会导致链接错误
我正在为 8051 架构芯片和 SDCC 编译器编写 C 程序。
我有一个名为 FilterStructure 的结构;
我的代码看起来像这样......
出于某种原因,我收到链接错误“?ASlink-Error-Could not get 29 Continuous bytes in internal RAM for area DSEG”
如果我注释掉表明FilterStructure testStruct;
错误消失的行。
这个错误是什么意思?完成后是否需要丢弃结构?
embedded - AT89C51 和 AT89S51 有什么区别?
您如何将这些连接到您的计算机?哪个更容易燃烧?
c - 8位处理器必须面对字节序问题吗?
如果我在 8 位处理器的内存中有一个 int32 类型的整数,比如 8051,我如何识别该整数的字节序?它是编译器特定的吗?我认为这在通过串行线路等发送多字节数据时很重要。
c - 从 16 位地址中划分高/低字节的方法?
我正在 8051 处理器上开发软件。一个常见的工作是划分一个 16 位地址的高字节和低字节。我想看看有多少种方法可以实现它。到目前为止我提出的方法是:(说 ptr 是一个 16 位指针,而 int 是 16 位 int)[注意 rn 和 arn 是寄存器]
按位运算
SDCC 给出以下汇编代码
Keil C51 给了我: 其中有许多无用的代码恕我直言。指针技巧
SDCC 给了我: Keil C51 给了我: 这与 SDCC 版本相同。安德烈的数学方法
p>SDCC 给出:
我不知道为什么 sdcc 使用 r7 寄存器... Keil C51 给了我: 我不知道为什么 Keil 也不使用 R2 寄存器...semaj 的联合方法
p>SDCC 给了我
Keil C51 给了我: 这对指针技巧非常微笑。但是,这种方法需要多两个字节的内存来存储联合。有没有人有任何其他好的想法?;)
任何人都可以告诉我哪种方式更有效?
如果有人感兴趣,这里是测试用例:
}
c - 对于 8 位 MCU,用 C 语言进行除法的最快方法是什么?
我正在为使用 8 位 mcu(8051 架构)的设备开发固件。我正在使用 SDCC(小型设备 C 编译器)。我有一个功能,用于设置我的电路驱动的步进电机的速度。通过将所需值加载到定时器的重载寄存器中来设置速度。我有一个变量 MotorSpeed,它在 0 到 1200 的范围内,表示电机每秒的脉冲数。我将 MotorSpeed 转换为正确的 16 位重载值的函数如下所示。我知道浮点运算非常慢,我想知道是否有更快的方法来做到这一点......
c - 8051 外部中断
如何开启8051的外部中断?
c - 需要帮助配置端口以输入 8051
连接如下 红外传感器电路产生 0 或 5v 取决于闭合或开路输出线到微控制器 8051 philips 的端口 2_0 引脚。问题是当我这样做时,电路值被端口 2_0 LED 上的当前值覆盖总是继续。这是我的代码(在 keil c 中)我想我没有正确配置 P 2_0 作为输入
编辑:我遇到了一个问题,因为我使用的 8086 处理器有故障。建议任何人在编程时尝试这个以获得一些备件。