Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Desktop / Отчет5 вар.doc
Скачиваний:
14
Добавлен:
06.02.2015
Размер:
140.29 Кб
Скачать

Лабораторная работа 2 Ввод-вывод дискретной информации

Цель работы: исследование методов параллельного ввода-вывода дискретной информации микроконтроллера (МК)ADuC812.

Разработать программу, выполняющую ввод байта данных из заданного порта, проверку битов этого байта на наличие сигналов “0” или “1” и вывод мигающих битов через другой порт с заданной выдержкой времени. Для ввода байта данных использовать клавиатуру. Задания приведены в табл.

Вариант

5

Порт ввода

Р1

Порт вывода

Р0

Проверять биты порта ввода на значение

“4” на “1”

“0” на “0”

Мигающие биты порта вывода

4, 6, 0

Выдержка времени ПП Delay, мс

350

Тест программы.

$MOD812

LED0 EQU P0.0 ;биту 0 порта Р0 присваивается имя LED0

LED4 EQU P0.4 ;биту 4 порта Р0 присваивается имя LED4

ORG 0000H ;начальный адрес программы

MOV P0,#00 ;погасить светодиоды порта P0

CIKL 1: MOV A,P1 ;ввод байта из порта P1

ANL A,#01H ;выделить нулевой разряд

JNZ CIKL1 ;если в 0-м разряде не содержится "0", то ждать ее появления

;Если во втором разряде содержится "0", мигает светодиод P0.0

CIKL 2: LCALL DELAY ;вызов подпрограммы DELAY

CPL LED0 ;переключить светодиод P0.0

MOV A,P1 ;ввод байта из порта A

ANL A,#10H ;выделить четвертый разряд

JZ CIKL 2 ;если в 4-м разряде не содержится "1", то ждать ее появления

;Если в четвертом разряде содержится "1", мигает светодиод P0.4

CIKL 3: LCAL DELAY ;вызов подпрограммы DELAY

CPL LED4 ;переключить светодиод P0.4

LJMP CIKL 3 ;переход по CIKL 3

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

;Длительность цикла в 500 мкс определяется исходя из того,

;что команда “DJNZ R6,$” выполняется за 2 такта, т.е. за 2,17 мкс

DELAY:

MOV R7,#200

DLY1: MOV R6,#230

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

DJNZ R7,DLY1 ;700*500 мкс = 350 мс

RET

END

Лабораторная работа 3 Ввод и обработка аналоговой информации

Цель работы: исследование методов ввода аналоговой информации в микроконтроллере (МК)ADuC812.

Разработать программу чтения аналоговых сигналов и вычисления среднего и действующего значения по сделанным выборкам для своего варианта.

Вариант

5

Uref, В

3,5

Число выборок

6

Период Uвх, мс

24

Адрес XRAM, hex

5000

Вариант

5

Форма Uвх

Тест программы.

$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

Расчет выборок

Выборка

1

2

3

4

5

6

Сумма

выборок

Угол, град

0

30

60

90

120

150

-

Uвх.ацп, В

0

1,17

2,3

3.5

2,3

1,17

-

Uвых.ацп,DEC

0

1377

2706

4095

2706

1377

12284

Uвых.ацп,HEX

0000

0561

0A92

0FFF

0A92

0561

2FFC

Формат файла ADCdata.adc

0000

0561

0A92

0FFF

0A92

0561

Расчетные значения UсриUд

Вольт

DEC

HEX

Uср

1.74

2047

07FF

1.914

2252

08CC