gpt4 book ai didi

c++ - 尝试使用XOR和移位运算符切换随机LED

转载 作者:行者123 更新时间:2023-12-01 14:58:48 25 4
gpt4 key购买 nike

对于铁路模型项目,我试图通过使用产生x的随机数发生器(rand())来切换LED,然后在PIC16F15325的LATC寄存器上将x左移1。 (我是一个狂热的业余爱好者,但仍然有很多东西要学,完全是自学成才的。)我正在使用XC8和PICkit 3。

我正在使用16F15325图片,在我看来,以下代码应

  • (A)生成一个介于0到5(这是x)之间的随机数(伪可以),
  • (B)通过将x移位1(即0到5)并将XOR应用于该引脚来切换位C0至C5(每个均连接到LATC寄存器中的LED)。

  • 假设这是一个无限循环,那么每次代码循环时,它都应切换至少一个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/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com