标签: pic

node.js用于微芯片pic32

我知道lua正在开发微芯片PIC32,我想知道node.js(服务器的javascript)是否可以工作,或者如果lib对于PIC32来说太大或太慢了.

embedded microchip pic node.js

2
推荐指数
1
解决办法
1590
查看次数

宏观中的双斜线评论替代

我正在开发一个符合ansi标准的编译器(Microchip XC8)上的PIC MCU程序.有两种操作模式,在编译期间通过宏确定.所以我不想因为一行代码而复制一个类似函数的宏,我想知道是否有任何方法可以编写宏如

#define FOO //
Run Code Online (Sandbox Code Playgroud)

这样当FOO被替换时,它实际上将取消该线的其余部分.

编写函数而不是宏是不可能的,因为函数调用产生的延迟会破坏程序的紧密时序(大约几微秒).

c macros conditional-compilation pic c-preprocessor

2
推荐指数
2
解决办法
1497
查看次数

Timer1 RD16位在PIC18单片机上的作用是什么?

我真的很困惑.手册说:

RD16: 16-bit Read/Write Mode Enable bit
1= Enables register Read/Write of Timer1 in one 16-bit operation
0= Enables register Read/Write of Timer1 in two 8-bit operations
Run Code Online (Sandbox Code Playgroud)

但是,实际上似乎没有任何方法可以通过一个16位操作进行R/W!从数据表后面的内容以及我在网上看到的内容来看,16位值仍必须读作:

foo = TMR1L;
bar = TMR1H;
Run Code Online (Sandbox Code Playgroud)

写作:

TMR1H = bar;
TMR1L = foo;
Run Code Online (Sandbox Code Playgroud)

除非我没有看到它,否则RD16没有显示在Timer1框图中,似乎对任何事情都没有影响!

我知道这不可能是真的,所以我在这里问:Timer1 RD16位对PIC18单片机有什么作用?

microcontroller timer microchip pic pic18

2
推荐指数
1
解决办法
1248
查看次数

比特被炒了

问题:我向UART发送一个值,在另一个UART上出现空值.

- - 细节 - -

这些都是PIC处理器(PIC24和PIC32)

它们都硬接线到印刷电路板上.

它们通过其中的一个UART模块进行通信.

它们(表面上;根据文档)都配置为115200 bps,8-N-1

没有握手,没有启用CTS,没有启用RTS; 我只是把字节放在线上,然后就可以了.

(这些是短小的4字节命令和响应,非常整齐)

PIC32的速率为80 MHz.

PIC24的F [cy] = 14745600

即,它是14.7456 MHz

PIC24发送四个字节(特定的命令序列)

当我在UART的中断服务程序设置一个断点时,PIC32显示空值,然后我看到前四个后(PIC32代码)断点重复点击,我继续看到空值(这是自PIC24以来有意义的)没发送任何东西)

也就是说,当没有理由时,UART似乎重复产生中断

我没有在PIC32端写代码,我每天都在学习它是如何工作的.

然后我让代码运行起来,我不可避免地会说到一条线

    52570 1D01_335C 9D01_335C  _general_execption_handler  sdbbp 0x0
Run Code Online (Sandbox Code Playgroud)

当我到达时,

  • 原因登记册成立 0080181C
  • EPC注册成立 9D00F228
  • SP寄存器成立 9F8FFFA0

这就像发条一样,所以我怀疑__ISR不会停止.MpLab告诉我这个......

           432:
           433:                 //*********************************************************//
           434:                 void __ISR(_UART1_VECTOR, ipl5) IntUart1Handler(void)   //MCU communication port
           435:                 {
           9D00F204  415DE800   rdpgpr      sp,sp
           9D00F208  401A7000   mfc0        k0,EPC
           9D00F20C  401B6000   mfc0        k1,Status
           9D00F210  27BDFF88   addiu       sp,sp,-120
           9D00F214  AFBA0074   sw          k0,116(sp)
           9D00F218  AFBB0070   sw          k1,112(sp)
           9D00F21C  7C1B7844 …
Run Code Online (Sandbox Code Playgroud)

embedded serial-port pic uart

2
推荐指数
2
解决办法
386
查看次数

为什么这种情况总是如此?

语言:C PIC:16F84A 程序:CCS PCW

当我编译下面的代码时,我的编译器抱怨FOR总是为真(也许int我不支持负值?):

#include <16F84A.h>
#FUSES XT
#use delay(clock=4M)
byte const display[10] = {63,6,91,79,102,109,124,7,127,103};

void main()
{
   set_tris_b(0);
   while(True)
   {
   int i;
      for(i=9;i>=0;--i)
      {
         output_b(display[i]);
         delay_ms(300);
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

它的PIC倒计时项目,所以:9,8,7,6,5,4,3,2,1,0,9,8,7,6,5,4,3,2,1,0,9,8 ,7,6,......但它在第一个周期后停止.

c embedded microcontroller pic

2
推荐指数
1
解决办法
1460
查看次数

C如何处理if语句中的非布尔值?

我有时在C程序中看到这个(我正在使用C18编译器):

unsigned char someValue = getSomeDataFromSomewhere();
if (someValue) {
    doStuff();
} else {
    doOtherStuff();
}
Run Code Online (Sandbox Code Playgroud)

我知道当你给if一个布尔循环(unsigned在C18编译器中)时会发生什么,但是当你把非布尔值放入时会发生什么?

我的猜测:doStuff()当值不为零时,以及doOtherStuff()当值为零时,它会执行.但我不知道这个,所以我想得到一些参考.

c types if-statement pic mplab-c18

2
推荐指数
2
解决办法
105
查看次数

从字符中读取单个位

这是我在这里的第一篇文章所以请原谅我做错了:)这是我的情况.我正在使用MPLAB和HI-Tech C编译器为PIC16F876编写简单的数据传输操作.

我有一个叫做数据的字符,我想访问数据中的位并将它们发送到portB0,从MSB开始.

在汇编中我会做:

PORTB,0 = data,7 //为了获得MSB并将其放在端口B0上,我会为所有位执行此操作.

然而在C中,这似乎更复杂.我做了一些研究,发现了一个有效的功能:

getBit(char data, int bitNumber)
{
     return (data & (1 << bitNumber-1)) != 0;
}
Run Code Online (Sandbox Code Playgroud)

然后我就用了:

PORTBbits.RB0 = getBit(data,7);
Run Code Online (Sandbox Code Playgroud)

这没关系,但是很乱,似乎需要更长的时间,我不知道为什么我需要一个额外的功能...所以我的问题是:是否有一个简单的方法来访问寄存器中的位?喜欢:

PORTBbits.RB0 = data,7
Run Code Online (Sandbox Code Playgroud)

我不明白为什么不会因为编译器将其转换为汇编而无论如何?!!!!

提前致谢.此致,蒂姆.

c embedded pic

2
推荐指数
1
解决办法
7313
查看次数

在 MPLAB XC8 Microchip 编译器中声明字符串的特定地址

当我想对我使用的字符串使用特定地址时,使用编译器 C18:

在.C

#pragma romdata idsoft
    const rom unsigned char _app_nfo[31]= {"V0.0 No        - 05/12/12"};
#pragma romdata
Run Code Online (Sandbox Code Playgroud)

在链接器中:

CODEPAGE   NAME=idsoft     START=0x78E0         END=0x78FE
Run Code Online (Sandbox Code Playgroud)

我怎么能用 XC8 做同样的事情?我尝试了很多东西,但没有一个起作用。

在 XC8 链接器参数中:

-L-pappnfo=0x78E0
Run Code Online (Sandbox Code Playgroud)

在 .C 中:

unsigned char __section ("appnfo")  app_nfo[31];
Run Code Online (Sandbox Code Playgroud)

它不起作用。

c compiler-construction microchip pic

2
推荐指数
1
解决办法
4522
查看次数

Microchip弯曲C的规则?

当我遇到一堆看起来像这样的结构时,我正在挖掘一些与PIC单片机相关的headder文件:

typedef struct tagPORTDBITS {
  unsigned RD0:1;
  unsigned RD1:1;
  unsigned RD2:1;
  unsigned RD3:1;
  unsigned RD4:1;
  unsigned RD5:1;
  unsigned RD6:1;
  unsigned RD7:1;
  unsigned RD8:1;
  unsigned RD9:1;
  unsigned RD10:1;
  unsigned RD11:1;
  unsigned RD12:1;
  unsigned RD13:1;
  unsigned RD14:1;
  unsigned RD15:1;
} PORTDBITS;
Run Code Online (Sandbox Code Playgroud)

这是标准C吗?我无法找到任何其他类似的东西,即变量定义后的":1"

我假设所有元素都代表位,那么这是Microchip对C编译器的补充,以使嵌入式程序员更容易吗?

c standards struct typedef pic

2
推荐指数
2
解决办法
777
查看次数

为 ARM M4 编译和链接位置无关代码 (PIC)

我正在制作一个引导加载程序并赋予它自我更新的能力。此过程包括将二进制文件复制到新位置,跳转到该位置,然后使用它在原始位置刷新新的引导加载程序。这一切都是使用 ARM GCC 工具链在 Eclipse 中为 M4 处理器开发的。

为此,我认为需要将其编译为位置无关代码(PIC)。

我四处搜索并发现这篇优秀的文章,因此当我将“-fPIC”添加到 ARM GCC 编译器调用时,我预计会看到有关 GOT 和 PLT 丢失的链接器错误 https://eli.thegreenplace.net/2011/11 /03/共享库中的位置无关代码图片/

在我的链接器脚本中,我将这些位置添加到 .data 部分,如下所示:

.data : AT(__DATA_ROM)
{
. = ALIGN(4);
__DATA_RAM = .;
__data_start__ = .; /* Create a global symbol at data start. */
*(.got*) /* .got and .plt for position independent code */
*(.data) /* .data sections */
*(.data*) /* .data* sections */
KEEP(*(.jcr*))
. = ALIGN(4);
__data_end__ = .; /* Define a global symbol at data end. */ …
Run Code Online (Sandbox Code Playgroud)

c arm position pic bootloader

2
推荐指数
1
解决办法
5740
查看次数