- •4. Однокристальные микроконтроллеры фирмы intel
- •4.1 Микроконтроллеры семейства mcs-51
- •4.1.1 Общая характеристика семейства mcs-51
- •4.1.2 Организация памяти
- •4.1.3. Параллельные порты ввода/вывода.
- •4.1.4. Таймеры/счетчики
- •4.1.5. Организация системы прерываний
- •4.1.6. Последовательный порт
- •4.1.7. Система команд
- •4.8. Применение мк для управления шаговым двигателем
- •2 Да Да Да Нет Нет Нет2
- •4.2 Однокристальные микроконтроллеры семейства mcs-251
- •4.2.1 Общая характеристика семейства mcs-251
- •4.2.2 Структура микроконтроллера
- •4.2.3 Организация памяти микроконтроллера
- •4.2.4 Система команд
4.1.6. Последовательный порт
Последовательный порт, который также называют универсальным асинхронным приемопередатчиком (УАПП), предназначен для приема и передачи информации в последовательной форме (младшими битами вперед). Порт обеспечивает полный дуплексный режим обмена, то есть позволяет работать одновременно на выдачу и на прием информации.
В состав УАПП входят принимающий и передающий сдвигающие регистры, а также буферный регистр SBUF приемопередатчика, через который программно доступны как принимающий, так и передающий регистры. Запись байта в регистр SBUF приводит к автоматической переписи байта в сдвигающий регистр передатчика и инициирует начало передачи байта. Порт позволяет начинать прием нового байта до того, как из приемного регистра считан предыдущий байт, однако, если первый байт еще не считан к тому моменту, когда закончится прием второго байта, то он будет потерян.
УАПП может работать в четырех различных режимах.
Режим 0. Последовательная информация передается и принимается 8-битными посылками через вывод RXD входа приемника. Через вывод TXD выхода передатчика выдаются тактовые импульсы, сопровождающие каждый бит. Таким образом в данном режиме информация записывается/считывается синхронно с тактовыми импульсами. Скорость обмена фиксирована и составляет 1/12 частоты тактового генератора.
Режим 1. В этом режиме посылка содержит 10 бит, которые передаются (через TXD) либо принимаются (через RXD) в следующей последовательности:
старт-бит (логический "0");
8 бит данных (младший бит первым);
стоп-бит (логическая "1").
При приеме стоп-бит заносится в разряд RB8 регистра SCON. Скорость обмена задается пользователем, для чего используется таймер/счетчик 1.
Режим 2. В этом режиме каждая посылка содержит 11 бит, которые передаются (через TXD) и/или принимаются (через RXD) в следующей последовательности:
старт-бит (логический "0");
8 бит данных (младший бит первым);
программируемый 9-й бит данных;
стоп-бит (логическая "1").
При передаче 9-й бит данных (размещается в разряде ТВ8 регистра SCON) может принимать фиксированное значение 0 или 1, либо формироваться программно, например, для контроля передаваемого байта по четности (в этом случае в него может быть помещено значение флага паритета из регистра PSW).
При приеме 9-й бит данных поступает в разряд RB8 регистра SCON. Скорость обмена в режиме 2 составляет 1/64 или 1/32 частоты внешнего тактового генератора и зависит от состояния бита SMOD (старший бит в регистре специального назначения PCON). Если SMOD=0 (устанавливается по сбросу МК), то скорость обмена составляет 1/64 частоты внешнего тактового генератора. Если SMOD=1, То скорость обмена составляет 1/32 частоты тактового генератора.
Режим 3. Данный режим совпадает с режимом 2, за исключением частоты приема/передачи, которая управляется программно с помощью таймера/счетчика 1.
Для задания режима работы последовательного порта используются регистры SCON и PCON.
4.1.7. Система команд
Базовая система команд МК семейства MCS-51 включает 111 команд, которые можно разделить на пять функциональных групп:
команды пересылки данных;
арифметических операций;
логических операций;
операций с битами;
команды передачи управления.
Полный перечень команд приведен в таблице 4.2. Для задания источников и приемников операндов в командах используются пять режимов адресации: регистровая, прямая, косвенно-регистровая, непосредственная и базово-индексная.
Регистровая адресация. В качестве источника/приемника операнда используются: аккумулятор А, регистр-расширитель В, аккумулятор А, регистр-расширитель В, регистры R0-R7 текущего банка рабочих регистров, регистр-указатель DPTR.
Прямая адресация. Позволяет адресовать ячейки встроенного ОЗУ данных и регистры специального назначения. Например, команда MOV A, 30h пересылает в аккумулятор содержимое ячейки встроенного ОЗУ с адресом 30h.
Адреса регистров специального назначения приведены выше в табл. 2.2. Команда MOV R1, P0, пересылающая содержимое порта Р0 в регистр R1, эквивалентна команде MOV R1, 80h (т. к. порт Р0 имеет адрес 80h), но первая запись более наглядна.
Косвенно-регистровая адресация.Позволяет обращаться к любым ячейкам как встроенного так и внешнего ОЗУ данных. Ячейки встроенного ОЗУ адресуются косвенно через регистры R0 или R1 текущего банка. Например, команда MOV A,
Табл.4.2
Система команд микроконтроллеров 8xC51
Мнемокод |
Число байт |
Число циклов |
Операция |
Команды пересылки данных | |||
MOV A,Rn MOV A,ad MOV A,@Ri MOV A,#d MOV Rn,A MOV Rn,ad MOV Rn,#d MOV ad,A MOV ad,Rn MOV add,ads MOV ad,@Ri MOV ad,#d MOV @Ri,A MOV @Ri,ad MOV @Ri,#d MOV DPTR,#d16 MOVC A,@A+DPTR MOVC A,@A+PC MOVX A,@Ri MOVX A,@DPTR MOVX @Ri,A MOVX @DPTR,A PUSH ad POP ad XCH A,Rn XCH A,ad XCH A,@Ri XCHD A,@Ri |
1 2 1 2 1 2 2 2 2 2 3 2 3 1 2 2 3 1 1 1 1 1 1 1 2 2 1 2 |
1 1 1 1 1 2 1 1 2 2 2 2 1 2 1 2 2 2 2 2 2 2 2 2 1 1 1 1
|
(A)(Rn) (A) (ad) (A) ((Ri)) (A) #d (Rn) (A) (Rn) (ad) (Rn) #d (ad) (A) (ad) (Rn) (add) (ads) (ad) ((Ri)) (ad) #d ((Ri)) (A) ((Ri)) (ad) ((Ri)) #d (DPTR) #d16 (A) ((A)+(DPTR)) (PC) (PC)+1,(A) ((A)+(PC)) (A) ((Ri)) (A) ((DPTR)) ((Ri)) (A) ((DPTR)) (A) (SP) (SP)+1,((SP)) (ad) (ad) (SP),(SP) (SP)-1 (A)(Rn) (A) (ad) (A) ((Ri)) (A0-3) ((Ri)0-3) |
Команды арифметических операций | |||
ADD A,Rn ADD A,ad ADD A,@Ri ADD A,#d ADDC A,Rn ADDC A,ad ADDC A,@Ri ADDC A,#d DA A SUBB A,Rn SUBB A,ad SUBB A,@Ri SUBB A,#d |
1 2 1 2 1 2 1 2 1 1 1 2 1 |
1 1 1 1 1 1 1 1 1 1 1 1 1 |
(A) (A)+(Rn) (A) (A)+(ad) (A) (A)+((Ri)) (A) (A)+ #d (A) (A)+(Rn)+(C) (A) (A)+(ad)+(C) (A) (A)+((Ri))+(C) (A) (A)+ #d +(C) Десятичная коррекция (A) (A)-(C)-(Rn) (A) (A)-(C)-(ad) (A) (A)-(C)-((Ri)) (A) (A)-(C)- #d |
Продолжение табл. 4.2
Мнемокод |
Число байт |
Число циклов |
Операция |
INC A INC Rn INC ad INC @Ri INC DPTR DEC A DEC Rn DEC ad DEC @Ri MUL AB DIV AB |
1 1 2 1 1 1 1 2 1 1 1 |
1 1 1 1 2 1 1 1 1 4 4 |
(A) (A)+1 (Rn) (Rn)+1 (ad) (ad)+1 ((Ri)) ((Ri))+1 (DPTR) (DPTR)+1 (A) (A)-1 (Rn) (Rn)-1 (ad) (ad)-1 ((Ri)) ((Ri))-1 (B)(A) (A)*(B) (A).(B) (A)/(B) |
Команды логических операций | |||
ANL A,Rn ANL A,ad ANL A,@Ri ANL A,#d ANL ad,A ANL ad,#d ORL A,Rn ORL A,ad ORL A,@Ri ORL A,#d ORL ad,A ORL ad,#d XRL A,Rn XRL A,ad XRL A,@Ri XRL A,#d XRL ad,A XRL ad,#d CLR A CPL A RL A RLC A RR A RRC A SWAP A |
1 2 1 2 2 3 1 2 1 2 2 3 1 2 1 2 2 3 1 1 1 1 1 1 1 |
1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 |
(A) (A)&(Rn) (A) (A)&(ad) (A) (A)&((Ri)) (A) (A)& #d (ad) (ad)&(A) (ad) (ad)& #d (A) (A)(Rn) (A) (A) (ad) (A) (A) ((Ri)) (A) (A) #d (ad) (ad) (A) (ad) (ad) #d (A) (A)(Rn) (A) (A)(ad) (A) (A)((Ri)) (A) (A) #d (ad) (ad)(A) (ad) (ad) #d (A) 0 (A) (/A) Циклический сдвиг (A) влево Сдвиг (A) влево через флаг C Циклический сдвиг (A) вправо Сдвиг (A) вправо через флаг C (A0-3)(A4-7) |
Команды битовых операций | |||
CLR C CLR bit SETB C SETB bit CPL C CPL bit ANL C,bit ANL C,/bit |
1 2 1 2 1 2 2 2 |
1 1 1 1 1 1 2 2 |
(C) 0 (b) 0 (C) 1 (b) 1 (C) (/C) (b) (/b) (C) (C)&(b) (C) (C)&(/b) |
Продолжение табл. 4.2
Мнемокод |
Число байт |
Число циклов |
Операция |
ORL C,bit ORL C,/bit MOV C,bit MOV bit,C |
2 2 2 2 |
2 2 1 2 |
(C)(C)(b) (C)(C)(/b) (C)(b) (b)(C) |
Команды передачи управления | |||
LJMP ad16 AJMP ad11 SJMP rel JMP @A+DPTR JZ rel
JNZ rel
JC rel
JNC rel
JB bit,rel
JNB bit,rel
JBC bit,rel
DJNZ Rn,rel
DJNZ ad,rel
CJNE A,ad,rel
CJNE A,#d,rel
CJNE Rn,#d,rel
CJNE @Ri,#d,rel
LCALL ad16
ACALL ad11 RET
RETI
NOP |
3 2 2 1 2
2
2
2
3
3
3
2
3
3
3
3
3
3
2 1
1
1
|
2 2 2 2 2
2
2
2
2
2
2
2
2
2
2
2
2
2
2 2
2
1 |
(PC) ad16 (PC) (PC)+2,(PC0-10) ad11 (PC) (PC)+2,(PC) (PC)+rel (PC) (A)+(DPTR) (PC) (PC)+2,если (A)= 0,то (PC) (PC)+rel (PC) (PC)+2,если (A)0,то (PC) (PC)+rel (PC) (PC)+2,если (C)=1,то (PC) (PC)+rel (PC) (PC)+2,если (C)=0,то (PC) (PC)+rel (PC) (PC)+3,если (b)=1,то (PC) (PC)+rel (PC) (PC)+3,если (b)=0,то (PC) (PC)+rel (PC) (PC)+3,если (b)=1,то (b) 0 и (PC) (PC)+rel (PC) (PC)+2,(Rn) (Rn)-1, если(Rn)0,то(PC) (PC)+rel (PC) (PC)+2,(ad) (ad)-1, если(ad)0,то(PC) (PC)+rel (PC) (PC)+3,если (A)(ad), то(PC) (PC)+rel (PC) (PC)+3,если (A) #d, то(PC) (PC)+rel (PC) (PC)+3,если (Rn) #d, то(PC) (PC)+rel (PC) (PC)+3,если ((Ri))#d, то(PC) (PC)+rel (PC) (PC)+3,(SP) (SP)+1, ((SP)) (PC0-7),(SP)(SP)+1, ((SP)) (PC8-15),(PC) ad16 (PC) (PC)+2,(SP) (SP)+1, ((SP))(PC0-7),(SP)(SP)+1, ((SP))(PC8-15),(PC0-10) ad11 (PC) (PC)+1 |
@R0 пересылает в аккумулятор содержимое ячейки встроенного ОЗУ данных, адрес которой хранится в регистре R0.
Ячейки внешней памяти адресуются через регистры R0, R1 или через регистр-указатель DPTR. В первом случае содержимое регистра R0 или R1
определяет младший байт адреса ячейки внешней памяти данных. При этом старший байт адреса может задаваться с помощью порта 2. Примером команды с косвенно-регистровой адресацией к внешней памяти является MOVX A, @R0.
Во втором случае для адресации внешней памяти используется 16-и разрядный регистр-указатель данных DPTR. Например, команда MOVX @DPTR, A пересылает содержимое аккумулятора в ячейку внешней памяти данных, адрес которой записан в регистре DPTR.
Непосредственная адресация. Одним из операндов является константа, заданная как часть машинного кода команды. Непосредственным операндам должен предшествовать префикс «#». Например, команда MOV A, #03h загружает в аккумулятор шестнадцатеричную константу 03h.
Базово-индексная адресация. Используется для доступа к константам и таблицам, располагающимся в памяти программ. Адрес ячейки памяти программ, к которой выполняется обращение, определяется как сумма содержимого аккумулятора и содержимого либо регистра-указателя DPTR, либо программного счетчика РС. Например, команда MOVC A, @A+DPTR загружает аккумулятор содержимым ячейки памяти программ, адрес которой является суммой содержимого аккумулятора (до выполнения команды) и содержимого регистра-указателя DPTR.