Мистика и простейшая программа на С для PICа.

Поклонники продукции Microchip Technology Inc тусуются тут.
Аватара пользователя
efimius
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вт апр 30, 2013 13:04:47

Мистика и простейшая программа на С для PICа.

Сообщение efimius »

Доброго времени суток.
Пишу программу для аквариумного контроллера.Первый уровень меню-выбор из семи функций с выводом на LCD. Функции перебираются кнопкой(сигнал InA0),а нужная функция выбирается другой кнопкой(InA3). Вот и вся программа.Запускаю,начинаю нажимать InA0- всё работает ,функции перебираются,но третья по счёту функция "SetSUNSET" - на ЖКИ не отображается.Всё остальное-нормально работает. Если гору if-ов сделать комментарием,то третья функция отображается нормально.Отладку веду на EasyPIC-5. Вот код в mikroC:

Спойлер

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



// LCD module connections from LCD Library
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;

sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
//----------
unsigned int pMenu;
bit old_SA0,old_SA3;
bit InA0,InA1,InA2,InA3;
//Var.definitions for some text outputing to LCD--------------------------------
unsigned char temper[5];//Variable gets string value,converted from numTemp.
float numTemp=36.5; //Stores float of temperature.

//MY 7 functions
//----------

SetHM()
{
Lcd_Cmd(_LCD_CLEAR);Lcd_Out(1,1,"Set H / M");
while(1){

}
}

//----------
SetSR()
{
Lcd_Cmd(_LCD_CLEAR);Lcd_Out(1,1,"Set SR H/M");
while(1){


}
}
//----------
SetSS()
{
Lcd_Cmd(_LCD_CLEAR);Lcd_Out(1,1,"Set SS H/M");
while(1){

}
}
//----------
SetCO2start()
{
Lcd_Cmd(_LCD_CLEAR);Lcd_Out(1,1,"Set CO2strt H/M");
while(1){

}
}
//----------
SetCO2end()
{
Lcd_Cmd(_LCD_CLEAR);Lcd_Out(1,1,"Set CO2end H/M");
while(1){

}
}
//----------
SetO2start()
{
Lcd_Cmd(_LCD_CLEAR);Lcd_Out(1,1,"Set O2strt H/M");
while(1){

}
}
//----------
SetO2end()
{
Lcd_Cmd(_LCD_CLEAR);Lcd_Out(1,1,"Set O2end H/M");
while(1){

}
}
//============== ===================
//==========Начало программы===== ====

void main(){


ADCON1 |= 0x0F; // Configure AN pins as digital
CMCON |= 7; // Disable comparators
TRISA |=0x0F;
//----------

Lcd_Init(); // Initialize LCD - from LCD library


Lcd_Cmd(_LCD_CLEAR); // Clear display - from LCD library
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Cmd(_LCD_TURN_ON); // Cursor off - from LCD library

forCase: pMenu=0;
do {

InA0=PORTA.RA0;
InA3=PORTA.RA3;

if(InA0 == 0 && old_SA0==1){//Если нажата кнопка

switch(pMenu)
{
//Перебирать пункты меню
case 0: Lcd_Cmd(_LCD_CLEAR);Lcd_Out(2,1,"SetCLOCK");break;
case 1: Lcd_Cmd(_LCD_CLEAR);Lcd_Out(2,1,"SetSUNRISE");brea k;
case 2: Lcd_Cmd(_LCD_CLEAR);Lcd_Out(2,1,"SetSUNSET");break ;
case 3: Lcd_Cmd(_LCD_CLEAR);Lcd_Out(2,1,"SetCO2_STRT");bre ak;
case 4: Lcd_Cmd(_LCD_CLEAR);Lcd_Out(2,1,"SetCO2_END");brea k;
case 5: Lcd_Cmd(_LCD_CLEAR);Lcd_Out(2,1,"SetO2_STRT");brea k;
case 6: Lcd_Cmd(_LCD_CLEAR);Lcd_Out(2,1,"SetO2_END");break ;
case 7: goto forCase;
}

//pMenu содержит номер выбранной функции
pMenu++; }//продолжить перебор функций
old_SA0=InA0;

//============== ========== ==========
//при нажатии InA3 войти в подпрограмму соответствующую (pMenu)выбранной функции

if(inA3==0 && old_SA3==1 && pMenu==1)SetHM();
if(inA3==0 && old_SA3==1 && pMenu==2)SetSR();
if(inA3==0 && old_SA3==1 && pMenu==3)SetSS();
if(inA3==0 && old_SA3==1 && pMenu==4)SetCO2start();
if(inA3==0 && old_SA3==1 && pMenu==5)SetCO2end();
if(inA3==0 && old_SA3==1 && pMenu==6)SetO2start();
if(inA3==0 && old_SA3==1 && pMenu==7)SetO2end();
old_SA3=InA3 ;
}
while(1);//бесконечный возврат на do
}

Теперь мистика. Если не нажимать кнопку InA3,а только перебирать функции кнопкой InA0,то,как я и говорил,третья функция не отображается.остальное всё в порядке. Но(!!!),если я расширяю в этой третьей фукции "Set SS H/M" на "Set SS H/Mллллллллллллллллл" ,то вижу часть символов "л" в первой строке ЖКИ.Получается,что без нажатия InA3 всё равно как-то выбирается и выполняется(при этом не сначала строки!) третий if??????
Может,кто поможет инвалиду умственного труда. Заранее спасибо от новичка.
vAv
Прорезались зубы
Сообщения: 221
Зарегистрирован: Пн июн 13, 2011 20:04:59
Откуда: Новочебоксарск
Контактная информация:

Re: Мистика и простейшая программа на С для PICа.

Сообщение vAv »

Тут что-то не понятно:

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

if(inA3==0 && old_SA3==1 && pMenu==1)SetHM();
if(inA3==0 && old_SA3==1 && pMenu==2)SetSR();
if(inA3==0 && old_SA3==1 && pMenu==3)SetSS();
if(inA3==0 && old_SA3==1 && pMenu==4)SetCO2start();
if(inA3==0 && old_SA3==1 && pMenu==5)SetCO2end();
if(inA3==0 && old_SA3==1 && pMenu==6)SetO2start();
if(inA3==0 && old_SA3==1 && pMenu==7)SetO2end();

В этих строчках pMenu на 1 больше чем в кейсах. Может тут собака порылась?

ЗЫ не на чем проверить
phenomen
Потрогал лапой паяльник
Сообщения: 310
Зарегистрирован: Пт дек 17, 2010 14:41:25

Re: Мистика и простейшая программа на С для PICа.

Сообщение phenomen »

Начну с общих рекомендаций:

Во первых:

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

if(inA3==0 && old_SA3==1 && pMenu==1)SetHM();
if(inA3==0 && old_SA3==1 && pMenu==2)SetSR();
if(inA3==0 && old_SA3==1 && pMenu==3)SetSS();
if(inA3==0 && old_SA3==1 && pMenu==4)SetCO2start();
if(inA3==0 && old_SA3==1 && pMenu==5)SetCO2end();
if(inA3==0 && old_SA3==1 && pMenu==6)SetO2start();
if(inA3==0 && old_SA3==1 && pMenu==7)SetO2end();

можно заменить на

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

if(inA3==0 && old_SA3==1)
switch(pMenu)
{
case 0:/*...*/break;
case 1:/*...*/break;
...
case x:/*...*/break;
}


Избегайте goto! Удалите forCase: pMenu=0;, а вместо goto forCase; напишите pMenu=0; continue;. Хотя бы так.

Интересное написание брейков:

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

break;
brea k;
break ;
bre ak;
brea k;
brea k;
break ;
Аватара пользователя
efimius
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вт апр 30, 2013 13:04:47

Re: Мистика и простейшая программа на С для PICа.

Сообщение efimius »

phenomen писал(а):Начну с общих рекомендаций:

Во первых:

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

if(inA3==0 && old_SA3==1 && pMenu==1)SetHM();
if(inA3==0 && old_SA3==1 && pMenu==2)SetSR();
if(inA3==0 && old_SA3==1 && pMenu==3)SetSS();
if(inA3==0 && old_SA3==1 && pMenu==4)SetCO2start();
if(inA3==0 && old_SA3==1 && pMenu==5)SetCO2end();
if(inA3==0 && old_SA3==1 && pMenu==6)SetO2start();
if(inA3==0 && old_SA3==1 && pMenu==7)SetO2end();

можно заменить на

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

if(inA3==0 && old_SA3==1)
switch(pMenu)
{
case 0:/*...*/break;
case 1:/*...*/break;
...
case x:/*...*/break;
}


Избегайте goto! Удалите forCase: pMenu=0;, а вместо goto forCase; напишите pMenu=0; continue;. Хотя бы так.

Интересное написание брейков:

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

break;
brea k;
break ;
bre ak;
brea k;
brea k;
break ;


Первоначально были case-ы,решил попробовать решить проблему if-ами.
За break-и прошу прощения запостил нескомпилированный вариант.
От goto попробую избавиться. :?
Спасибо за посильную помощь.
Аватара пользователя
efimius
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вт апр 30, 2013 13:04:47

Re: Мистика и простейшая программа на С для PICа.

Сообщение efimius »

vAv писал(а):Тут что-то не понятно:

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

if(inA3==0 && old_SA3==1 && pMenu==1)SetHM();
if(inA3==0 && old_SA3==1 && pMenu==2)SetSR();
if(inA3==0 && old_SA3==1 && pMenu==3)SetSS();
if(inA3==0 && old_SA3==1 && pMenu==4)SetCO2start();
if(inA3==0 && old_SA3==1 && pMenu==5)SetCO2end();
if(inA3==0 && old_SA3==1 && pMenu==6)SetO2start();
if(inA3==0 && old_SA3==1 && pMenu==7)SetO2end();

В этих строчках pMenu на 1 больше чем в кейсах. Может тут собака порылась?

ЗЫ не на чем проверить


При нажатии InA0 в первом проходе в Switch не заходим,так как old_SA0 ещё равно 1,но pMenu инкрементируется.С учётом этого ,первый if соотносится с pMenu=1.
vAv
Прорезались зубы
Сообщения: 221
Зарегистрирован: Пн июн 13, 2011 20:04:59
Откуда: Новочебоксарск
Контактная информация:

Re: Мистика и простейшая программа на С для PICа.

Сообщение vAv »

Не могу скомпилировать проект...
phanis
Вымогатель припоя
Сообщения: 513
Зарегистрирован: Сб фев 19, 2011 18:04:08
Откуда: Татарстан, пос. Актюбинский
Контактная информация:

Re: Мистика и простейшая программа на С для PICа.

Сообщение phanis »

Попробуйте создать массив строк и указателей на функции.Тогда можно будет обойтись без case

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

char massiv[3][8]={"Ivanov", "Petrov", "Sidorov"};
void (*fArray[3])(void)= {f1, f2, f3};
Аватара пользователя
efimius
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вт апр 30, 2013 13:04:47

Re: Мистика и простейшая программа на С для PICа.

Сообщение efimius »

phanis писал(а):Попробуйте создать массив строк и указателей на функции.Тогда можно будет обойтись без case

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

char massiv[3][8]={"Ivanov", "Petrov", "Sidorov"};
void (*fArray[3])(void)= {f1, f2, f3};


Попробую,но вопрос,почему не выполняется код?Из этого могут получиться грабли.
phanis
Вымогатель припоя
Сообщения: 513
Зарегистрирован: Сб фев 19, 2011 18:04:08
Откуда: Татарстан, пос. Актюбинский
Контактная информация:

Re: Мистика и простейшая программа на С для PICа.

Сообщение phanis »

Может так что то изменится без go to
Спойлер

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

// LCD module connections from LCD Library
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;

sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
//----------

//Var.definitions for some text outputing to LCD--------------------------------
unsigned char temper[5];//Variable gets string value,converted from numTemp.
float numTemp=36.5; //Stores float of temperature.

//MY 7 functions
//----------
/* Прототипы функций */
void SetHM(void);
void SetSR(void);
void SetSS(void);
void SetCO2start(void);
void SetCO2end(void);
void SetO2start(void);
void SetO2end(void);

void SetHM(void)
{
Lcd_Cmd(_LCD_CLEAR);Lcd_Out(1,1,"Set H / M");
while(1){

}
}

//----------
void SetSR(void)
{
Lcd_Cmd(_LCD_CLEAR);Lcd_Out(1,1,"Set SR H/M");
while(1){

}
}
//----------
void SetSS(void)
{
Lcd_Cmd(_LCD_CLEAR);Lcd_Out(1,1,"Set SS H/M");
while(1){

}
}
//----------
void SetCO2start(void)
{
Lcd_Cmd(_LCD_CLEAR);Lcd_Out(1,1,"Set CO2strt H/M");
while(1){

}
}
//----------
void SetCO2end(void)
{
Lcd_Cmd(_LCD_CLEAR);Lcd_Out(1,1,"Set CO2end H/M");
while(1){

}
}
//----------
void SetO2start(void)
{
Lcd_Cmd(_LCD_CLEAR);Lcd_Out(1,1,"Set O2strt H/M");
while(1){

}
}
//----------
void SetO2end(void)
{
Lcd_Cmd(_LCD_CLEAR);Lcd_Out(1,1,"Set O2end H/M");
while(1){

}
}
//============== ===================
//==========Начало программы===== ====

void main(void){
unsigned char pMenu;
bit old_SA0,old_SA3;
bit InA0,InA3;

ADCON1 |= 0x0F; // Configure AN pins as digital
CMCON |= 7; // Disable comparators
TRISA |=0x0F;
//----------

Lcd_Init(); // Initialize LCD - from LCD library

Lcd_Cmd(_LCD_CLEAR); // Clear display - from LCD library
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Cmd(_LCD_TURN_ON); // Cursor off - from LCD library

while(1) {

InA0=PORTA.RA0;
InA3=PORTA.RA3;

if(InA0 == 0 && old_SA0==1){//Если нажата кнопка

switch(pMenu)
{
//Перебирать пункты меню

case 1:  Lcd_Cmd(_LCD_CLEAR);Lcd_Out(2,1,"SetSUNRISE") ;break;
case 2:  Lcd_Cmd(_LCD_CLEAR);Lcd_Out(2,1,"SetSUNSET")  ;break;
case 3:  Lcd_Cmd(_LCD_CLEAR);Lcd_Out(2,1,"SetCO2_STRT");break;
case 4:  Lcd_Cmd(_LCD_CLEAR);Lcd_Out(2,1,"SetCO2_END") ;break;
case 5:  Lcd_Cmd(_LCD_CLEAR);Lcd_Out(2,1,"SetO2_STRT") ;break;
case 6:  Lcd_Cmd(_LCD_CLEAR);Lcd_Out(2,1,"SetO2_END")  ;break ;
default: Lcd_Cmd(_LCD_CLEAR);Lcd_Out(2,1,"SetCLOCK")   ;pMenu=0;
};

//pMenu содержит номер выбранной функции
pMenu++; }//продолжить перебор функций
old_SA0=InA0;

//============== ========== ==========
//при нажатии InA3 войти в подпрограмму соответствующую (pMenu)выбранной функции

if(inA3==0 && old_SA3==1 && pMenu==1)SetHM();
if(inA3==0 && old_SA3==1 && pMenu==2)SetSR();
if(inA3==0 && old_SA3==1 && pMenu==3)SetSS();
if(inA3==0 && old_SA3==1 && pMenu==4)SetCO2start();
if(inA3==0 && old_SA3==1 && pMenu==5)SetCO2end();
if(inA3==0 && old_SA3==1 && pMenu==6)SetO2start();
if(inA3==0 && old_SA3==1 && pMenu==7)SetO2end();
old_SA3=InA3 ;
}
}
phenomen
Потрогал лапой паяльник
Сообщения: 310
Зарегистрирован: Пт дек 17, 2010 14:41:25

Re: Мистика и простейшая программа на С для PICа.

Сообщение phenomen »

Можно и вообще без кейсов обойтись: многоуровневое меню с обработчиком.
Думаю доделать его не составит особого труда.
Аватара пользователя
efimius
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вт апр 30, 2013 13:04:47

Re: Мистика и простейшая программа на С для PICа.

Сообщение efimius »

phenomen писал(а):Можно и вообще без кейсов обойтись: многоуровневое меню с обработчиком.
Думаю доделать его не составит особого труда.



Интересный подход ,по сути то,что предложил Phanis .Я никогда раньше не делал менюшки.Попробую "привинтить" к моему проекту.
Спасибо.
Аватара пользователя
efimius
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вт апр 30, 2013 13:04:47

Re: Мистика и простейшая программа на С для PICа.

Сообщение efimius »

phanis писал(а):Может так что то изменится без go to
Спойлер

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

// LCD module connections from LCD Library
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;

sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
//----------

//Var.definitions for some text outputing to LCD--------------------------------
unsigned char temper[5];//Variable gets string value,converted from numTemp.
float numTemp=36.5; //Stores float of temperature.

//MY 7 functions
//----------
/* Прототипы функций */
void SetHM(void);
void SetSR(void);
void SetSS(void);
void SetCO2start(void);
void SetCO2end(void);
void SetO2start(void);
void SetO2end(void);

void SetHM(void)
{
Lcd_Cmd(_LCD_CLEAR);Lcd_Out(1,1,"Set H / M");
while(1){

}
}

//----------
void SetSR(void)
{
Lcd_Cmd(_LCD_CLEAR);Lcd_Out(1,1,"Set SR H/M");
while(1){

}
}
//----------
void SetSS(void)
{
Lcd_Cmd(_LCD_CLEAR);Lcd_Out(1,1,"Set SS H/M");
while(1){

}
}
//----------
void SetCO2start(void)
{
Lcd_Cmd(_LCD_CLEAR);Lcd_Out(1,1,"Set CO2strt H/M");
while(1){

}
}
//----------
void SetCO2end(void)
{
Lcd_Cmd(_LCD_CLEAR);Lcd_Out(1,1,"Set CO2end H/M");
while(1){

}
}
//----------
void SetO2start(void)
{
Lcd_Cmd(_LCD_CLEAR);Lcd_Out(1,1,"Set O2strt H/M");
while(1){

}
}
//----------
void SetO2end(void)
{
Lcd_Cmd(_LCD_CLEAR);Lcd_Out(1,1,"Set O2end H/M");
while(1){

}
}
//============== ===================
//==========Начало программы===== ====

void main(void){
unsigned char pMenu;
bit old_SA0,old_SA3;
bit InA0,InA3;

ADCON1 |= 0x0F; // Configure AN pins as digital
CMCON |= 7; // Disable comparators
TRISA |=0x0F;
//----------

Lcd_Init(); // Initialize LCD - from LCD library

Lcd_Cmd(_LCD_CLEAR); // Clear display - from LCD library
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Cmd(_LCD_TURN_ON); // Cursor off - from LCD library

while(1) {

InA0=PORTA.RA0;
InA3=PORTA.RA3;

if(InA0 == 0 && old_SA0==1){//Если нажата кнопка

switch(pMenu)
{
//Перебирать пункты меню

case 1:  Lcd_Cmd(_LCD_CLEAR);Lcd_Out(2,1,"SetSUNRISE") ;break;
case 2:  Lcd_Cmd(_LCD_CLEAR);Lcd_Out(2,1,"SetSUNSET")  ;break;
case 3:  Lcd_Cmd(_LCD_CLEAR);Lcd_Out(2,1,"SetCO2_STRT");break;
case 4:  Lcd_Cmd(_LCD_CLEAR);Lcd_Out(2,1,"SetCO2_END") ;break;
case 5:  Lcd_Cmd(_LCD_CLEAR);Lcd_Out(2,1,"SetO2_STRT") ;break;
case 6:  Lcd_Cmd(_LCD_CLEAR);Lcd_Out(2,1,"SetO2_END")  ;break ;
default: Lcd_Cmd(_LCD_CLEAR);Lcd_Out(2,1,"SetCLOCK")   ;pMenu=0;
};

//pMenu содержит номер выбранной функции
pMenu++; }//продолжить перебор функций
old_SA0=InA0;

//============== ========== ==========
//при нажатии InA3 войти в подпрограмму соответствующую (pMenu)выбранной функции

if(inA3==0 && old_SA3==1 && pMenu==1)SetHM();
if(inA3==0 && old_SA3==1 && pMenu==2)SetSR();
if(inA3==0 && old_SA3==1 && pMenu==3)SetSS();
if(inA3==0 && old_SA3==1 && pMenu==4)SetCO2start();
if(inA3==0 && old_SA3==1 && pMenu==5)SetCO2end();
if(inA3==0 && old_SA3==1 && pMenu==6)SetO2start();
if(inA3==0 && old_SA3==1 && pMenu==7)SetO2end();
old_SA3=InA3 ;
}
}



Попробовал ,спасибо,но не помогло :(
phanis
Вымогатель припоя
Сообщения: 513
Зарегистрирован: Сб фев 19, 2011 18:04:08
Откуда: Татарстан, пос. Актюбинский
Контактная информация:

Re: Мистика и простейшая программа на С для PICа.

Сообщение phanis »

А если попробовать так, выводит?
Спойлер

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

void main(void){
unsigned char pMenu;
bit old_SA0,old_SA3;
bit InA0,InA3;

ADCON1 |= 0x0F; // Configure AN pins as digital
CMCON |= 7; // Disable comparators
TRISA |=0x0F;
//----------

Lcd_Init(); // Initialize LCD - from LCD library

Lcd_Cmd(_LCD_CLEAR); // Clear display - from LCD library
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Cmd(_LCD_TURN_ON); // Cursor off - from LCD library

SetSS();
//или даже просто так
Lcd_Cmd(_LCD_CLEAR);Lcd_Out(1,1,"Set SS H/M");
while(1) {
}
}
Аватара пользователя
efimius
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вт апр 30, 2013 13:04:47

Re: Мистика и простейшая программа на С для PICа.

Сообщение efimius »

phanis писал(а):А если попробовать так, выводит?
Спойлер

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

void main(void){
unsigned char pMenu;
bit old_SA0,old_SA3;
bit InA0,InA3;

ADCON1 |= 0x0F; // Configure AN pins as digital
CMCON |= 7; // Disable comparators
TRISA |=0x0F;
//----------

Lcd_Init(); // Initialize LCD - from LCD library

Lcd_Cmd(_LCD_CLEAR); // Clear display - from LCD library
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Cmd(_LCD_TURN_ON); // Cursor off - from LCD library

SetSS();
//или даже просто так
Lcd_Cmd(_LCD_CLEAR);Lcd_Out(1,1,"Set SS H/M");
while(1) {
}
}



В моей программе: исключение любого if приводит к нормальной работе.

А вот с вашей-я поторопился.После избавления от goto программа после первого нажатия выводит "SetO2_END",после второго "SetCLOCK",после 3-его "SetSunrise",потом два нажатия ничего и т.д.???
phanis
Вымогатель припоя
Сообщения: 513
Зарегистрирован: Сб фев 19, 2011 18:04:08
Откуда: Татарстан, пос. Актюбинский
Контактная информация:

Re: Мистика и простейшая программа на С для PICа.

Сообщение phanis »

SetCO2_STRT случайно не в длине строки?
Аватара пользователя
efimius
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вт апр 30, 2013 13:04:47

Re: Мистика и простейшая программа на С для PICа.

Сообщение efimius »

phanis писал(а):SetCO2_STRT случайно не в длине строки?



не совсем понял вопрос,но на всякий случай-длина строки 16 символов.

Что бесит,убираешь любой if и всё пашет.Не думаю,что ошибка компайлера.
phanis
Вымогатель припоя
Сообщения: 513
Зарегистрирован: Сб фев 19, 2011 18:04:08
Откуда: Татарстан, пос. Актюбинский
Контактная информация:

Re: Мистика и простейшая программа на С для PICа.

Сообщение phanis »

Памяти хватает? Переполнение стека.
Аватара пользователя
efimius
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вт апр 30, 2013 13:04:47

Re: Мистика и простейшая программа на С для PICа.

Сообщение efimius »

phanis писал(а):Памяти хватает? Переполнение стека.

16F747 компайлер докладывает,что 54% RAM свободно.
phanis
Вымогатель припоя
Сообщения: 513
Зарегистрирован: Сб фев 19, 2011 18:04:08
Откуда: Татарстан, пос. Актюбинский
Контактная информация:

Re: Мистика и простейшая программа на С для PICа.

Сообщение phanis »

Ни одного варнинга компилятор не показывает? Оптимизация включена?
Аватара пользователя
efimius
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вт апр 30, 2013 13:04:47

Re: Мистика и простейшая программа на С для PICа.

Сообщение efimius »

phanis писал(а):Ни одного варнинга компилятор не показывает? Оптимизация включена?


варнингов нет.
Ответить

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