MOV |
|
SEC,A |
|
;из таблицы |
|
|
INC |
TABTIME |
|
;TIME |
|
||
MOV |
|
TIK,#0 |
|
;сброс счетчика тиков |
|
|
SEL |
|
RB0 |
|
|
|
|
EN |
|
TCNTI |
|
;разрешение прерываний и |
||
STRT |
T |
|
|
;запуск таймера |
|
|
WAIT: |
CALL |
CMPTIME |
;ожидание |
заданного |
||
момента |
|
|
|
|
|
|
JF1 |
MAIN |
|
;переход по истечении часа |
|
||
JNC |
|
WAIT |
|
|
|
|
CALL |
PROCESS |
|
;переход к обработке данных |
|||
JMP |
WAIT |
|
;переход к ожиданию |
|
||
;Подпрограмма обработки данных |
|
|
||||
PROCESS: SEL |
|
RB0 |
|
|
|
|
;ввод в первый вектор из порта P1 |
|
|
||||
MOV R2,#MAXSIZE |
|
|
|
|||
MOV R0,#VECT1 |
|
|
|
|
||
LOOP1: |
IN |
A,P1 |
|
|
|
|
MOV |
|
@R0,A |
|
|
|
|
INC |
|
R0 |
|
|
|
|
DJNZ |
|
R2,LOOP1 |
|
|
|
|
;ввод во второй вектор из порта P2 |
|
|
||||
MOV R2,#MAXSIZE |
|
|
|
|||
MOV |
|
R0,#VECT2 |
|
|
|
|
LOOP2: |
IN |
A,P2 |
|
|
|
|
MOV |
|
@R0,A |
|
|
|
|
INC |
|
R0 |
|
|
|
|
DJNZ |
|
R2,LOOP2 |
|
|
|
|
;получение суммы и вывод в порт BUS |
|
|||||
MOV R2,#MAXSIZE |
|
|
|
|||
MOV R0,#VECT1 |
|
|
|
|
||
MOV |
|
R1,#VECT2 |
|
|
|
|
LOOP3: |
MOV |
|
A,@R1 |
|
|
|
ADD |
|
A,@R0 |
|
|
|
|
MOV @R0,A |
|
|
|
|
||
OUTL |
BUS,A |
|
|
|
||
INC |
R0 |
|
|
|
|
|
DJNZR2,LOOP3
RET
;Обработка прерывания от таймера каждые 20,48 мсек
;и перевод текущего времени в минуты и секунды
TINT: |
SEL |
RB1 |
|
INC |
TIK |
|
;увеличение счетчика тиков и |
MOV |
|
A,TIK |
;преобразование в |
CPL |
A |
;дополнительный |
|
INC |
A |
;код для сравнения |
|
ADD |
A,#49 |
|
;счетчик = 49 |
JNZ |
M |
;переход, если нет |
|
MOV |
|
TIK,#0 |
;иначе сброс счетчика тиков и |
INC |
SEC1 |
|
;увеличение счетчика секунд |
MOV A,SEC1 |
;преобразование в |
||
CPL |
A |
;дополнительный код |
|
INC |
A |
;счетчика секунд |
|
ADD |
A,#60 |
|
;тек. секунды = 60 |
JNZ |
M |
;переход, если нет |
|
MOV |
|
SEC1,#0 |
;иначе сброс счетчика секунд и |
INC |
MIN1 |
|
;увеличение счетчика минут |
MOV |
|
A,MIN1 |
;преобразование в |
CPL |
A |
;дополнительный код |
|
INC |
|
A |
;минут |
ADD A,#60 |
|
;тек. минуты = 60 |
|
JNZ |
M |
;переход если нет |
|
MOV MIN1,#0 |
;иначе сброс счетчика минут и |
||
CPL |
F1 |
;конца часа |
;установить признак |
|
|
|
|
M:RETR
;Подпрограмма сравнения текущего времени с заданным ;возвращает С=1, если времена равны и С=0 - если нет
CMPTIME: |
JF1 C0 |
;переход,если конец часа |
SEL |
RB1 |
|
MOV A,SEC1 |
;перевод счетчика |
|
CPL |
A |
;секунд в |
INC |
A |
;дополнительный |
MOV |
R2,A |
;код |
MOV A,SEC |
;и сравнение с |
|
ADD A,R2 |
;табличным значением |
|
CLR |
C |
;и возврат С = 0 |
JNZ |
C0 |
;переход если не равны |
|
MOV |
A,MIN1 |
;перевод счетчика |
||
|
CPL |
A |
;минут в |
|
|
|
INC |
A |
;дополнительный |
|
|
|
MOV |
R2,A |
|
;код |
|
|
MOV A,MIN |
|
;и сравнение с |
||
|
ADD A,R2 |
|
;табличным значением |
||
|
CLR |
C |
;и возврат С = 0 |
|
|
|
JNZ |
C0 |
|
;переход если не равны |
|
C1: |
|
MOV |
A,@TABTIME |
;подготовка новых |
|
|
MOV |
MIN,A |
;значений минут и |
||
|
INC |
TABTIME |
|
;секунд, |
|
|
MOV A,@TABTIME |
;заданных в таблице |
|||
|
MOV SEC,A |
|
;моментов времени для |
||
|
INC |
TABTIME |
|
;ввода данных |
|
|
CLR |
C |
;и возврат |
|
|
|
CPL |
C |
;С = 1 |
|
|
C0: |
|
RET |
|
|
|
;Заполнение векторов прерываний |
|
||||
DEFSEG ZERO,START=0 |
|
|
|||
SEG |
ZERO |
|
|
|
|
|
JMP |
MAIN |
|
;Переход к началу |
|
|
|
|
|
;программы при запуске |
|
DEFSEG TINTR,START=7 |
|
|
|||
SEG |
TINTR |
|
|
|
|
|
JMP |
TINT |
|
;Переход к программе обработке |
|
|
END |
|
;прерываний от таймера |
||
|
|
|
|
|
|
При отладке этой программы удобно использовать batфайл:
avmac48.exe prim.asm avlink prim=prim.obj -SY avsim48 aflprim.cmd -c1
вкотором используется командный файл prim.cmd, подключающий
кпортам Р1 и Р2 внешние воздействия из файлов p1.dat и p2.dat :
laprim IOP1.DAT Y
Op1
IOP2.DAT
Y
Op2
SY
Список литературы
1. Однокристальные микроЭВМ.М.:МИКАП,1994.-400с.
2. Сташин В.А., Урусов А.В., Мологонцева О.Ф. Проектирование цифровых устройств на однокристальных микроконтроллерах.- М.:Энергоатомиздат, 1990.-224с.
| 05_Холера |
| 10.4. Исследование регистров |
| 1112 |
| 12 |
| 1568 |
| 1673 |
| 17 |
| 1703 |
| 1885 |
| 2. Генераторы постоянного тока |