问题标签 [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 投票
1 回答
229 浏览

pic - 将对数值转换为线性 (xc8)

我打算在 PIC16F 系列设备中使用 ADC 将来自对数输出传感器的输入“转换”为线性刻度,以便我可以在 PIC 的端口上呈现它(作为“线性二进制值”),尽管减少了解析度。

Arduino的传感器手册中有一些示例代码 -

XC8(Microchip 的 C 编译器)中是否有类似的功能?我看过,但似乎只有将线性值转换为对数的函数,还是我很傻?

问候拉尔夫

0 投票
1 回答
133 浏览

c - 有符号除数上的 % 运算符需要 C 中的更多程序内存

情况1:

案例2:

使用 Microchip XC8 编译器,我发现案例 1 需要更多指令(使用的程序内存几乎没有增加)。为什么?

注:8 位 CPU。XC8 编译器符合 C89 标准。

部件:


0 投票
3 回答
2699 浏览

c - 8 位值是否有文字后缀?

我正在使用 xc8 编译器并想告诉他我的文字只有 8 位宽。

123 : 无后缀,默认 int(xc8 中为 16 位)

123U :unsigned int 也是 16 位宽

对于描述 8 位文字的干净解决方案有什么想法吗?

0 投票
1 回答
369 浏览

c - 在 PIC18f87k22 上使用 EUSART 模块时出现问题

我正在尝试在 arduino pro trinket 和我的 PIC18f87k22 之间配置 UART 通信。运行我的代码时,出现以下错误:

错误代码

这是函数的原型:

这就是我使用它的方式(到目前为止唯一的用途):

我尝试用 unsigned char 或 uint8_t 替换 char 类型,但它没有改变。关于我的代码有什么问题的任何想法?泰

0 投票
1 回答
192 浏览

c - 如何使用 PIC18f87k22 定时器作为中断

这是关于如何在 PIC 上使用 timer0 的一般问题。

我正在尝试使用 PIC18f87k22 和 arduino pro trinket 构建直流电机控制系统。

在我的程序中,我有一个名为get_courant(). 此函数向 trinket 发送请求并读取接收到的答案(通过 uart)并将该值存储在我的一个全局变量中,从而实现它。

我想做的是按如下方式使用计时器:

如果get_courant()需要超过 10us 才能继续,则跳过它,直接转到我的 main.js 中的其余说明。

我知道我应该在调用函数之前启动一个计时器,并以某种方式读取计时器值来决定是否跳过它。

但是,如果我在调用函数后检查计时器值,那么如果 `get_courant() 的执行超过 10us,我的时间可能会被浪费,在这种情况下,计时器是无用的。

任何提示可以帮助我实现我想要实现的目标(如果我的英语不好的话,IDK)?这是get_courant()如果可以提供任何帮助的代码:

这是我调用 get_courant() 的主要功能的一部分:

0 投票
1 回答
446 浏览

c - 初始化联合/结构的正确方法是什么?

我有以下工会:

知道我想使用我的类型并初始化变量。扫描后(我想)我找到了解决方案:

但是我的编译器给了我一条错误消息:

“@”所需的简单类型

通常,xc8 编译器使用“@”将变量带到特定地址。

0 投票
2 回答
509 浏览

c - PC-Lint 如何忽略表达式或宏

我有一个 xc8 程序,我在其中预定义了 EEPROM:

知道我喜欢 PC-Lint 在我的所有文件中忽略这样的表达式。

0 投票
1 回答
110 浏览

c - 带有 XC8 v1.43 的 PIC16F1717,可用于键盘按键

我有一个 4x3 矩阵键盘连接到 PIC16F1717 的端口 B (RB1-RB7)。我通过依次将每一行设置为高并读取列值来扫描键盘按键。按下的键可以通过匹配行和列来解码。我正在以短暂的延迟去抖动:

两个变量 key 和 keyCount 分别记录按下了哪个键,以及按下了多少个键。当按下 4 个键时,我想执行以下代码:

这也在 main 函数内的 while(1) 循环中。我遇到的问题是增加 keyCount 不起作用。以前,我尝试过 keyCount++ 并且它有效,但在此之前这也不起作用。我尝试通过设置 keyCount = 4 而不是将其递增一来进行调试,并且它起作用了。

这两个变量都在 main 函数内声明(并初始化),但在 while(1) 循环之外。另外,我定义了以下内容:

0 投票
2 回答
351 浏览

c - 使用带有 gpio 引脚的 xc8 编译器在 C 中初始化驱动程序

假设我有一个驱动程序“foo.h”和“foo.c”实现。驱动程序与微控制器上的 gpio 引脚交互。

在 Arduino 中,每个 GPIO 引脚都有自己的引脚号(只是一个整数)。然后您可以使用函数 initFoo(1) 或 initFoo(2) 初始化 foo,以选择您要使用的引脚。

在 Mbed 在线 c++ 编译器中,每个 GPIO 都可以通过 DigitalIn 或 DigitalOut 对象进行控制。

在我也熟悉的 JAL(另一种语言)中,他们使用 alias 关键字。

如何使用 Microchip xc8 c 编译器实现类似的功能?我尝试了使用 define 关键字的 JAL 方法,但编译器不知道“x”是什么。它说未定义的标识符'x'......?

0 投票
0 回答
304 浏览

pic - PIC MCC i2c HT16K33 问题

有没有人使用 MCC i2c 生成的代码成功驱动了 HT16K33?
使用我自己的基本 i2c 代码,我可以让 HT16K33(下面的链接)正常工作,但无论我尝试什么,MCC i2c 代码都无法正常工作。作为健全性检查,我的 MCC 代码与 PCF8574 io 扩展器一起工作正常。我在面包板上用 16F18877 进行测试,没有原理图,HT16K33 在 Adafruit 板上(下面的链接),一切都经过验证,可以使用我的 i2c 代码和 io 扩展器。
HT16K33 是一款 LED 控制器。需要三个 i2c 命令来测试、打开振荡器、打开显示并将数据发送到显示内存。Holtek 建议在程序入口处有 100ms 的延迟,以允许芯片在任何 i2c 命令之前启动。通过使用我的工作代码来显示和 ram 数据,我将其归结为 MCC 代码的最简单测试,仅使用 MCC 代码启动振荡器,这是第一步。

http://www.holtek.com/documents/10179/116711/HT16K33v120.pdf https://learn.adafruit.com/assets/32012

有任何想法吗?