Фанат науки

 
  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта
Сборка числа из отдельных битов. Переобозначение пинов директивой #define. Сборка маски. Заголовочные файлы.
_________________________________________________________________________________________________________

1) Как собрать число из отдельных битов и для чего это нужно.
2) Как дать имена номерам пинов порта или служебного регистра с помощью директивы #define.
3) Как собирать битовые маски из отдельных битов.
4) Как разбить длинную программу на отдельные файлы, для облегчения разработки и отладки. скачать (128 МБ)

Содержание

Если видеозапись не идёт, установите flash-плеер и проверьте звуковую карту, либо скачивайте материалы. Если вместо видео - зелёный экран, переустановите flash-плеер (просто скачайте последнюю версию). Если видео "дёргается", поставьте его на паузу и дайте немного подгрузиться. Плеер для просмотра flash-видео на домашней машине скачать здесь . Разверните видео на весь экран. Если напишут "Видео не найдено", "Video not found" - перезапустите видео ещё раз.

 

Скачать программу Logisim

Схема сборки числа из отдельных битов для Logisim 2.7.1 скачать:
Sborka Chisla Iz Otdelnyh Bitov


Программы на 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
 
  

 

 
   © Фанат науки 2010 - 2017.  Все права защищены.  При использовании материалов обязательна ссылка на сайт  www.fanatnauki.ru    Сайт участвует в Союзе образовательных сайтов