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

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
kras
Опытный кот
Сообщения: 782
Зарегистрирован: Вт апр 26, 2011 18:37:06

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

Сообщение 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, если тут вы не видите в методе проблем, попробую подумать дальше, главное - не молчите:(
На практике можно не успеть сделать того, что можно хорошо обосновать в теории. Но без практики теория может отдаляться от нее, и когда они встретятся снова - не узнает даже неприкосновенное шампанское профессора в лаборатории. Моя практика: robofeya.ru
Реклама
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

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

Сообщение Мастер Ломастер »

а разве вот так не лучше?

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

while(1){
   PB0 = PA0;
}
битва с дураками проиграна, победители торжествуют. слава победителям!
Реклама
diehard
Встал на лапы
Сообщения: 101
Зарегистрирован: Вт дек 05, 2006 23:17:02
Откуда: Краснодарский край

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

Сообщение 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), то все равно так делать нельзя!
kras
Опытный кот
Сообщения: 782
Зарегистрирован: Вт апр 26, 2011 18:37:06

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

Сообщение kras »

а почему так долго выполняется. На асм почти все 4 такта, так
m1: mov rb0,ra0
jmp m1
это 4+8тактов = 12тактов. А тут их прямо больше 50. А подскажите на асм прогу, а то я не знаю, по-моему там нельзя просто проверить бит в архитектуре, надо сдвигать как-то, либо смотреть по относит адресу в памяти
На практике можно не успеть сделать того, что можно хорошо обосновать в теории. Но без практики теория может отдаляться от нее, и когда они встретятся снова - не узнает даже неприкосновенное шампанское профессора в лаборатории. Моя практика: robofeya.ru
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Ser60
Друг Кота
Сообщения: 3784
Зарегистрирован: Ср дек 24, 2008 09:58:58

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

Сообщение Ser60 »

Попробуйте так (4*7=28 циклов):

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

M: BTFSC PORTA, 0
   BSF   PORTB, 0
   BTFSS PORTA, 0
   BCF   PORTB, 0
   GOTO  M
Реклама
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»