Ваша реклама могла б бути тут!
1 млн переглядів на місяць!
Google Page Rank: 5

Вопрос по CodeVision

🔴 19:05 Повітряна тривога в Харків.обл.
Статус: Offline
Реєстрація: 05.12.2007
Повідом.: 5889
  • 🔴 19:05 Повітряна тривога в Харків.обл.
  • #1
Вопрос по CodeVision

Сижу дефайню себе лапки портов человеческими именами:

#define SIM_PWRK PORTB.4 //например так

Все хорошо до порта G (кристалл - MEGA1280), там с побитным доступом все нормально, потом вместо
sfrb PORTG=0x14;
используется объявление типа:
#define PINH (*(unsigned char *) 0x100);

Оно то правильно, ибо начиная с адреса 1Fh побитный доступ невозможен. Вопрос знатокам: как можно попроще обратиться к одной лапе портов лежащих по адресу выше 1Fh. В прошлый раз пришлось городить отакой бойан:

void set_res(void){
#asm
push r16
lds r16,$0063
sbr r16,0b00000100
sts $0065,r16
pop r16
#endasm
}

А хочется как то поизящнее. :confused:

P.S. Не кидайтесь какашками :rolleyes:
 
  • 🔴 19:05 Повітряна тривога в Харків.обл.
  • #2
#define sb(x,y) (x|=y) // установить бит
#define cb(x,y) (x&=~y) // сбросить бит

#define b0 (1<<0)
#define b7 (1<<7)
например:
if (PINH&b0) sb(PORTH,b7); // если на лапе 0 висит единица - лапу 7 в единицу
if (~PINH&b0) cb(PORTH,b7); // если лапа 0 в нуле - лапу 7 в ноль
 
  • 🔴 19:05 Повітряна тривога в Харків.обл.
  • #3
Спасибо :)

Решил выкрутиться все таки тем же методом. Благо это порт управления питанием SIM900, часто дрыгать ножкой не требуется.
 
Назад
Зверху Знизу