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

XC8 не компилирует участок программы


Bugrim

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

Добрый день. Проектирую часы с 2-я датчиками температуры. Снятие показаний, с записью в EEPROM, происходит каждый час. Питание - батарейки, поэтому стремимся к энергосбережению. Индикатор LCD 16х2. Подцветка запитуется от МК (PIC16F886) и при неактивном состоянии, кнопки на клавиатуре не нажаты, отключается. Кодом предусмотрен  SLEEP (ассемблерная вставка), который упорно не хочет компилироваться как мне хочется. По мне SLEEP должен выполнятся каждый раз если не установлен флаг "F_knopka", а он подписывается в условие  "if((F_power_on)&&(++chetchik_power==5))". Привожу часть кода основной цикл программы main. Может я что то не так записываю, уже запарился. Посмотрите свежим взглядом. За ранее благодарен.

 while (1)
{
     if (F_secunda)                 // F_secunda ustanavlivaetca po perepolneniyu TMR1
     {
         bila_secunda();            // p/p peresheta vremeni
     if (F_obnovlenie)              //obnovlenie dannix 1 raz v chas
         obnovlenie();              // p/p obnovlenie
         if (!F_statistika)         // ecli ne vibran regim prosmotra dannix
            ekran(0);               // p/p vivoda na ekran
     }
     if (F_knopka)                  //esli bila nagata knopka na klaviature
     {
         if(!F_power_on)            //esli podcvetka ne vkluchena
         {
             F_power_on=1;          //bit sostoyaniya podcvetki=1
             vivod_power_on=1;      //pin zapitki podcvetki=1
             //__delay_ms(1);
             //ekran(0);              // p/p vivoda na ekran
             
         }
         klava();                   //p/p obrabotki klaviaturi
     }
     else
     {
         if((F_power_on)&&(++chetchik_power==5)) //zadergka dla podcvetki
         {             
             F_power_on=0;                        //bit sostoyaniya podcvetki
             vivod_power_on=0;                    //pin zapitki podcvetki
             chetchik_power=0;
              
         }
         
        #asm
            sleep   //vixod iz sna po TMR1 1 raz v 4 cecundi
                    //ili po knopke klaviaturi
            nop
        #endasm
     }
     

}

 

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

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

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

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

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

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

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

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

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

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

ну для слипа есть стандартная команда хайтека SPEEP();

но прежде чем уйти в слип , нужно по сбрасывать все задействованные/разрешенные флаги  почитайте внимательно 26 раздел руководства по среднему семейству , все ли условия выполняются?

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

3 минуты назад, Alex сказал:

Ошибку покажите. И строку, на которую она указывает.
 

ошибку не выдает, не хочет по моему компилировать.

 раздел сейчас перечитаю

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

9 минут назад, Bugrim сказал:

не хочет по моему компилировать

Это как ? В дизасме не то ? Или что ?

 

Команда SLEEP() - это есть обычная АСМ-вставка :



#define	SLEEP()		asm("sleep")

Находится в "pic.h". Ничего нового...

Лучше поподробнее объясните, что не так у Вас компилируется. Ибо из Вашего текста ничего не понятно по проблеме.

 

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

Proteus, при симуляции, на нее не входит. И в реальном, пошаговом режиме (PICkit2) мимо нее.

Цитата

Это как ?

Прописывается в условие "if((F_power_on)&&(++chetchik_power==5))", а должен выполнятся не взирая на условие.

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

1 минуту назад, Bugrim сказал:

Прописывается в условие

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

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

Вот проект полностью.

А в общем руководстве п.26.4 никаких обязательств не нашел. Только рекомендации.

Работаю в MPLAB X IDE v3.50, XC8 (v1.33)

termometr.rar

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

Что то я файла дизасма не нахожу. А тот, что в папке "disassembly" - это совсем не то, код там вообще другой какой-то...

Нашёл листинг :

   843                           ;termometr.c: 273: if (F_knopka)
   844  122C  1283               	bcf	3,5	;RP0=0, select bank0
   845  122D  1303               	bcf	3,6	;RP1=0, select bank0
   846  122E  1D21               	btfss	33,2	;volatile
   847  122F  2A3A               	goto	l161
   848                           
   849                           ;termometr.c: 274: {
   850                           ;termometr.c: 275: if(!F_power_on)
   851  1230  18A2               	btfsc	34,1	;volatile
   852  1231  2A34               	goto	l5658
   853                           
   854                           ;termometr.c: 276: {
   855                           ;termometr.c: 277: F_power_on=1;
   856  1232  14A2               	bsf	34,1	;volatile
   857                           
   858                           ;termometr.c: 278: RC2=1;
   859  1233  1507               	bsf	7,2	;volatile
   860  1234                     l5658:	
   861                           
   862                           ;termometr.c: 282: }
   863                           ;termometr.c: 283: klava();
   864  1234  120A  158A  2020  160A  118A  	fcall	_klava
   865                           
   866                           ;termometr.c: 284: }
   867  1239  2A11               	goto	l5640
   868  123A                     l161:	
   869                           
   870                           ;termometr.c: 285: else
   871                           ;termometr.c: 286: {
   872                           ;termometr.c: 287: if((F_power_on)&&(++chetchik_power==5))
   873  123A  1CA2               	btfss	34,1	;volatile
   874  123B  2A11               	goto	l5640
   875  123C  0AEE               	incf	main@chetchik_power,f
   876  123D  086E               	movf	main@chetchik_power,w
   877  123E  3A05               	xorlw	5
   878  123F  1D03               	skipz
   879  1240  2A11               	goto	l5640
   880                           
   881                           ;termometr.c: 288: {
   882                           ;termometr.c: 289: F_power_on=0;
   883  1241  10A2               	bcf	34,1	;volatile
   884                           
   885                           ;termometr.c: 290: RC2=0;
   886  1242  1107               	bcf	7,2	;volatile
   887                           
   888                           ;termometr.c: 291: chetchik_power=0;
   889  1243  01EE               	clrf	main@chetchik_power
   890  1244  0063               	sleep	;# 
   891  1245  0000               	nop	;# 
   892  1246  2A11               	goto	l5640
   893  1247                     __end_of_main:	

Сейчас прикинем.

Метка "l5640" - это начало цикла while(1).
Да, действительно, команда sleep выполнится только по условию.
 

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

Заработало. И в железе видно. Alex спасибо. Теперь в спящем режиме без подцветки - 1,3мА, из них 0,8 - индикатор, интересно долго при таком потреблении 3 пальчиковых батареи последовательно прослужат?

А что этими скобками мы указали? А то мне как то не совсем понятно. 

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

2 минуты назад, Bugrim сказал:

А что этими скобками мы указали?

Выделили отдельный блок кода. Компилятор просто не имел право его проигнорировать :)

 

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

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

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

ого-го-шечки какие гигантские токи :wacko:

смотря какие "пальчики", узнаем примерную емкость и вычисляем примерное время жизни

у меня часики: МК - mega8, диспл. - nokia5110, ds18b20 2шт. потребляют ~270мкА и то сердце кровью обливается

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

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

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

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

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

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

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

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

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

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

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

    • @Богдан Назаренко , 4558 и 5532 на слух не отличить. Да и параметры у них практически одиннаковые. Мне показалось TL072 звучит хуже.
    • @maxim1881  Какой курс  студент ?  Прочитать схему  то умеешь ? И где - то к этой схеме есть описание  ...  Так вот по описанию и можно сделать то что  требуется ...  Я лично  два года учился , пока пришло просветение чтения схем  И так подтолкну  один блок тебе :  DD1.5 , DD1.6 , R9 C5 - генератор ... И так  далее ... Кароче  шукай  описание  в журналах на данную схему и все получится     Датчик пересечения ИК-луча Другая сфера применения аналоговых усилителей на основе микросхемы 4069 - инфракрасный датчик или фотоприемник инфракрасного сигнала. На рисунке 7 показана схема успешно эксплуатируемого уже несколько лет датчика, реагирующего на пересечение либо отражение инфракрасного луча. Интересно то, что в схеме нет широко используемых в таких случаях готовых интегральных фотоприемников. Сигнал принимается обычным ИК-фотодиодом, а усиление производится усилительными каскадами, выполненными на основе инверторов микросхемы 4069. Наличие шести инверторов в одном корпусе микросхемы 4069 позволяет весь датчик, как его приемную, так и передающую части выполнить на одной микросхеме 4069. И так, схема показана на рис. 7. Как обычно, ИК-датчик работающий на отражение или пересечение луча состоит из передатчика ИК-луча и его приемника. Передатчик ИК-луча состоит из ИК-светодиода HL1 (здесь светодиод, такой как в пультах ДУ аппаратуры), токового ключа на транзисторах VТ1 и VТ2 и генератора импульсов частотой около 8-10 kHz. Импульсы с выхода мультивибратора на элементах D1.5 и D1.6 поступают через токовый ключ на VT1 и VT2 на ИК-светодиод HL1. Резистор R11 ограничивает ток через светодиод. HL1 излучает ИК вспышки, следующие с частотой 8-10 kHz. Если существует видимость между HL1 и FH1, излученные вспышки воздействуют на фотодиод FH1 ив нем возникают импульсы тока. Благодаря резистору R1 они преобразуются в импульсы напряжения. Переменное напряжение через конденсатор С1 поступает на первый усилитель на элементе D1.1. Его в усилительный режим переводит резистор R2. Далее, через С2 усиленное переменное напряжение поступает на усилитель на D1.2. В цепи ООС D1.2 есть резистор R3, который смещает его вход в сторону напряжения логической единицы. В результате его выход смещен в сторону логического нуля. Поэтому, в отсутствие входного сигнала напряжение на С3 соответствует логическому нулю. Но при наличии входного сигнала за счет работы детектора на VD1 напряжение на С3 увеличивается до логической единицы. Выходные импульсы формирует триггер Шмитта на элементах D1.3 и D1.4. Фотодиод РН302 можно заменить любым ИК-фотодиодом. Налаживание датчика сводится к подбору сопротивления R3, чтобы при отсутствии сигнала на выходе D1.4 был ноль, а при наличии сигнала - единица. Везде вместо микросхемы 4069 можно попробовать микросхему К561ЛН2. Тюльгин Ю.М. РК-2016-03.
    • Ух... добавили вы мне оптимизма... Никогда б не подумал что  на такой мелочёвки жулики так заморочились.. Ну как сказать... В своё время я зарабатывал на ремонте 3УСЦТ и старше (само собой и смежной технике). Потом несколько лет ремонт связной спецтехники (основная задача - настройка-обслуживание, а ремонты - то по необходимости). Но последние лет 20 паяльник используется редко и то в основном для пайки проводов-разъёмов и разной мелочёвки.
    • 4558 неплохая микросхема, особо не отличается от 5532, и наушники потянет, если у вас нет завышенных требований.
    • Они да более мение хороши а вот флажки смотря где использовать,в блоки питания или НЧ части его можно использовать роботать будет хорошо но ВЧ не очень он уж тогда хороший получается обычно по сравнению с КМ конденсаторами,и кстати ещё один вопрос возник вот есть такие коричневые конденсаторы керамические современные с кодами они ещё,которые ещё бывают паралельно моторику в детских игрушках ставят и очень много где ещё,и он же получаеться как флажок примерно по характеристикам?потомучто что то и что то ставят много где,интересно было бы и про них узнать информацию,ещё я их ни когда не использовал,что они из себя такое эдакое представляют 
×
×
  • Создать...