Электромеханические системы автоматизации
Характеристика, устройство, конфигурация и назначение микроконтроллеров I8051, PIC16F877, организация их памяти. Основные методы и приемы системного программирования микроконтроллеров и интерфейса на языках семейства ассемблер MCS-51 и PICmicro.
Рубрика | Коммуникации, связь, цифровые приборы и радиоэлектроника |
Вид | методичка |
Язык | русский |
Дата добавления | 18.04.2010 |
Размер файла | 3,0 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Вариант |
Задание |
|
1 |
Выполнить бегущий огонь на светодиодах используя для задержки таймер и систему прерываний. Частота сдвига составляет 1 Гц. Кнопкой S3 изменять направление, а S2 - останавливать/запускать бегущий огонь. |
|
2 |
По нажатию кнопки S3 выдать звуковой сигнал с помощью пьезоизлучателя P1 частотой 1000Гц. При повторном нажатии на S3 выключить сигнал. Нажатием кнопки S2 выполнить смену частоты сигнала до 500Гц. Повторное нажатие на S2 выполняет возврат частоты до 1000Гц. |
|
3 |
Выполнить формирование звукового сигнала пьезоизлучателем P1 частотой 1500Гц. При нажатии на S3 увеличивать частоту сигналов с дискретностью 250Гц. При нажатии на S2 - уменьшать с дискретностью 250Гц. |
|
4 |
Выдать звуковой сигнал через пьезоизлучатель P1 с частотой 1000Гц длительностью 0,5с, затем сигнал частотой 500Гц длительностью 0,5с. При нажатии на S3 уменьшать длительность на 0,1с. При нажатии на S2 - увеличивать на 0,1с. |
|
5 |
Выполнить бегущий огонь на светодиодах при помощи нажатия на кнопки. S3 сдвигает огонь влево, S2 - вправо. При нажатии на кнопки S3, S2 выполнить их «озвучку» на пьезоизлучателе частотой 1000Гц длительностью 0,2с для S3 и 500Гц длительностью 0,2с для S2. |
|
6 |
Выполнить плавное зажигание светодиодов по «треугольному» закону, используя один из таймеров для задания частоты, а другой - длительности (ШИМ). Период импульсов - 2с. |
|
7 |
Выполнить плавное зажигание светодиодов по «пилообразному» закону, используя один из таймеров для задания частоты, а другой - длительности (ШИМ). Период импульсов - 2с. |
|
8 |
Выполнить бегущий огонь на светодиодах при помощи нажатия на кнопки. S3 сдвигает огонь влево, S2 - вправо. При зажигании четных светодиодов выдавать короткий звуковой сигнал на пьезоизлучателе P1 частотой 1500Гц, нечетных - 750Гц. |
|
9 |
Выполнить проигрывание музыкального отрывка с произвольными тонами. Для задания частоты использовать один таймер, длительности - другой. Для увеличения длительности тона разрешается использовать дополнительное деление в регистрах. Число тонов - не менее 5. |
|
10 |
По нажатию на кнопку S3 выполнить бегущий огонь. При смене светящегося светодиода выполнить звуковой сигнал частотой 1000Гц, длительностью 0,2с. При достижении последнего светодиода выдать звуковой сигнал частотой 750Гц, длительностью 0,5с и изменить направление бегущего огня. При повторном нажатии на S3 потушить светодиоды и выдать двухкратный сигнал частотой 1500Гц и длительностью 0,2с. Пауза между сигналами - 0,2с. |
|
11 |
Выдать звуковой сигнал частотой 1000Гц длительностью 0,5с, после этого сдвинуть светящийся светодиод. При нажатии на S3 выполнить паузу 5с. Нажатием кнопки S2 можно прервать паузу. Если не нажата ни одна из кнопок - повторить процесс. |
|
12 |
Выполнить бегущий огонь на светодиодах с интервалом сдвига 5с. Допускается дополнительное деление интервала времени в регистре. При нажатии на S3 должен гореть постоянно старший светодиод, а остальные продолжают бегущий огонь с интервалом в 2с. При повторном нажатии потушить старший светодиод и возвратиться к начальным условиям. |
|
13 |
Выдавать звуковой сигнал частотой 1000Гц через пьезоизлучатель P1. При нажатии на S2 изменить частоту до 2000Гц. При нажатии на S3 - до 500Гц. При нажатии на обе кнопки - возвратиться к частоте 1000Гц. Светодиоды HL0, HL1, HL2 должны указывать текущую частоту звукового сигнала 500/1000/2000 соответственно. |
|
14 |
По нажатию S3 выполнить бегущую тень на светодиодах. При зажигании светодиода подать звуковой сигнал частотой 500Гц и длительностью 0,25с. Повторное нажатие S3 останавливает движение. Нажатие S2 увеличивает частоту сигнала до 1000Гц. |
|
15 |
По нажатию S3 выдать звуковые сигналы 500Гц, 750Гц и 1000Гц длительностью 0,2с. с паузами 0,5с. При нажатии на S2 увеличить длительности сигналов до 1с. Повторное нажатие S3 выключает подачу сигналов. |
7.4 Практическое задание №3
Тема: Методы управления шаговыми двигателями.
Цель: Получить навыки в управлении шаговыми двигателями и освоить методы табличного описания функции.
Принципиальная схема подключения шагового двигателя к стенду PICDEM 2 Plus:
Рисунок 53 - Схема подключения модуля с шаговым двигателем
При управлении шаговым двигателем (ШД), на него необходимо подавать последовательность управляющих импульсов, которые в зависимости от типа двигателя, его схемы включения и режима работы изменяются. Для движения двигателя в одну сторону последовательность прямая. Для движения в обратную сторону - обратная последовательность. Различают несколько режимов работы:
- Полношаговый режим;
- Полушаговый режим;
- Микрошаговый режим.
Рисунок 54 - Принципиальная электрическая схема коммутации обмоток ШД
Для осуществления микрошагового режима, кроме управляющей последовательность коммутации обмоток, выполняют еще и ШИМ тока, проходящего через обмотку.
Последовательности импульсов для вращения шагового двигателя с двумя обмотками (Рис. 54), имеющими общие точки, в некоторых режимах приведены ниже:
Последовательность коммутации обмоток в полношаговом режиме при однофазной коммутации тока:
№ Шага |
PORTD |
|
1 |
ХХХХ0001 |
|
2 |
ХХХХ0010 |
|
3 |
ХХХХ0100 |
|
4 |
ХХХХ1000 |
|
1 |
ХХХХ0001 |
|
Выкл. |
ХХХХ0000 |
Последовательность коммутации обмоток в полношаговом режиме при двухфазной коммутации тока:
№ Шага |
PORTD |
|
1 |
ХХХХ0011 |
|
2 |
ХХХХ0110 |
|
3 |
ХХХХ1100 |
|
4 |
ХХХХ1001 |
|
1 |
ХХХХ0011 |
|
Выкл. |
ХХХХ0000 |
Последовательность коммутации обмоток в полушаговом режиме при двухфазной коммутации тока:
№ Шага |
PORTD |
|
1 |
ХХХХ0001 |
|
2 |
ХХХХ0011 |
|
3 |
ХХХХ0010 |
|
4 |
ХХХХ0110 |
|
5 |
ХХХХ0100 |
|
6 |
ХХХХ1100 |
|
7 |
ХХХХ1000 |
|
8 |
ХХХХ1001 |
|
1 |
ХХХХ0001 |
|
Выкл. |
ХХХХ0000 |
При подаче управляющей последовательности на ШД необходимо не забывать, что двигатель имеет большую электрическую и механическую инерционность по сравнению со скоростью работы микроконтроллера. Это означает, что при смене кода шага необходимо выполнить задержку времени не менее 0,005 сек.
Таблица 13 - Варианты заданий к самостоятельной работе
Вариант |
Задание |
|
1 |
Выполнить вращение ШД в полношаговом режиме при однофазной коммутации тока в обмотках. При нажатии на кнопку S3 увеличивать скорость вращения, при нажатии S2 - уменьшать. Максимальное значение скорости вращения указывать светодиодом D4, минимальное - D2, среднее - D3. |
|
2 |
Выполнить вращение ШД в полношаговом режиме при двухфазной коммутации тока в обмотках. Кнопка S3 выполняет старт/стоп функцию. Кнопка S2 - реверс. Светодиоды информируют о режимах: D2 - вращение в прямом направлении, D3 - стоп, D4 - вращение в обратном направлении. |
|
3 |
Выполнить вращение ШД в полушаговом режиме при двухфазной коммутации тока в обмотках. По истечении 1 сек. двигатель изменяет направление вращения после остановки в 0,5 сек. Кнопка S3 выполняет функцию старт/стоп. Кнопка S2 изменяет время работы двигателя 1/0,5 с. Время остановки остается неизменным. |
|
4 |
Выполнить вращение ШД в полношаговом режиме при однофазной коммутации тока в обмотках. Во время работы производится подсчет числа шагов (максимум 2047). При нажатии на S3 выполняется возврат ротора на количество шагов, подсчитанных до нажатия данной кнопки. S2 выполняет запуск двигателя из начального положения. Светодиоды: D4 - достигнут максимальный шаг; D3 - двигатель находится в начальном положении. |
|
5 |
Выполнить вращение ШД в полушаговом режиме при двухфазной коммутации тока в обмотках. Кнопка S3 - шаг в прямом направлении; S2 - шаг в обратном направлении. Номер шага двигателя выводить на светодиоды D3-D5 в двоичном коде. |
|
6 |
Выполнить вращение ШД в полушаговом режиме при двухфазной коммутации тока в обмотках. При нажатии на кнопку S3 двигатель плавно запускается в течение 3 сек. При нажатии на S2 выполняет реверс с плавным торможением и разгоном. Повторное нажатие S3 выполняет плавную остановку. |
|
7 |
Выполнить вращение ШД в полношаговом режиме при однофазной коммутации тока в обмотках. По нажатию кнопки S3 выполнить технологический цикл: разгон в течение 2 сек., работа 5 сек., реверс 4 сек., работа в обратном направлении 5 сек., останов 2 сек. Кнопка S2 - аварийный останов. Светодиоды индицируют состояния: D5 - ускорение; D4 - работа; D3 - замедление. |
|
8 |
Выполнить вращение ШД в полношаговом режиме при двухфазной коммутации тока в обмотках. Функция изменения скорости - синусоидальная. Кнопка S2 - старт/стоп. |
|
9 |
Выполнить вращение ШД в полношаговом режиме при однофазной коммутации тока в обмотках. Двигатель выполняет вращение. При нажатии на кнопку S3 он делает 40 шагов в обратном направлении со скоростью в 4 раза меньше основного вращения, а затем продолжает вращение в основном направлении. При нажатии на S2 - выполняет 20 шагов со скоростью в 4 раза меньшей в основном направлении, а затем вращается в обратном направлении. |
|
10 |
Выполнить вращение ШД в полношаговом режиме при двухфазной коммутации тока в обмотках. При нажатии на кнопку S2 двигатель выполняет шаг в прямом направлении. При достижении 10 шага двигатель начинает вращаться в течение 1 сек. Затем делает останов и медленно выполняет 10 шагов в обратном направлении. Светодиоды D2-D5 указывают на текущий шаг двигателя (D2 - первый… D5 - четвертый). |
|
11 |
Выполнить вращение ШД в полушаговом режиме при двухфазной коммутации тока в обмотках. Двигатель выполняет 20 шагов в прямом направлении, затем 20 шагов в обратном. Нажатие кнопки S3 добавляет 2 шага, S2 - уменьшает на 2 шага. Светодиод D4 - движение в прямом направлении; D5 - в обратном. |
|
12 |
Выполнить вращение ШД в полношаговом режиме при однофазной коммутации тока в обмотках. По нажатию на кнопку S3 двигатель медленно выполняет 5 шагов с интервалом 0,25 сек., затем вращается в течение 5 сек., выполняет 5 шагов с интервалом 0,25 сек. в обратном направлении и останавливается. Нажатие кнопки S2 добавляет число медленных шагов на 2. |
|
13 |
Выполнить вращение ШД в полношаговом режиме при двухфазной коммутации тока в обмотках. Двигатель постоянно находится в режиме реверса. Интервал между шагами - 0,2 сек. Удержание кнопки S3 выполняет вращение двигателя в прямом направлении с высокой скоростью, а удержание S2 - в обратном. Светодиоды индицируют состояния: D3 - медленный шаг в прямом направлении; D4 - большая скорость вращения независимо от направления; D5 - медленный шаг в обратном направлении. |
|
14 |
Выполнить вращение ШД в полушаговом режиме при двухфазной коммутации тока в обмотках. Нажатие кнопки S3 выполняет 1 шаг двигателя в прямом направлении. При достижении 10 шага, двигатель начинает быстро вращаться в течение 2 сек., затем останавливается. Нажатие S2 выполняет те же действия, только в обратном направлении. Светодиод D3 указывает нажатие S3; D4 - S2. |
|
15 |
Выполнить вращение ШД в полношаговом режиме при однофазной коммутации тока в обмотках. Двигатель выполняет вращение в течение 1 сек., и паузу в 1 сек. циклически. Нажатие S3 уменьшает паузу на 0,2 сек.; S2 - увеличивает на 0,2 сек. Светодиод D3 указывает, что двигатель работает без пауз; D4 - пауза меньше 2 сек.; D5 - пауза больше 2 сек. |
Литература
1 Микропроцессорные системы: Учебное пособие для ВУЗов / Е. К. Александров, Р. И. Грушвицкий, М. С. Куприянов, О. Е. Мартынов, Д. И. Панфилов, Т. В. Ремизевич, Ю. С. Татаринов, Е. П. Угрюмов, И. И. Шагурин; Под общ. ред. Д. В. Пузанкова. - СПб.: Политехника, 2002. - 935 с.
2 Локазюк В. М. Мікропроцесори та мікроЕОМ у виробничих системах: Посібник. - К.: Академія, 2002. - 368 с.
3 Каспер Э. Программирование на языке Ассемблера для микроконтроллеров семейства i8051. - М.: Горячая линия - Телеком, 2004. - 191 с. - ISBN 5-93517-104-X.
4 Предко, М. Справочник по PIC-микроконтроллерам / М. Предко, пер с англ. - М.: ДМК Пресс, 2002, ООО Издательский дом «Додэка-XXI», 2002. - 512 с.
Приложение А
Система команд микроконтроллера I8051
Микро-ЭВМ рассматриваемого семейства являются типичными микропроцессорными устройствами с архитектурой SISC - со стандартным набором команд. Поэтому их система команд довольно обширна и включает в себя 111 основных команд. Их длина - один, два или три байта, причем большинство из них (94%) - одно- или двухбайтные. Все команды выполняются за один или два машинных цикла, исключение - команды умножения и деления, которые выполняются за четыре машинных. Микро-ЭВМ семейства 8051 используют прямую, непосредственную, косвенную и неявную, адресацию данных
В качестве операндов команд микро-ЭВМ семейства 8051 могут использовать отдельные биты, четырехбитные цифры, байты и двухбайтные слова.
Все эти черты обычны для набора команд любого CISC-процессора и по сравнению с RISC набором команд обеспечивает большую компактность программного кода и увеличение быстродействия при выполнении сложных операций.
Типы команд
Всего микро-ЭВМ выполняют 13 типов команд, они приведены в таблице. Как следует из нее, первый байт команды всегда содержит код операции (КОП), а второй и третий (если они присутствуют в команде) - адреса операндов или их непосредственные значения.
Таблица А.1 - Типы команд I8051
Тип команды |
Первый байт D7...D0 |
Второй байт D7...D0 |
Третий байт D7...D0 |
|
тип 1 |
коп |
|||
тип 2 |
коп |
#d |
||
тип 3 |
коп |
ad |
||
тип 4 |
коп |
bit |
||
тип 5 |
коп |
rel |
||
тип 6 |
коп |
а7...a0 |
||
тип 7 |
коп |
ad |
#d |
|
тип 8 |
коп |
ad |
rel |
|
тип 9 |
коп |
ads |
add |
|
тип 10 |
коп |
#d |
rel |
|
тип 11 |
коп |
bit |
rel |
|
тип 12 |
коп |
ad16h |
ad16l |
|
тип 13 |
коп |
#d16h |
#d16l |
Группы команд
Все команды микро-ЭВМ семейства 8051 можно разбить на пять функциональных групп:
- Пересылки данных;
- Арифметических операций;
- Логических операций;
- Операций над битами;
- Передачи управления.
Обозначения, используемые при описании команд
Rn (n = 0, 1,..., 7) - регистр общего назначения в выбранном банке регистров;
@Ri(i = 0, 1) - регистр общего назначения в выбранном банке регистров, используемый в качестве регистра косвенного адреса;
ad - адрес прямоадресуемого байта;
ads - адрес прямо адресуемого байта-источника;
add - адрес прямо адресуемого байта-получателя;
ad11 - 11-разрядный абсолютный адрес перехода;
ad16 - 16-разрядный абсолютный адрес перехода;
rel - относительный адрес перехода;
#d - непосредственный операнд;
#d16 - непосредственный операнд (2 байта);
bit - адрес прямо адресуемого бита;
/bit - инверсия прямо адресуемого бита;
А - аккумулятор;
РС - счетчик команд;
DPTR - регистр указатель данных;
( ) - содержимое ячейки памяти или регистра,
Команды пересылки данных микроконтроллера 8051
В таблицах указаны тип команды (Т) в соответствии с таблицей А.1, ее длина в байтах (В) и время выполнения в машинных циклах (С)
Таблица А.2 - Команды пересылки данных
Мнемокод |
КОП |
Т В С |
Описание |
|
MOV A, Rn |
11101rrr |
1 1 1 |
(A) <- (Rn) |
|
MOV A, ad |
11100101 |
3 2 1 |
(A) <-(ad) |
|
MOV A, @Ri |
1110011i |
1 1 1 |
(A) <- ((Ri)) |
|
MOV A, #d |
01110100 |
2 2 1 |
(A) <- #d |
|
MOV Rn, A |
11111rrr |
1 1 1 |
(Rn) <- (A) |
|
MOV Rn, ad |
10101rrr |
3 2 2 |
(Rn) <- (ad) |
|
MOV Rn, #d |
01111rrr |
2 2 1 |
(Rn) <- #d |
|
MOV ad, A |
11110101 |
3 2 1 |
(ad) <-(A) |
|
MOV ad, Rn |
10001rrr |
3 2 2 |
(ad) <- (Rn) |
|
MOV add, ads |
10000101 |
9 3 2 |
(add) <- (ads) |
|
MOV ad, @Ri |
1000011i |
3 2 2 |
(ad) <- ((Ri)) |
|
MOV ad, #d |
01110101 |
7 3 2 |
(ad) <- #d |
|
MOV @Ri, A |
1111011i |
1 1 1 |
((Ri)) <- (A) |
|
MOV @Ri, ad |
0110011i |
3 2 2 |
((Ri)) <- (ad) |
|
MOV @Ri, #d |
0111011i |
2 2 1 |
((Ri)) <- #d |
|
MOV DPTR, #d16 |
10010000 |
3 3 2 |
(DPTR) <- #d16 |
|
MOVC A, @A+DPTR |
10010011 |
1 1 2 |
(A) <- ((A)+(DPTR)) |
|
MOVC A, @A+pc |
10000011 |
4 1 2 |
(PC) <- (PC+1), (A) <- ((A)+(PC)) |
|
MOVX A,@Ri |
11100011 |
1 1 2 |
(A) <- ((Ri)) |
|
MOVX a, @DPTR |
11100000 |
1 1 2 |
(A) <- ((DPTR)) |
|
MOVX @Ri, A |
1111001i |
1 1 2 |
((Ri)) <- (A) |
|
MOVX @DPTR, A |
11110000 |
1 1 2 |
(DPTR)) <- (A) |
|
PUSH ad |
11000000 |
3 2 2 |
(SP) <- (SP)+1, ((SP)) <- (ad) |
|
POP ad |
11010000 |
3 2 2 |
(ad) <- ((SP)), (SP) <- (SP)-1 |
|
XCH A, Rn |
11001rrr |
1 1 1 |
(A) <-> (Rn) |
|
XCH A, ad |
11000101 |
3 2 1 |
(A) <->(ad) |
|
XCH A, @Ri |
11000111 |
1 1 1 |
(A) <->((@Ri)) |
|
A, @Ri |
11010111 |
1 1 1 |
(А0-3)<->((@Ri0-3)) |
По команде MOV выполняется пересылка данных из второго операнда в первый. Эта команда не имеет доступа ни к внешней памяти данных, ни к памяти программ. Для этих целей предназначены команды M0VX и MOVC соответственно. Первая из них обеспечивает чтение/запись байт из внешней памяти данных, вторая - чтение байт из памяти программ.
По команде XCH выполняется обмен байтами между аккумулятором и ячейкой РПД, а по команде XCHD - обмен младшими.
Команды PUSH и РОР предназначены соответственно для записи данных в стек и их чтения из стека. Размер стека ограничен лишь размером резидентной памяти данных.
Группа команд пересылок микроконтроллера имеет следующую особенность - в ней нет специальных команд для работы со специальными регистрами: PSW, таймером, портами ввода-вывода. Доступ к ним, как и к другим регистрам специальных функций, осуществляется заданием соответствующего прямого адреса, т. е. это команды обычных пересылок, в которых вместо адреса можно ставить название соответствующего регистра.
Кроме того, следует отметить, что в микро-ЭВМ аккумулятор имеет два различных имени в зависимости от способа адресации: А - при неявной адресации (например, MOV A,R0) и АСС - при использовании прямого адреса. Первый способ предпочтительнее, однако, не всегда применим.
Команды арифметических операций
Таблица А.3 - Команды арифметических операций
Мнемокод |
КОП |
T |
В |
С |
Описание |
|
ADD A, Rn |
00101rrr |
1 |
1 |
1 |
(A)<-(A)+(Rn) |
|
ADD A, ad |
00100101 |
3 |
2 |
1 |
(A)<-(A)+(ad) |
|
ADD A, @Ri |
0010011i |
1 |
1 |
1 |
(A)<-(A)+((Ri)) |
|
ADD A, #d |
00100100 |
2 |
2 |
1 |
(A)<-(A)+#d |
|
ADDC A, Rn |
00111rrr |
1 |
1 |
1 |
(A)<-(A)+(Rn)+(C) |
|
ADDC A, ad |
00110101 |
3 |
2 |
1 |
(A)<-(A)+(ad)+(C) |
|
ADDC A, @Ri |
0011011i |
1 |
1 |
1 |
(A)<-(A)+((Ri))+C) |
|
ADDC A, #d |
00110100 |
2 |
2 |
1 |
(A)<-(A)+#d+(C) |
|
DA A |
11010100 |
1 |
1 |
1 |
Десятичная коррекция аккумулятора |
|
SUBB A, Rn |
10011rrr |
1 |
1 |
1 |
(A)<-(A)-(Rn)-(C) |
|
SUBB A, ad |
10010101 |
3 |
2 |
1 |
(A)<-(A)-(ad)-(C) |
|
SUBB A, @Ri |
1001011i |
1 |
1 |
1 |
(A)<-(A)-((Ri))-(C) |
|
SUBB A, #d |
10010100 |
2 |
2 |
1 |
(A)<-(A)-#d-(C) |
|
INC A |
00000100 |
1 |
1 |
1 |
(A)<-(A)+1 |
|
INC Rn |
00001rrr |
1 |
1 |
1 |
(Rn)<-(Rn)+1 |
|
INC ad |
00000101 |
3 |
2 |
1 |
(ad)<-(ad)+1 |
|
INC @Ri |
0000011i |
1 |
1 |
1 |
((Ri)<-((Ri))+1 |
|
INC DPTR |
10100011 |
1 |
1 |
2 |
(DPTR)<-(DPTR)+1 |
|
DEC A |
00010100 |
1 |
1 |
1 |
(A)<-(A)-1 |
|
DEC Rn |
00011rrr |
1 |
1 |
1 |
(Rn)<-(Rn)-1 |
|
DEC ad |
00010101 |
3 |
2 |
1 |
(ad)<-(ad)-1 |
|
DEC @Ri |
0001011i |
1 |
1 |
1 |
((Ri))<-((Ri))-1 |
|
MUL AB |
10100100 |
1 |
1 |
4 |
(B)(A)<-(A)*(B) |
|
DIV AB |
10000100 |
1 |
1 |
4 |
(A).(B)<-(A)/(B) |
По результату выполнения команд ADD, ADDC, SUBB, MUL и DIV устанавливаются флаги PSW.
Флаг С устанавливается при переносе из разряда D7, т. е. в случае, если результат не помещается в восемь разрядов; флаг АС устанавливается при переносе из разряда D3 в командах сложения и вычитания и служит для реализации десятичной арифметики. Этот признак используется командой DA A.
Флаг OV устанавливается при переносе из разряда D6, т. е. в случае, если результат не помещается в семь разрядов и восьмой не может быть интерпретирован как знаковый. Этот признак служит для организации обработки чисел со знаком.
Флаг Р устанавливается и сбрасывается аппаратно. Если число единичных бит в аккумуляторе нечетно, то Р=1, в противном случае Р=0.
Команды логических операций
В этой группе 25 команд, их краткое описание приведено в таблице. Нетрудно видеть, что эти команды позволяют выполнять операции над байтами: логическое И (/\), логическое ИЛИ (\/), исключающее ИЛИ (+), инверсию (NOT), сброс в нулевое значение и сдвиг. Команды, оперирующие отдельными битами, описаны далее.
Таблица А.4 - Команды логических операций
Мнемокод |
КОП |
T B С |
Описание |
|
ANL A, Rn |
01011rrr |
1 1 1 |
(A) <- (A) /\ (Rn) |
|
ANL A, ad |
01010101 |
3 2 1 |
(A) <- (A) /\ (ad) |
|
ANL A, @Ri |
01010111 |
1 1 1 |
(A) <- (A) /\ ((Ri)) |
|
ANL A, #d |
01010100 |
2 2 1 |
(A) <- (A) /\ #d |
|
ANL ad, A |
01010010 |
3 2 1 |
(ad) <- (ad) /\( A) |
|
ANL ad, #d |
01010011 |
7 3 2 |
(ad) <- (ad) /\ #d |
|
ORL A, Rn |
01001rrr |
1 1 1 |
(A) <- (A) \/ (Rn) |
|
ORL A, ad |
01000101 |
3 2 1 |
(A) <- (A) \/ (ad) |
|
ORL A, @Ri |
0100011i |
1 1 1 |
(A) <- (A) \/( (Ri) |
|
ORL A, #d |
01000100 |
2 2 1 |
(A) <- (A) \/ #d |
|
ORL ad, A |
01000010 |
3 2 1 |
(ad) <- (ad) \/ A |
|
ORL ad, #d |
01000011 |
7 3 2 |
(ad) <- (ad) \/ #d |
|
XRL A, Rn |
01101rrr |
1 1 1 |
(A) <- (A) (+) (Rn) |
|
XRL A, ad |
01100101 |
3 2 1 |
(A) <- (A) (+) (ad) |
|
XRL A, @Ri |
0110011i |
1 1 1 |
(A) <- (A) (+) ((Ri)) |
|
XRL A, #d |
01100100 |
2 2 1 |
(A) <- (A) (+) #d |
|
XRL ad, A |
01100010 |
3 2 1 |
(ad) <- (ad) (+) A |
|
XRL ad, #d |
01100011 |
7 3 2 |
(ad) <- (ad) (+) #d |
|
CLR A |
11100100 |
1 1 1 |
(A) <- 0 |
|
CPL A |
11110100 |
1 1 1 |
(A) <- NOT(A) |
|
SWAP A |
11000100 |
1 1 1 |
(A0-3) <-> (A4-7) |
|
RL A |
00100011 |
1 1 1 |
Циклический сдвиг влево |
|
RLC A |
00110011 |
1 1 1 |
Сдвиг влево через перенос |
|
RR A |
00000011 |
1 1 1 |
Циклический сдвиг вправо |
|
RRC A |
00010011 |
1 1 1 |
Сдвиг вправо через перенос |
Команды операций над битами
Группа состоит из 12 команд, краткое описание которых приведено в таблице. Эти команды позволяют выполнять операции над отдельными битами: сброс, установку, инверсию бита, а также логические И (/\) и ИЛИ (\/). В качестве «логического» аккумулятора, участвующего во всех операциях с двумя операндами, выступает признак переноса С (разряд D7 PSW), в качестве операндов могут использоваться 128 бит из резидентной памяти данных и регистры специальных функций, допускающие адресацию отдельных бит.
Таблица А.5 - Команды операций над битами
Мнемокод |
КОП |
Т В С |
Описание |
|
CLR С |
11000011 |
1 1 1 |
(С) <- 0 |
|
CLR bit |
11000010 |
4 2 1 |
(bit) <- 0 |
|
SETB С |
11010011 |
1 1 1 |
(С) <- 1 |
|
SETB bit |
11010010 |
4 2 1 |
(bit) <- 1 |
|
CPL С |
10110011 |
1 1 1 |
(С) <- NOT(С) |
|
CPL bit |
10110010 |
4 2 1 |
(bit) <- NOT (bit) |
|
ANL С, bit |
10000010 |
4 2 2 |
(С )<- (C) /\ (bit) |
|
ANL С, /bit |
10110000 |
4 2 2 |
(С) <- (C) /\ NOT(bit) |
|
ORL С, bit |
01110010 |
4 2 2 |
(С) <- (C) \/ (bit) |
|
ORL С, /bit |
10100000 |
4 2 2 |
(С) <- (C) \/ NOT(bit) |
|
MOV С, bit |
10100010 |
4 2 1 |
(С) <- (bit) |
|
MOV bit, C |
10010010 |
4 2 2 |
(bit) <- (C) |
Команды передачи управления
Группа представлена командами безусловного и условного переходов, командами вызова подпрограмм и командами возврата из подпрограмм.
Таблица А.6 - Команды передачи управления
Мнемокод |
КОП |
Т В С |
Описание |
|
LJMP ad16 |
00000010 |
12 3 2 |
Длинный безусловный переход по всей памяти |
|
AJMP ad11 |
00001 |
6 2 2 |
Безусловный переход в пределах страницы 2 Кбайт |
|
SJMP rel |
10000000 |
5 2 2 |
Безусловный переход в пределах страницы 256 байт |
|
JMP @A+DPTR |
01110011 |
1 1 2 |
Безусловный переход по косвенному адресу |
|
JZ rel |
01100000 |
5 2 2 |
Переход, если нуль |
|
JNZ rel |
01110000 |
5 2 2 |
Переход, если не нуль |
|
JC rel |
01000000 |
5 2 2 |
Переход, если бит переноса установлен |
|
JNC rel |
01010000 |
5 2 2 |
Переход, если бит переноса не установлен |
|
JB bit, rel |
00100000 |
11 3 2 |
Переход, если бит установлен |
|
JNB bit, rel |
00110000 |
11 3 2 |
Переход, если бит не установлен |
|
JBC bit, rel |
00010000 |
11 3 2 |
Переход, если бит установлен со сбросом бита |
|
DJNZ Rn, rel |
11011rrr |
5 2 2 |
Декремент и переход, если не нуль |
|
DJNZ ad, rel |
11010101 |
8 3 2 |
Декремент и переход, если не нуль |
|
CJNE: A, ad, rel |
10110101 |
8 3 2 |
Сравнение аккумулятора с байтом и переход, если не равно |
|
CJNE A, #d, rel |
10110100 |
10 3 2 |
Сравнение аккумулятора с константой и переход, если неравно |
|
CJNE: Rn, #d, rel |
10111rrr |
10 3 2 |
Сравнение регистра с константой и переход, если не равно |
|
CJNE: @Ri, #d, rel |
1011011i |
10 3 2 |
Сравнение байта памяти с константой и переход, если не равно |
|
LCALL ad16 |
00010010 |
12 3 2 |
Длинный вызов подпрограммы во всей памяти |
|
ACALL ad11 |
10001 |
6 2 2 |
Вызов подпрограммы в пределах страницы 2 Кбайт |
|
RET |
00100010 |
1 1 2 |
Возврат подпрограммы |
|
RETI |
00110010 |
1 1 2 |
Возврат подпрограммы обработки прерывания |
|
NOP |
00000000 |
1 1 1 |
Пустая операция |
Команда безусловного перехода LJMP (long- длинный) осуществляет переход по абсолютному 16-битному адресу, указанному в теле команды, т. е. команда обеспечивает переход в любую точку памяти программ.
Действие команды AJMP (absolute - абсолютный) аналогично команде LJMP, однако в теле команды указаны лишь 11 младших разрядов адреса. Поэтому переход осуществляется в пределах страницы размером 2 Кбайт, при этом надо иметь в виду, что сначала содержимое счетчика команд увеличивается на 2 и, только потом, заменяются 11 разрядов адреса.
В отличие от предыдущих команд, в команде SJMP (short - короткий) указан не абсолютный, а относительный адрес перехода. Величина смещения rel рассматривается как число со знаком, а, следовательно, переход возможен в пределах -128...+127 байт относительно адреса команды, следующей за командой SJMP.
Команда косвенного перехода JMP @A+DPTR позволяет вычислять адрес перехода в процессе выполнения самой программы.
Командами условного перехода можно проверять следующие условия:
JZ - аккумулятор содержит нулевое значение;
JNZ - аккумулятор содержит не нулевое значение;
JC - бит переноса C установлен;
JNC - бит переноса C не установлен;
JB - прямо адресуемый бит равен 1;
JNB - прямо адресуемый бит равен 0;
JBC - прямо адресуемый бит равен 1 и сбрасывается в нулевое значение при выполнении команды.
Все команды условного перехода рассматриваемых ОЭВМ, содержат короткий относительный адрес, т. е. переход может осуществляться в пределах -128... +127 байт относительно следующей команды.
Команда DJNZ предназначена для организации программных циклов. Регистр Rn или байт по адресу ad, указанные в теле команды, содержат счетчик повторений цикла, а смещение rеl - относительный адрес перехода к началу цикла. При выполнении команды содержимое счетчика уменьшается на 1 и проверяется на 0. Если значение содержимого счетчика не равно 0, то осуществляется переход на начало цикла, в противном случае выполняется следующая команда.
Действие команд вызова процедур полностью аналогично действию команд безусловного перехода. Единственное отличие состоит в том, что они сохраняют в стеке адрес возврата.
Команда возврата из подпрограммы RET восстанавливает из стека значение содержимого счетчика команд, а команда возврата из процедуры обработки прерывания RETI, кроме того, разрешает прерывание обслуженного уровня. Команды RET и RETI не различают, какой командой LCALL или ACALL была вызвана подпрограмма, т. к. и в том, и в другом случае в стеке сохраняется полный 16-разрядный адрес возврата.
В заключение следует отметить, что большинство трансляторов допускают обобщенную мнемонику JMP - для команд безусловного перехода и CALL - для команд вызова подпрограмм. Конкретный тип команды определяется транслятором, исходя из «длины» перехода или вызова.
Приложение Б
Система команд микроконтроллера PIC16F877
Длина каждой инструкции составляет 14-ти битное слово, разделенное на OPCODE (часть кода команды), которая указывает на тип исполняемой команды, и один или несколько операндов, которые в свою очередь в дальнейшем определяют дальнейшее выполнение инструкции. Для описания команд семейства PICmicro используют следующие сокращения:
Таблица Б.1 - Используемые сокращения системы команд PICmicro
Поле |
Описание |
|
f |
Адрес файлового регистра (от 0x00 до 0x7F). |
|
W |
Рабочий регистр (аккумулятор). |
|
b |
Адрес бита внутри 8-ми битного регистра. |
|
k |
Символьное поле, константа или метка. |
|
x |
Любое значение(0 или 1). Компилятор сгенерирует код с x=0 - это нужно для совместимости со всеми программными продуктами Microchip. |
|
d |
Выбор, где сохранять результат: d=0 (сохранять в W); d=1 (сохранять в f). По умолчанию d=1. |
|
label |
Имя метки |
|
TOS |
Вершина стека |
|
PC |
Счетчик команд (программный счетчик) |
|
PCLATH |
Записываемый буфер для старших 5-ти бит PC |
|
GIE |
Флаг разрешения глобальных прерываний |
|
WDT |
Сторожевой таймер |
|
бит Таймаута (Time-out bit) |
||
бит понижения питания (Power-Down bit) |
||
dest |
Назначение, либо регистр W или другой регистр указанный в описании команды |
|
[ ] |
Опционально, т. е. необязательное использование записи, которая заключена в квадратные скобки |
|
( ) |
Содержимое |
|
-> |
Занести в |
|
< > |
Битовое поле в регистре |
|
принадлежит |
||
Курсив |
определяется пользователем |
Команды подразделяются на байт-ориентированные, бит-ориентированные, символьные и команды управления. На рис. Б.1 указано, из каких составных частей состоит код команды в зависимости от ее принадлежности к выше определенным группам.
Рисунок Б.1 - Форматы команд
Таблица Б.2 - Система команд PICmicro
Мнемоника команды |
Описание |
Циклов |
14-разрядный код |
Изм. флаги |
Прим |
||
Бит 13 |
Бит 0 |
||||||
1 |
2 |
3 |
4 |
5 |
6 |
||
БАЙТ-ОРИЕНТИРОВАННЫЕ КОМАНДЫ |
|||||||
ADDWF f, d |
Сложение W и f |
1 |
00 0111 dfff ffff |
C,DC,Z |
1.2 |
||
ANDWF f, d |
Побитное «И» W и f |
1 |
00 0101 dfff ffff |
Z |
1.2 |
||
CLRF f |
Очистить f |
1 |
00 0001 lfff ffff |
Z |
2 |
||
CLRW |
Очистить W |
1 |
00 0001 0xxx xxxx |
Z |
|||
COMF f, d |
Инвертировать f |
1 |
00 1001 dfff ffff |
Z |
1.2 |
||
DECF f, d |
Вычесть 1 из f |
1 |
00 0011 dfff ffff |
Z |
1.2 |
||
DECFSZ f, d |
Вычесть 1 из f и пропустить если 0 |
1(2) |
00 1011 dfff ffff |
1.2.3 |
|||
INCF f, d |
Прибавить 1 к f |
1 |
00 1010 dfff ffff |
Z |
1.2 |
||
INCFSZ f, d |
Прибавить 1 к f и пропустить если 0 |
1(2) |
00 1111 dfff ffff |
1.2.3 |
|||
IORWF f, d |
Побитное «ИЛИ» W и f |
1 |
00 0100 dfff ffff |
Z |
1.2 |
||
MOVF f, d |
Переслать f |
1 |
00 1000 dfff ffff |
Z |
1.2 |
||
MOVWF f |
Переслать W в f |
1 |
00 0000 1fff ffff |
||||
NOP |
Нет операции |
1 |
00 0000 0xx0 0000 |
||||
RLF f, d |
Циклический сдвиг f влево через перенос |
1 |
00 1101 dfff ffff |
С |
1.2 |
||
1 |
2 |
3 |
4 |
5 |
6 |
||
RRF f, d |
Циклический сдвиг f вправо через перенос |
1 |
00 1100 dfff ffff |
С |
1.2 |
||
SUBWF f, d |
Вычесть W из f. |
1 |
00 0010 dfff ffff |
C,DC,Z |
1.2 |
||
SWAPF f, d |
Поменять местами полубайты в регистре f. |
1 |
00 1110 dfff ffff |
1.2 |
|||
XORWF f, d |
Побитное «исключающее ИЛИ» W и f. |
1 |
00 0110 dfff ffff |
Z |
1.2 |
||
БИТ-ОРИЕНТИРОВАННЫЕ КОМАНДЫ |
|||||||
BCF f, b |
Очистить бит b в регистре f. |
1 |
01 00bb bfff ffff |
1.2 |
|||
BSF f, b |
Установить бит b в регистре f. |
1 |
01 01bb bfff ffff |
1.2 |
|||
BTFSC f, b |
Проверить бит b в регистре f, пропустить если 0. |
1(2) |
01 10bb bfff ffff |
3 |
|||
BTFSS f, b |
Проверить бит b в регистре f, пропустить если 1. |
1(2) |
01 11bb bfff ffff |
3 |
|||
КОМАНДЫ УПРАВЛЕНИЯ И ОПЕРАЦИЙ С КОНСТАНТАМИ |
|||||||
ADDLW k |
Сложить константу с W |
1 |
11 11 lx kkkk kkkk |
C,DC,Z |
|||
ANDLW k |
Побитное «И» константы и W |
1 |
11 1001 kkkk kkkk |
Z |
|||
CALL k |
Вызов подпрограммы |
2 |
10 0kkk kkkk kkkk |
||||
CLRWDT |
Очистить WDT |
1 |
00 0000 0110 0100 |
-TO, -PD |
|||
GOTO k |
Безусловный переход |
2 |
10 1kkk kkkk kkkk |
||||
IORLW k |
Побитное «ИЛИ» константы и W |
1 |
11 1000 kkkk kkkk |
Z |
|||
MOVLW k |
Переслать константу в W |
1 |
11 00xx kkkk kkkk |
||||
RETFIE |
Возврат из подпрограммы с разрешением прерываний |
2 |
00 0000 0000 1001 |
||||
RETLW k |
Возврат из подпрограммы с загрузкой константы вW |
2 |
11 01xx kkkk kkkk |
||||
RETURN |
Возврат из подпрограммы |
2 |
00 0000 0000 1000 |
||||
SLEEP |
Перейти в режим SLEEP |
1 |
00 0000 0110 0011 |
-TO -PD |
|||
SUBLW k |
Вычесть W из константы |
1 |
11 110x kkkk kkkk |
C,DC,Z |
|||
XORLW k |
Побитное «исключающее ИЛИ» константы и W |
1 |
11 1010 kkkk kkkk |
Z |
Примечания:
1. Когда регистр ввода вывода используется для модификации самого себя (MOVF PORTB, 1), то для записи будут использоваться значения 0/1 непосредственно с ножек микроконтроллера, а не значение, записанное в выходную защелку порта;
2. Если команда оперирует с регистром TMR0 (и при этом d=1), тогда предделитель обнуляется (если он относится к модулю Timer 0);
3. Если изменяется Программный Счетчик (PC) или условие истинно, тогда команда выполняется за 2 командных цикла. Второй командный цикл исполняется как команда NOP.
Подобные документы
Семейство 16-разрядных микроконтроллеров Motorola 68HC12, их структура и функционирование. Модуль формирования ШИМ-сигналов. Средства отладки и программирования микроконтроллеров 68НС12. Особенности микроконтроллеров семейства MCS-196 фирмы INTEL.
курсовая работа [239,6 K], добавлен 04.01.2015Рассмотрение структуры и принципов работы таймеров/счетчиков (общего назначения, сторожевого, типов А, В, С, D, Е) микроконтроллеров и аналого-цифрового преобразователя семейства AVR с целью разработки обучающего компьютерного электронного пособия.
курсовая работа [1,0 M], добавлен 06.03.2010Использование микроконтроллеров AVR фирмы Atmel в проектируемой аппаратуре. Архитектура и общие характеристики прибора, предназначение арифметики логического устройства и понятие флэш-памяти. Формат пакета данных, алгоритм их передачи и система команд.
контрольная работа [427,3 K], добавлен 12.11.2010Структурная схема микроконтроллеров семейства MCS-51: отличительные особенности, назначение выводов, блок регистров специальных функций. Карта прямоадресуемых бит. Методы адресации, граф команд пересылки, обмена и загрузки. Ввод и отображение информации.
курсовая работа [135,5 K], добавлен 22.08.2011Адресное пространство микроконтроллеров MSP430F1xx. Байтовая и словная формы инструкций. Система команд MSP микроконтроллеров. Периферийные устройства микроконтроллеров MSP430F1xx. Аналого-цифровой преобразователь ADC12, его технические характеристики.
курсовая работа [278,1 K], добавлен 04.05.2014Микроконтроллер (MCU) — микросхема, предназначенная для управления электронными устройствами. Их можно встретить во многих современных приборах, в том числе и бытовых. Рассмотрение архитектуры различных микроконтроллеров, ядра, памяти, питания, периферии.
реферат [216,5 K], добавлен 24.12.2010Понятие и виды микроконтроллеров. Особенности программирования микропроцессорных систем, построение систем управления химико-технологическим процессом. Изучение архитектуры микроконтроллера ATmega132 фирмы AVR и построение на его основе платформы Arduino.
курсовая работа [1,9 M], добавлен 13.01.2011Проектирование специализированных радиоэлектронных устройств с применением микропроцессорных комплектов и цифровых микросхем среднего и малого уровней интеграции. Архитектура микроконтроллеров семейства INTEL8051. Программа устройства на Ассемблере.
курсовая работа [42,3 K], добавлен 29.07.2009Общая характеристика операций, выполняемых по командам базовой системы. Описание и мнемокоды команд, используемых при разработке программы на языке AVR Ассемблера. Основные принципы работы команд с обращением по адресу SRAM и к регистрам ввода–вывода.
реферат [148,4 K], добавлен 21.08.2010Классификация, структура, архитектура и модульная организация микроконтроллеров. Средства разработки программного обеспечения AVR-контроллеров. Директивы транслятора ассемблера, рабочая частота и циклы. Исследование арифметических и логических команд.
методичка [3,0 M], добавлен 19.09.2019