Раздел создан специально для людей которым интересна робототехника, но в силу разных причин они не знают с чего начать. Задавайте ваши вопросы, какими бы простыми они не казались, постоянные посетители форума постараются ответить на них по мере своих сил. Робот своими руками. Самодельный робот.
KiCom » 30 дек 2005, 10:43
Пытаюсь его использовать а он не хочет. Вот код:
Код: Выделить всё • Развернуть #include <io2313v.h> #include <macros.h> #define CENTER 2514 int mks_g=CENTER; int del_0=CENTER; char in; void delaysa(unsigned int mks) { while(mks>0) { mks--; } } void port_init(void) { PORTB = 0xFF; DDRB = 0xFF; PORTD = 0x00; DDRD = 0x00; } void timer0_init(void) { TCCR0 = 0x00; //stop timer TCNT0 = 0x29; //set count TCCR0 = 0x05; //start timer } #pragma interrupt_handler timer0_ovf_isr:7 void timer0_ovf_isr(void) { PORTB |=BIT(0); delaysa(del_0); PORTB &=~BIT(0); TCNT0 = 0x29; //TIMER0 has overflowed //reload counter value } void uart0_init(void) { UCR = 0x00; //disable while setting baud rate UBRR = 0x47; //set baud rate UCR = 0xD8; //enable } #pragma interrupt_handler uart0_rx_isr:8 void uart0_rx_isr(void) { in=UDR; in=in*1; if (in=45) PORTB^=BIT(7); in=0; } #pragma interrupt_handler uart0_tx_isr:10 void uart0_tx_isr(void) { } //call this routine to initialize all peripherals void init_devices(void) { //stop errant interrupts until set up CLI(); //disable all interrupts port_init(); timer0_init(); uart0_init(); MCUCR = 0x00; GIMSK = 0x00; TIMSK = 0x02; SEI(); //re-enable interrupts //all peripherals are now initialized } // void main(void) { init_devices(); while(1); }
Смысл такой, по COM порту приходит число и если оно равно 45 то бит 7 инвертируется.
KiCom
Сообщения: 345Зарегистрирован: 22 окт 2005, 11:15Откуда: Красноярск
Реклама
Карлсон » 30 дек 2005, 10:55
синтаксис. вы видимо тоже паскалист либо просто плохо с сями знакомы. нужно вот так: if(in==45)
Карлсон
Сообщения: 114Зарегистрирован: 30 окт 2005, 13:10Откуда: Москва
KiCom » 30 дек 2005, 11:23
Ага с Паскаля начинал, но пол года Си в институте изучаю а всеравно та теже грабли наступаю
. Странно что ICC не ругаеться.
KiCom
Сообщения: 345Зарегистрирован: 22 окт 2005, 11:15Откуда: Красноярск
-= Александр =- » 30 дек 2005, 17:40
А он и не будет ругаться: оператор присвоения тоже возвращает значение... :wink:
-= Александр =-
Мастер Самоделкин
Сообщения: 3678Зарегистрирован: 11 окт 2004, 19:20Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич
dogma » 30 дек 2005, 18:49
В оффтоп:
А ведь создатели языка С насамом деле пошутили, когда придумали его. Они прям так и сказал "Мы пошутили, а вы поверили
".
Нет другого способа создать задержку как этот?
Код: Выделить всё • Развернуть void delaysa(unsigned int mks) { while(mks>0) { mks--; } }
dogma
Сообщения: 10Зарегистрирован: 27 дек 2005, 11:35Откуда: о. Сахалин, г. Холмск
Реклама
KiCom » 30 дек 2005, 18:52
Скажем так, в другом компиляторе можно при помощи функции delay, но это в другом, а тут ее нет поэтому пришлось так.
KiCom
Сообщения: 345Зарегистрирован: 22 окт 2005, 11:15Откуда: Красноярск
gab » 30 дек 2005, 18:57
dogma писал(а): В оффтоп:
А ведь создатели языка С насамом деле пошутили, когда придумали его. Они прям так и сказал "Мы пошутили, а вы поверили
".
Нет другого способа создать задержку как этот?
Код: Выделить всё • Развернуть void delaysa(unsigned int mks) { while(mks>0) { mks--; } }
Код: Выделить всё • Развернуть void delaysa(unsigned int mks) { while((mks--) > 0) ; }
Но неизвестно как это переварит ваш компилятор.
gab
Сообщения: 212Зарегистрирован: 30 апр 2005, 03:11Откуда: Москва
прог. языки: C/C++, Verilog
ФИО: Гвоздев Александр Борисович
dogma » 30 дек 2005, 19:07
to KiCom А можете рассказать по подробнее про то, что вы делаете? На стороне чего работает это программа?
dogma
Сообщения: 10Зарегистрирован: 27 дек 2005, 11:35Откуда: о. Сахалин, г. Холмск
KiCom » 30 дек 2005, 19:13
Это конечно можно. Я пытаюсь сделать манипулятор, вот эта программа сегодня плавно превратилась в программу для управления сервами от компьютера. Вот собственно и все.
KiCom
Сообщения: 345Зарегистрирован: 22 окт 2005, 11:15Откуда: Красноярск
avr123.nm.ru » 31 дек 2005, 00:07
while((mks--) > 0) ;
здесь очень вероятно что декремент даже несмотря на скобки будет выполняться уже после сравнения mks с нулем
советую написать прямее:
while((mks-1) > 0) ;
avr123.nm.ru
отсылающий читать курс
Сообщения: 14195Зарегистрирован: 06 ноя 2005, 04:18Откуда: МоскваПредупреждения: -8
avr123.nm.ru » 31 дек 2005, 00:08
только не забывайте что 0 - 1 = 255 для беззнаковой char
avr123.nm.ru
отсылающий читать курс
Сообщения: 14195Зарегистрирован: 06 ноя 2005, 04:18Откуда: МоскваПредупреждения: -8
avr123.nm.ru » 31 дек 2005, 00:11
если переменная не отрицательная то while(mks>0) можно заменить на while(mks) так как в Си истино это "не ноль", а ложно это только ноль
avr123.nm.ru
отсылающий читать курс
Сообщения: 14195Зарегистрирован: 06 ноя 2005, 04:18Откуда: МоскваПредупреждения: -8
ASin » 31 дек 2005, 00:34
avr123.nm.ru писал(а): советую написать прямее: while((mks-1) > 0) ;
Гм... И что этот код будет делать?
Ой, дурн
о му человека
у чите :lol:
ASin
Сообщения: 155Зарегистрирован: 18 дек 2004, 03:14Откуда: Москва
gab » 31 дек 2005, 03:53
avr123.nm.ru писал(а): while((mks--) > 0) ;
здесь очень вероятно что декремент даже несмотря на скобки будет выполняться уже после сравнения mks с нулем
советую написать прямее:
while((mks-1) > 0) ;
Здесь вы не правы, т.к. после "mks-1" нет изменения переменной mks. Этот код будет выполняться один раз при mks == 1 и бесконечное число раз при mks == 0 или mks >= 2.
(mks-- >0) в классическом С раскладывается как "mks > 0? да -- mks = mks - 1; return 1; иначе -- return 0;"
gab
Сообщения: 212Зарегистрирован: 30 апр 2005, 03:11Откуда: Москва
прог. языки: C/C++, Verilog
ФИО: Гвоздев Александр Борисович
avr123.nm.ru » 31 дек 2005, 05:03
я лишь подсказал человеку что если он надеется на скобки то вероятно они не помогут! я ж не написал что точно это так или что я это проверил!
avr123.nm.ru
отсылающий читать курс
Сообщения: 14195Зарегистрирован: 06 ноя 2005, 04:18Откуда: МоскваПредупреждения: -8
Вернуться в Новичкам или основы основ роботостроения.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12