- •1 Внутренняя память)Обобщенная структурная схема микропроцессорной систем
- •2) Режимы обмена информации с внешними устройствами
- •3) Обобщенная структура мк
- •6) Система комманд и методы адрессации
- •9.3. Типы команд
- •10.4. Начальный запуск мк (сброс)
- •18.2. Блок тактирования (usart baud rate registers – ubrrl & ubbrh)
- •20.2. Работа передатчика.
- •20.5. Работа приемника
- •Пример. Программа измерения длительности импульса
10.4. Начальный запуск мк (сброс)
Запуск и организация обслуживания прерываний в МК семейства 68HC08/908 выполняется с помощью модуля системной интеграции SIM08 (System Integration Module – 08), который работает совместно с другими служебными модулями: LVI08, IRQ08, BREAK08, COP08.
Запуск МК выполняется модулем SIM08 в следующих случаях.
Включение напряжения питания Vп.
Поступление внешнего сигнала запуска (сброса) RST# = 0.
Поступление сигнала запуска от сторожевого таймера COP08.
Выборка неправильного кода команды.
Обращение к ячейке памяти, которая отсутствует в адресном пространстве данной модели МК.
Поступление от модуля LVI08 сигнала о недопустимом снижении напряжения Vп.
Каждая из этих причин вызывает установку в 1 соответствующего бита в регистре состояния SRSR модуля SIM08 (рис. 10.2):
POR – запуск при включении питания,
PIN – запуск по сигналу RST#,
COP – запуск по сигналу сторожевого таймера COP08,
ILOP – запуск при выборке неправильной команды,
ILAD – запуск при обращении к несуществующему адресу,
LVI – запуск по сигналу модуля контроля питания LVI08.
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 | |
|
POR |
PIN |
COP |
ILOP |
ILAD |
0 |
LVI |
0 | |
Рис. 10.2. Формат содержимого регистра SRSR (адрес $FE01)
Содержимое регистра SRSR доступно только для чтения, и после чтения все его биты устанавливаются состояние в 0. Программа инициализации МК должна обеспечивать чтение содержимого этого регистра и анализ причины запуска или перезапуска.
При запуске МК автоматически выполняются следующие действия.
В программный счетчик PC поступают два байта из ячеек памяти с адресами $FFFE-FF, которые задают адрес первой команды, выполняемой МК после запуска.
В указатель стека SP заносится число $FF, адресующее начальную ячейку стека.
В регистре признаков CCR устанавливается значение маски прерываний I=1, которое запрещает обслуживание любых аппаратных прерываний.
Устанавливается необходимое начальное состояние регистров периферийных устройств.
При запуске МК начинает работу с тактовой частотой, задаваемой кварцевым резонатором.
Чтобы произвести запуск внешним сигналом, необходимо подать на вывод RST# уровень 0 и поддерживать его в течение не менее 64 периодов TСLK=1/Fq. Запуск производится при последующей установке на этом выводе уровня 1. Если запуск вызывается одной из внутренних причин (установка в 1 бита COP, ILOP или ILAD в регистре SPSR), то на выводе RST# устанавливается уровень 0 на время 32TCLK, а затем производится загрузка в PC начального адреса.
10) Система прерываний МК
Процессоры семейства 68HC08/908 выполняют прерывание текущей программы по одной из следующих причин:
поступление команды прерывания SWI;
внешний запрос прерывания на входе IRQ#, обслуживание которого реализуется с помощью модуля IRQ08;
запрос прерывания в контрольной точке, который формируется модулем BREAK08;
внутренние запросы прерывания, поступающие от периферийных устройств, расположенных на кристалле МК.
Эти события вызывают прерывание выполнения текущей программы и переход к подпрограмме - обработчику прерывания, которая обеспечивает необходимую реакцию МК. При поступлении команды SWI или соответствующего запроса процессор завершает выполнение текущей команды и выполняет цикл перехода к обработке прерывания, в процессе которого реализуются следующие операции:
загрузка в стек содержимого регистров процессора в следующей последовательности: CCR - A – X - PCh - PCl, где PCh, PCl - старший и младший байты содержимого PC, X – значение младшего байта индексного регистра H:X;
загрузка в PC 16-разрядного вектора прерывания Ve - адреса первой команды обработчика прерываний, соответствующего наступившему событию.
Значение вектора Ve выбирается из таблицы векторов прерываний, размещенной в конце адресуемого объема памяти (см. табл. 10.2).
Обработчик прерывания заканчивается командой возврата из прерывания RTI, которая выбирает из стека и восстанавливает содержимое регистров PC, X, A, CCR, обеспечивая продолжение выполнения прерванной программы.
Необходимо иметь в виду, что в цикле перехода к обработке прерываний в стеке автоматически сохраняется только младший байт индексного регистра X. Чтобы обеспечить сохранение старшего байта индексного регистра H следует в начале обработчика прерываний ввести команду PSHH (загрузка в стек содержимого байта H, а перед командой RTI выполнить команду PULH, которая извлекает из стека и восстанавливает содержимое старшего байта H индексного регистра.
Для размещения таблицы векторов запуска и прерываний в МК семейства 68HC08/908 зарезервировано 64 байт адресного пространства (адреса $FFD0-FF), из которых в МК MC68HC908GP32 используется 36 байт. В табл. 10.2 показано размещение векторов для этого МК.
Нижнюю позицию в таблице векторов занимает вектор начального запуска (Reset), а перед ним располагается вектор программного прерывания по команде SWI. Выше размещаются вектора аппаратных прерываний, которые вызываются поступлением запроса от внешних устройств на вход IRQ#, запросов прерывания от таймера и других модулей, входящих в состав МК.
Поступление запросов прерывания проверяется МК после выполнения каждой команды программы. Если поступило несколько запросов, то в первую очередь обслуживается запрос с более высоким приоритетом. Запросы имеют фиксированные приоритеты в соответствии с порядком их расположения в таблице векторов прерываний (таблица 10.2) – чем больше адрес, тем выше приоритет.
Таким образом, из аппаратных прерываний наивысший приоритет имеет внешний запрос IRQ#, затем запрос генератора тактирующих импульсов CGM08 и сигналы таймера. Минимальный приоритет имеют запросы, вектора которых размещены в верхней части таблицы 10.2 – запросы ADC08 или некоторых других модулей.
Модуль системной интеграции SIM08 имеет специальные регистры INT1-INT3 (рис. 10.4), которые содержат биты признаков поступивших запросов прерывания IF1-IF16. Эти признаки соответствуют возможным запросам прерывания и принимают значение IFx=1 при поступлении соответствующего запроса.
Таблица 10.2. Размещение векторов запуска и прерывания для МК MC68HC908GP32
|
Запрос базового таймера TBM08 |
$FFDC-DD |
|
Запрос модуля ADC08 |
$FFDE-DF |
|
Запрос модуля KBI08 |
$FFE0-E1 |
|
Запросы модуля SCI08 |
$FFE2-E7 |
|
Запросы модуля SPI08 |
$FFE8-EВ |
|
Переполнение таймера TIM08-2 |
$FFEC-ED |
|
Запрос канала 1 таймера TIM08-2 |
$FFEE-EF |
|
Запрос канала 0 таймера TIM08-2 |
$FFF0-F1 |
|
Переполнение таймера TIM08-1 |
$FFF2-F3 |
|
Запрос канала 1 таймера TIM08-1 |
$FFF4-F5 |
|
Запрос канала 0 таймера TIM08-1 |
$FFF6-F7 |
|
Запрос модуля CGM08 |
$FFF8-F9 |
|
Прерывание по внешнему запросу IRQ# |
$FFFA-FB |
|
Команда SWI (программное прерывание) |
$FFFC-FD |
|
Вектор начального запуска (Reset) |
$FFFE-FF |
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
| |
|
IF6 |
IF5 |
IF4 |
IF3 |
IF2 |
IF1 |
0 |
0 |
| |
|
а). INT1 (адрес $FE04) |
| ||||||||
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
| |
|
IF14 |
IF13 |
IF12 |
IF11 |
IF10 |
IF9 |
IF8 |
IF7 |
| |
|
б). INT2 ( адрес $FE05) |
| ||||||||
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 | ||
|
0 |
0 |
0 |
0 |
0 |
0 |
IF16 |
IF15 | ||
|
в). INT3 (адрес $FE06) |
| ||||||||
Рис. 10.4. Формат содержимого регистров состояния прерываний
INT1-INT3 модуля системной интеграции SIM08
Регистры INT1-INT3 доступны только для чтения и могут использоваться для анализа состояния системы и принятия решения о маскировании или разрешении обслуживания определенных запросов.
Модуль управления внешним прерыванием IRQ08 принимает внешний запрос прерывания, поступающий на вход IRQ#, и обеспечивает различные варианты его обслуживания. Этот модуль содержит регистр управления INTSCR, отдельные биты которого имеют следующее назначение (рис. 10.5):
IRQF – признак внешнего запроса прерывания (доступен только для чтения), принимает значение 1 при поступлении соответствующего сигнала на вход IRQ#;
ACK – бит подтверждения приема запроса прерывания, который доступен только для записи (при чтении содержимого регистра INTSCR значение этого бита равно 0), при записи 1 в этот бит производится сброс признака запроса в состояние IRQF=0;
IMASK – бит маски внешнего прерывания, при установке значения IMASK=1 поступление запроса на вход IRQ# не вызывает прерывания текущей программы;
MODE – бит, определяющий вид сигнала прерывания: при установке значения MODE=0 прерывание вызывается отрицательным перепадом потенциала на входе IRQ#, при значении MODE=1 – подачей низкого уровня потенциала (логический 0).
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
0 |
0 |
0 |
0 |
IRQF |
ACK |
IMASK |
MODE |
Рис.10.5. Формат содержимого регистра управления внешним прерыванием
INTSCR (адрес $001D)
Длительность сигнала прерывания для МК серии GP должна составлять не менее 50 нс при напряжении питания Vп=5,0 В и не менее 125 нс при Vп=3,0 В.
Если прерывание вызывается перепадом потенциала, то после его обслуживания следующее прерывание происходит только при поступлении нового перепада. Если прерывание вызывается уровнем потенциала, то при сохранении уровня 0 на входе IRQ# МК повторяет выполнение подпрограммы обслуживания, пока не установится значение сигнала IRQ# =1.
Если внешнее прерывание замаскировано (установлено значение бита IMASK=1), то можно реализовать обслуживание запроса IRQ# программно, путем периодического считывания содержимого регистра INTSCR, анализа значения признака IRQF и вызова обработчика прерываний при значении IRQF=1. При этом обработчик прерываний должен произвести установку бита ACK=1, чтобы сбросить в 0 признак IRQF и обеспечить возможность приема следующего запроса прерывания.
Модуль прерывания в контрольной точке (рис. 10.6) предназначен для организации механизма останова по контрольным точкам. Модуль позволяет организовать этот процесс таким образом, что прикладная программа между двумя точками будет выполняться в реальном времени.
Под управлением программы монитора отладки в регистры BRKH и BRKL записывается адрес останова. Код с выхода этих регистров подаётся на входы цифровых компараторов.
Если адрес на внутренней магистрали ША устанавливается в нужное значение, то вырабатывается сигнал прерывания (если разрешён) и подаётся на модуль системной интеграции SIM 08. Если прерывания по контрольным точкам разрешены, то генерируется прерывание и МК переходит в режим обработки прерывания по контрольной точке.
Обработка заключается в следующем:
1) ЦП завершает выполнение текущей команды.
2) В регистр команд ЦП загружается код команды программного прерывания SWI (немаскируемое прерывание) и процессор переходит по вектору прерывания, который записан в ячейках по адресам $FFFC и $FFFD, если МК находится в рабочем режиме, или $FEFC и $FEFD, если МК находится в отладочном режиме.
адреса
Рис. 10.6. Функциональная схема модуля прерывания МК в контрольной точке
Для организации работы модуля отладочных прерываний используются 5 регистров специальных функций:
BRSCR регистр управления модуля прерываний по контрольным точкам;
2 регистра адреса;
регистр SBSR BREAK режима модуля SIM 08;
регистр SBFCR регистр управления флагом в режиме BREAK (SIM 08).
Таким образом, с момента запуска до остановки в контрольной точке программа выполняется в реальном времени. Поскольку
BREAK 08 имеет только один регистр, то возможна остановка только в одной точке. Если оператор предположил неверный путь, то контрольная точка никогда не достигается и связь МК с ПК будет утеряна (восстановится при сбросе).
11) Встроенный таймер-счетчик
Во всех МК есть таймеры. В МК 68HC908GP32 есть три таймера ТВМ-08 и два одинаковых многофункциональных таймерных модуля TIM08-1 и TIM08-2.
Таймер ТВМ - 08 создает метки реального времени для МПС с
частотами: 1, 4, 16 Гц, 256, 512, 1024, 2048, 4096 Гц. Частоты можно менять программно. Эти метки осуществляют периодичное формирование запросов прерывания. Таймерные модули выполняют широкий набор функций, наиболее распространенные:
функция счета;
функция захвата;
функция совпадения;
функция формирования сигналов ШИМ.
Каждый из таймерных модулей содержит:
- блок таймера-счетчика;
-два таймерных канала, выводы которых служат или для ввода внешних сигналов, или для выдачи управляющих сигналов.
Таймер в этой модели синхронизируется только fBUS (8МГц). В других моделях можно использовать частоту кварца (до 4МГц).
Таймерный модуль TIM08 содержит (рисунок 12.1) блок таймера-счетчика. Каждый из модулей имеет два таймерных канала, выводы которых служат для приема внешних сигналов, время поступления которых фиксируется, или для выдачи выходных сигналов в заданные моменты времени.
Каждый блок таймера – счетчика содержит 16-разрядный счетчик TxCNT, 16 - разрядный регистр модуля счета TxMOD и 8-разрядный регистр управления-состояния TxSC, где символ x принимает значение 1 или 2 (для серии GP).
Каждый таймерный канал содержит 16-разрядный регистр данных TxCHi и 8-разрядный регистр управления-состояния канала TxSCi, где в качестве символа i указывается номер соответствующего канала: i = 0, 1, 2, 3, 4.
Входы-выходы таймерных каналов TxCHi совмещены с выводами параллельных портов, реализуя при работе модулей TIM08 альтернативные функции.
Регистры таймерных модулей имеют свои адреса, которые приведены в табл. 12.1. Запись-считывание содержимого 16-разрядных регистров производится как обращение к двум 8-разрядным регистрам, один из которых содержит старший байт и отмечается суффиксом h, а второй содержит младший байт и отмечается суффиксом l, например TxMODh-TxMODl.

Рис. 12.1. Структура таймерного модуля TIM08
Функционирование таймера- счетчика в модуле TIM08 определяется содержимым регистра управления TxSC, биты которого имеют следующее назначение (рис.12.2, а):
TOF – признак переполнения таймера (доступен только для чтения), принимает значение TOF = 1, если содержимое счетчика TxCNT достигает максимального значения, заданного содержимым регистра TxMOD;
TOIE – разрешает при значении TOIE = 1 формирование запроса прерывания при переполнении счетчика (признак TOF = 1);
TSTOP – вызывает остановку переключения счетчика TxCNT при установке значения бита TSTOP = 1;
TRST – вызывает при установке значения TRST = 1 сброс содержимого счетчика TxCNT в состояние $0000 и установку значения битов PS2-0 = 000 (доступен только для записи, устанавливается в 0 после сброса TxCNT в нулевое состояние);
PS2-0 – определяют коэффициент деления частоты Kd при формировании сигналов, переключающих счетчик TxCNT (см. табл. 12.2).
Таблица 12.1. Адреса регистров таймерных модулей
|
Модуль TIM08-1 |
Модуль TIM08-2 | ||||
|
Блок таймера |
Регистр |
Адрес |
Блок таймера |
Регистр |
Адрес |
|
Блок Счетчика-таймера |
T1SC |
$0020 |
Блок счетчика-таймера |
T2SC |
$002B |
|
T1MODh-l |
$0021-22 |
T2MODh-l |
$002C-2D | ||
|
T1CNTh-l |
$0023-24 |
T2CNTh-l |
$002E-2F | ||
|
Таймерный канал 0 |
T1SC0 |
$0025 |
Таймерный канал 0 |
T2SC0 |
$0030 |
|
T1CH0h-l |
$0026-27 |
T2CH0h-l |
$0031-32 | ||
|
Таймерный канал 1 |
T1SC0 |
$0028 |
Таймерный канал 1 |
T1SC0 |
$0033 |
|
T1CH0h-l |
$0029-2A |
T2CH0h-l |
$0034-35 | ||
При запуске МК счетчик TxCNT устанавливается в начальное состояние $0000, после чего производится его переключение сигналами с частотой fc = fBUS/Kd, где коэффициент деления Kd определяется значением битов PS2-0 в регистре TxSC (см. табл. 12.2).
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
TOF |
TOIE |
TSTOP |
TRST |
- |
PS2 |
PS1 |
PS0 |
а) TxSC
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
CHiF |
CHiIE |
MSiВ |
MSiA |
ELSiB |
ELSiA |
TOVi |
CHiMAX |
б) TxSCi
Рис. 12.2. Форматы регистров управления TxSC, TxSCi
Остановка и последующий запуск счетчика производится путем установки соответствующего значения бита TSTOP в регистре TxSC. Счетчик сбрасывается в состояние $0000 при установке значения бита TRST=1. Модуль счета Кc задается содержимым регистра TxMOD и может иметь значение от 0 до 65535.
Таблица 12.2. Коэффициенты деления частоты Kd для таймерных модулей
|
TIM08 |
TBM08 | ||
|
PS2-0 |
Kd |
TBR2-0 |
Kd |
|
000 |
1 |
000 |
32768 |
|
001 |
2 |
001 |
8192 |
|
010 |
4 |
010 |
2048 |
|
011 |
8 |
011 |
128 |
|
100 |
16 |
100 |
64 |
|
101 |
32 |
101 |
32 |
|
110 |
64 |
110 |
16 |
|
111 |
Не используется |
111 |
8 |
При запуске МК все биты в регистре TxMOD принимают значение 1. Когда содержимое счетчика TxCNT достигает значения, записанного в TxMOD, счетчик сбрасывается в нулевое состояние. При этом устанавливается значение признака переполнения TOF = 1, что вызывает прерывание процессора, если в регистре TxSC значение бита TOIE = 1. Вектора прерываний по переполнению таймеров размещаются в соответствующих позициях таблицы векторов.
Текущее содержимое TxCNT доступно только для чтения. При этом следует сначала считать значение старшего байта (регистр TxCNTh), а затем значение младшего байта (регистр TxCNTl). При чтении старшего байта значение младшего автоматически фиксируется в регистре TxCNTl, поэтому после его считывания будет получено фактическое содержимое TxCNT на момент обращения к регистру TxCNTh.
Коэффициент пересчета, таким образом, является программиру-емым. Максимальный коэффициент пересчета – 65535. Период работы счетчика T=(Kc+1)˟ 1/fc.
Пример программы инициализации таймера. Инициализировать таймер-счетчик на выдачу временных меток 80 мкс.
(Kc+1)*1\fc=80*10-6; fc=8 МГц
КС =fc*80*10-6 -1=63910 =27316.
**********************************************************
SEI ; глобальный запрет прерывания на время инициализации
LDA #$40 ; режим обычный, Кдел= 0
STA T1SC;
LDA #$73;
STA TMODL ; в младший байт регистра режима
LDA #$02;
STA MODH; в старший байт регистра режима
CLI ; глобальное разрешение прерывания
12) Внутренняя структура AVR
На
рисунке 14.1 приведена структурная схема
МК ATmega
8. Рассмотрим
младшую модель подсемейства ATмеgа
– ATмеga8.
МК имеет внешний кварцевый генератор,
встроенный RC-
генератор, Flash-
память – 8 кбайт;
SRAM
– 1 кбайт; EEPROM
– 512 байт; 23
линии ввода – вывода; 32 универсальных
рабочих регистра; 2 таймера – счетчика
с режимами захвата, совпадения (ШИМ);
последовательный универсальный синхронно
- асинхронный приемопередатчик USART;
последовательный синхронный интерфейс
SPI,
-
проводной интерфейсTWI
(
C);
10 - разрядный, 6 - канальный АЦП, аналоговый
компаратор, число прерываний: внутренних
- 18, внешних - 2.
GCK
ATMEGA8
CPU
GCK



















Система команд AVR весьма развита и насчитывает 120 различных инструкций. Почти все команды имеют фиксированную длину в одно слово (16 бит), что позволяет в большинстве случаев объединять в одной команде и код операции, и операнд. Различают пять групп команд AVR: команды пересылки данных, арифметические операции , логические операции, условного и безусловного ветвления, команды работы с битами. По разнообразию и количеству реализованных инструкций AVR больше похожи на CISC, чем на RISC процессоры. Например, у PIC-контроллеров система команд насчитывает от 33 до 58 различных инструкций, а у MCS-51 она составляет 111.
На рисунке 14.2 представлен регистр слова состояния SREG (регистр флагов) центрального процессора (CPU).
|
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
| |
|
|
I |
T |
H |
S |
V |
N |
Z |
C |
Регистр флагов SREG | |
Рис. 14.2.
Разрешение прерываний;
T – бит пользователя;
H – межтетрадный перенос;
S
-флаг
знака;
S=N V V
V - переполнение;
N – флаг отрицательного значения;
Z – флаг нуля;
С – флаг переноса.
МК AVR имеют следующие особенности:
каждый из 32-х регистров общего назначения длиной 1 байт непосредственно соединен с арифметико-логическим устройством (ALU) процессора. Это означает, что в AVR существует 32 регистра-аккумулятора.
ADD R0, R1; (R0) + (R1) → R0;
имеется аппаратный умножитель, который позволяет очень быстро осуществлять умножение;
организован конвейер – во время выполнения команды производится выборка из памяти и дешифрация следующей команды;
почти все команды имеют одинаковую длину – 16 бит;
Гарвардская архитектура – программа и данные хранятся в разных областях и к ним можно обращаться параллельно;
хорошие показатели быстродействия и энергопотребления. Имеется до 5 режимов пониженного энергопотребления.
13) Ядро семейства AVR
14) Построение памяти в AVR Память МК ATmega8 состоит из памяти программ (Flash), оперативной памяти данных (SRAM), энергонезависимой памяти данных (EEPROM).
FLASH - память. FLASH – память предназначена для хранения управляющей программы МК. Каждая ячейка памяти имеет 16 разрядов. Здесь можно хранить и данные (только считываемые): константы, таблицы символов другие неизменяемые величины, при этом данные записываются в виде восьмиразрядных двоичных чисел.
Память программ начинается с нулевого адреса, верхний адрес определяется объемом памяти и у ATmega8 имеет значение $1FFF16 .
Некоторые адреса программы памяти зарезервированы. Так, адрес $0000 содержит вектор сброса, и выполнение программы начинается с этого адреса. Если же в программе используются прерывания, то по адресу $0000 необходимо записать команду безусловного перехода, которая должна предать управление на любой адрес за пределами таблицы векторов прерываний. Таблица векторов прерываний – это область адресов, зарезервированная под векторы прерываний,
Таблица векторов прерываний начинается с адреса $0001. При программировании таблица векторов прерываний записывается таким образом (если используются все вектора):
Сseg
org 0
START r jmp st; вектор системного сброса
r jmp M1; внешнее пр. 0
r jmp M2; внешнее пр. 1
r jmp M3; с/т 1, захват
r jmp M5; с/т 0, переполнение
r jmp M7; RxRDI, прием завершен
r jmp M8; регистр данных пуст

r jmp M16; готовность EEPROM
r jmp M17; переполнение сторожевого таймера

Память программ допускает не менее 10000 циклов
записи/стирания. МК допускает режим низковольтного программирования памяти программ, которое осуществляется по последовательному SPI интерфейсу.
Оперативная память данных. Память данных МК представляет отдельно адресное пространство с адресами $0000 до $FFFF, то есть максимальный объем адресной памяти составляет 64 Кбайта. Однако большинство МК имеет горазлр меньшую память. В МК ATmega8, например, объем ОЗУ составляет 512 байт, в МК ATmega1281 – 8 Кбайт.
ОЗУ данных МК AVR делятся на 3 области.
$0000 - $001F – область памяти, совмещенная с регистрами общего назначения.
$0020 - $005F – область памяти, совмещенная с регистрами ввода- вывода.
$0060 – RAMEND – не совмещенная ни с чем область ввода-вывода.
Под RAMEND понимается область последней ячейки внутреннего ОЗУ конкретного МК.
В оперативную память данных МК ATmega8 емкостью 512 байт входит (рис. 14.3): 32 регистра общего назначения (РОНа), 64 регистра ввода-вывода. Остальная память данных составляет 128 байт.
Регистровый файл занимает младшие 32 байта в общем адресном пространстве SRAM AVR. К РОНам можно обращаться по адресу и по названию регистра. Некоторые регистры объединяются в пары: X (R26, R27); Y (R28, R29); Z(R30,R31) для организации косвенной регистровой адресации.
Область памяти с адреса $0020 по $005F совмещена с регистрами ввода- вывода. Регистры ввода- вывода являются специальными регистрами и используются для программирования системных и периферийных устройств МК
В других МК AVR может быть подключено внешнее ОЗУ. При этом объем ОЗУ может достигать значения $FFFF.
В качестве стека используется часть ОЗУ. Организация стека –«LIFO» («последний зашел – первый вышел»). Сразу после сброса содержимое указателя стека равно нулю.
Если используем стек, то обязательно надо осуществить инициализацию стека, то есть в указатель стека нужно записать адрес вершины стека. В качестве указателя стека обычно используются две последние ячейки ОЗУ (RAMEND). Для МК Atmega8 адреса этих ячеек: $03FE-$03FF.
Для работы со стеком в системе команд МК есть две специальные команды:
Команда записи в стек (push);
Команда чтения из стека (pop).
При переходе к подпрограмме или подпрограмме обработке прерывания адрес возврата записывается в стек автоматически, затем, в конце подпрограммы при выполнении команды возврата (return) МК извлекает из стека адрес возврата.



Рис. 14.3. Организация оперативной памяти
Пример.
;Инициализация стека
.def Temp =R16; присваиваем регистру R16 символическое имя
ldi Temp, LOW (RAMEND); записать в указатель стека
out SPL, Temp; младший байт адреса
ldi Temp, HIGH (RAMENO); затем - старший байт
out SPH, Temp
В современных устройствах на МК возникает необходимость хранения некоторых данных. Примером может служить, например, МПС управления автомагнитолой. Такая система должна хранить множество констант. Например, при выключении должны запоминаться режимы работы магнитолы (в виде констант), а при включении – восстанавливаться. Такая информация хранится в EEPROM.
EEPROM – специальная энергонезависимая внутренняя память, выполняемая по Flash - технологии, предназначенная для долговременного хранения данных.
Центральный процессор (ЦП) не может обращаться к EEPROM, как к обычной памяти, поскольку для него не существует адресного пространства EEPROM. ЦП обращается к нему через регистры ввода-вывода: регистр данных, регистр адреса и регистр управления.
EEAR- регистр адреса EEPROM.
EEDR – регистр данных EEPROM.
EECR – регистр управления EEPROM.
EEPROM обычно имеет до 100 000 циклов записи/чтения.
Внешнее ОЗУ. Большинство МК имеет лишь встроенное ОЗУ. Однако в состав серии входят микросхемы, допускающие подключение внешних ОЗУ. В результате объем ОЗУ МК может расширен до 64 Кбайт. Например, МК ATmega2560 допускает подключение внешнего ОЗУ до 64 Кбайт.
15) Параметры АЦП
Статические параметры АЦП.
Разрядность. Разрядность АЦП характеризует количество дискретных значений, которые преобразователь может выдать на выходе. В двоичных АЦП разрядность измеряется в битах.
разрешающая способность – это минимальное изменение выходного напряжения при изменении кода на 1 (т.е. разрешающая способность определяется разрядностью и максимальным диапазоном входного аналогового напряжения).
При числе разрядов 12 количество независимых квантов (ступенек) выходного напряжения (ЦАП) составляет 212. Выбранное с помощью опорного источника напряжение шкалы (например, 10 В), разделенное на это число квантов (10/212), дает разрешающую способность АЦП:
δшк =2,45 мВ.
Этот подсчет справедлив при отсутствии шумов. На практике разрешение АЦП ограничено отношением сигнал/шум входного сигнала. При большой интенсивности шумов на входе АЦП различение соседних уровней входного сигнала становится невозможным, то есть ухудшается разрешение. При этом реально достижимое разрешение описывается эффективной разрядностью (effective number of bits — ENOB), которая меньше, чем реальная разрядность АЦП. При преобразовании сильно зашумлённого сигнала младшие разряды выходного кода практически бесполезны, так как содержат шум. Для достижения заявленной разрядности отношение сигнал/шум входного сигнала должно быть примерно 6 дБ на каждый бит.
Для задания диапазона преобразования в схеме необходим источник опорного напряжения (Vион), который задает, какому уровню входного напряжения соответствует выходное значение. В соответствии с документацией напряжение Vион должно быть не менее 2,0 В для стандартных МК и не менее 1,0 В для МК с напряжением питания от 1,8 В.
Погрешности АЦП.
Погрешности можно разделить на статические и динамические. Имеется несколько источников погрешностей АЦП. Ошибки измеряются в единицах, называемых МЗР — младший значащий разряд (LSB – в зарубежной литературе). Для 8-битного двоичного АЦП ошибка в 1 МЗР составляет 1/256 от полного диапазона сигнала, то есть 0,4 %.
Статические погрешности. В большинстве применений АЦП используют для измерения медленно изменяющегося низкочастотного сигнала (например, от датчика температуры, давления, от тензодатчика и т.п.), когда входное напряжение пропорционально относительно постоянной физической величине. Здесь основную роль играет статическая погрешность измерения. В спецификации АЦП этот тип погрешности определяет погрешность квантования, погрешность смещения нуля (Offset), погрешность полной шкалы (Full - Scale), дифференциальная нелинейность (DNL), интегральная нелинейность (INL). Эти пять характеристик позволяют полностью описать статическую погрешность АЦП.
Погрешность квантования - одна из наиболее существенных составляющих ошибки при измерениях с применением АЦП. Она является результатом самого процесса преобразования. Погрешность квантования - это погрешность, вызванная значением шага квантования и определяемая как ½ величины младшего значащего разряда (МЗР, LSB). Она не может быть исключена в аналого-цифровых преобразованиях, так как является неотъемлемой частью процесса преобразования, определяется разрешающей способностью АЦП и не меняется от АЦП к АЦП с равным разрешением. Остальные типы статических погрешностей вызваны неидеальностью аппаратной реализации.
Погрешность смещения нуля и погрешность полной шкалы. Вследствие неидеальности передаточной характеристики АЦП возникают погрешность смещения нуля и погрешность полной шкалы. Эти типы погрешностей доходят до ½ LSB и могут быть коррелированны аппаратными и программными методами /1, 26 /.
Дифференциальная нелинейность. У идеальной передаточной характеристики АЦП ширина каждой "ступеньки" должна быть одинакова. Разница в длине горизонтальных отрезков этой кусочно-линейной функции из 2N "ступеней" представляет собой дифференциальную нелинейность.
Интегральная нелинейность. Интегральная нелинейность - это погрешность, которая вызывается отклонением линейной функции передаточной характеристики АЦП от прямой линии. Интегральную нелинейность определяют путем сравнения напряжений, при которых происходят кодовые переходы. Для идеального АЦП эти переходы будут происходить при значениях входного напряжения, кратных LSB. А для реального преобразователя такое условие может выполняться с погрешностью. Разность между "идеальными" уровнями напряжения, при которых происходит кодовый переход, и их реальными значениями выражается в единицах LSB и называется интегральной нелинейностью.
Ошибки связаны также с источником опорного напряжения. Например, если прецизионный источник опорного напряжения имеет отклонение 2.5 В ± 10мВ, то он дает погрешность 0,4 %.
Динамические параметры.
К динамическим параметрам относятся параметры, характеризующие временные, частотные и шумовые свойства АЦП.
Частота дискретизации. Аналоговый сигнал является непрерывной функцией времени, а в АЦП он преобразуется в последовательность цифровых значений. Следовательно, необходимо определить частоту выборки цифровых значений из аналогового сигнала. Частота, с которой производятся выборки, получила название частоты дискретизации АЦП. В соответствии с теоремой Котельникова - Шеннона точное обратное восстановление сигнала возможно только тогда, когда если частота дискретизации выше, чем удвоенная максимальная частота в спектре сигнала.
Время преобразования (tпр) - это время, отсчитываемое от начала импульса дискретизации или начала преобразования до появления на выходе устойчивого кода, соответствующего данной выборке. Для одних АЦП, например, последовательного счета или многотактного интегрирования, эта величина является переменной, зависящей от значения входного сигнала; для других, таких как параллельные АЦП или АЦП последовательного приближения, время преобразования остается примерно постоянным.
В течение времени преобразования входное аналоговое значение должно удерживаться постоянным (иначе будут ошибки непостоянства UВХ). Эта задача решается путём использования специальной схемы на входе АЦП — устройства выборки-хранения (УВХ). УВХ, как правило, хранит значение входного напряжения на конденсаторе, который соединён со входом через аналоговый ключ: при замыкании ключа происходит выборка входного сигнала (конденсатор заряжается до входного напряжения), при размыкании — хранение. Многие АЦП, выполненные в виде интегральных микросхем, содержат встроенное УВХ.
Время выборки (полное время преобразования) - время, в течение которого происходит образование одного выборочного значения. При работе с УВХ время выборки равно времени преобразования АЦП, плюс время установления напряжения на УВХ, плюс задержки, связанные с выполнением команд ввода-вывода.
16) Функциональная схема встроенных АЦП
Методы построения АЦП более разнообразны. Для медленно меняющихся сигналов и сигналов средней частоты (до 3-5 МГц) могут быть использованы АЦП с двухтактным интегрированием, сигма – дельта АЦП и последовательного приближения. Наиболее точными АЦП являются АЦП, использующие метод двухтактного интегрирования и сигма – дельта АЦП.
Точные АЦП. Метод двухтактного интегрирования является наиболее точным. На входе АЦП имеется интегратор и преобразование осуществляется в два такта: в первом такте (время такта жестко определено) входное напряжение интегрируется, при этом конденсатор заряжается до величины U, пропорциональной преобразуемому напряжению; во втором такте конденсатор разряжается, при этом время такта (это время обсчитывается счетчиком и является выходным сигналом) зависит от величины U. Погрешности первого такта компенсируются погрешностями второго. Типичная разрядность АЦП этого типа составляет от 10 до 18 двоичных разрядов, поэтому точность преобразования высока. Однако быстродействие низкое, время преобразования 50 мкс.
Сигма-дельта АЦП. Если требуется разрешение лучше 16 двоичных разрядов, то на первый план встает соотношение сигнал/шум. Шумы обусловлены квантованием сигнала, шумами источника опорного напряжения, шумами источника входного сигнала.
В сигма - дельта АЦП подавление шумов осуществляется за счет преобразования напряжения в частоту с последующей фильтрацией сигнала с помощью ФНЧ. При этом отсекаются шумы, как высокочастотные составляющие. Время преобразования 30 мкс.
При методе последовательного приближения на каждом шаге (2 периода генератора) определяется один разряд двоичного числа; сколько разрядов у АЦП, столько и шагов.
Рис.
16.2. Функциональная схема АЦП
последовательного приближения
После запуска УУ устанавливает в старшем разряде «1» Это половина всего диапазона преобразуемых сигналов. Если входное напряжение больше, то на выходе компаратора устанавливается «1» и в выходной регистр эта единица записывается. Если на выходе компаратора «0», то «1» не проходит. Все разряды, таким образом, устанавливаются за 2n+1 тактов генератора. Метод имеет среднее быстродействие при сравнительно небольших аппаратных затратах.
Время преобразования равно:
tпр=
, гдеfтг- частота
тактового генератора. Еслиfтг= 1МГц,n=8
tпр
=
.
fдискр![]()
Скоростные и сверхскоростные АЦП. Параллельные АЦП. Параллельные АЦП содержат по одному компаратору на каждый дискретный уровень входного сигнала. В любой момент времени только компараторы, соответствующие уровням, ниже уровня входного сигнала, выдадут на своём выходе сигнал превышения.
Сигналы со всех компараторов поступают на шифратор, который выдаёт цифровой код, зависящий от того, сколько и какие компараторы показали превышение. Параллельные АЦП очень быстры (время преобразования порядка наносекунд), но обычно имеют разрешение не более 8 бит (256 компараторов) и характеризуются сложными и дорогими схемотехническими решениями. АЦП этого типа имеют очень большой размер кристалла микросхемы, высокую входнуюёмкость и могут выдавать кратковременные ошибки на выходе.
Конвейерные АЦП используют два или более шага - поддиапазона. На первом шаге производится грубое преобразование (с низким разрешением). Далее определяется разница между входным сигналом и аналоговым сигналом, соответствующим результату «грубого» преобразования (со вспомогательного ЦАП, на который подаётся «грубый» код). На втором шаге найденная разница подвергается преобразованию, и полученный код объединяется с «грубым» кодом для получения полного выходного цифрового значения. АЦП этого типа быстры, имеют высокое разрешение и небольшой размер корпуса.
В МК имеется встроенный 6-канальный 10-битный АЦП. Для управления АЦП используются 2 регистра: регистр мультиплексирования ADMUX и регистр управления ADCSRA.
ADC Multiplexer Selection Register – ADMUX
Bit 7 6 5 4 3 2 1 0
|
REFS1 |
REFS0 |
ADLAR |
- |
MUX3 |
MUX2 |
MUX1 |
MUX0 |
Рис. 16.3. Регистр ADMUX
Биты 7:6 – REFS1:0 Reference Selection Bits. Эти биты отвечают за опорное напряжение для ADC. Если эти биты изменяются во время перехода, то они не будут в силе до завершения процесса перехода. Внутреннее опорноенапряжение может не использоваться, если внешнее опорное напряжение соединено с AREF.
Бит 5 – ADLAR: ADC Left Adjust Result. Бит ALDAR влияет на представление данных в ADC Data Register после конверсии. Если значение ALDAR будет 1, то результат сместится влево. В противном случае – вправо. Смена значения ALDAR отразится на ADC Data Register незамедлительно, несмотря на любые происходящие в текущий момент времени операции.
Биты 3:0 – MUX3:0 Analog Channel Selection Bits. Значения этих битов определяют, какой аналоговый вход будет подключен к ADC. Если биты будут изменены в процессе работы, то изменения не вступят в силу, пока не завершатся текущие операции (ADIF и ADCSRA установлены).
Таблица 16.1. Параметры АЦП МК ATmega8
|
Обозна-чение |
Параметр |
Min – max |
Приме-чание |
|
|
Разрешение, бит |
10 |
|
|
|
Тактовая частота, кГц |
50-200 |
|
|
|
Максим. частота дискретизации, кГц |
15 |
|
|
|
Время преобразования, мкс |
65 -260 |
|
|
INL |
Интегральная нелинейность, МЗР |
0,5 |
|
|
DNL |
Дифференц. нелинейность, МЗР |
0,5 |
|
|
|
Погрешность смещения нуля, МЗР |
-2
|
|
|
|
Полная погрешность, МЗР |
2 |
fАЦП=200 кГц |
|
UREF |
Опорное напряжение, В |
2-AVCC |
|
|
UINT |
Внутреннее опорное напряжение, В |
2,45 – 2,8 |
|
|
RREF |
Cопротивление на AREF, кОм |
32 |
|
|
RAN |
Cопротивление на аналоговом вхоле, мОм |
100 |
|
Таблица 16.2. Выбор опорного напряжения АЦП
|
REFS1 |
REFS0 |
Voltage Reference Selection |
|
0 |
0 |
AREF, внутреннее Vref отключено |
|
0 |
1 |
AVCC с внутренним конденсатором на AREF |
|
1 |
0 |
Резервировано |
|
1 |
1 |
Внутреннее опорное напряжение 2.56В с внешним конденсатором на AREF |
Таблица 16.3. Выбор аналогового входа АЦП
|
MUX3.0 |
Аналоговый вход |
|
0000 |
ADC0 |
|
0001 |
ADC1 |
|
0010 |
ADC2 |
|
0011 |
ADC3 |
|
0100 |
ADC4 |
|
0101 |
ADC5 |
|
0110 |
ADC6 |
|
0111 |
ADC7 |
|
1000 |
|
|
1001 |
|
|
1010 |
|
|
1011 |
|
|
1100 |
|
|
1101 |
|
|
1110 |
1.30V(VBG) |
|
1111 |
0V (GND) |
Бит 7 – ADEN: ADC Enable. Запись в этот бит единицы включит ADC. Если в бите ADEN ноль, то ADC будет отключен. Если во время каких-то операций поменять значение бита, то операция будет немедленно прекращена.
ASC Control and Status Register A – ADCSRA
Bit 7 6 5 4 3 2 1 0
|
ADEN |
ADSC |
ADFR |
ADIF |
ADIE |
ADPS2 |
ADPS1 |
ADPS0 |
ADCSRA
Рис. 16.4. Управляющий регистр ADCSRA
Бит 6 – ADSC: ADC Start Conversion. В режиме одиночного преобразования запись в этот бит единицы будет начинать каждое отдельное преобразование, то есть запись каждого отдельного преобразования инициируется пользователем.
В свободном режиме (непрерывных преобразований) запись единицы начинает лишь первое преобразование. Преобразования выполняются непрерывно через определенные промежутки времени.
Бит 5 – ADFR: ADC Free Running Select. Когда в бит записана единица, ADC оперирует в свободном режиме. В этом режиме ADC просматривает и обновляет регистры данных постоянно. Установка значения бита в ноль немедленно отменит свободный режим.
Бит 4 – ADIF: ADC Interrupt Flag. Этот бит устанавливается тогда, когда завершает работу ADC и регистры данных обновлены. ADC Conversion Complete Interrupt (прерывание по завершению преобразования АЦП) выполняется в том случае, если бит ADIE и I-бит в SREG установлены. ADIF сбрасывается аппаратно при запуске п/п обработки прерывания. Иначе ADIF можно сбросить, установив логическую единицу во флаг.
Бит 3 – ADIE: ADC Interrupt Enable. Когда этот бит равен единице и I-бит в SREG установлен в «1», то активируется ADC conversion Complete Interrupt (прерывание по завершению преобразования).
Биты 2:0 – ADPS2:0: ADC Prescaler Select Bits. Для формирования тактовой частоты в нем имеется отдельный предделитель. Эти биты определяют коэффициент деления между частотой XTAL и входной тактовой частотой ADC.
Таблица 16.4. Установка частоты работы АЦП (выбор предделителя)
|
ADPS2 |
ADPS1 |
ADPS0 |
Коэффициент деления |
|
0 |
0 |
0 |
2 |
|
0 |
0 |
1 |
2 |
|
0 |
1 |
0 |
4 |
|
0 |
1 |
1 |
8 |
|
1 |
0 |
0 |
16 |
|
1 |
0 |
1 |
32 |
|
1 |
1 |
0 |
64 |
|
1 |
1 |
1 |
128 |
ADC Data Register – ADCL и ADCH (регистры данных). После завершения преобразования его результат сохраняется в регистрах данных.
В данные регистры помещается результат преобразования.
Bit 15 14 13 12 11 10 9 8
ADCH
ADCL
|
- |
- |
- |
- |
- |
- |
ADC9 |
ADC8 |
|
ADC7 |
ADC6 |
ADC5 |
ADC4 |
ADC3 |
ADC2 |
ADC1 |
ADC0 |
Рис. 16.5. Формат регистров данных при ADLAR = 0
Биты ADLAR и MUXn в ADMUX влияют на то, как выходной результат представлен в регистрах ADCL и ADCH. Если ADLAR установлен, то результат смещается влево. Если ADLAR очищен (по умолчанию), то результат смещается вправо.
Пример программы работы с АЦП
; настройка АЦП на замер с фотодиода
.DEF Data = R17
.DEF Temp1 = R18
LDI DATA,0x90 ; счетчик
LDI Temp1,0b10000111; R18= Temp1, ADEN=1,ADSC=0,ADFR=0 ;(одиночный), ADIF=X, ADIE=0, ADSP2...ADSP0=1; (выбор делителя частоты преобразования 128)
OUT ADCSRA,Temp1
LDI Temp1,0b00000100 ; REF1..REF0 = 01 (выбор опорного напряжения ; 00-Aref-внутр), ADLAR=1, 4разряд- Х, ADC4
OUT ADMUX,Temp1
Zamer_osv:
SBI ADCSRA,ADSC ; запуск АЦП(уст-ь бит)
Wait_ADC:
SBIC ADCSRA,ADSC ;= 0? ожидаем конец преобр. (пропустить ;команду, если бит очищен
RJMP Wait_ADC
IN Temper_l,ADCL ; чтение содержимого регистров
;АЦП по правилу ADCL->>ADCH
IN Temper_h,ADCH
SBI ADCSRA,ADIF ; сброс флага
17) Програмирование МК на Си. Структура программ
Программа на Си имеет определенную структуру (таблица 17.1), которая предполагает:
включение необходимых внешних файлов (библиотечных файлов);
определения пользователя для удобства работы - #define;
объявление глобальных переменных и констант;
описание функций - обработчиков прерываний;
описание других функций используемых в программе;
функция main - это обязательная функция.
Программа обычно начинается с директив препроцессора. Препроцессор это программа предварительной обработки текста непосредственно перед трансляцией. Препроцессор входит в состав компилятора языка Си и позволяет осуществлять макроподстановки, условную компиляцию и включение именованных файлов.
Строки, начинающиеся с #, являются командами этого препроцессорa или директивами. Фактически препроцессор расширяет возможности языка Си, реализуя такие функции, которые в других языках входят в состав самого языка. Отметим некоторые наиболее применяемые директивы, дополненные комментариями.
Наиболее часто применяемая директива #include, которая включает в файл с исходным кодом программы текст внешнего заголовочного файла (с расширением .h).
Примеры.
#include <delay.h> /* перед компиляцией, препроцессор компилятора вставит вместо этой строчки текст delay.h - этот файл содержит функции для создания пауз в программе */
#include <mega16.h> /* перед компиляцией, препроцессор компилятора вставит вместо этой строчки содержимое (текст) заголовочного файла mega16.h - этот файл содержит перечень регистров имеющихся в МК ATmega16 и соответствие их названий их физическим адресам в МК*/.
-
#include <mega16.h>//Включение библиотечных файлов
#include <delay.h>
// объявление глобальных переменных
…
//Функции
Function INT// Функции - обработчики прерывания
{
//Объявление локальных типов переменных
…
//Операторы
…
}
Function 1
{
//Объявление локальных типов переменных
…
//Операторы
…
}
…
// Главная функция программы
Int main (void)
{
//Объявление локальных типов переменных
…
// Операторы
…
}
#include <stdio.h>(stdio - от слов standard input/output). Имя h-файла записывается в угловых скобках, если этот h-файл является частью стандартной Си-библиотеки и расположен в одном из системных каталогов.
Имена h-файлов, созданных самим программистом в рамках разрабатываемого проекта и расположенных в текущем каталоге, указываются в двойных кавычках, например,
#include "abcd.h"
Директива #define указывает препроцессору на необходимость выполнить подстановку в тексте программы определенной последовательности символов.
Пример.
#define PI 3.14159265 /*задает символическое имя PI для константы 3.14159265. После этого имя PI можно использовать вместо числового значения. Препроцессор находит все вхождения слова PI в текст и заменяет их на константу.
Директива #org позволяет компилятору определить, где должна быть расположена в памяти следующая ниже функция.
Пример.
Org 0х1Е00
f1 ( )
{
// Эта функция будет размещена, начиная с адреса 0х1Е00
}
18) Программирование МК на Си. Операторы
Оператор - это наименьшая исполняемая единица программы. Каждый оператор вызывает выполнение некоторых действий на соответствующем шаге выполнения программы.
Операторы, соединяющие операнды, представляют собой выражения. Любое выражение языка состоит из операндов (переменных, констант и др.), соединенных знаками операций. Знак операции - это символ или группа символов, которые сообщают компилятору о необходимости выполнения определенных арифметических, логических или других действий.
Операции выполняются в строгой последовательности. Величина, определяющая преимущественное право на выполнение той или иной операции, называется приоритетом. В табл. 2 перечислены различные операции языка Си. Их приоритеты для каждой группы одинаковы (группы выделены цветом). Чем большим преимуществом пользуется соответствующая группа операций, тем выше она расположена в таблице. Порядок выполнения операций может регулироваться с помощью круглых скобок.
Различают операторы выражения, действие которых состоит в вычислении заданных выражений (например: a = sin(b)+c; ), операторы объявления, составные операторы, пустые операторы, операторы условных переходов, цикла и т.д. Для обозначения конца оператора в языке Си используется точка с запятой.
Различают унарные и бинарные операции. У первых из них один операнд, а у вторых – два.
Операторы присваивания. Оператор присваивания является основой любого алгоритмического языка. Формально оператор присваивания имеет вид математического равенства a = b, где "a" - имя переменной, а "b" - арифметическое выражение.
Фактически оператор присваивания засылает численное значение результата, полученное при вычислении арифметического выражения, в ячейку памяти, выделенную для хранения переменной, имя которой записано слева от знака равенства. По этой причине действительными являются операторы вида k = k + 2.
Таблица 18.2. Основные операторы языка Си
|
+ |
Сложение |
|
- |
Вычитание |
|
<< |
Сдвиг влево |
|
>> |
Сдвиг вправо |
|
< |
Меньше, чем |
|
<= |
Меньше или равно |
|
> |
Больше, чем |
|
>= |
Больше или равно |
|
= = |
Равно |
|
!= |
Не равно |
|
& |
Поразрядное логическое "И" |
|
^ |
Поразрядное исключающее "ИЛИ" |
|
| |
Поразрядное логическое "ИЛИ" |
|
&& |
Логическое "И" |
|
|| |
Логическое "ИЛИ" |
|
?: |
Условная (тернарная) операция |
|
= |
Присваивание |
|
, |
Операция запятая |
Действительно, на арифметическое выражение не налагается ограничение, чтобы оно не содержало переменной, записанной слева от знака равенства. Суть заключается в том, что сначала вычисляется выражение, а затем выполняется засылка результата в ячейку памяти, обозначенную именем переменной.
Допустим, что k в предыдущем примере имеет значение 5, тогда сначала вычисляется 5 + 2 = 7, а затем этот результат засылается в ячейку, обозначенную именем k, то есть k получит значение 7.
В Си он записывается с помощью символа равенства, например, строка
x = 100; x = y = z = 100
означает присвоение переменной x значения 100.
Для сравнения двух значений используется двойное равенство = =, например, строка
bool f = (2 + 2 = = 5)
присваивает логической переменной f значение false (поскольку 2+2 не равно пяти, логическое выражение в скобках ложно).
19) Последовательные интерфейсы. USART
Универсальный синхронно-асинхронный приемо-передатчик (USART) является гибким устройством последовательной передачи информации.
Он имеет следующие особенности:
полно - дуплексная организация;
синхронный и асинхронный режимы работы;
синхронизация как от ведущего, так и от ведомого устройства;
выбор скорости передачи информации в широких пределах;
поддержка кадров длиной 5-9 бит и 1 или 2 стоп-битов;
аппаратная поддержка генерации и проверки сигнала четности;
обнаружение переполнения данных;
обнаружение ошибок формата;
низкоуровневая цифровая фильтрация и обнаружение ложного стопового бита;
три источника прерывания: передача завершена, регистр данных передатчика пуст, прием завершен;
режим межпроцессорной связи;
двухскоростной режим асинхронной передачи.
Кадр асинхронной посылки представлен на рис 20.1. Кадр содержит: 1 стартовый бит, 5-9 бит данных, бит четности (может отсутствовать), 1-2 стоповых бита.

Рис. 20.1. Кадр асинхронной посылки
Параметры кадра, скорости передачи, параметры аппаратной реализации определяются с помощью управляющих слов, причем для приемника и передатчика должны быть одни и те же установки.

20.2. Кадр синхронной посылки
При синхронной передаче данных передача каждого бита (байта) данных синхронизируется тактовыми сигналами XCK (рисунок 2.2)
На рисунке 20.3. представлена упрощенная функциональная схема USART. Приемо-передатчик имеет три основные части: блок тактирования, передатчик, приемник. Регистры управления являются общими для всех 3-х модулей.
