Доступ к ячейкам памяти ввода-вывода Доступ к памяти ввода-вывода микроконтроллера AVR легко выполняется на Си. Все регистры в памяти ввода-вывода объявляются в файле-заголовке, который обычно называется "ioxxxx.h", где xxxx указывает на тип микроконтроллера AVR. Ниже показаны примеры осуществления доступа к ячейкам памяти ввода-вывода. Под каждой строкой кода на Си показан генерируемый для нее ассемблерный код. #include <io8515.h> /* включить файл-заголовок с символьными именами */ __C_task void main(void) { char temp ;/* объявление временной переменной */ /*Для чтения и записи в любой регистр ввода-вывода */ temp = PIND ;/* Считываем PIND в переменную */ TCCR0 = 0x4F ;/* Запись значения в область ввода-вывода */ /*Установка и сброс одного бита */ PORTB |= (1<<PIND2); /* PIND2 - номер линии ввода-вывода (0..7) порта */ ADCSR &= ~(1<<ADEN); /* Сброс бита ADEN в регистре ADCSR */ /* Установка и сброс с помощью битовых масок */ DDRD |= 0x0C ; /* Установка битов 2 и 3 в регистре DDRD */ ACSR &= ~(0x0C) ; /* Сброс бита 2 и 3 в регистре ACSR */ /* Проверка, установлен или сброшен один бит? */ if(USR & (1<<TXC)) /* Проверка, установлен флаг Tx УАПП? */ { PORTB |= (1<<PB0) ; В/В сброшен while(!(SPSR & (1<<WCOL))) ;/* Ожидание установки флага WCOL */ /* Проверка на равность содержимого регистра В/В битовой маске */ if(UDR & 0xF3) /* Проверка на неравность нулю лог. И между регистром UDR и 0xF3 { }
/* Установка и сброс бит в регистрах ввода-вывода с помощью макроса */ #define SETBIT(ADDRESS,BIT) (ADDRESS |= (1<<BIT)) #define CLEARBIT(ADDRESS,BIT) (ADDRESS &= ~(1<<BIT)) /* Макрос для проверки одного бита в области ввода-вывода */ #define CHECKBIT(ADDRESS,BIT) (ADDRESS & (1<<BIT)) /* Пример использования */ if(CHECKBIT(PORTD,PIND1)) /* Проверка, PIND1 = 1? */ { CLEARBIT(PORTD,PIND1); /* Сброс PIND1 порта D*/ } if(!(CHECKBIT(PORTD,PIND1))) /* Проверка, PIND1 = 0? */ { SETBIT(PORTD,PIND1); /* Установка PIND1 порта D */ }
--------------------
Живи днем так, чтобы ночью ты спал спокойно.
|