问题标签 [pic18]
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 - 在 PIC C18 中调用问题,参数乱码 - 也许使用指向结构的指针?
我正在尝试使用 PICC18 进行一个相当简单的调用。
使用 MPLAB 模拟器,我看到参数,即使在进入函数时,也是完全乱码。
我有以下类型定义
(我的 TODO 列表包括制定我需要指定位域的顺序)
嵌入在另一个结构中
并分配在分页 RAM 中的某处(在 main.c 中)
aprs.h中定义的方法
(我确实尝试在 string.h 的示例后面放一个“远”。没有效果 - 在这张 PIC 上我没有 64K 所以真的应该将所有内容重新编译为“近”)
aprs.c 中的实现是
(它可以被优化。最好先让它工作。这个实现让我看到它在循环中的内容。)
main.c 中来自 main() 的几个调用是
转换为 (unsigned char) 也无济于事。
前三行编译,但在 MPLAB 模拟器中运行时,函数实现的参数中会产生乱码。
strcpy 行给出编译器警告“Warning [2066] type qualifier mismatch in assignment”。如果它告诉我哪个任务会很好。
我在这里做错了什么?
谢谢
- 理查德
assembly - 如何在 ISR 上将预分频器设置为以微秒为单位的某个间隔?
我有一个PIC18F87J11设备,我应该创建:
1)应该每 100 毫秒触发一次的高优先级 ISR
2)应该每 10 毫秒触发一次的低优先级 ISR
我有关于配置预分频器的基本知识,例如 Timer0,它是
如手册页所述,这应该将 Timer0 配置为 16 位计数器,预分频器 1:8(设备手册页 179)。问题是,当我想要 100 毫秒的间隔时,我不知道如何确定正确的预分频器设置。任何帮助表示赞赏。
编辑:
好的,现在我意识到我对自己在做什么的想法可能比我想象的要少。我在手册中找不到相关信息(我确定它在那里)。我需要将Timer0设置为 100ms,将Timer1设置为 10ms。
java - USB通讯口
我想将数据从 PIC18F4550 发送到 EEPROM。PIC 位于我想使用(USB 端口通信)将数据从我的 PC 发送到 PIC 的开发套件上。*不是串行*
我正在寻找有关如何使用 C 或 Java 语言执行此操作的良好代码示例或教程
pic18 - 从 PIC18f4550 到串行并行输出锁存器
我搜索了很多关于如何将数据从 PIC18f4550 发送到 8 位串行输入、串行或并行 74HC595 锁存器的信息。
我需要一个代码示例来了解如何执行操作。
任何帮助表示赞赏。
c - 汇编器到 C 的转换 INCF 和 CPFSLT
这两个代码的意思是一样的吗?
装配工->
C->
如果不是,应该如何翻译 assambler 代码?
亲切的问候 :)
c - Microchip C18 - 奇怪的代码行为(可能与扩展模式/非扩展模式相关)
我对 PIC18F67J60 的 Microchip C18 编译器有这个奇怪的问题。
我创建了一个非常简单的函数,它应该返回较大字符串中的子字符串的索引。
我不知道出了什么问题,但该行为似乎与是否启用了扩展模式有关。
在 MPLAB.XI 中启用扩展模式后,可获得:
- 该
memcmppgm2ram
函数始终返回零。
在 MPLAB.XI 中禁用扩展模式时,得到:
- 迭代器变量的值
i
计为:0, 1, 3, 7, 15, 21
我正在考虑一些堆栈问题或其他问题,因为这真的很奇怪。完整的代码如下所示。
bit-manipulation - PIC C18:从一个字节中读取位
我有一个非常基本的问题。但是,无论我尝试过什么,我都无法成功实现这一点。
我有一个移位寄存器(74LS164)连接到 PIC18F2550,硬件配置如下:
LED 连接到 74LS164 的输出引脚以查看其状态。我有一个 8 位变量声明为unsigned char
. 我想将此变量的位发送到移位寄存器。移位寄存器具有内部触发器,其输出命名为 Q0-Q7。第一个发送的位加载到 Q0,当您发送第二个位时,前一个 Q0 移动到 Q1,新发送的位到达 Q0,并且在您发送后续位时如此继续。发送完成后,变量的 LSB 应该在移位寄存器的 Q0 上,MSB 会在 Q7 上。
我的代码是这样的(语言是 C18):
上面的代码没有按我的意愿运行。当我运行它时,所有的 LED 都会亮起,就好像我已经加载0b11111111
到ucRegister
变量中一样。
但是,以下一个效果很好:
我的代码有什么问题?我认为错误最有可能在线上SCLCD_DATA = ((ucRegister & 0b10000000) == 0b10000000) ? 1 : 0;
,但无论我怎么看,它对我来说都很好。我的代码有什么问题?
任何帮助将不胜感激。
c - PIC 板全局变量与本地方法的 C 性能
全部,
我有每秒调用多次的 C 函数,因为它们是 PIC18 板上控制循环的一部分。这些函数具有只需要方法范围的变量,但我想知道是否有任何开销不断分配这些变量与使用全局或至少更高范围的变量。(如果性能要求不使用方法局部变量,则考虑对结构进行类型定义以从更高的范围传递以避免使用全局变量)
这里有一些很好的主题涵盖了这个主题,但我还没有看到一个明确的答案,因为大多数人都在宣扬我同意的最佳实践,只要每微秒都没有性能提升,我就会遵循这些最佳实践。
一个线程提到使用文件范围的静态变量代替全局变量,但我不禁想知道是否有必要这样做。
大家怎么看?
c - 以 4 个单字节解析 IP 地址字符串
我正在使用 C 语言在 MCU 上编程,我需要将包含 IP 地址的以空字符结尾的字符串解析为 4 个单字节。我用 C++ 做了一个例子:
此代码在新行中的每个字节打印 192、168、0 和 1。现在我需要单个 char 中的每个字节,例如 char byte1、byte2、byte3 和 byte4,其中 byte1 包含 1,byte4 包含 192... C。 :(
pic18 - 带有 PIC18F4550 的 EEPROM 24lc256
我正在做一个大学项目,我需要将 pic18f4550 与 i2c EEPROM 连接起来。
我使用 proteus 模拟器实现了以下电路。我的连接中的以下内容
当我在现实中实现接口时,当 PIC 从 eeprom 读取时,我遇到了一个问题。它已暂停,因此我无法查看读取操作是否正确执行。
可能是什么问题呢?