decfsz в XC8

Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить
111284
Встал на лапы
Сообщения: 139
Зарегистрирован: Сб апр 03, 2010 17:24:43

decfsz в XC8

Сообщение 111284 »

Здравствуйте, недавно начал изучать Си на платформе XC8 Mplab X, так вот возникла задача выполнять проверку бита порта пока идет отсчет до нуля. На ассемблере эту функцию хорошо выполняла команда decfsz, в Си так и не понял как реализовать такую команду. Пытался делать так while(--X==0) но это не совсем то. Здесь происходит вычитание единицы с последующей проверкой.
Аватара пользователя
Zhuk72
Сверлит текстолит когтями
Сообщения: 1231
Зарегистрирован: Ср янв 29, 2014 08:41:31
Откуда: Баку
Контактная информация:

Re: decfsz в XC8

Сообщение Zhuk72 »

Ну так decfsz тоже уменьшает некую переменную до достижения нуля.
Если нужна проверка бита порта, то while или if, а в качестве аргумента (PORTBbits.RB0) например.
Да и другие варианты есть, все зависит от задачи.
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
111284
Встал на лапы
Сообщения: 139
Зарегистрирован: Сб апр 03, 2010 17:24:43

Re: decfsz в XC8

Сообщение 111284 »

Да все верно но ка то привык циклы выполнять через decfsz, да и место в МК не всегда достаточно чтоб читать единицу а потом делать сравнение, вместо одной команды decfsz
Аватара пользователя
Zhuk72
Сверлит текстолит когтями
Сообщения: 1231
Зарегистрирован: Ср янв 29, 2014 08:41:31
Откуда: Баку
Контактная информация:

Re: decfsz в XC8

Сообщение Zhuk72 »

Напишите, как вы на асме делали бы проверку бита порта через decfsz.
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
111284
Встал на лапы
Сообщения: 139
Зарегистрирован: Сб апр 03, 2010 17:24:43

Re: decfsz в XC8

Сообщение 111284 »

Да дело не в проверке бита, проверка бита это часть цикла,
примерно так
movlw 0x05
movwf count
L1
call процедура
btfss portb,1
goto уход из цикла
decfsz count,f
goto L1
const1105
Вымогатель припоя
Сообщения: 546
Зарегистрирован: Сб мар 19, 2011 15:19:47
Откуда: Владивосток

Re: decfsz в XC8

Сообщение const1105 »

Так не Си занимает место в памяти. После компиляции сравните кусок кода на ассемблере со своим.
Аватара пользователя
Zhuk72
Сверлит текстолит когтями
Сообщения: 1231
Зарегистрирован: Ср янв 29, 2014 08:41:31
Откуда: Баку
Контактная информация:

Re: decfsz в XC8

Сообщение Zhuk72 »

[uquote="111284",url="/forum/viewtopic.php?p=3197281#p3197281"]movlw 0x05
movwf count
L1
call процедура
btfss portb,1
goto уход из цикла
decfsz count,f
goto L1[/uquote]

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

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

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

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: decfsz в XC8

Сообщение dosikus »

Zhuk72, перепиши с do-while и в условии добавь проверку пина и будет то же самое и без имитации goto...
Аватара пользователя
Zhuk72
Сверлит текстолит когтями
Сообщения: 1231
Зарегистрирован: Ср янв 29, 2014 08:41:31
Откуда: Баку
Контактная информация:

Re: decfsz в XC8

Сообщение Zhuk72 »

А смысл? Может там вообще без всего этого можно обойтись.
Конечной задачи мы же не знаем, хотя сдается мне, что это кнопочный антидребезг. Тогда там вообще не так нужно действовать.
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: decfsz в XC8

Сообщение dosikus »

Смысла нет однозначно , они так и будут сравнивать каждый оператор и писать в С на асм_стайл и голосить что компилятор лох...
Единицы из них осознают что такое структурное программирование и чем оно выгоднее лапшеобразной или линейной писанины...
Аватара пользователя
Zhuk72
Сверлит текстолит когтями
Сообщения: 1231
Зарегистрирован: Ср янв 29, 2014 08:41:31
Откуда: Баку
Контактная информация:

Re: decfsz в XC8

Сообщение Zhuk72 »

Это переходный период, сам так же делал.
Первым блином по познанию Си был перенос термометра с динамической индикацией, и переключение разрядов на Си я делал так же, как на асме :)
Потом уже понял, что тут нужны иные подходы.
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
111284
Встал на лапы
Сообщения: 139
Зарегистрирован: Сб апр 03, 2010 17:24:43

Re: decfsz в XC8

Сообщение 111284 »

В общем да переходный период, пока изучаю Си понемногу, пишу прогу будильника напоминалки. Считывание времени и вывод на LCD заработал. Заткнулся на цикле с проверкой порта для активации или пропуска звонка. В общем данный пример то что нужно судя по всему. Спасибо всем откликнувшимся.

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

for(count = 5; count > 0; count--)
  {
    proc();
    if(!PORTBbits.RB1) break;  // либо какое-то иное действие
  }
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: decfsz в XC8

Сообщение Аlex »

[uquote="111284",url="/forum/viewtopic.php?p=3197281#p3197281"]примерно так
movlw 0x05
movwf count
L1
call процедура
btfss portb,1
goto уход из цикла
decfsz count,f
goto L1[/uquote]

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

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
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: decfsz в XC8

Сообщение ARV »

а вот так если?

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

while((PORTB & (1<<1)) && count--) func();
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Zhuk72
Сверлит текстолит когтями
Сообщения: 1231
Зарегистрирован: Ср янв 29, 2014 08:41:31
Откуда: Баку
Контактная информация:

Re: decfsz в XC8

Сообщение Zhuk72 »

По мере возрастания кода:

А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 лет смотрел черно-белый телевизор.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: decfsz в XC8

Сообщение Аlex »

Zhuk72, изображения не видны :dont_know:
Аватара пользователя
Zhuk72
Сверлит текстолит когтями
Сообщения: 1231
Зарегистрирован: Ср янв 29, 2014 08:41:31
Откуда: Баку
Контактная информация:

Re: decfsz в XC8

Сообщение Zhuk72 »

[uquote="Аlex",url="/forum/viewtopic.php?p=3197915#p3197915"]Zhuk72, изображения не видны :dont_know:[/uquote]
Это у вас что-то. Может тот хостинг (prntscr.com) заблокирован в браузере?
Смотрите:
СпойлерИзображение
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: decfsz в XC8

Сообщение Аlex »

А сейчас показались. Что было - хз :dont_know:
111284
Встал на лапы
Сообщения: 139
Зарегистрирован: Сб апр 03, 2010 17:24:43

Re: decfsz в XC8

Сообщение 111284 »

Все разобрался, проблема была в недоломоном XC8, сейчас все компилируется как положено. Функции for и do while, выполняют то что нужно да и код резко сократился.
Ответить

Вернуться в «PIC»