Процедура простого числа для внешнего прерывания в 8051 - PullRequest
0 голосов
/ 16 ноября 2011

Я написал подпрограмму прерывания для 8051, используя Keil C51, следующим образом:

void intrupt1(void) interrupt 2        // ext interrupt 1 vector
{   
    char i,j,prime;
    P2 = 0;
    for(i=2;i<128;i++)
    {
        prime = 1;
        for(j=2;j<i;j++)
        {
            if(i%j==0)
                prime = 0;
        }
        if(prime == 1)
        {
            P2 = i;
            delay2();
        }
    }
    P2 = 0;
}

Когда я попытался смоделировать его, он показал правильные простые числа до 128, а после этого он превратился в 8счетчик битов и после этого обратно к отображению простого числа, то есть после 127 (последнее ожидаемое простое число), вывод составил 128,129,130 ​​.... 255, простые числа до 127,128,129 ....

Я также написалподпрограмма для внешнего прерывания 0, который является 4-битным счетчиком (он работает правильно), но я думаю, что это не должно влиять на вышесказанное.

1 Ответ

2 голосов
/ 16 ноября 2011

Скорее всего char подписано в вашем компиляторе (стандарт C позволяет char быть подписанным или без знака) и имеет диапазон от -128 до 127. Любое значение из этого диапазона меньше 128.условие цикла всегда выполняется, и поэтому цикл бесконечен.

...