Tag: pic

PIC – RB7有值吗?

我读取端口RB7,并在if中检查值。 如果在RB7上有输出我希望我芯片上的LED亮起(LED D1),但即使没有任何连接到RB7,它也会一直燃烧。 我做错了什么? 这是PIC 18F4550它是用mplab v8.63和C18编译器编写的。 void main (void) { TRISD = 0x00; // PORTD als uitgang TRISB = 0b00110000; // RB4 en RB5 als ingang RCONbits.IPEN = 0; // prioriteit uit INTCONbits.GIE = 1; // enable interrupt INTCONbits.RBIE = 1; // interrupt portB aan TRISBbits.TRISB7 = 0; TRISBbits.TRISB6 = 0; TRISBbits.TRISB3 = 0; […]

在dsPIC33上吻合FFT

我一直试图让KissFFT在dsPIC上工作,但是在尝试了各种不同的方法之后,输出并不是应该的。 我希望得到一些帮助,看看是否有任何我可能会忽略的配置,或者它是否只是我没有想到的东西? 我在MPLABX中使用dsPIC33EP256MC202和XC16编译器。 声明和内存分配。 int readings[3] = {0, 0, 0}; kiss_fft_scalar zero; memset(&zero,0,sizeof(zero)); int size = 128 * 2; float fin[256]; kiss_fft_cpx in[size]; kiss_fft_cpx out[size]; for (i = 0; i < size; i++) { in[i].r = zero; in[i].i = zero; out[i].r = zero; out[i].i = zero; } kiss_fft_cfg mycfg = kiss_fft_alloc(size*2 ,0 ,NULL,NULL); 从面包板上的accellerometer读取读数并填充浮子arrays(使用毕达哥拉斯将3轴合并为一个信号)。 输入XYZ值按比例缩小,平均值介于-2400和2400之间。 […]

程序在MPlab的Pic C意外地返回其主要点

我正在使用MPLAB IDE中的PIC16F84编程步进电机。 在我调用它的延迟方法后,我的程序返回它的起点。 为了更具特色,这里有一些代码片段。 驱动程序的主要方法 int main(int argc, char** argv) { TRISB = 0; // PORT B as output port PORTB = 0x0F; stepForward(25); activateRelay(); waitForSeconds(3000); deActivateRelay(); stepBackward(50); //Since step forward method steps for 100, this will return to initial state stepForward(25); return (EXIT_SUCCESS); } 前进的方法 void stepForward(unsigned int stepCount){ while(0 < stepCount) { PORTB […]

MpLab链接错误:无法分配部分(C30编译器)

我已将这两段代码放在一起(最初在此问题中描述)。 我现在刚从MpLab(Microchip MPLAB C30)遇到此错误 Link Error: Could not allocate section .nbss, size = 20004 bytes, attributes = bss near 最奇怪的是,我在编译器手册(Microchip出版物DS51284F)中找到了该消息,甚至是该消息的子字符串,但没有发现任何消息。 我甚至寻找单词allocate ,发现它只有三到四次,从来没有出现过错误信息。 在将这两段代码放在一起之前,我有一个定义为0x8000的段,我用于内存的“大块”,我们将使用它来将数据从Thing-X移动到Thing-Y 我把我在0x8000定义的数据区缩小到1个单独的字节,我仍然收到这个错误。 我没有在Microchip的编译器手册DS51284F中看到此消息。 有没有人曾经解决过这个问题? 链接器有不同的手册吗? 有没有办法让我可以得到一张记忆图来查看我的记忆区域在哪里?

将汇编转换为C

我正在尝试写入PIC18F87J11上的闪存,但我在理解汇编时遇到了问题。 我的PIC的数据表只有汇编,我正在使用C编译器。 我想知道是否有人可以帮助我将这部分代码翻译成C语言。 此代码可在此处找到,第7.5节。 MOVLW CODE_ADDR_UPPER ; Load TBLPTR with the base address MOVWF TBLPTRU MOVLW CODE_ADDR_HIGH MOVWF TBLPTRH MOVLW CODE_ADDR_LOW MOVWF TBLPTRL MOVLW DATA0 MOVWF TABLAT TBLWT*+ MOVLW DATA1 MOVWF TABLAT TBLWT* PROGRAM_MEMORY BSF EECON1, WPROG ; enable single word write BSF EECON1, WREN ; enable write to memory BCF INTCON, GIE ; disable […]

为什么这个PIC代码不会点亮我的LED?

以下代码不会将我的PIC18F14K50上的任何引脚设置为高电平,但它不会更简单! #include #include void main(void) { // Set ALL pins to output: TRISA = 0; TRISB = 0; TRISC = 0; // Set ALL pins to high: LATA = 0b11111111; LATB = 0b11111111; LATC = 0b11111111; // Leave pins high and wait forever: while (1); } 我正在使用MPLAB v8.43和Hi-Tech ANSI C编译器。 除VUSB和MCLR外,逻辑探头不会显示高电平引脚。 有任何想法吗?

链接步骤找不到符号(XC8编译器)

我正在尝试使用XC8编译器编译和链接C程序。 我改变了C18编译器并对代码进行了一些小的兼容性更改。 使用C18,编译和链接的代码就好了。 使用XC8,编译很顺利,但链接步骤失败并出现此错误: Error [500] ; 0. undefined symbols: _putch(server.obj) _ENC_Init(server.obj) _ENC_WriteRegister(server.obj) _ENC_ReadRegister(server.obj) 由于编译成功,我猜有原型,ergo .h文件包含好。 我猜编译器找不到.c文件。 函数putch 不是在我自己的程序中调用的,但它在putchar调用,我使用该函数。 以ENC_开头的函数是我自己的函数。 我在XC8工具套件的“包含搜索路径”中添加了两条路径: C:\Program Files (x86)\Microchip\xc8\v1.12\sources ,编译器的.c文件所在的位置,我相信 C:\…\lib ,我自己的.c文件所在的位置。 但是,我仍然得到错误。 我该如何解决这个问题? 这是完整的日志: Advisory[1233] Employing 18F4620 errata work-arounds: Advisory[1234] * Corrupted fast interrupt shadow registers Advisory[1234] * Data in RAM location can be corrupted if async. reset occurs […]

如何使用内联汇编写入闪存?

我正在使用带有PIC18F87J11的 MPLAB C18编译器,我正在尝试使用内联汇编将一些值保存到闪存中,这是C和汇编代码的组合。 看起来我可以正确地写入和读取闪存,但是一旦我重新启动PIC然后尝试读取我之前从特定地址保存的内容,我就得不到相同的值。 我将0x09保存到0xB22A地址。 就像我说的,如果我保存值然后立即读取它,一切都正确,但重置PIC后我得到0x00 。 我不是永久保存到闪存或这里真的发生了什么? 这是我的代码: 擦除内存行 _asm MOVLW 0x00 MOVWF TBLPTRU,BANKED MOVLW 0xB2 MOVWF TBLPTRH,BANKED MOVLW 0x2A MOVWF TBLPTRL,BANKED _endasm EECON1bits.FREE = 1; INTCONbits.GIE = 0; _asm MOVLW 0x55 MOVWF EECON2,BANKED MOVLW 0xAA MOVWF EECON2,BANKED _endasm EECON1bits.WR = 1; INTCONbits.GIE = 1; 写入闪存 _asm MOVLW 0x00 MOVWF TBLPTRU,BANKED MOVLW 0xB2 MOVWF […]

如何在C中为PIC24编写硬件无关function

我正在研究一些可以实现各种function的代码,例如PID控制器,信号发生器等。 我的硬件提供各种输入和输出。 刚才我有一个SWITCH语句加载来确定我的计算的来源和目的地。 例如,对于PID控制器,每隔100ms就有一个开关命令决定将哪个输入传递给pid_calculate函数,然后是另一个开关来决定如何处理返回值。 由于我有32个模拟输入,以及can,lin和serial作为可能的输入,因此开关语句非常大! 我想参考或者一个物理示例,说明如何将某些东西编码为独立的硬件(在pic的范围内)function。 我确信答案在于指针,但我是C的新手并不确定从哪里开始指针。 我设想函数原型类似于int pid_init(* source,* destination)其中source是指向输入的指针,例如ADC缓冲区,目标可以是例如pwm占空比寄存器。 刚才我必须切换每个可能的条件然后将数据加载到寄存器中。 因此,为了澄清,我将如何实现一个允许它独立于输入和输出的函数,以及如何取消引用指针(假设指针是正确的方法) 我希望这是有道理的,谢谢你提前。

使用XC8接收有关plib I2Cfunction的“未定义符号”错误

嘿那里StackOverflow! 我的问题涉及在下面粘贴的程序中报告的错误。 目标器件是PIC12LF1552 ,它上面有一个串行外设,我假设它可以与Microchip的XC8编译器提供的库一起使用。 互联网上的一些消息人士表示,只有PIC18系列中的高端设备才支持库函数,其他消息来源表示库函数运行良好。 所以我决定不想从头开始重写I2C函数,也不想为这个项目编写任何数量的程序集。 因此,我决定使用随附的XC8外设库。 我阅读了编译器文档,了解如何获取它们(如下面的i2c.h所示)。 我知道根据文档和我见过的一些例子对这些命令进行了一些错误检查,但暂时我假设主人和奴隶都表现得很完美,所以我可以把这件事搞得一团糟地面。 我已经包含了所有相关路径,这就是为什么我认为它在编译过程中得到了这么多。 我在C语言和编译器的内部工作方面的知识水平非常有限,我只知道如何在基本级别使用这些工具,所以我可能会缺少一些基本的东西。 无论如何,当我在MPLABX v1.95中编译这段代码时,我得到了这个: :0: error: undefined symbols: _AckI2C(dist/pickit3/production\strobe.X.production.obj) _ReadI2C(dist/pickit3/production\strobe.X.production.obj) _IdleI2C(dist/pickit3/production\strobe.X.production.obj) _OpenI2C(dist/pickit3/production\strobe.X.production.obj) _StopI2C(dist/pickit3/production\strobe.X.production.obj) _NotAckI2C(dist/pickit3/production\strobe.X.production.obj) _WriteI2C(dist/pickit3/production\strobe.X.production.obj) _StartI2C(dist/pickit3/production\strobe.X.production.obj) 我无法在Google,StackOverflow或其他方面找到与我的特定上下文有关的任何相关信息(另一个人在从Microchip的传统C18编译器移植时有一个非常类似的问题,但我已经做了所有人为解决他的问题所做的一切) 。 所以我想,问题是,为什么我得到这个编译器错误,它在C语言或Microchip的实现背后的机制是什么导致了这个? /* * File: i2c.h * Author: James * * Created on July 23, 2014, 9:02 PM */ #ifndef I2C_H #define I2C_H #ifdef __cplusplus extern “C” { #endif […]