Раздел создан специально для людей которым интересна робототехника, но в силу разных причин они не знают с чего начать.
Задавайте ваши вопросы, какими бы простыми они не казались, постоянные посетители форума постараются ответить на них по мере своих сил.
Робот своими руками. Самодельный робот.
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
- Откуда: Москва
-
avr123.nm.ru » 31 дек 2005, 00:08
только не забывайте что
0 - 1 = 255
для беззнаковой char
-

avr123.nm.ru
- отсылающий читать курс
-
- Сообщения: 14195
- Зарегистрирован: 06 ноя 2005, 04:18
- Откуда: Москва
-
avr123.nm.ru » 31 дек 2005, 00:11
если переменная не отрицательная то
while(mks>0) можно заменить на while(mks)
так как в Си истино это "не ноль", а ложно это только ноль
-

avr123.nm.ru
- отсылающий читать курс
-
- Сообщения: 14195
- Зарегистрирован: 06 ноя 2005, 04:18
- Откуда: Москва
-
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
- Откуда: Москва
-
Вернуться в Новичкам или основы основ роботостроения.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0