Лабораторная работа 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 |
Uд |
1.914 |
2252 |
08CC |