У меня получилось, однако ). Спасибо ссылкам dccharacter.
Делаю так (девайс ATmega8, компилятор AVR-GCC):
- Код: Выделить всё • Развернуть
#include <inttypes.h>
#include <avr/io.h>
#define pAddr(addr) (*(volatile uint8_t *)((addr) + 0x20))
void port_set (volatile uint8_t *port, uint8_t val){
*port = val;
}
unsigned char port_get (volatile uint8_t *port){
return *port;
}
void port_set_bits (volatile uint8_t *port, uint8_t mask){
*port |= mask;
}
void port_clear_bits (volatile uint8_t *port, uint8_t mask){
*port &=~(mask);
}
int main(){
PORTB=0x00;
DDRB=0xff;
unsigned char myPort = 0x18; // PORTB
port_set (&pAddr(myPort), 0x02);
port_set (&pAddr(myPort), 0x01);
port_set_bits(&pAddr(myPort), 2);
while(1){
;
}
return 0;
}
Не сказать, что красивый вариант, но работает...