问题标签 [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.

0 投票
2 回答
1214 浏览

c - 为什么这个 PIC 代码不能点亮我的 LED?

以下代码不会将我的 PIC18F14K50 上的任何引脚设置为高电平,但它再简单不过了!

我正在使用 MPLAB v8.43 和 Hi-Tech ANSI C 编译器。

逻辑探头显示除 VUSB 和 MCLR 外没有任何引脚为高电平。

有任何想法吗?

0 投票
3 回答
20317 浏览

microcontroller - 读取 PIC18 上输入引脚的状态

我已经能够让输出在我的 PIC 上工作,并且可以在我将各种输出锁存器设置为高/低时使一堆 LED 闪烁。但是,我在大头针状态下阅读时遇到了很多困难。

请参阅下面的代码。我设置了我的配置,并将 TRISC 定义为输入,将 TRISB 定义为输出。在一个无限循环中,我检查 RC6 是高还是低,并根据结果将整个 B 锁存器设置为高或低。

代码编译良好,没有警告或错误。如果我的代码逻辑只是将锁存器设置为高电平和低电平,那么效果很好,但我无法成功读取引脚的状态。

有任何想法吗?

我正在使用 PIC18F14K50 和 MPLAB v8.43 以及 HiTech ANSI C 编译器。

我的连接是 +5V 到 VDD(引脚 1),VSS(引脚 20)到地。我有 +5V 到 C6(引脚 8),以及从 B7(引脚 10)到地的 100K 电阻和 LED。要切换 RC6,我将电线连接/断开连接到 C6。

0 投票
3 回答
9342 浏览

c - PIC18F 延迟

我正在使用带有 HiTech ANSI C 编译器和 MPLAB v8.43 的 PIC18F14K50。我的 PIC 代码终于启动并运行和工作,除了延迟功能。这对我的应用程序至关重要——我需要它在给定的毫秒、秒或分钟数内处于某些状态。

我一直试图为此找到解决方案大约 2 周,但到目前为止还没有成功。我放弃并asm("nop");在循环中编写了自己的延迟函数,但这会产生非常不可预测的结果。如果我告诉它等待半秒或 5 秒,它就足够准确了。但是,一旦我告诉它等待更长的时间——比如 10 分钟,延迟只会持续大约 10 到 20 秒,而 2 分钟以上是比 500 毫秒延迟更短的眨眼。

这是我的配置保险丝和wait()功能:

就像我说的那样,如果我打电话wait(500)到那wait(30000)我会得到半秒到 30 秒的延迟到我感兴趣的容差范围内 - 但是如果我打电话wait(600000)那么我不会像我期望的那样延迟 10 分钟,而是大约 10-15 秒,wait(120000)不会延迟 2 分钟,而是快速眨眼。

理想情况下,我想让内置__delay_ms()函数工作并从我的内部调用wait(),但是我没有取得任何成功。如果我尝试这样做,#include <delay.h>那么我的 MPLAB 会抱怨没有这样的文件或目录。如果我查看 HiTech 示例中的 delay.h ,有一个已DelayUs(unsigned char)定义的和一个extern void DelayMs(unsigned char)我没有尝试过的,但是当我尝试将 extern 直接放入我的 C 代码中时,在链接时出现未定义的符号错误。

中短延迟和长延迟之间的差异是没有意义的。我唯一的解释是编译器已经优化了 NOP 或其他东西。

就像我说的,它是带有上述配置保险丝的 PIC18F14K50。我对 PIC 没有太多经验,但我认为它在这种设置下运行在 4MHz。

我对来自库或宏的外部函数或带有 NOP 的手写函数感到满意。我所需要的只是让它精确到每分钟几秒钟左右。

0 投票
0 回答
734 浏览

c - Microchip C18裸函数

有人知道在 C18 编译器上声明裸函数的方法吗?

裸函数是指没有任何结语和序言的函数。

在 gcc 中我使用:

也许是一个#pragma 或一些技巧来获得相同的结果......??

谢谢!

0 投票
3 回答
4546 浏览

visual-studio - Visual Studio 中的嵌入式代码开发(尤其是对于带有 C18 的 PIC)

我正在使用 Visual Studio 编写桌面应用程序,我发现它非常用户友好且易于使用。

如果可能的话,我还想在 Visual Studio 中编写嵌入式代码。例如,是否可以使用 C18 或任何其他类似的基于 C 的语言为 PIC18Fxxx 系列生成 .hex 文件?

0 投票
1 回答
2017 浏览

serial-port - PIC18f4620 在 SDCC 中接收 usart

我正在尝试实现PC(linux)与用于rs232的PIC18F4620的通信。传输(PIC -> 到 PC 很好)。但是,当我尝试将某些东西从 PC 传递到 PIC 时,PIR1bits.RCIF 标志永远不会设置,并且不会发生中断。

那是我的(PIC18f)代码(一个版本):

在 PC 中我做了:

所以,PIC到PC是可以的。但是当我尝试时:

回声“某事”> /dev/ttyUSB0

或者

或者即使我编写代码将 /dev/ttyUSB0 作为文件打开并写入,使用 python 串行模块,也没有任何反应。

0 投票
1 回答
4382 浏览

loading - Microchip:如何在 MPLAB X 中加载多个 HEX 文件

我使用 MPLAB X(有时是 MPLAB 8)并完成了一些项目。我有这些十六进制文件:

  • 引导加载程序.hex
  • 魔术标志.hex

Bootloader 从地址 0x0 加载到 0x7FF。魔术标志位于地址 0x40 中(因此在引导加载程序区域中)。

现在我需要在 MPLAB X 中设置项目以加载所有内容(bootloader+magicFlag+app)。可以加载引导加载程序,然后是magicFlag,然后设置保留闪存并在应用程序上工作并仅加载应用程序区域(从0x800到0xFFFF),但这对我来说不太舒服。例如,当我使用 iSYSTEM 的 WinIDEA IDE 与飞思卡尔合作时,我能够设置许多要加载的 SX 文件,非常简单、快速并且可以正常工作。但是当我用 MPLAB XI 尝试它时,总是会出错:

(944) appl.hex 和 bootloader.hex 之间地址 0h 的数据冲突。

我尝试了什么:

  • 用于在项目属性中加载的设置文件(加载部分)
  • 在项目属性中设置内存范围(ICD 3 部分)

但我认为加载 ICD 3 没有问题。因为当 MPLAB X 创建统一的 hex 文件时,错误及时出现。

想象一下,这是我的链接器的一部分:

我提醒一下,这不仅是我的项目,而且只是带有 magicFlag 的引导加载程序,而且我只有来自 appl 的源代码。当然,最好在一个项目中拥有带有 appl 的 bootloader 源代码。

所以,MPLAB X 害死我了,请帮助我 :-)

0 投票
1 回答
860 浏览

c - 用 C 语言为 pic18f1xk22 设置 ADC

初学者尝试学习 ADC 设置,但不幸的是,大多数在线示例都是针对其他 pic18 模型的,而且我没有 adc.h 定义作为资源。(或者不是 C 代码。)真的不想被灌输一个答案,但如果有人能建议一些很棒的演练、在线资源等。我真的很感激,谢谢!

此外,我编写的这个伪代码的任何帮助都会很棒。可能有错误......不知道我是否在正确的轨道上。

0 投票
1 回答
2556 浏览

assembly - PIC18 的 .asm 中左移位

我试图通过旋转.asm通过rlcf向左移动位,然后清除进位。这行得通吗?如果没有,我能得到一些帮助吗?由于某种原因,它无法编译,它让我发疯,这是一个如此简单的程序,但我无法得到它。非常感谢所有帮助。

0 投票
2 回答
2869 浏览

performance - 快速 8x8 位乘法程序集 pic18

我试图将两个 8 位数字相乘并将它们存储在 16 位位置以获得大于 255 的结果。完成此操作的最快方法是通过移位,我试图通过 rrcf 函数实现它并使用 bcf 清除不需要的进位。

这就是我想出的。我试图评论所有代码,以便您能够看到我的思考过程。总的来说,我对 PIC18 和 ASM 编程都很陌生。在(希望)提供帮助时请记住这一点。我需要放在一个比现在更好的位置,当我运行 MPLAB SIM 时,我得到的只是计数器递减......?

我认为这是由于乘法器的最后一位被反复测试,这将是零,因此每次都跳过我的加法指令。你能帮我创建一个循环以从 0-7 位逐步移动 BTFSC 吗?我认为这是问题所在,但我无法弄清楚代码。我基本上可以写 main 8 次,但我试图节省代码空间