Технический форум по робототехнике.
Slava Tutushkin » 15 июл 2005, 21:21
Подскажите, люди добрые, есть ли в codevision какая-нибудь функция вида OUTP(addr, val)?
Хочу читать/писать произвольный порт. Но, оказывается, PORTx в этом уродском компиляторе не являются переменными. Пока что у меня получается только обращение к порту через его имя (например, PORTD=0x00). Компилятор при этом генерит
OUT 0x12,R30
А я хочу вызвать что-нибудь вроде "OUTP(0x12, 0x00)", и чтобы при этом компилятор сгенерил то же самое.
Такие дела.
nest » 16 июл 2005, 00:17
смотреть инструкцию по codevision, как писать/читать в порт
или делать ассемблерные вставки.
Slava Tutushkin » 16 июл 2005, 10:40
nest писал(а):смотреть инструкцию по codevision, как писать/читать в порт
или делать ассемблерные вставки.
Смотрел.
Не нашёл.
Подскажите, пожалуйста, куда конкретно смотреть?
nest » 17 июл 2005, 12:57
а фиг знает ... я с ним не работал : )
но обязаны быть точно.
slava » 17 июл 2005, 16:59
Например так:
PORTB=0x00;
DDRB=0x00;
или так:
void main(void) {
/* set bit 0 of Port A as output */
DDRA.0=1;
/* set bit 1 of Port A as input */
DDRA.1=0;
/* set bit 0 of Port A output */
PORTA.0=1;
/* test bit 1 input of Port A */
if (PINA.1) { /* place some code here */ };
Но по-битный доступ работает не со всеми портами (от F и далее нужно по-другому)
Slava Tutushkin » 19 июл 2005, 21:31
nest писал(а):а фиг знает ... я с ним не работал : )
но обязаны быть точно.
А что же Вы тогда выступаете с заявлениями, раз не работали?
Slava Tutushkin » 19 июл 2005, 21:32
slava писал(а):Например так:
PORTB=0x00;
DDRB=0x00;
или так:
void main(void) {
/* set bit 0 of Port A as output */
DDRA.0=1;
/* set bit 1 of Port A as input */
DDRA.1=0;
/* set bit 0 of Port A output */
PORTA.0=1;
/* test bit 1 input of Port A */
if (PINA.1) { /* place some code here */ };
Но по-битный доступ работает не со всеми портами (от F и далее нужно по-другому)
Перечитайте, пожалуйста, моё сообщение внимательно. Там я написал, что именно этот способ мне известен и мне он не подходит.
wolf » 23 июл 2005, 00:45
Slava Tutushkin писал(а):Подскажите, люди добрые, есть ли в codevision какая-нибудь функция вида OUTP(addr, val)?
Хочу читать/писать произвольный порт. Но, оказывается, PORTx в этом уродском компиляторе не являются переменными. Пока что у меня получается только обращение к порту через его имя (например, PORTD=0x00). Компилятор при этом генерит
OUT 0x12,R30
А я хочу вызвать что-нибудь вроде "OUTP(0x12, 0x00)", и чтобы при этом компилятор сгенерил то же самое.
Такие дела.
Если учитывать тот факт, что любой порт в AVR может адресоваться, как ячейка памяти, проблема легко решается и без OUTP.
Насчёт компилятора не согласен, вовсе он не уродский

а простой и удобный.
Slava Tutushkin » 25 июл 2005, 07:55
wolf писал(а):Если учитывать тот факт, что любой порт в AVR может адресоваться, как ячейка памяти, проблема легко решается и без OUTP.
Насчёт компилятора не согласен, вовсе он не уродский

а простой и удобный.
А мне всё-таки хочется через OUTP. И ещё чтобы SBI и CBI были =)
Я думаю, должно оно быть в компиляторе. Потому что делается просто, а эффективность в ряде случаев повышает существенно.