Недавно начал изучение МК АВР и неожидано возник (я думаю простейший) вопрос: как в cvAVR обращаться не к целому порту, а к какой нибудт определенной ножке, например:
не
PORTB=0x7F;
а чтонибудь вроде:
PORTB.PIN0=0 или 1
это возможно?
заранее спасибо.
Прошу прощения и извиняюсь, тему закрыть и удалить.
Просто надо почитать исходники и подсмотреть.
Итак правильный ответ:
PORTB.0=1;
т.е. на выходе 0 порта B будет лог 1
beer_warrior
Mar 15 2006, 23:14
Стандартный способ:
PORTn |= (1<<PBx) - для 1
PORTn &= ~(1<<PBx) - для 0
PBx - (возможны варианты написания) номер бита в порту.
В IAR AVR можно использовать
// Управление битами любых регистров
#define SBIT(ADDRESS,BIT) (ADDRESS |= (1<<BIT)) //устан. в 1
#define CBIT(ADDRESS,BIT) (ADDRESS &= ~(1<<BIT)) //сброс в 0
#define CHBIT(ADDRESS,BIT) (ADDRESS ^=(1<<BIT)) //инверсия бита
Конкретно в CV можно использовать конструкцию вида PORTx.n:
PORTC.4 = 0;
if (DDRB.5) {
...
}
UCR.RXCIE = 1;
...
alekseykoj
Mar 17 2006, 14:27
Используй
PORTA |= (1<<PB0)
PORTA &= ~(1<<PB0)
Laptop
Mar 19 2006, 16:45
#define SETB(port,bit) port|=(1<<(bit))
#define CLRB(port,bit) port&=~(1<<(bit))
#define BIT(addr,bit) (addr & (1<<(bit)))
#define CPLB(addr,bit) (addr=addr^(1<<(bit)))
Соответственно установить, очистить, проверить в if, инвертировать.
Само собой все имена битов и адреса подключаются из файла определений к контроллеру и могут быть переопределены с новыми функциональными именами позднее.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.