[英]Trying to toggle random LEDs with a XOR and bit shift operator
對於模型鐵路項目,我試圖通過使用隨機數生成器 (rand()) 來切換 LED,該生成器生成 x,然后在 PIC16F15325 上的 LATC 寄存器上將 1 向左移動 x。 (我是一個狂熱的愛好者,但仍然有很多東西要學,完全自學。)我正在使用 XC8 和 PICkit 3。
我正在使用 16F15325 pic,在我看來,以下代碼應該
鑒於這是一個無限循環,那么每次代碼循環時,它應該至少切換一個 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 環境中。 這是 Rand() 函數中的一個錯誤,取決於環境是為 C90 還是 C99 設置的(C99 導致了這個問題)。
描述該錯誤的 Microchip 網站鏈接位於: https : //www.microchip.com/forums/m1077569.aspx [Rand() 適用於 C90 標准,但不適用於當前項目中設置的 C99 標准]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.