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

c - Pic18 micro最好的c编译器是什么

我们正在开始一个基于微芯片 PIC18F252 的新项目。最好使用的“c”编译器是什么?

0 投票
3 回答
2292 浏览

c - 使用 C 编程在特定时间间隔产生音调

我为 PIC18F 使用 C 语言来产生音调,使它们中的每一个都以特定的时间间隔播放。我使用 PWM 来产生音调。但我不知道如何创建间隔。这是我的尝试。

0 投票
11 回答
4664 浏览

embedded - 使用定时器计时会中断嵌入式微控制器

这个问题是关于在没有操作系统的情况下对小型微控制器进行编程。特别是,我目前对图片感兴趣,但问题很笼统。

我已经多次看到以下模式来保持时间:

定时器中断代码(比如定时器每秒触发一次):

主线代码(非中断):

主线代码可能会重复,将计数器设置为各种值(不仅仅是秒)等等。

在我看来,当sec_counter主线代码中的分配不是原子的时,这里有一个竞争条件。例如,在 PIC18 中,分配被转换为 4 个 ASM 语句(同时加载每个字节并在此之前从存储区中选择正确的字节)。如果中断代码出现在中间,则最终值可能已损坏。

奇怪的是,如果分配的值小于 256,则分配原子的,所以没有问题。

我对这个问题是否正确?您使用什么模式来正确实现此类行为?我看到几个选项:

  • 在每次分配给 sec_counter 之前禁用中断并在之后启用 - 这并不漂亮
  • 不要使用中断,而是使用一个单独的计时器,该计时器启动然后轮询。这是干净的,但会用完整个计时器(在前一种情况下,1 秒触发计时器也可以用于其他目的)。

还有其他想法吗?

0 投票
13 回答
8758 浏览

c - 在 PIC18 上使用 C 进行多线程

由于没有操作系统,如何在编程PIC18时创建并行运行的线程?

0 投票
2 回答
546 浏览

embedded - 一根线问题

我需要你有资格的帮助!我正在使用 C++ 编程,使用 PIC 18F87J50 并尝试在我的 H0 端口连接 DS18B20!

我认为我的底层编程是正确的,所以....我遇到的问题(认为我有)是在执行 ROM 命令时,我正在搜索 64 位 ROM 代码。

第一个字节应该告诉我组件属于哪个系列(28h)。接下来的 48 位应该为我提供一个仅用于该组件的 uniq 序列。最后一个用于CRC。

这样做时我的想法是否正确:

如果我要求 ROM_CODE[1-6] 中的代码,我应该得到 uniq 号??我不应该吗?

亲切的问候!

0 投票
2 回答
818 浏览

embedded - 1wire问题详细

我在下面定义了这些函数,当我询问Device_ID函数例如家庭代码时,我只得到FF(应该是28),实际上我得到了家庭代码,48位串行和crc 8位所有的“一个”。似乎检测从设备功能正常工作......如果我连接从设备,他说我在这里,如果我把它拿走......没有设备存在。我在 1wire 上也有一个 5kohm 的上拉电阻。

而且我不知道为什么我的 Device_ID 不起作用,所以我的问题是为什么它不起作用!?你能在这段代码中看到任何错误吗(我使用的是 PIC 18F87J50 和一个 DS18B20):

我在 Main 中的声明:

使用的功能:





现在一些重要的device_id:





0 投票
5 回答
1527 浏览

embedded - MCC18、48Mhz、18F87J50 的延迟

我应该如何为具有 48MHz 晶振和 MCC18 编译器的 PIC 18f87J50 编写延迟宏。延迟应该在我们身上。所以我例如可以写:Delay_us(201) 并真正得到 201us 延迟。

我现在拥有的是:

而且它在我的示波器上似乎不正确!:/

亲切的问候!

圣诞快乐!

0 投票
8 回答
79073 浏览

port - PIC 18F 上 PORT 和 LATCH 的区别

我已经阅读了数据表和谷歌,但我仍然不明白。

就我而言,我将 PIC18F26K20 的 PIN RC6 设置为 INPUT 模式:

TRISCbits.TRISC6 = 1;

然后我用 PORT 和 LATCH 读取值,我有不同的值!

v1 = LATCbits.LATC6;

v2 = PORTCbits.RC6;

v1 给我 0,而 v2 给我 1。

正常吗?在哪种情况下我们必须使用 PORT,在哪种情况下使用 LATCH?

0 投票
1 回答
7045 浏览

pic - 使用微芯片 c18 编译器在 pic18f 上创建大缓冲区

使用带有 pic18f 的 Microchip C18 编译器,我想在程序数据空间中创建一个 3000 字节的“大”缓冲区。

如果我把它放在 main() 中(在堆栈上):

我有这个错误:

如果我把它放在全局中,我有这个错误:

如何创建一个大缓冲区?你有关于如何使用 c18 管理 pic18f 上的大缓冲区的教程吗?

0 投票
3 回答
7054 浏览

assembly - PIC 汇编函数调用

我正在用 PIC18 汇编编写一个非常基本的程序。它要求我编写一个子程序来将两个 16 位数字相乘。这就是我现在所拥有的:

我现在写它的方式是,它将存储在第一个评论中提到的寄存器中的数字相乘,并将它们存储在评论中的 4 个寄存器中。如果我只需要做一次或两次乘法,这很有效,即我可以说:

将其相乘0x45并将0x47其存储在0x50. 问题是当我需要在不同的数据上多次调用它时,因为汇编器不会让我“设置”任何指针两次。我尝试过使用间接访问(即使用 LFSR1、LFSR2 和 LFSR0 来存储被乘数和结果),但后来我陷入了一大堆 POSTINC0 等问题。有没有办法让这个函数调用更好?