Страница 1 из 1

[PIC16F84A - C] Подать входной сигнал на выход

Добавлено: Вс мар 11, 2012 06:35:02
kras
На RA0 подается некоторый сигнал с наиболее возможной частотой. На RB0 хочу получить его же. Выбрал высокую частоту обработки, все такое, а результат непредсказуем пока. Насколько я понял, исполняется в первую очередь функция void main, поэтому пока смотрю только на нее.

Код: Выделить всё

void main() {
TRISB = 0b00000000;
PORTB = 0b00000000;
TRISA = 0b11111;
    while (1){
        if (RA0 = 1){RB0=1;}
        else {RB0=0;}
    }
}
Я так понимаю, после настройки я whileом зацикливаю программу, поэтому все косяки с инерцией связаны в теле этого цикла с условием "1". В итоге максимальная частота, которую я вводил и на которой сдвиг еще не так чувствуется - 10кГц, сильно мало. Задержка при этом - 4.2мкс! Просто пока не могу сразу все усмотреть на C, если тут вы не видите в методе проблем, попробую подумать дальше, главное - не молчите:(

Re: [PIC16F84A - C] Подать входной сигнал на выход

Добавлено: Вс мар 11, 2012 07:08:25
Мастер Ломастер
а разве вот так не лучше?

Код: Выделить всё

while(1){
   PB0 = PA0;
}

Re: [PIC16F84A - C] Подать входной сигнал на выход

Добавлено: Вс мар 11, 2012 08:15:17
diehard
Мастер Ломастер писал(а):а разве вот так не лучше?

Код: Выделить всё

while(1){
   PB0 = PA0;
}
Дёшево и сердито :))
kras писал(а):

Код: Выделить всё

void main() {
TRISB = 0b00000000;
PORTB = 0b00000000;
TRISA = 0b11111;
    while (1){
        if (RA0 = 1){RB0=1;}
        else {RB0=0;}
    }
}
Операция сравнения в С - "=="
Поэтому
if (RA0 == 1)
Даже если Ваш компилятор это прощает if (RA0 = 1), то все равно так делать нельзя!

Re: [PIC16F84A - C] Подать входной сигнал на выход

Добавлено: Вт мар 13, 2012 05:08:36
kras
а почему так долго выполняется. На асм почти все 4 такта, так
m1: mov rb0,ra0
jmp m1
это 4+8тактов = 12тактов. А тут их прямо больше 50. А подскажите на асм прогу, а то я не знаю, по-моему там нельзя просто проверить бит в архитектуре, надо сдвигать как-то, либо смотреть по относит адресу в памяти

Re: [PIC16F84A - C] Подать входной сигнал на выход

Добавлено: Вт мар 13, 2012 06:56:05
Ser60
Попробуйте так (4*7=28 циклов):

Код: Выделить всё

M: BTFSC PORTA, 0
   BSF   PORTB, 0
   BTFSS PORTA, 0
   BCF   PORTB, 0
   GOTO  M