Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Desktop / 3я лаба / LAB_31 / lab_3

.doc
Скачиваний:
9
Добавлен:
06.02.2015
Размер:
57.34 Кб
Скачать

$MOD812 ;присоединение модуля символов АDuC812

ADR EQU 5000H ;начальный адрес массива XRAM

LED EQU P3.4 ;биту P3.4 порта Р3 присваивается имя LED

CHAN EQU 0 ;номер входного канала АЦП = 0

RPL1 EQU 20H ;вспомогательная переменная

RPH1 EQU 21H ;вспомогательная переменная

VIB EQU 6 ;число выборок

;------------------------------------------------------------------------------------

;В программе используются следующие ячейки памяти:

;Ячейка 20Н используется макрокомандами PU и PO.

;Область XRAM (адреса 5000Н – 500ВН) используется для

;записи байтов выборок, читаемых из файла ADCdata.adc

;------------------------------------------------------------------------------------

;Определения макрокоманд

PU MACRO REG ;макрокоманда PU сохранения в стеке

MOV 20H,REG ;содержимого регистра

PUSH 20H

ENDM ;конец макроопределения

PO MACRO REG ;макрокоманда РО извлечения из стека

POP 20H ;содержимого регистра

MOV REG,20H

ENDM ;конец макроопределения

;------------------------------------------------------------------------------------

CSEG ;сегмент памяти программ

ORG 0000 ;начальный адрес сегмента 0000Н

JMP MAIN ;переход к главной программе

;------------------------------------------------------------------------------------

; Подпрограмма (ПП) обработки прерываний АЦП по адресу 0033Н.

;Управление сюда передается каждый раз после завершения очередного

;процесса преобразования Uвх АЦП. В ПП результаты преобразования АЦП

;выводятся во внешнее ОЗУ XRAM. В скобках указано число тактов выполнения

;каждой команды ПП обработки прерываний.

ORG 0033H

MOV A,ADCDATAL ;A = мл. байт результата преобразования АЦП (1)

MOVX @DPTR,A ;переслать результат преобразования в XRAM (2)

INC DPTR ;следующий адрес XRAM (2)

MOV A,ADCDATAH ;A = ст. 4 бита результата преобразования (1)

;АЦП (биты 3-0) и номер канала АЦП (биты 7-4)

MOVX @DPTR,A ;переслать результат преобразования в XRAM (2)

INC DPTR ;следующий адрес XRAM (2)

DJNZ R0,RTRN ;пока не сделаны все выборки, продолжить (2)

JMP SUM ;переход к вычислению среднего значения (2)

RTRN: RETI ;возврат из подпрограммы прерывания (2)

;------------------------------------------------------------------------------------

;Главная программа MAIN

ORG 004BH

MAIN: MOV DPTR,#ADR ;DPTR = начальный адрес массива в CSEG

MOV R0,#VIB ;R0 = начальное знач. счетчика числа выборок

;------------------------------------------------------------------------------------

;Установка конфигурации АЦП

;В регистре ADCCON1 задаются следующие режимы работы:

;Нормальный режим АЦП (биты 7,6 = 01).

;Коэффициент деления тактовой частоты АЦП = 4 (биты 5,4 =10).

;Число тактов задержки запуска АЦП = 1 (биты 3,2 = 00).

;Для запуска АЦП используется сигнал переполнения Т2 (бит 1 = 1).

;Внешний запуск АЦП по входу CONVST/ запрещен (бит 0 = 0).

MOV ADCCON1,#62h ;ADCCON1 = 62Н = 01100010

;В регистре ADCCON2 задаются следующие режимы работы:

;Режим ПДП запрещен (бит 6=0).

;Циклический (бит 5=0) и однократный (бит 4=0) запуски АЦП запрещены.

;Устанавливается 0-й канал преобразования (биты 3,2,1,0 = 0).

MOV ADCCON2,#CHAN ;ADCCON2 = 00Н - выбор канала и

;режима преобразования

;-------------------------------------------------------------------------------

;Инициализация таймера Т2

;Регистры перезагрузки RCAP2L и RCAP2Н, а также регистры TL2 и TН2 таймера 2

;загружаются начальными значениями для получения выдержки времени 1,665 мс = 1665 мкс.

;При загрузке Т2 числом FA01h период его перезагрузки равен расчетному значению ;выдержки времени 1665 мкс:

;Т2пер = (10000h-FA01h)*1.085 мкс = 05FF*1.085 мкс = 1535*1.085 мкс = 1665 мкс

MOV RCAP2L,#01h

MOV RCAP2H,#0FAh

MOV TL2,#01h

MOV TH2,#0FAh

;Разрешение прерываний и запуск Т2

SETB EA ;разрешить прерывания ADuC812

SETB EADC ;разрешить прерывания АЦП

SETB TR2 ;запуск Т2

;==============================================

;Фоновая программа

AGAIN: CPL LED ;инвертировать бит Р3.4

CALL DELAY ;задержка 100 мс

JMP AGAIN ;повторить цикл

;-------------------------------------------------------------------

;Вычисление суммы выборок Uвх

;Сумма находится в R3 (ст.байт) и R2 (мл. байт)

SUM: MOV DPTR,#ADR ;адрес первой выборки

MOV R0,#VIB ;число выборок

LCALL SUMMA

;--------------------------------------------------------------------

;Вычисление среднего значения Uвх за полупериод

;Среднее значение находится в R5 (ст.байт) и R4 (мл. байт)

;Остаток деления отбрасывается

MOV B,#VIB ;В = число выборок

LCALL DI1616

PU R4 ;сохранить значения R5 и R4 в

PU R5 ;стеке, используя макрокоманду РU

;-------------------------------------------------------------------

;Вычисление действующего значения Uвх

;Действующее значение находится в R7 и R6

MOV B,#10

MOV R7,5

MOV R6,4 ;сохранить ср. знач. в R7 и R6

MOV R3,5

MOV R2,4

LCALL DI1616 ;деление Uср/10

;Результат деления - в R5 и R4

;Сложение: Uд = Uср + 0,1*Uср = 1,1*Uср

MOV A,R6

ADD A,R4

MOV R6,A

MOV A,R7

ADDC A,R5

MOV R7,A ;R7, R6 - действующее значение

РО R5 ;восстановить из стека значения

РО R4 ;R5 и R4, используя макрокоманду РО

JMP $ ;останов программы

;==============================================

; Подпрограммы

;==============================================

;ПП SUMMA нахождения суммы выборок в ОЗУ

;Вход: DPTR = адрес начала выборок в ОЗУ

; R0 = число выборок

;Выход: R3 (ст. байт), R2 (мл. байт) суммы

;----------------------------------------------------------------

SUMMA: PUSH ACC

PUSH PSW

MOV R2,#0 ;мл. байт суммы

MOV R3,#0 ;ст. байт суммы

SM: MOVX A,@DPTR ;читать мл. байт

ADD A,R2

MOV R2,A ;R2=сумма мл. байтов

INC DPTR

MOVX A,@DPTR ;читать ст. байт

ANL A,#0FH ;выделить мл. тетраду байта

ADDC A,R3 ;сумма ст. байтов с учетом переносов

MOV R3,A ;R3=сумма ст. байтов

INC DPTR

DJNZ R0,SM

POP PSW

POP ACC

RET

;--------------------------------------------------------

;ПП DELAY, дающая задержку времени 100 мс

DELAY: MOV R7,#2

DLY1: MOV R6,#2

DJNZ R6,$ ;230*2.17 мкс = 500 мкс

DJNZ R7,DLY1 ;200*500 мкс = 100 мс

RET

;--------------------------------------------------------

;ПП DEDPTR декремента регистра DPTR

DEDPTR: PUSH ACC

PUSH PSW

MOV A,DPL

CLR C

SUBB A,#1

MOV DPL,A

MOV A,DPH

SUBB A,#0

MOV DPH,A

POP PSW

POP ACC

RET

;---------------------------------------------------

;ПП RP2 удвоения 16-разрядного слова

;Вход: RPL1-мл. байт

; RPH1-ст. байт

;Выход: RPL1-мл. байт

; RPH1-ст. байт

;-----------------------------------------------------

RP2: PUSH ACC

MOV A,RPL1

ADD A,RPL1

MOV RPL1,A

MOV A,RPH1

ADDC A,RPH1

MOV RPH1,A

POP ACC

RET

;------------------------------------------------------

;ПП DI1616 деления целых двоичных чисел без знака

;формата 16:8 = (16,8) и без проверки делителя на 0

;Вход: R3,R2 = делимое

; B = делитель

;Выход: R5,R4 = частное

; R3 = остаток

;При работе использует ПП RP2 и DEDPTR

;------------------------------------------------------

DI1616: PUSH ACC

PUSH PSW

PUSH 09

PUSH RPH1

PUSH RPL1

PUSH DPH

PUSH DPL

;Проверка случая "Делимое<делителя"

CJNE R3,#0,DI10

MOV A,R2

CLR C

SUBB A,B

JNC DI10

;Делимое<делителя

MOV R5,#0

MOV R4,#0

MOV 0BH,0AH ;R3<--(R2)

LJMP D7

DI10: MOV A,B

MOV R1,#8

CLR C

DI1: RLC A

INC R1

JNC DI1

RRC A

MOV B,A

DEC R1

MOV A,R1

SUBB A,#8

PUSH ACC

PUSH PSW

DI2: CLR A

CLR C

ADD A,R3

JB ACC.7,DI11

;Удвоение (R3,R2)

MOV RPH1,R3

MOV RPL1,R2

LCALL RP2

MOV R3,RPH1

MOV R2,RPL1

DEC R1

SJMP DI2

DI11: MOV R5,#0

MOV R4,#0

CLR C

SUBB A,B

MOV DPH,R5

MOV DPL,R4

INC DPTR

MOV R5,DPH

MOV R4,DPL

JNC D3I

MOV DPH,R5

MOV DPL,R4

LCALL DEDPTR

MOV R5,DPH

MOV R4,DPL

ADD A,B

D3I: MOV R3,A

CLR A

CLR C

ADD A,R1

JZ KOH

DI:

MOV RPH1,R5

MOV RPL1,R4

LCALL RP2

MOV R5,RPH1

MOV R4,RPL1

MOV RPH1,R3

MOV RPL1,R2

LCALL RP2

MOV R3,RPH1

MOV R2,RPL1

MOV A,R3

JC D4

CLR C

SUBB A,B

JNC D5I

ADD A,B

MOV R3,A

SJMP D6

D4: CLR C

SUBB A,B

D5I: MOV R3,A

MOV DPH,R5

MOV DPL,R4

INC DPTR

MOV R5,DPH

MOV R4,DPL

D6: DJNZ R1,DI

KOH: POP PSW

POP ACC

JZ D7

MOV B,A

CLR A

CLR C

ADD A,R3

DI3: RRC A

DJNZ B,DI3

MOV R3,A

D7: POP DPL

POP DPH

POP RPL1

POP RPH1

POP 09

POP PSW

POP ACC

RET

;-------------------------------------------------------------

END

Соседние файлы в папке LAB_31
  • #
    06.02.201534 б9ADC.ADC
  • #
    06.02.2015640 б8flashram.dat
  • #
    06.02.20158.68 Кб8lab_3.asm
  • #
    06.02.201557.34 Кб9lab_3.doc
  • #
    06.02.20151.06 Кб8LAB_3.HEX
  • #
    06.02.201526.47 Кб8LAB_3.LST