Сборка числа из отдельных битов. Переобозначение пинов директивой #define. Сборка маски. Заголовочные файлы.
_________________________________________________________________________________________________________
1) Как собрать число из отдельных битов и для чего это нужно.
2) Как дать имена номерам пинов порта или служебного регистра с помощью директивы #define.
3) Как собирать битовые маски из отдельных битов.
4) Как разбить длинную программу на отдельные файлы, для облегчения разработки и отладки. скачать (128 МБ)
Содержание
Если видеозапись не идёт, установите flash-плеер и проверьте звуковую карту, либо скачивайте материалы. Если вместо видео - зелёный экран, переустановите flash-плеер (просто скачайте последнюю версию). Если видео "дёргается", поставьте его на паузу и дайте немного подгрузиться. Плеер для просмотра flash-видео на домашней машине скачать здесь . Разверните видео на весь экран. Если напишут "Видео не найдено", "Video not found" - перезапустите видео ещё раз.
Скачать программу Logisim
Схема сборки числа из отдельных битов для Logisim 2.7.1 скачать:
Программы на CodeVisionAVR:
#include <mega8515.h> // Сборка числа из отдельных битов
#define PC0 0 // Переобозначение пинов порта C на их имена
#define PC1 1
#define PC2 2
#define PC3 3
#define PC4 4
#define PC5 5
#define PC6 6
#define PC7 7
void main(void)
{
DDRC = 0b11111111;
PORTC = (1<<PC7) | (1<<PC6) | (0<<PC5) | (1<<PC4) | (1<<PC3) | (0<<PC2) | (0<<PC1) | (1<<PC0); // Собираем число 11011001
}
____________________________________________________________________________________________________________
Установка бита (побитовое "ИЛИ" с маской):
A = 0b11011001; // Исходное число
А |= 1<<PC2 | 1<<PC1; // Устанавливаем в лог. единицу первый и второй пины порта C
// Маска под сборку: 00000110
// Получается 11011111
___________________________________________________________________________________________________________
Инвертирование бита (побитовое "ИСКЛЮЧАЮЩЕЕ ИЛИ" с маской):
A = 0b11011001; // Исходное число
А ^= 1<<PC5 | 1<<PC4 | 1<<PC1; // Инвертируем первый, четвёртый и пятый пины порта C
// Маска под сборку: 00110010
// Получается 11101011
___________________________________________________________________________________________________________
Обнуление бита (побитовое "И" с маской):
A = 0b11011001; // Исходное число
А &= ~(1<<PC6 | 1<<PC7); // Обнуляем шестой и седьмой пины порта C
// Маска под сборку: 00111111
// Инвертированная маска для упрощения сборки: 11000000
// Получается 00011001
___________________________________________________________________________________________________________
Считывание бита (побитовое "И" с маской и последующей проверкой на нуль):
W = 0b11011001; // Исходный регистр W, проверяем второй бит.
if (W &= 1<<W2) // Маска под сборку: 00000100
{
PORTC = 1<<PC0; // Если бит установлен в лог. единицу, то загорается один светодиод.
}
else
{
PORTC = 1<<PC0 | 1<<PC1 | 1<<PC2; // Если бит сброшен, то загораются три светодиода.
}
___________________________________________________________________________________________________________
Выделение битового поля (побитовое "И" с маской и последующим сдвигом):
W = 0b11011001; // Исходный регистр W
W = ((1<<W6 | 1<<W5 | 1<<W4 | 1<<W3) & W) >>3 ; // Маска под сборку: 01111000, потом побитовое "И" и сдвиг вправо на 3 бита.
PORTC = W;
___________________________________________________________________________________________________________
Сшивка битовых полей X, Y и Z в одно:
X = 1<<X0 | 1<<X2; // Собираем поле X = 101
Y = 1<<Y2; // Собираем поле Y = 100
Z = 1<<Z1; // Собираем поле Z = 10
PORTC = X<<5 | Y<<2 | Z; // Сшиваем все три поля в одно: 10110010