duminică, 17 noiembrie 2013

Периферийный модуль Внешнее Прерывание - EXT_INT


Периферийный модуль Внешнее Прерывание-EXT_INT может обнаружить и изменение одного из выводов МК с возможным(в последствии) генерированием прерывания,которое можно обработать при помощи подпрограммы обработки прерываний EXT_INT_ISR. Также является одним из самых простых и необходимых периферийных модулей , который может генерировать прерывания.Внешние прерывания прикреплены к выводам INT0,INT1 и INT2 МК. Данные выводы также можно сконфигурировать как выход. Эта характеристика обеспечивает возможность генерировать прерывания прямо в программе посредством изменения значений выводов . На рисунке, представленном ниже , приведён пример генерирования прерывания,путём нажатия кнопки и обработки его подпрограммой обработки прерываний.
Можем увидеть,что,чтобы была вызвана подпрограмма обработки прерываний , необходимо удовлетворение следующих условий:

Moduul periferic Intrerupere externa. EXT INT

Pagina principala curs          На русском
 
Modulul periferic Intrerupere Externa - EXT INT permite detectarea schimbarilor de la unul din pinii externi al microcontrollerului cu o eventuala generare a unei situatii de intrerupere, care ar putea fi tratata de catre o subrutina de prelucrare a intreruperii EXT_INT_ISR. Totodata este unul din cele mai simple si esentiale module periferic care pot genera intreruperi.
    Întreruperile externe sunt atasate de pinii INT0, INT1, si INT2 ale microconrollerului. Pinii destinati intreruperilor pot fi configuraţi si ca ca ieşiri. Această caracteristică oferă posibilitatea crearii situatiilor de intreruperi chiar din cadrul programului prin modificarea valorilor pinilor respectivi din programul din MCU.
    In figura de mai jos se da un exemplu ce demonstreaza cum ar putea fi interpretata detectarea unei intreruperi externe generate de apasarea unui buton atasat la pinul de intrerupere si prelucrat de subrutina de prelucrare a situatiei de intreruperi:

    Putem vedea ca pentru ca sa fie apelata subrutina de prelucrare a intreruperii este necesara satisfactia urmatoarelor conditii:

Прерывания. Программы с прерываниями. Прерывание RESET


     Прерывания

  Прерывание представляет собой приостановку нормального процесса выполнения программы для выполнения более приоритетной задачи. По правилу, прерывание, генерируется как ответ на физический эффект, внутренний или внешний, периферийного модуля . Физический эффект сам по себе представляет нам выполнение прерывания или исключительную ситуацию, которую нужно немедленно выполнить. Например: изменение логического уровня на одном выводе, конец периода времени, конец операции передачи или приёма, конец преобразования и т.д. Большинство периферийных модулей могут генерировать одно или несколько прерываний. Выполнение прерывания предполагает существование определённой подпрограммы для этой цели. При появлении прерывания, МК устанавливает в регистре состояния флаг IF, который будет установлен пока не закончится выполнение подпрограммы обработки прерывания. Для того, чтобы прерывание было сгенерировано, необходимо, чтобы в регистре контроля, был установлен бит IE. Механизм вызова подпрограммы обработки прерывания должен быть инициализирован следующим образом: 
  1. Определилась ситуация прерывания , показанная посредством флага IF==1; 
  2. Прерывание от определённого источника (по фронту и т.д.) разрешается - IE==1;
  3. Бит глобального разрешения прерываний (SREG) I==1.

Периферийные модули. Периферийный модуль GPIO - Порты ввода / вывода.

    

     Периферийные модули

    МК представляет из себя структуру из MCU с различными периферийными модулями. Разные МК имеют разные периферийные модули. Периферийный модуль-специальная схема , которая выполняет определённую функцию.Например:

  • GPIO-позволяет устанавливать логическое значение на пинах МК.
  • EEPROM-позволяет долговременно хранить данные.
  • ADC-преобразование аналоговых сигналов.
  • UART-последовательное соединение.
  • TIMER-генерирование разных промежутков времени, измерение времени между 2 событиями,генерация цифровых сигналов определённой формы.


    В определенной степени, я бы сказал, что  периферийный интерфейс соединяет микроконтроллер с внешним миром. Взаимодействие микропроцессор (ЦП) с периферией происходит РВВ(регистр ввода - вывода).Архитектура AVR предоставляет 64 регистра, называемых регистры периферии или регистры ввода / вывода. Каждый модуль GPIO зарезервировал набор из трех регистров :PORT, PIN и DDR,используя которые,МК может менять логические уровни на пинах.

Косвенный доступ к памяти SRAM. Массивы. Обработка массивов

 Главная страница курса         in romana

    Массивы

    Массив представляет собой последовательность переменных доступных по одному имени. На языке ASM мы не можем говорить о каком-либо специальном типе данных. Любая структура данных, простая или сложная, представлена областью памяти, выделенной под эту структуру. Это действительно и для таблиц(массивов), т.е. будет выделена область памяти доступна по имени ссылки (метки) .

Пример:

    .EQU TAB_SIZE=10     ; объявление переменной
    .DSEG                ; таблицы будут объявлены
                         ; в сегменте данных
     tab: .byte TAB_SIZE ; использование константы
                         ; в объявлении таблицы


    Из данного примера мы не можем сделать вывод, сколько элементов имеет таблица, но при условии, что элементы таблицы имеют тип byte, который занимает один байт в памяти, мы говорим, что tab представляет собой массив из 10 элементов типа byte. Если мы хотим выделить память для массива (объявить массив), элементами с размером больше, чем один байт, тогда выделенная память будет продуктом размера элементов и их количеством в массиве.

Прямой доступ к памяти SRAM. Переменные. Операции с переменными.


    Переменная - это объект,который содержит данные,которые могут изменяться.
    Для ASM переменной мы называем часть памяти , занятой этой переменной, доступной по определённому имени. Имя переменной-это метка в сегменте данных, которая представляет собой адрес части памяти, выделенной для переменной. В отличии от языков высокого уровня в ASM не существует типа переменной.  Переменная характеризуется только  именем, меткой и объёмом памяти,выделенном для данной переменной.

    Объявление переменной

    Переменная объявляется в сегменте данных .dseg и представляет собой метку, за которой следует директива предварительной обработки .byte которая предполагает бронирование части памяти для данной переменной. 

  .DSEG   ; переменные декларируются в сегменте данных

  var1 : .BYTE 1   ; декларирование переменной var1 
                   ; и бронирование 
                   ; 1 byte для этой переменной.
  var1 : .BYTE 2   ; декларирование переменной var1 
                   ; и бронирование 
                   ; 2 byte для этой переменной. 
                  
  

Константы. Булева логика.Операции с масками.

 Главная страница курса         in romana

Константы

    Константа-это идентификатор, наделённый значением, которое не может меняться в ходе выполнения программы, оно - постоянно. Используя константу вместо одного и того же значения, которое повторяется, мы упрощаем программу и упрощаем манипулирование ей. Дав определённое имя константе, упрощается  разработка программы и легче запоминается. Использование констант повышает безопасность и снижает риск ошибок в программе. Пропадает необходимости запоминать фактические значения, т.к. имя запоминать легче. Ошибки имени константы обычно выявляются компилятором автоматически (кроме того,когда имя не то которое принадлежит данной константе). Изменения в программе становятся проще,т.к. константа определена один раз и изменяя её значения, меняются все значения под этим именем.

Определение констант  

    Константы определяются один раз и сохраняют свое значение на протяжении всей программы.Для обозначения констант на языке ASM , существуют 2 директивы:

     Директива .EQU определяет имя константы.
   
    .EQU SIZE = 10
    .EQU PIN7 = 7

Система команд микроконтроллера серии AVR

      
   Микроконтроллер AVR является МК типа RISC с Гарвардской архитектурой, которая позволяет выполнение большинства операций за один такт. Это представление связано с тем, что они включают в себя расходы времени по передаче данных из памяти программ. Исключением для правила - "все команды выполняются за один такт", является выполнение команд с данными в 16 бит, переходы и т.д.
    Команда ASM представляет собой действие, которое может выполнить МК. Команда состоит из имени и рабочих операндов, левого и правого. Существуют команды с одним операндом или вовсе без операндов.
Левый операнд хранит в себе результат данной выполненной команды.В качестве операндов могут быть: РОН(R), константа(k), адрес памяти или периферийный регистр(P).
Команда ASM имеет следующий формат:

<мнемоника> <левый операнд>, <правый операнд>

мнемоника - имя команды, является аббревиатурой  задания, которое он выполняет.
операнд - адрес доступа к ресурсу МК или константа для операций с константами.

miercuri, 13 noiembrie 2013

Problema L6. Display 8x7 segmente



Problema
Să se proiecteze un sistem care ar perimite afişarea unui set de caractere definit din memoria RAM pe un display format din 8 afişoare a câte 7 segmente.

Afişorul 8x7seg 
Controlul segmentelor este comun pentru toate cele 8 cifre disponibile pe placă. Asta înseamnă că toate segmentele de pe aceeaşi poziţie din toate cele 8 cifre sunt legate la acelaşi pin (altfel spus, toate cifrele active la un anumit moment de timp vor afişa aceeaşi valoare). Activarea sau dezactivarea unei cifre se face tot pe logică negată, folosind pinii legați la dispozitivele CC8 - CC0. Prin urmare, modulul care controlează afişajul pe 7 segmente va avea, pe lângă ieşirea de 8 biți necesară controlului segmentelor, încă o ieşire de 8 biți care va controla starea fiecărei cifre (activată sau dezactivată).


 
Afişorul va fi activat la aplicarea 0 logic la catodul comun (CC).