Перейти к содержанию

Язык СИ для микроконтроллеров


Рекомендуемые сообщения

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

А как читать на лету упомянутый TMR1
Марк, так же как и обычную int-переменную. :huh: Взможно я тебя не понял. :unsure:

При чтении на лету для исключения неоднозначности при переносе в старший байт во время чтения необходимо ДВАЖДЫ читать старший байт - в начале и в конце процедуры чтения, а в середине младший и обрабатывать перенос, если таковой произошел.

При остановленном счетчике это несущественно, но останов счетчика не всегда возможен. Например при программной реализации Capture.

Изменено пользователем my504

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Что то я тебя Марк никак не пойму. Ты имеешь ввиду ложное чтение при переполнении младшего байта и инкременте старшего в момент чтения ?

Ссылка на комментарий
Поделиться на другие сайты

Почему ложное?

Это нормальное чтение. Только вот в две команды, вот перенос и дает неверный результат.

Можно конечно и int прочесть правильно, как массив из двух char. Но как то не читабельно.

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Для вариантов с Capture это не годится. Точно просчитать задержку трудно и будет копиться ошибка. Особенно при асинхронном счете (с внешнего пина или LP-осциллятора).

В общем некуртуазно... Да и выигрыш в читабельности невелик при одном int вместо двух char.

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Дело тут не в побайтности чтения. Речь идет О ЧТЕНИИ НА ЛЕТУ. Иначе как в три приема корректно на лету не прочесть: старший-младший-старший. Далее, если второе чтение старшего байта дает неравенство с первым, значит было переполнение и необходимо анализировать младший, если он чуть больше нуля, то берем второе чтение старшего, а если чуть меньше, то первое.

Таким образом гарантируется целостность чтения на лету при отсутствии аппаратной защелки для старшего байта (как в 18-х ПИКах).

Останов счетчика - это фрагмент программного времени в диаграмме его счета. Сиречь АСИНХРОННАЯ И НЕПРЕДСКАЗУЕМАЯ в полной мере величина. Я не говорю уже о необходимости запрета прерываний при останове счетчика при съеме показаний. Иначе можно получить трудно отлавливаемую ошибку из за зависания счета на время обработки прерываний.

Непрерывность счета - гарантия целостности общего интервала отсчета. Значит и точности результата Захвата (Capture).

Изменено пользователем my504

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Подскажите пожалуйста, как объеденить выходы разных портов. Например, что бы присваивая какой-то переменной значение, первые 4 бита присваивались RA0-RA3, а вторые 4 бита RB4-RB7.

Ссылка на комментарий
Поделиться на другие сайты

первые 4 бита присваивались RA0-RA3, а вторые 4 бита RB4-RB7.

разве

movlw var
movwf PORTB

не подоидет? четыре бита справа поидут в RA0-RA3( они и есть первые) левые заполнят остальные пины порта.

Не цитируите полностью предыдущее сообщение!!!

Ссылка на комментарий
Поделиться на другие сайты

Ои имел ввиду PORTA
первые 4 бита присваивались RA0-RA3, а вторые 4 бита RB4-RB7

Ему нужно в 2 разных порта. Т.е. он присваивает переменной значение и как я понял(?) автоматом присваивается в 2 порта побитно.

Из переменной потом вытащить и присвоить в порты можно, но всё равно одной переменной не отделаешься :)

Ссылка на комментарий
Поделиться на другие сайты

А ну получается что, надо заполнить битами две переменные в нужном порядке, 4 разряда в старшем полубаите у однои и 4 в младшем у другои.потом загрузить в порты.

Изменено пользователем Andrey_Ch8

Не цитируите полностью предыдущее сообщение!!!

Ссылка на комментарий
Поделиться на другие сайты

Подскажите пожалуйста, как объеденить выходы разных портов. Например, что бы присваивая какой-то переменной значение, первые 4 бита присваивались RA0-RA3, а вторые 4 бита RB4-RB7.

Вопрос тоже не совсем понятен, так ему нужно из двух портов загрузить в переменную. Наверно надо прочитать сначала ПортБ, потом сдвинуть на четыре разряда влево в переменнои и прочитать ПортА и записать в переменную не затрагивая старшие биты.

Блин сдвигать не надо , сначала ПортБ, потом ПортА не затрагивая то что уже записали из портБ.Где-то видел как делается.

Изменено пользователем Andrey_Ch8

Не цитируите полностью предыдущее сообщение!!!

Ссылка на комментарий
Поделиться на другие сайты

ему нужно из двух портов загрузить в переменную
что бы присваивая какой-то переменной значение, первые 4 бита присваивались RA0-RA3
Думаю что всётаки ему нужно из переменной в порты.
Где-то видел как делается.
Да это делается элементарно.

peremennaya = (PORTB & 0xF0) | (PORTA & 0x0F);

Только ему не это нужно. :rolleyes:

Ссылка на комментарий
Поделиться на другие сайты

Мне нужно из переменной в порты. Нужны многоканальные бегущие огни(16 каналов), и я думаю что гораздо удобней и наглядней при заполнении разных вариантов пользоваться одной переменной.

Пример:

так есть:

PORTA=0b10000000;

PORTB=0b00000000;

--

PORTA=0b00000000;

PORTB=0b00000001;

---

так надо:

peremenaya=0b0000000010000000;

---

peremenaya=0b0000000100000000;

Ссылка на комментарий
Поделиться на другие сайты

непонятно ,а остальные биты должны быть "0"?Если нет, то непонятно в чем вопрос, если должны быть 0, то надо наложить маску, алекс где-то приводил тут.

per=0b01010101

PORTA = per;

PORTB = per;

Я так понял, что тебе надо так сделать:)

Не цитируите полностью предыдущее сообщение!!!

Ссылка на комментарий
Поделиться на другие сайты

пишем код на Си:

if (T0IE&&T0IF)
  {
     T0IF=0;
  } 

дизассемблер выдает:

28:                if (T0IE&&T0IF)
 014D    1283     BCF 0x3, 0x5
 014E    1303     BCF 0x3, 0x6
 014F    1E8B     BTFSS 0xb, 0x5
 0150    2952     GOTO 0x152     
 0151    2953     GOTO 0x153     
 0152    2962     GOTO 0x162
 0153    1283     BCF 0x3, 0x5   
 0154    1303     BCF 0x3, 0x6   
 0155    1D0B     BTFSS 0xb, 0x2
 0156    2958     GOTO 0x158     
 0157    2959     GOTO 0x159     
 0158    2962     GOTO 0x162
29:                   {
30:                      T0IF=0;
 0159    1003     BCF 0x3, 0
 015A    1803     BTFSC 0x3, 0
 015B    295F     GOTO 0x15f
 015C    2961     GOTO 0x161
 015D    1283     BCF 0x3, 0x5
 015E    1303     BCF 0x3, 0x6
 015F    150B     BSF 0xb, 0x2
 0160    2962     GOTO 0x162
 0161    110B     BCF 0xb, 0x2
31:                   } 
32:                if (RBIF && RBIE)
 0162    1283     BCF 0x3, 0x5

но это в ассемблере выглядит как:

      bcf      STATUS, PR0
      bcf      STATUS, PR1 
      btfss    INTCON,T0IE       ; при TOIE=1 и TOIF=1
        goto   metka_1           ; обработка прерывания по TMR0
      btfss    INTCON,T0IF       ; 
        goto   metka_1         ; иначе пропускаем
      bcf      INTCON,T0IF

metka_1  nop  

оптимизация стоит на 9

как компилятор Си заставить не писать лишние переходы goto

Ссылка на комментарий
Поделиться на другие сайты

if(T0IF && T0IE){
T0IF=0;
.....
.....
.....
}

131:               if(T0IF && T0IE){
  042    190B     BTFSC 0xb, 0x2
  043    1E8B     BTFSS 0xb, 0x5
  044    2868     GOTO 0x68
134:               
135:               T0IF=0;
  045    110B     BCF 0xb, 0x2
........
........
........
164:               }
  068    1283     BCF 0x3, 0x5

PICC 9.50 PL3

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...