Дмитриев Универсалный лабораторный стенд. Аппаратные средства проектирования встраиваемых систем 2009
.pdf$INCLUDE(PCF552.A51) |
|
|
ORG |
8000h |
|
MOV |
TMOD,#01h |
;таймер Т0 режим 1 |
SETB |
TR0 |
;разрешение работы таймера Т0 |
MOV |
R0,TL0 |
|
MOV |
R1,TH0 |
|
MOV |
R2,TL0 |
|
CJNE |
R2,#02h,MET1 |
;переход, если R2 не равен 2 |
MET2: |
MOV A,R1 |
|
ADD |
A,#0FFh |
|
MOV |
R1,A |
;вычитание из R1 единицы |
LJMP |
TIME |
|
MET1: |
CJNE R2,#03h,TIME |
;переход, если R2 не равен 3 |
LJMP |
MET2 |
|
TIME: |
|
LJMP$ |
END |
|
|
3.9.ФОРМИРОВАНИЕ ВРЕМЕННЫХ ИНТЕРВАЛОВ ПРИ ПОМОЩИ ТАЙМЕРА Т2
В системах управления сложными объектами возникает задача формирования многоканальных последовательностей временных интервалов, предназначенных для опроса состояний датчиков с аналоговыми и цифровыми выходами и включения/выключения исполнительных устройств. Причем параметры временных интервалов могут быть фиксированными или изменяться по заданному алгоритму.
Таймер Т2 имеет встроенные средства для эффективного решения задачи формирования многоканальных последовательностей временных интервалов сложной структуры. Работа таймера описана в п. 2.5 , а его структурная схема приведена на рис. 2.5. Напомним, что формирование временных интервалов при помощи таймера Т2 реализуется программно управляемым переключением линий порта Р4 при совпадении значений его компараторов и счетчика. При фиксации данных совпадений устанавливаются флаги соответствующих прерываний СМ0, СМ1 и СМ2. Обработчики этих прерываний целесообразно использовать для перезагрузки компараторов и регистров RTE и STE управления переключениями линий порта Р4.
91
Рассмотрим некоторые примеры использования таймера Т2. Допустим, что необходимо сформировать изображенную на рис. 3.22 периодическую многоканальную последовательность временных интервалов. Период данной последовательности составляет 6,5 мс. Заданные значения временных интервалов между моментами переключения линий порта Р4 достаточны для выполнения перезагрузки регистров-компараторов таймера Т2 и регистров управления переключениями линий порта Р4 обработчиками прерываний. При частоте генератора УЛС 11,059 МГц временному интервалу 0,65 мс соответствует значение 257h счетчика таймера Т2.
Рис. 3.22. Многоканальная последовательность временных интервалов
Логика работы программы формирования временных интервалов состоит в следующем. Формирование временных интервалов целесообразно начать с того момента времени, когда значение счетчика таймера Т2 равно 0. При входе в обработчик этого прерывания в регистры-компараторы записываются значения, соответствующие первым после значения Т2 = 0 моментам времени измене-
92
ния состояний линий порта Р4. В регистры управления состояниями линий порта Р4 загружаются значения, соответствующие номерам переключаемых линий. В табл. 3.2 приведены загружаемые значения для указанных регистров. Так как обработчик прерывания Т2 вызывается однократно, то в его теле необходимо поместить команду запрета прерывания от Т2 (сброса бита ЕТ2 в регистре IEN1). Кроме этого, так же как и при вызове всех других обработчиков прерываний, используемых при работе с таймером Т2, следует сбросить флаг прерывания от переполнения Т2 (бит T2OV ре-
гистра TM2IR).
|
|
|
Таблица 3.2 |
Загружаемые регистры обработчика Т2 |
|||
|
|
|
|
Момент времени |
№ |
Значения, загру- |
Значения, загру- |
входа в обработчик |
входа |
жаемые в регист- |
жаемые в регистры |
прерывания |
|
ры RTE и STE |
СМ0, СМ1 и СМ2 |
0 |
1 |
RTE=83h (7,1,0) |
CMO=257h |
|
|
STE=60h (2,1) |
CM1=95Ch |
|
|
|
CM2=257h |
Управление всеми последующими переключениями линий порта Р4 обеспечивается обработчиками разрешенных прерываний СМ0, СМ1 и СМ2. При передаче управления соответствующему обработчику прерываний по номеру входа осуществляется перезагрузка регистров-компараторов и регистров управления линиями порта Р4 в соответствии с содержимым таблиц 3.3 – 3.5.
|
|
|
Таблица 3.3 |
Загружаемые регистры обработчика СМ0 |
|||
|
|
|
|
Момент времени |
№ |
Значения, загру- |
Значения, загружае- |
входа в обработчик |
входа |
жаемые в регистр |
мые в регистр СМ0 |
прерывания |
|
STE |
|
1 |
1 |
STE = 21h (5,0) |
CMO = СМ0 + 257h |
|
|
|
|
2 |
2 |
STE = 10h (4) |
CMO = СМ0 + 257h |
|
|
|
|
3 |
3 |
STE = 08h (3) |
CMO = СМ0 + 257h |
|
|
|
|
|
|
93 |
|
|
|
|
|
|
Продолжение табл. 3.3 |
|
|
|
|
|
|
|
|
Момент времени |
№ |
Значения, загру- |
|
Значения, загружае- |
||
входа в обработчик |
входа |
жаемые в регистр |
|
мые в регистр СМ0 |
||
прерывания |
|
|
STE |
|
|
|
4 |
|
4 |
STE = 02h (1) |
|
CMO = СМ0 + 4АЕh |
|
|
|
|
|
|
|
|
6 |
|
5 |
STE = 11h (4,0) |
|
CMO = СМ0 + 257h |
|
|
|
|
|
|
|
|
7 |
|
6 |
STE = 10h (4) |
|
CMO = СМ0 + 4АЕh |
|
|
|
|
|
|
|
|
9 |
|
7 |
STE = 06h (2,1) |
|
CMO = СМ0 + 4АЕh |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Таблица 3.4 |
|
Загружаемые регистры обработчика СМ1 |
|||||
|
|
|
|
|
|
|
Момент вре- |
|
|
|
|
|
|
мени входа в |
№ вхо- |
Значения, загружаемые |
|
Значения, загружае- |
||
обработчик |
да |
|
|
в регистр RTE |
|
мые в регистр СМ1 |
прерывания |
|
|
|
|
|
|
|
|
|
|
|
|
|
4 |
1 |
|
RTE = RTE(ORL)1Ch |
|
CM1 = СМ1 + 4AEh |
|
|
|
|
|
(4,3,2) |
|
|
|
|
|
|
|
|
|
6 |
2 |
|
RTE = RTE(ORL)10h |
|
CM1 = СМ1 + 4AEh |
|
|
|
|
|
(4) |
|
|
|
|
|
|
|
|
|
8 |
3 |
|
RTE = RTE(ORL)22h |
|
CM1 = СМ1 + 257h |
|
|
|
|
|
(5,1) |
|
|
|
|
|
|
|
|
|
9 |
4 |
|
RTE = RTE(ORL)11h |
|
CM1 = СМ1 + 257h |
|
|
|
|
|
(4,0) |
|
|
|
|
|
|
|
|
|
10 |
5 |
|
RTE = RTE(ORL)03h |
|
CM1 = СМ1 + 95Ch |
|
|
|
|
|
(1,0) |
|
|
|
|
|
|
|
|
|
94
|
|
|
Таблица 3.5 |
Загружаемые регистры обработчика СМ2 |
|||
|
|
|
|
Момент времени |
№ |
Значения, загружае- |
Значения, загру- |
входа в обработ- |
вхо- |
жаемые в регистр |
|
чик прерывания |
да |
мые в регистр RTE |
СМ2 |
СМ2 |
|
||
|
|
|
|
|
|
|
|
1 |
1 |
|
CM2 = СМ2 + 257h |
|
|
|
|
2 |
2 |
RTE = RTE(XRL)C0h |
CM2 = СМ2 + 257h |
|
|
(6) |
|
|
|
|
|
3 |
3 |
RTE = RTE(XRL)C0h |
CM2 = СМ2 + 4AEh |
|
|
(7) |
|
|
|
|
|
5 |
4 |
|
CM2 = СМ2 + 257h |
|
|
|
|
6 |
5 |
RTE = RTE(XRL)C0h |
CM2 = СМ2 + 257h |
|
|
(6) |
|
|
|
|
|
7 |
6 |
RTE = RTE(XRL)C0h |
CM2 = СМ2 + 95Ch |
|
|
(7) |
|
|
|
|
|
Далее приводится текст программы для формирования данной многоканальной последовательности временных интервалов.
$NOMOD51 |
;отмена определения SFR ядра 8051 |
$INCLUDE(PCF552.INC) |
;определение SFR контроллера |
PCF80552 |
|
;========================================= секция инициали-
зации |
|
|
ORG 8000h |
|
|
MOV |
TM2CON,#81h |
;16-ти разрядное переполнение Т2, |
|
|
;предделитель=1, Fosc/12 |
MOV |
R0,#00h |
;сброс номера входа в обработчик |
|
|
;прерывания СМ0 |
MOV |
R1,#00h |
;сброс номера входа в обработчик |
|
|
;прерывания СМ1 |
MOV |
R2,#00h |
;сброс номера входа в обработчик |
MOV |
P4,#00h |
;прерывания СМ2 |
|
||
MOV |
IEN0,#80h |
;разрешение всех прерываний |
MOV |
IEN1,#80h |
;разрешение прерывания при |
|
|
;переполнении Т2 |
|
|
95 |
LJMP $
;==============================обработчик прерывания СМ0 ORG 805Bh
LJMP MET_STE
;============================= обработчик прерывания СМ1 ORG 8063h
LJMP MET_RTE
;============================== обработчик прерывания СМ2
ORG |
806Bh |
|
LJMP |
MET_TOG |
|
;============================== обработчик прерывания T2 |
||
ORG |
8073h |
|
CLR |
T2OV |
;сброс флага 16-ти разрядного |
|
|
;переполнения таймера Т2 |
MOV |
RTE,#83h |
;переключение Р4.7 в момент |
|
|
;времени (1) Р4.1 и Р4.0 в |
|
|
;момент времени (4) |
MOV |
STE,#06h |
;переключение Р4.2 и Р4.1 в |
|
|
;момент времени (1) |
MOV |
CMH0,#02h |
;момент времени (1) переключения |
MOV |
CML0,#57h |
;компаратора СМ0 |
MOV |
CMH1,#09h |
;момент времени (4) переключения |
MOV |
CML1,#5Ch |
;компаратора СМ1 |
MOV |
CMH2,#02h |
;момент времени (1) переключения |
MOV |
CML2,#57h |
;компаратора СМ2 |
MOV |
IEN1,#70h |
;запрет прерывания от |
|
|
;переполнения Т2 и разрешение |
|
|
;прерываний от СМ0,СМ1 и СМ2 |
CLR |
CMI0 |
;сброс флага прерывания от |
|
|
;компаратора СМ0 |
CLR |
CMI1 |
;сброс флага прерывания от |
|
|
;компаратора СМ1 |
CLR |
CMI2 |
;сброс флага прерывания от |
|
|
;компаратора СМ2 |
RETI |
|
;возврат из обработчика прерывания |
|
|
;от 16-ти разрядного переполнения |
|
|
;таймера Т2 |
;============================вход в обработчик прерывания СМ0
MET_STE: |
|
|
CLR |
CMI0 |
;сброс флага прерывания от |
|
|
;компаратора СМ0 |
INC |
R0 |
;инкремент номера входа в обработчик |
|
|
;прерывания СМ0 |
CJNE |
R0,#01h,M11 |
;если номер входа=1 |
|
|
96 |
MOV |
STE,#21h |
;переключение Р4.5 и Р4.0 в |
|
|
;момент времени (1) |
CLR |
C |
;сброс флага переполнения |
MOV |
A,CML0 |
;загрузка в СМ0 момента времени |
ADD |
A,#57h |
;переключения (2) |
|
||
MOV |
CML0,A |
|
MOV |
A,CMH0 |
|
ADDC |
A,#02H |
|
MOV |
CMH0,A |
|
LJMP |
EX_STE |
;на выход из обработчика |
;====================================================== |
||
M11: CJNE |
R0,#02h,M12 |
;если номер входа=2 |
MOV |
STE,#10h |
;переключение Р4.4 в момент |
CLR |
C |
;времени (3) |
|
||
MOV |
A,CML0 |
;загрузка в СМ0 момента времени |
ADD |
A,#57h |
;переключения (3) |
|
||
MOV |
CML0,A |
|
MOV |
A,CMH0 |
|
ADDC |
A,#02H |
|
MOV |
CMH0,A |
|
LJMP |
EX_STE |
;на выход из обработчика |
;====================================================== |
||
M12: CJNE |
R0,#03h,M13 |
;если номер входа=3 |
MOV |
STE,#08h |
;переключение Р4.3 в момент |
CLR |
C |
;времени (4) |
|
||
MOV |
A,CML0 |
;загрузка в СМ0 момента времени |
ADD |
A,#57h |
;переключения (4) |
|
||
MOV |
CML0,A |
|
MOV |
A,CMH0 |
|
ADDC |
A,#02H |
|
MOV |
CMH0,A |
|
LJMP |
EX_STE |
;на выход из обработчика |
;====================================================== |
||
M13: CJNE |
R0,#04h,M14 |
;если номер входа=4 |
MOV |
|
STE,#02h;переключение Р4.1 в момент |
CLR |
C |
;времени (6) |
|
||
MOV |
A,CML0 |
;загрузка в СМ0 момента времени |
ADD |
A,#0AEh |
;переключения (6) |
|
||
MOV |
CML0,A |
|
|
|
97 |
MOV |
A,CMH0 |
|
ADDC |
A,#04H |
|
MOV |
CMH0,A |
|
LJMP |
EX_STE |
;на выход из обработчика |
;====================================================== |
||
M14: CJNE |
R0,#05h,M15 |
;если номер входа=5 |
MOV |
STE,#11h |
;переключение Р4.4 И Р4.0 в момент |
CLR |
C |
;времени (7) |
|
||
MOV |
A,CML0 |
;загрузка в СМ0 момента времени |
ADD |
A,#57h |
;переключения (7) |
|
||
MOV |
CML0,A |
|
MOV |
A,CMH0 |
|
ADDC |
A,#02H |
|
MOV |
CMH0,A |
|
LJMP |
EX_STE |
;на выход из обработчика |
;====================================================== |
||
M15: CJNE |
R0,#06h,M16 |
;если номер входа=6 |
MOV |
STE,#10h |
;переключение Р4.4 в момент |
CLR |
C |
;времени (9) |
|
||
MOV |
A,CML0 |
;загрузка в СМ0 момента времени |
ADD |
A,#0AEh |
;переключения (9) |
|
||
MOV |
CML0,A |
|
MOV |
A,CMH0 |
|
ADDC |
A,#04H |
|
MOV |
CMH0,A |
;на выход из обработчика |
LJMP |
EX_STE |
|
;====================================================== |
||
M16: |
|
;если номер входа=7 |
MOV |
STE,#06h |
;переключение Р4.2 И Р4.1 в момент |
CLR |
C |
;времени (1) |
|
||
MOV |
A,CML0 |
;загрузка в СМ0 момента времени |
ADD |
A,#0AEh |
;переключения (1) |
|
||
MOV |
CML0,A |
|
MOV |
A,CMH0 |
|
ADDC |
A,#04H |
|
MOV |
CMH0,A |
|
MOV |
R0,#00h |
;сброс номера входа в обработчик |
EX_STE: |
|
|
RETI |
|
;возврат из обработчика прерывания |
|
|
;от компаратора СМ0 |
|
|
98 |
;======================================================
MET_RTE: |
|
|
CLR |
CMI1 |
;сброс флага прерывания от |
|
|
;компаратора СМ1 |
INC |
R1 |
;инкремент номера входа в обработчик |
CJNE |
R1,#01h,M21 |
;если номер входа=1 |
MOV |
A,RTE |
;переключение Р4.4,Р4.3 и Р4.2 в |
ANL |
A,#0C0h |
;момент времени (6) |
|
||
ORL |
A,#1Ch |
|
MOV |
RTE,A |
|
CLR |
C |
|
MOV |
A,CML1 |
;загрузка в СМ1 момента времени |
ADD |
A,#0AEh |
;переключения (6) |
|
||
MOV |
CML1,A |
|
MOV |
A,CMH1 |
|
ADDC |
A,#04H |
|
MOV |
CMH1,A |
|
LJMP |
EX_RTE |
;на выход из обработчика |
;====================================================== |
||
M21 CJNE |
R1,#02h,M22 |
;если номер входа=2 |
MOV |
A,RTE |
;переключение Р4.4 в момент времени (8) |
ANL |
A,#0C0h |
|
ORL |
A,#10h |
|
MOV |
|
RTE,A |
;MOV |
RTE,#10h |
|
CLR |
C |
|
MOV |
A,CML1 |
;загрузка в СМ1 момента времени |
ADD |
A,#0AEh |
;переключения (8) |
|
||
MOV |
CML1,A |
|
MOV |
A,CMH1 |
|
ADDC |
A,#04H |
|
MOV |
CMH1,A |
|
LJMP |
EX_RTE |
;на выход из обработчика |
;====================================================== |
||
M22: CJNE |
R1,#03h,M23 |
;если номер входа=3 |
MOV |
A,RTE |
;переключение Р4.5 и Р4.1 в |
ANL |
A,#0C0h |
;момент времени (9) |
|
||
ORL |
A,#22h |
|
MOV |
RTE,A |
|
;MOV |
RTE,#22h |
|
CLR |
C |
|
|
|
99 |
MOV |
A,CML1 |
;загрузка в СМ1 момента времени |
ADD |
A,#57h |
;переключения (9) |
|
||
MOV |
CML1,A |
|
MOV |
A,CMH1 |
|
ADDC |
A,#02H |
|
MOV |
CMH1,A |
|
LJMP |
EX_RTE |
;на выход из обработчика |
;====================================================== |
||
M23: CJNE |
R1,#04h,M24 |
;если номер входа=4 |
MOV |
A,RTE |
;переключение Р4.4 и Р4.1 в |
ANL |
A,#0C0h |
;момент времени (10) |
|
||
ORL |
A,#11h |
|
MOV |
RTE,A |
|
;MOV |
RTE,#11h |
|
CLR |
C |
|
MOV |
A,CML1 |
;загрузка в СМ1 момента времени |
ADD |
A,#57h |
;переключения (10) |
|
||
MOV |
CML1,A |
|
MOV |
A,CMH1 |
|
ADDC |
A,#02H |
|
MOV |
CMH1,A |
|
LJMP |
EX_RTE |
;на выход из обработчика |
;====================================================== |
||
M24: |
|
;если номер входа=5 |
MOV |
A,RTE |
;переключение Р4.1 и Р4.0 в |
ANL |
A,#0C0h |
;момент времени (4) |
|
||
ORL |
A,#03h |
|
MOV |
RTE,A |
|
;MOV |
RTE,#03h |
|
CLR |
C |
|
MOV |
A,CML1 |
;загрузка в СМ1 момента времени |
ADD |
A,#5Ch |
;переключения (4) |
|
||
MOV |
CML1,A |
|
MOV |
A,CMH1 |
|
ADDC |
A,#09H |
|
MOV |
CMH1,A |
|
MOV |
R1,#00h |
;сброс номера входа в обработчик |
EX_RTE: |
|
|
RETI |
|
;возврат из обработчика прерывания |
;от компаратора СМ1 ;======================================================
100