对于铁路模型项目,我试图通过使用产生x的随机数发生器(rand())来切换LED,然后在PIC16F15325的LATC寄存器上将x左移1。 (我是一个狂热的业余爱好者,但仍然有很多东西要学,完全是自学成才的。)我正在使用XC8和PICkit 3。
我正在使用16F15325图片,在我看来,以下代码应
假设这是一个无限循环,那么每次代码循环时,它都应切换至少一个LED。这大约有90%的时间有效,但有时不会导致切换,这让我发疯。
#include <xc.h>
#include <stdint.h> /* For uint8_t definition */
#include <stdbool.h> /* For true/false definition */
#include "configs.c"
void main(void) {
InitProgram(); // THIS SETS UP THE TRIS AND SETS THE C PORT TO OUTPUT
// DECLARE AND SET VARIABLES
int x; // GENERAL PURPOSE VARIABLE TO USE ON THE FLY
LATC = 0b00111111;
while(1)
{
x = rand() % 6; // SHOULD GENERATE 0 THROUGH 5 B/C NO "+ 1"
LATC = LATC ^ 1 << x;
// I HAVE ALSO TRIED LATC = LATC ^ 1 << (char) x;
// THERE IS A ONE SECOND DELAY HERE
}
}
如前所述,这通常在循环的每次运行中都有效,但是大约有10%的时间,没有LED会触发。在90%的时间内,其中一个LED会切换。
最佳答案
根据OP的研究,问题出在XC8环境中。根据环境是针对C90还是C99设置的,这是Rand()函数中的错误(C99导致了此问题)。
Microchip网站上描述该错误的链接位于:
https://www.microchip.com/forums/m1077569.aspx [Rand()使用C90 Standard,但不适用于当前项目中设置的C99 Standard]
关于c++ - 尝试使用XOR和移位运算符切换随机LED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56351855/