问题标签 [xc8]

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 投票
0 回答
173 浏览

c - HD44780 指令调用的最佳实践

我是第一次发帖,长期论坛搜索者...感谢您的关注。

我当前的嵌入式项目使用由 HD44780 标准控制器控制的 16x2 LCD。我的 PIC18 通过 Adafruit LCD 串行背包(原理图链接)与 LCD 对话。我选择了SPI接口。

HD44780 通过对 8 个数据引脚 (DB0-7)、一个读/写引脚 (R/W)、一个寄存器选择引脚 (RS) 和一个启用引脚 (E) 的各种指令写入来控制。 链接到指令集

指令由指示某些设置的位组成……配置参数缺少更好的术语。

一切都按预期工作,但是,我的问题与最佳实践有关。为了最好地组织我的代码以提高可读性和灵活性,我尝试遵循以下方法:

  1. 通过头文件中的#define 指令分配每个 HD44780 配置参数
  2. 为每条指令构建一个 char 类型的数组,并使用适当的配置参数加载它
  3. 通过指针传递指令数组并使用移位操作以串行背包期望的顺序构造SPI输出来执行指令

    这一切都很好,但是,我觉得将指令存储为数组并不是最好的方法。对于如何以清晰和高效的方式处理此问题的任何建议,我将不胜感激。

我的头文件和 .c 文件在下面,main.c 不包括在内,但通过指令别名调用 LCD_send。

头文件

.C 文件

0 投票
1 回答
136 浏览

i2c - IC2 从机不响应 XC8

嘿伙计们,我已经连续工作了 72 小时,但我找不到错误,我正在研究 PIC16F1719 我正在尝试设置 3 个外围设备,一个 ADC,一个 I2C 协议和一个用于与 BT 通信的 USART但是 ADC 很简单,但是我在 I2C 上遇到了困难,尽管事实上我已经检查了好几次代码,由于某种原因,当我得到 ACK 时,一切似乎都很好,但是当我去参加关于传感器(MPU6050)什么都没有显示,但我上次放在缓冲区上的值,有什么想法为什么会发生这种情况?就像缓冲区不会自行清除,我想我无法通过软件清除它,谢谢。

0 投票
1 回答
64 浏览

assembly - PIC18 寻址有些奇怪

我对 PIC18 寻址有一些误解(如我所见)。所以有一部分是XC8生成的lst文件。在代码的末尾,我们可以看到 switch/case 运算符比较块,然后分支到 case 部分。所以让我们得到两个一致的标签 l884 和 l885。它的地址是 1984h 和 1990h(12 个字节或 6 个字的距离)。但是如果我们寻找代码,它是它们的分支,我们可以看到:

E0F7 bz l885

E0EF bz l884

距离是 8 !!!不是 6,不是 0C,而是 8 ???!!!我希望将此函数中的 switch()/case 块更改为计算 goto,因为这一点对速度至关重要(这就是我观看此列表的原因)但现在我不明白我必须使用哪个乘数 6、8 ,还是 12?

0 投票
0 回答
258 浏览

compiler-errors - 如何使所有警告成为错误

MPLAB XC8 C Compiler User's Guide的第 3.14.4.9.2 节中,它指出当使用该warning指令时,编译器将像错误一样处理给定的警告并停止编译,例如

如何对所有类型的警告强制执行此行为?

我试过了#pragma warning error#pragma warning error all但它没有用。

0 投票
4 回答
1724 浏览

pic - 处理器已被看门狗定时器复位(PIC16F72,XC8 编译器)

我已经通过 MPLAB X IDE 和 XC8 编译器开始对 PIC16F72 单片机进行 PIC 编程。下面是我的代码,编译成功。

当我在 Proteus 中模拟我的代码时,它显示以下错误 处理器已被看门狗计时器重置,每 2.3 秒后在 xxxxx 到期。

我已经搜索了这个问题但没有成功。我无法解决问题

0 投票
1 回答
159 浏览

pic - 如何在 sda 和 scl 上使用 1K 上拉电阻连接 pcf8563 rtc 和 24lc512 eeprom

我一直在研究一个代码,其中两者24lc512pcf8563接口在一起。这里的分线板上pcf8563有两个 1K 上拉电阻,SDA所以SCL我计划为 eeprom 使用相同的电阻。
我有一个 eeprom 的代码,它之前使用 4.7K 上拉电阻可以完美运行,所以为了使代码适用于 1K 上拉电阻,我进行了以下更改。(PIC16f877a使用 XC8 编译器完成编码)

但遗憾的是,代码没有按预期工作。有人可以帮我说一下我应该在早期代码中带来哪些所有更改,以便它可以与 1K 上拉电阻一起使用。

提前致谢 :)

0 投票
2 回答
426 浏览

c - XC8 编译器是否支持弱符号?

gcc__attribute__((weak))允许创建一个弱符号,例如一个函数。这允许用户重新定义功能。我想在 XC8 中具有相同的行为。

更多信息:

我正在为 XC8 编写驱动程序,我想将低级初始化委托给用户定义的函数。

我知道可以重新定义一个函数:有一个函数putch在 XC8 的源文件中实现,并由 printf 函数调用。允许用户putch在他的应用程序中重新实现。有两个同名的函数,但没有引发错误。

putch在 XC8 的源文件中的实现有一个注释说“弱实现。可能需要用户实现”,所以它必须是可能的。

我查看了 XC8 用户指南中的编译指示,但没有与此问题相关的指令。

0 投票
1 回答
3828 浏览

pic - 错误::0:错误:(499)未定义符号:

我正在尝试使用 globalVar.h 来清理和整理我的 main.c。但是我遇到了很多我和我的同事无法理解或解决的错误。

请有人这么好心,给我一个提示我可能做错了什么吗?

我正在为我的 PIC12F1572 使用 MPLAB X IDE 3.60 和 MPLAB XC8。





我希望你能帮帮我!提前致谢!

0 投票
1 回答
530 浏览

c - 我想在 MPLAB XC8 上获得一点 char 但我不能?

我的功能是:

主要功能是:

当我编译这个块代码时,我得到一个错误(错误:表达式语法)。

我能做些什么来解决这个问题?

0 投票
1 回答
119 浏览

mplab - xc8 : 请详细说明 (((unsigned)&(REGISTER_NAME))*8) + BIT_NUM

我想为设置引脚方向和级别定义宏。他们的参数必须是端口名称和引脚编号。我不想使用 TRIS 寄存器或 LAT 寄存器名称,只有端口名称(例如 PORTA)。我使用指针和位掩码来执行此操作,例如:

设置引脚目录:

设置引脚电平:

读取引脚状态:

但我知道上面的代码不是最佳的。Q1:我可以用“(((unsigned)&(REGISTER_NAME))*8) + BIT_NUM”写我的宏吗?Q2:对于所有的 PIC MCU,I\O 寄存器的顺序是否相同?