roboforum.ru

Технический форум по робототехнике.
Текущее время: 01 мар 2025, 21:05

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




Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: помогите с программой...
СообщениеДобавлено: 21 май 2011, 18:11 
Не в сети

Зарегистрирован: 24 дек 2008, 17:55
Сообщения: 203
Откуда: Актюбинск
здравствуйте!
я вот учусь программированию, и наткнулся на такую ошибку, по идеи работать должен так, када нажимаю кнопку и значение увеличивается на к++, и должен после каждой нажатий вывести на экран, точнее на терминал, работает через rs232. Почему када нажимаю увеличивается тока на 1 и дальше не идет, и глобально объявлял к, но все же, такой ответ выходит
Код:
/*****************************************************
This program was produced by the
CodeWizardAVR V2.04.8b Evaluation
Automatic Program Generator
© Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Chip type               : ATmega32
Program type            : Application
AVR Core Clock frequency: 8,000000 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 512
*****************************************************/

#include <mega32.h>
#include <delay.h>

// Standard Input/Output functions
#include <stdio.h>

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0xFF;
DDRA=0;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0xFF;

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0xFF;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0xFF;
DDRD=0;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;


// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;


// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x33;

while (1){                 
      int k;
        k = 20;
        switch(PIND){
        case 0b11111011:
            delay_ms(200);
            k++; 
            printf("%d \r\n\0", k);
            break;
        case 0b11110111: 
            delay_ms(200);
            k--;
            printf("%d \r\n\0", k);
            break;
        default: break;
        }
  }
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: помогите с программой...
СообщениеДобавлено: 21 май 2011, 21:16 
Не в сети
Аватара пользователя

Зарегистрирован: 15 ноя 2010, 13:56
Сообщения: 995
Откуда: Нижний Новгород
прог. языки: С, С++, РНР
1) Научитесь русскому языку. Это главное.
2) Вынесите объявление переменной "int k;" и присвоение ей начального значения за цикл while, т.е. перед ним.

У вас переменная k объявляется, потом k=20, потом например приращивается k++ потом переменная k объявляется, потом k=20, потом например приращивается k++ потом переменная k объявляется, потом k=20, потом например приращивается k++ потом переменная k объявляется, потом k=20 ...

Т.о. у вас k всегда равно или 19 или 21 в зависимости от порта D


Последний раз редактировалось HarryStar 21 май 2011, 21:20, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: помогите с программой...
СообщениеДобавлено: 21 май 2011, 21:19 
Не в сети

Зарегистрирован: 24 дек 2008, 17:55
Сообщения: 203
Откуда: Актюбинск
HarryStar писал(а):
1) Научитесь русскому языку. Это главное.

в смысле?)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: помогите с программой...
СообщениеДобавлено: 21 май 2011, 21:29 
Не в сети
Аватара пользователя

Зарегистрирован: 16 май 2009, 12:50
Сообщения: 1530
Откуда: Россия
прог. языки: Java, C
Цитата:
в смысле?)

Цитата:
здравствуйте!
я вот учусь программированию, и наткнулся на такую ошибку, по идеи работать должен так, када нажимаю кнопку и значение увеличивается на к++, и должен после каждой нажатий вывести на экран, точнее на терминал, работает через rs232. Почему када нажимаю увеличивается тока на 1 и дальше не идет, и глобально объявлял к, но все же, такой ответ выходит

Ну и кучка пунктуационных и стилистических.

_________________
"There is nothing better than sliding down snow and flying through the air" (с) Shane McConkey.
Lieber ein Brett am Fuß als eins vorm Kopf, aber lieber ein Brett vorm Kopf als zwei am Fuß.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: помогите с программой...
СообщениеДобавлено: 21 май 2011, 21:30 
Не в сети
Аватара пользователя

Зарегистрирован: 15 ноя 2010, 13:56
Сообщения: 995
Откуда: Нижний Новгород
прог. языки: С, С++, РНР
chinga писал(а):
в смысле?)


Помечу красным ошибки, зеленым пропущенные слова или неправильный смысл.

я вот учусь программированию, и наткнулся на такую ошибку, по идеи (тут пропущено слово код) работать должен так, када нажимаю кнопку и (лишний союз) значение увеличивается на к++(на 1 а не на к++), и должен после каждой нажатий вывести (пропущено слово значение)на экран, точнее на терминал, работает через rs232. Почему када нажимаю увеличивается тока на 1 и дальше не идет, и глобально объявлял к, но все же, такой ответ выходит (последние слова вообще не в тему)

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: помогите с программой...
СообщениеДобавлено: 21 май 2011, 21:35 
Не в сети

Зарегистрирован: 07 авг 2010, 21:29
Сообщения: 1725
Откуда: КМВ
прог. языки: C
ФИО: Андрей
HarryStar правильно указал на ошибку в коде.
Как-то так:
Я вот учусь программированию. По задумке моя программа работать должна так: когда нажимаю кнопку - значение переменной k изменяется в строке k++, после каждого изменения ее значение выводится на терминал, подключенный через rs232. Почему-то когда нажимаю - отрабатывает один инкремент, занчение меняется на 1 и дальше не изменяется.
Что пробовал для поиска ошибки: глобально объявлял к. Результат тот же.
Сорри за редактуру. :)

На хороший вопрос и отвечать приятно.

_________________
Дым, идущий из всех устройств в помещении предвещает появление электрика.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: помогите с программой...
СообщениеДобавлено: 21 май 2011, 21:43 
Не в сети

Зарегистрирован: 24 дек 2008, 17:55
Сообщения: 203
Откуда: Актюбинск
:D извините))) я прост пишу как говорю)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: помогите с программой...
СообщениеДобавлено: 21 май 2011, 22:54 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
Вот именно что пишете код так же как говорите :)

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

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: помогите с программой...
СообщениеДобавлено: 22 май 2011, 14:39 
Не в сети

Зарегистрирован: 24 дек 2008, 17:55
Сообщения: 203
Откуда: Актюбинск
еще такая проблема: при нажатий кнопки должен светодиод гореть, и когда отпускаю должен гаснуть) кнопки с компа: w, a, s, d. а у меня сейчас нажимаю и горит пока не нажмешь вторую кнопку, нажимаешь вторую этот светодиод гаснет и горит следующий.
Код:
/*****************************************************
This program was produced by the
CodeWizardAVR V2.04.8b Evaluation
Automatic Program Generator
© Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Chip type               : ATmega32
Program type            : Application
AVR Core Clock frequency: 8,000000 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 512
*****************************************************/

#include <mega32.h>
#include <delay.h>

// Standard Input/Output functions
#include <stdio.h>

// Declare your global variables here

void main(void)
{

// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0xFF;
DDRA=0;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0xFF;

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0xFF;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0xFF;
DDRD=0;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;


// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;


// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x33;

while (1){                 
     
      while(UCSRA.7==1){
        char asd;
        asd = UDR;
        if(asd == 'w'){
            PORTB.0 = 1;
            asd = 0;
            UCSRA.7 = 0;
            UCSRA.6 = 0;
            UDR = 0;
            //delay_ms(100);   
        }else{
            PORTB.0 = 0;
        }
        if(asd == 'a'){
            PORTB.2 = 1;
            //delay_ms(100);
        }else{
            PORTB.2 = 0;
        }
        if(asd == 'd'){
            PORTB.4 = 1;
            //delay_ms(100);
        }else{
            PORTB.4 = 0;
        }
        if(asd == 's'){
            PORTB.6 = 1;
            //delay_ms(100);
        }else{
            PORTB.6 = 0;
        }         
  }
}




Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: помогите с программой...
СообщениеДобавлено: 22 май 2011, 14:52 
Не в сети

Зарегистрирован: 18 окт 2007, 23:46
Сообщения: 340
Откуда: Москва
прог. языки: С++ , 1С :-)
ФИО: Михаил
пристали к человеку, учи да учи. Может он индиец или африканец. И тогда такой уровень русского это ого.го.го. Вы бы так смогли бегло изъясняться по африкански? да еще код на мегу написать, на фарси например?

_________________
http://igrybogov.com - ну о.о.очень интересно
сознание определяет бытие, улыбнись своему отражению


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: помогите с программой...
СообщениеДобавлено: 22 май 2011, 14:58 
Не в сети

Зарегистрирован: 24 дек 2008, 17:55
Сообщения: 203
Откуда: Актюбинск
RealRobot писал(а):
пристали к человеку, учи да учи. Может он индиец или африканец. И тогда такой уровень русского это ого.го.го. Вы бы так смогли бегло изъясняться по африкански? да еще код на мегу написать, на фарси например?

казах :D


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: помогите с программой...
СообщениеДобавлено: 22 май 2011, 15:15 
Не в сети

Зарегистрирован: 18 окт 2007, 23:46
Сообщения: 340
Откуда: Москва
прог. языки: С++ , 1С :-)
ФИО: Михаил
для Чинга
Смотря как и чем отсылается символ? а в коде меги надо в тот момент когда зажигаешь один светодиот гасить все остальные кроме зажигаемого.

Добавлено спустя 3 минуты 42 секунды:
ну вот видите, Чинга казах. Чинга, у вас там неверно уже и русский то в школах не преподают? или если преподают, то как иностранный? в этих реалиях то, что вы сносно изъясняетесь по русски уже подвиг.

_________________
http://igrybogov.com - ну о.о.очень интересно
сознание определяет бытие, улыбнись своему отражению


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: помогите с программой...
СообщениеДобавлено: 22 май 2011, 15:31 
Не в сети

Зарегистрирован: 24 дек 2008, 17:55
Сообщения: 203
Откуда: Актюбинск
RealRobot писал(а):
ну вот видите, Чинга казах. Чинга, у вас там неверно уже и русский то в школах не преподают? или если преподают, то как иностранный? в этих реалиях то, что вы сносно изъясняетесь по русски уже подвиг.

это только у меня проблема с русским, и еще в таких случаях когда объясняю, еще хуже становится) у нас учат русский) и не как иностранный))
RealRobot писал(а):
для Чинга
Смотря как и чем отсылается символ? а в коде меги надо в тот момент когда зажигаешь один светодиот гасить все остальные кроме зажигаемого.

примерно так?
Код:
      while(UCSRA.7==1){ //RXC флаг завершения приема устанавл.в 1 когда UDR(регистр данных приемника) не прочитан
        char asd;
        asd = UDR;
        if(asd == 'w'){
            PORTB.0 = 1;
            PORTB.2 = 0;
            PORTB.4 = 0;
            PORTB.6 = 0;
            //asd = 0;
            //UCSRA.7 = 0;
            //UCSRA.6 = 0;
            //UDR = 0;
            //delay_ms(100);   
        }else{
            PORTB.0 = 0;
            PORTB.2 = 0;
            PORTB.4 = 0;
            PORTB.6 = 0;
        }
        if(asd == 'a'){
            PORTB.2 = 1;
            PORTB.0 = 0;
            PORTB.4 = 0;
            PORTB.6 = 0;
            //asd = 0;
            //UCSRA.7 = 0;
            //UCSRA.6 = 0;
            //UDR = 0;
            //delay_ms(100);
        }else{         
            PORTB.0 = 0;
            PORTB.2 = 0;
            PORTB.4 = 0;
            PORTB.6 = 0;

        }
        if(asd == 'd'){
            PORTB.4 = 1;
            PORTB.0 = 0;
            PORTB.2 = 0;
            PORTB.6 = 0;
            //asd = 0;
            //UCSRA.7 = 0;
            //UCSRA.6 = 0;
            //UDR = 0;
            //delay_ms(100);
        }else{
            PORTB.0 = 0;
            PORTB.2 = 0;
            PORTB.4 = 0;
            PORTB.6 = 0;

        }
        if(asd == 's'){
            PORTB.6 = 1;
            PORTB.0 = 0;
            PORTB.2 = 0;
            PORTB.4 = 0;
            //asd = 0;
            //UCSRA.7 = 0;
            //UCSRA.6 = 0;
            //UDR = 0;
            //delay_ms(100);
        }else{
            PORTB.0 = 0;
            PORTB.2 = 0;
            PORTB.4 = 0;
            PORTB.6 = 0;
        }


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: помогите с программой...
СообщениеДобавлено: 22 май 2011, 15:45 
Не в сети

Зарегистрирован: 18 окт 2007, 23:46
Сообщения: 340
Откуда: Москва
прог. языки: С++ , 1С :-)
ФИО: Михаил
else .. уже не нужен

_________________
http://igrybogov.com - ну о.о.очень интересно
сознание определяет бытие, улыбнись своему отражению


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: помогите с программой...
СообщениеДобавлено: 22 май 2011, 15:50 
Не в сети

Зарегистрирован: 24 дек 2008, 17:55
Сообщения: 203
Откуда: Актюбинск
RealRobot писал(а):
else .. уже не нужен

безрезультатно(
с этим кодом пробовал:
Код:
while(UCSRA.7==1){ //RXC флаг завершения приема устанавл.в 1 когда UDR(регистр данных приемника) не прочитан
        char asd;
        asd = UDR;
        if(asd == 'w'){
            PORTB.0 = 1;
            PORTB.2 = 0;
            PORTB.4 = 0;
            PORTB.6 = 0;
            asd = 0;
            UDR = 0;
            delay_ms(100);   
        }
        if(asd == 'a'){
            PORTB.2 = 1;
            PORTB.0 = 0;
            PORTB.4 = 0;
            PORTB.6 = 0;
            asd = 0;
            UDR = 0;
            delay_ms(100);
        }
        if(asd == 'd'){
            PORTB.4 = 1;
            PORTB.0 = 0;
            PORTB.2 = 0;
            PORTB.6 = 0;
            asd = 0;
            UDR = 0;
            delay_ms(100);
        }
        if(asd == 's'){
            PORTB.6 = 1;
            PORTB.0 = 0;
            PORTB.2 = 0;
            PORTB.4 = 0;
            asd = 0;
            UDR = 0;
            delay_ms(100);
        }
        }


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу 1, 2  След.

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


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 41


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

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO