Например TDA7294

Форум РадиоКот • Просмотр темы - decfsz в XC8
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Ср апр 24, 2024 01:20:27

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 19 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: decfsz в XC8
СообщениеДобавлено: Вт окт 03, 2017 07:26:24 
Встал на лапы

Зарегистрирован: Сб апр 03, 2010 17:24:43
Сообщений: 139
Рейтинг сообщения: 0
Здравствуйте, недавно начал изучать Си на платформе XC8 Mplab X, так вот возникла задача выполнять проверку бита порта пока идет отсчет до нуля. На ассемблере эту функцию хорошо выполняла команда decfsz, в Си так и не понял как реализовать такую команду. Пытался делать так while(--X==0) но это не совсем то. Здесь происходит вычитание единицы с последующей проверкой.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: decfsz в XC8
СообщениеДобавлено: Вт окт 03, 2017 11:44:04 
Сверлит текстолит когтями
Аватар пользователя

Карма: 25
Рейтинг сообщений: 168
Зарегистрирован: Ср янв 29, 2014 08:41:31
Сообщений: 1231
Откуда: Баку
Рейтинг сообщения: 0
Ну так decfsz тоже уменьшает некую переменную до достижения нуля.
Если нужна проверка бита порта, то while или if, а в качестве аргумента (PORTBbits.RB0) например.
Да и другие варианты есть, все зависит от задачи.

_________________
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: decfsz в XC8
СообщениеДобавлено: Вт окт 03, 2017 12:45:47 
Встал на лапы

Зарегистрирован: Сб апр 03, 2010 17:24:43
Сообщений: 139
Рейтинг сообщения: 0
Да все верно но ка то привык циклы выполнять через decfsz, да и место в МК не всегда достаточно чтоб читать единицу а потом делать сравнение, вместо одной команды decfsz


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: decfsz в XC8
СообщениеДобавлено: Вт окт 03, 2017 13:18:48 
Сверлит текстолит когтями
Аватар пользователя

Карма: 25
Рейтинг сообщений: 168
Зарегистрирован: Ср янв 29, 2014 08:41:31
Сообщений: 1231
Откуда: Баку
Рейтинг сообщения: 0
Напишите, как вы на асме делали бы проверку бита порта через decfsz.

_________________
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.


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

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

Подробнее>>
Не в сети
 Заголовок сообщения: Re: decfsz в XC8
СообщениеДобавлено: Вт окт 03, 2017 13:34:47 
Встал на лапы

Зарегистрирован: Сб апр 03, 2010 17:24:43
Сообщений: 139
Рейтинг сообщения: 0
Да дело не в проверке бита, проверка бита это часть цикла,
примерно так
movlw 0x05
movwf count
L1
call процедура
btfss portb,1
goto уход из цикла
decfsz count,f
goto L1


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: decfsz в XC8
СообщениеДобавлено: Вт окт 03, 2017 13:44:29 
Вымогатель припоя

Карма: -3
Рейтинг сообщений: 77
Зарегистрирован: Сб мар 19, 2011 15:19:47
Сообщений: 546
Откуда: Владивосток
Рейтинг сообщения: 0
Так не Си занимает место в памяти. После компиляции сравните кусок кода на ассемблере со своим.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: decfsz в XC8
СообщениеДобавлено: Вт окт 03, 2017 15:01:13 
Сверлит текстолит когтями
Аватар пользователя

Карма: 25
Рейтинг сообщений: 168
Зарегистрирован: Ср янв 29, 2014 08:41:31
Сообщений: 1231
Откуда: Баку
Рейтинг сообщения: 0
movlw 0x05
movwf count
L1
call процедура
btfss portb,1
goto уход из цикла
decfsz count,f
goto L1

Код:
  for(count = 5; count > 0; count--)
  {
    proc();
    if(!PORTBbits.RB1) break;  // либо какое-то иное действие
  }

Глупо, конечно, напрямую переносить ассемблерный код в Си.
Это на первых порах так будет при переходе с асм на Си, потом мышление изменится.
Так что написанное мной можете считать бредом, а не советом к продолжению в том же духе.

_________________
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: decfsz в XC8
СообщениеДобавлено: Вт окт 03, 2017 18:21:02 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 155
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 0
Zhuk72, перепиши с do-while и в условии добавь проверку пина и будет то же самое и без имитации goto...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: decfsz в XC8
СообщениеДобавлено: Вт окт 03, 2017 18:49:07 
Сверлит текстолит когтями
Аватар пользователя

Карма: 25
Рейтинг сообщений: 168
Зарегистрирован: Ср янв 29, 2014 08:41:31
Сообщений: 1231
Откуда: Баку
Рейтинг сообщения: 0
А смысл? Может там вообще без всего этого можно обойтись.
Конечной задачи мы же не знаем, хотя сдается мне, что это кнопочный антидребезг. Тогда там вообще не так нужно действовать.

_________________
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: decfsz в XC8
СообщениеДобавлено: Вт окт 03, 2017 19:07:29 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 155
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 0
Смысла нет однозначно , они так и будут сравнивать каждый оператор и писать в С на асм_стайл и голосить что компилятор лох...
Единицы из них осознают что такое структурное программирование и чем оно выгоднее лапшеобразной или линейной писанины...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: decfsz в XC8
СообщениеДобавлено: Вт окт 03, 2017 21:23:47 
Сверлит текстолит когтями
Аватар пользователя

Карма: 25
Рейтинг сообщений: 168
Зарегистрирован: Ср янв 29, 2014 08:41:31
Сообщений: 1231
Откуда: Баку
Рейтинг сообщения: 0
Это переходный период, сам так же делал.
Первым блином по познанию Си был перенос термометра с динамической индикацией, и переключение разрядов на Си я делал так же, как на асме :)
Потом уже понял, что тут нужны иные подходы.

_________________
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: decfsz в XC8
СообщениеДобавлено: Вт окт 03, 2017 21:37:30 
Встал на лапы

Зарегистрирован: Сб апр 03, 2010 17:24:43
Сообщений: 139
Рейтинг сообщения: 0
В общем да переходный период, пока изучаю Си понемногу, пишу прогу будильника напоминалки. Считывание времени и вывод на LCD заработал. Заткнулся на цикле с проверкой порта для активации или пропуска звонка. В общем данный пример то что нужно судя по всему. Спасибо всем откликнувшимся.
Код:
for(count = 5; count > 0; count--)
  {
    proc();
    if(!PORTBbits.RB1) break;  // либо какое-то иное действие
  }


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: decfsz в XC8
СообщениеДобавлено: Ср окт 04, 2017 09:15:48 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
примерно так
movlw 0x05
movwf count
L1
call процедура
btfss portb,1
goto уход из цикла
decfsz count,f
goto L1

Код:
count=5;
do{
    func();
    if(!(PORTB & (1<<1)))   break;  // Уход из цикла
}while(--count);


Дизасм:
Код:
   7F6    3005     MOVLW 0x5
8:                 
9:                 count=5;
   7F7    00F0     MOVWF count
10:                do{
11:                    func();
   7F8    27F5     CALL func
12:                    if(!(PORTB & (1<<1)))   break;  // Уход из цикла
   7F9    1C86     BTFSS PORTB, 0x1
   7FA    2FFD     GOTO 0x7fd
13:                }while(--count);
   7FB    0BF0     DECFSZ count, F
   7FC    2FF8     GOTO 0x7f8


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: decfsz в XC8
СообщениеДобавлено: Ср окт 04, 2017 09:43:16 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
а вот так если?
Код:
while((PORTB & (1<<1)) && count--) func();

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

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: decfsz в XC8
СообщениеДобавлено: Ср окт 04, 2017 10:37:59 
Сверлит текстолит когтями
Аватар пользователя

Карма: 25
Рейтинг сообщений: 168
Зарегистрирован: Ср янв 29, 2014 08:41:31
Сообщений: 1231
Откуда: Баку
Рейтинг сообщения: 0
По мере возрастания кода:

Аlex писал(а):
Код:
count=5;
do{
    func();
    if(!(PORTB & (1<<1)))   break;  // Уход из цикла
}while(--count);

Изображение

Код:
for(count = 5; count > 0; count--)
  {
    proc();
    if(!PORTBbits.RB1) break;  // либо какое-то иное действие
  }

Изображение

ARV писал(а):
а вот так если?
Код:
count = 5;
while((PORTB & (1<<1)) && count--) func();

Изображение

_________________
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: decfsz в XC8
СообщениеДобавлено: Ср окт 04, 2017 11:17:33 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Zhuk72, изображения не видны :dont_know:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: decfsz в XC8
СообщениеДобавлено: Ср окт 04, 2017 11:54:55 
Сверлит текстолит когтями
Аватар пользователя

Карма: 25
Рейтинг сообщений: 168
Зарегистрирован: Ср янв 29, 2014 08:41:31
Сообщений: 1231
Откуда: Баку
Рейтинг сообщения: 0
Zhuk72, изображения не видны :dont_know:

Это у вас что-то. Может тот хостинг (prntscr.com) заблокирован в браузере?
Смотрите:
СпойлерИзображение

_________________
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: decfsz в XC8
СообщениеДобавлено: Ср окт 04, 2017 13:38:30 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
А сейчас показались. Что было - хз :dont_know:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: decfsz в XC8
СообщениеДобавлено: Чт окт 05, 2017 10:27:04 
Встал на лапы

Зарегистрирован: Сб апр 03, 2010 17:24:43
Сообщений: 139
Рейтинг сообщения: 0
Все разобрался, проблема была в недоломоном XC8, сейчас все компилируется как положено. Функции for и do while, выполняют то что нужно да и код резко сократился.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 19 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: volatile и гости: 13


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y