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

c - 使用 PIC18F27J53 的 USB 驱动程序

我正在尝试使用 PIC18F27J53 对任天堂娱乐系统控制器的输出进行解码,并将其用作 USB 兼容的 HID 操纵杆。

我已经成功地能够每秒读取 60 次输出并将每个按钮的状态存储为 8 位无符号字符的一位。我将 USB 的 5V 和 Gnd 用于 PIC 和 NES 控制器,我通过 RB1 发送锁存信号,通过 RB2 发送时钟,并通过 RB0 读取数据。

http://www.mit.edu/~tarvizo/nes-controller.html

http://ww1.microchip.com/downloads/en/DeviceDoc/39964B.pdf

这是我需要帮助的地方:弄清楚如何与 USB 数据线连接。我已经下载了 Microchip USB C 库,但不知道从哪里开始。我正在使用 C18 编译器在 MPLAB X IDE 中编程。

0 投票
2 回答
2277 浏览

c - 用 C18 读取 pic18 rom 常量

我正在努力理解为什么我在尝试从存储在 rom 中的多维表中读取数据时得到随机数据。

我有一张要在 OLED 屏幕上显示的位图字符表。字符表太大而无法放入 ram 中,而 rom 是它的自然位置。当我尝试从表中读取元素时,数据不是存储在表中的数据。

这是我尝试做的。我在使用它的 C 文件的请求中将位图声明为多维数组:

这是我尝试读取数据并将其打印到屏幕的地方:

PutImage函数的实现:

如果我更改它以使数据适合 ram,它就可以正常工作。所以问题要么是数据一开始没有正确存储,要么是我使用它的方式不正确。

我使用的图片是 18F27J53,数据表第 7.1 节(表读取和表写入)讨论了一些用于在程序存储器和 ram 之间移动字节的汇编器操作。当我使用 C 时,我不确定这是否是我需要注意的事情,或者编译器是否知道如何处理它。

0 投票
0 回答
326 浏览

port - PIC18F26J13,SPI2 映射到 PORTB,不起作用

我正在开发一个 18f26j13 的项目,我需要 MSSP1 上的 I2C 和 MSSP2 上的 SPI。我的 I2C 工作完美,但我无法让 SPI 在端口 B 上工作,如果我将它们映射到端口 c,它工作得很好,所以我认为端口 b 上有些东西我没有禁用。

我将引脚重新映射到端口 B,并在 ANCON 中将引脚设置为数字 I/O,然后 ofc 为 RB4 设置 tris 位

我有一种感觉,我已经尝试了一切,但我错过了一些明显的东西,我真的希望有人能提供帮助:)

编辑:哦,我忘了……我可以测量 SCK2/RB3 上的时钟,以及 SDO2/RB5 上的脉冲,所以我看起来问题出在 RB4 上……

EDIT2:好吧,我错了,问题出在RB5上,如果我将SDO2映射到RB2,那么它可以工作,但仍然是个问题,因为必须将它附加到RB5 ...

0 投票
1 回答
471 浏览

embedded - 引导加载程序问题

我在 PIC18F87J11 上的串行引导加载程序有一个奇怪的问题,这个问题主要与 GOTO 指令有关。我将进一步解释,首先这是我的 HEX 文件。

如您所见,第一个地址是0C00(第 1 行),然后它写入以下 E2EF、FFF0 和其余 FFFF,直到达到 64 个字节。换句话说,这就是我要写到内存中的内容。

现在,当我在写入后从 PIC 读取程序存储器时,GOTO 指令与地址为 FFC4 的 HEX 文件的第二行不同

现在我的 HEX 文件的下几行转到以下地址,看起来像这样。

这就是我在将上述数据写入程序存储器后从程序存储器中读取的内容。

现在为什么地址00C00指向1FFC4 ( GOTO 0x1FFC4 ) 而不是0FFC4其余 HEX 文件实际写入的位置?

我真的希望我能在这里得到一些帮助,因为上周我一直在尝试解决这个问题。谢谢!

更新

我开始认为问题与应用程序代码的 hex 文件有关。我使用的 hex 文件是从教程中提到的批处理文件生成的,但是 mplab xc8 生成的 hex 文件有些不同。我将提供更多信息,希望有些东西能引起人们的注意。

这是批处理文件中写的

这是批处理文件生成的十六进制文件

这是mplab xc8生成的hex文件

0 投票
1 回答
102 浏览

c - 修改PIC18中的操作码

我用c语言写了一个程序,在这个程序中,我可以通过指向特定地址的指针来访问,并且操作码可以打印它。我用这种方法编写了自修改代码。我在8086中做了这个建筑学。我希望它在微控制器 PIC18F2550 上运行。我正在使用带有 Mplab C18 3.46 的 Mplab IDE 8.92。我以前从未在微控制器上这样做过。不像 8086 这里我没有访问操作码!指针是操作码的地址。但是,返回值为0X00!这是一个代码示例

![图片来自mplab]这张图片显示Values 1

0 投票
1 回答
1218 浏览

pic18 - pic18f4550 的 USART

我正在研究 PIC18f4550。我希望它通过 USART 进行通信。我能够传输一个字符,但无法接收任何数据。根据我的说法,我检查了所有的 SFR 和 r ri8。我正在使用 mplab c18 v3.46 编译器和 MPLAB v8.40。

我在网上找到了这段代码并进行了相应的修改。它传输'o'并且不再响应'k'

0 投票
1 回答
1702 浏览

uart - 关于 RealTerm:串行捕获程序 2.0.0.70

我在使用 RealTerm 串行系统时遇到了一些困难。我想使用这个软件作为 GUI 通过 UART 与 PIC18F46J50 微控制器通信。首先我想编写一个回显功能,但是我发现GU​​I上半部分的空白区域不能用于输入新单词。根据网上的资料,我觉得这个区域是允许输入文字的。

有没有人能解决这个小问题?谢谢大家关心这个问题。

真诚的伐木工

0 投票
1 回答
2643 浏览

io - 为输入和输出配置 PIC 端口

我试图在我的 PIC18F4620 上使用端口 A 的两个引脚,一个作为输出,另一个作为输入。我写了一个简单的程序来做这个。但是,当我在我的板上调试程序时,输出不会根据输入而改变。

我理解如果我只使用一个引脚,为什么每次都需要更改引脚配置,但我使用两个不同的引脚(A0 和 A1)这一事实让我感到困惑。此外,当我使用两个不同的端口(例如 A0 和 D1)时,输出确实会发生变化。

我是否遗漏了什么,或者这是我在设计中必须解决的限制?

这是代码:

0 投票
1 回答
2884 浏览

c - C18 将 char 数组传递给函数

我是 C 编程和微控制器的新手。我正在使用带有 C18 的 PIC18F24K20 微控制器。我将其设置为使用 USART 发送和接收功能从计算机输入接收信息。我的目标是将接收到的单词与已知单词进行比较,并根据接收到的单词将某些内容传输回计算机。下面是相关代码。

该代码当前设置为测试以尝试确定错误所在。如果我按原样运行它,计算机将收到一个“t”,就好像微控制器通过 CommTransmit 函数运行一样。但是,它从不传输“g”。即使我在 CommTransmit 函数中调用了 USART_transmit('g'),在 if 语句之外和之后,它也永远不会被调用(就像它卡在 strcmppgm2ram 函数中一样?)但它仍然传输't'。

这也很奇怪,因为如果我在 CommTransmit 函数上打断并逐行运行,它似乎可以正常工作。但是,如果我查看 MPLAB IDE 中的 CommVariable,它永远不会是它应该的样子(尽管在被调用到函数中之前的“buf”变量是正确的)。据我所知,当我观察 CommVariable 时,它​​的值取决于数组的大小。

从阅读中,我认为这可能是由微控制器如何存储变量(程序与数据存储器?)引起的,但我不确定。任何帮助是极大的赞赏!

编辑:我还应该补充一点,如果我在 CommTransmit 行之前的 else 语句中取消注释 T = strcmppgm2ram 行,它可以正常工作(当两个字符串相同时,T = 0)。我相信当我通过函数时数组会发生变化,这会导致 strcmppgm2ram 函数无法正常工作。

0 投票
0 回答
574 浏览

serial-port - USART PIC18F45K20接收数据中断问题

我目前为我的微电子课程设计 ARV,需要在 PIC18f45k20 上实现 USART。到目前为止,我已经让它在高优先级中断上接收到 RCREG 的第一个字符。但是,当它退出中断服务程序,程序回到主循环时,USART 不会再次中断,也不会接收到其他字符。我怀疑这与我的中断有关,因为它似乎接收到了正确的数据。对这个问题有任何帮助吗?下面是我的代码。