Государственный комитет Российской Федерации
по высшему образованию
Санкт-Петербургский государственный электротехнический университет
Кафедра ИИСТ
Лабораторная работа №6
Студенты: Виноградов К. ãð. 6561
Евдокимов С.
Преподаватель: Королев П.Г.
Санкт-Петербург
Задание.
Организовать сбор данных по указанным каналам АЦП. Каждый результат должен располагаться в ячейке памяти начиная с младшего бита и сопровождаться номером канала.
Параметр: 4
Разрядность: 10
Время выборки: 4.25
Время преобразования: 22.875
Память для результатов: внешняя
Количество отсчетов: 200
Номер канала: 6,7
Резим обмена: по готовности
Алгоритм.
Выбрать режим работы АЦП ( способ задания времени преобразования ):
режим совместимости с 80С196КВ;
регистр AD_TIME;
Выбор производится путем обращения к регистру управления IOC2. Для этого выбирается окно, в котором IOC2 доступен для записи ( Hwindow15 ). В нашем случае регистру IOC2 нужно присвоить значение #00001000h . Т. к. третий разряд регистра IOC2 отвечает за способ задания времени преобразования, для выбора регистра AD_TIME мы устанавливаеи его в единицу . Четвертый разряд нужен для работы в режиме, совместимом с 80С196КВ, поэтому в него мы записываем нуль.
Если мы используем регистр AD_TIME, нам нужно просчитать коды SAM и CONV, где SAM–биты с 7 по 5 регистра AD_TIME, точно определяющие время выборки. SAM должен быть от 1 до 7 включительно.
Для подсчета значения SAM используется формула: ,где -время выборки, в нашем случае 4,25 мкс; -частота XTAL1, равная 8 МГц. После подстановки заданных значений в формулу, получим SAM=4 (100).
CONV –биты с 4 по 0 регистра AD_TIME, точно определяющие время преобразования. CONV должен быть от 2 до 31 включительно.
Для подсчета значения CONV используется формула : ,где -время преобразования, в нашем случае 22,875 мкс. После подстановки заданных значений в формулу, получим CONV=9 (01001).
Далее требуется загрузить регистр AD_TIME, предварительно выбрав окно Hwindow1. В нашем случае регистру AD_TIME присваивается значение #11111h в соответствии с расчитанными значениями SAM и CONV.
С помощью регистра управления AD_COMMAND выбираем номер канала, способ запуска и разрядность. Для этого присваиваем ему значение #00001110h (6 канал) и #00001111h (7 канал).Т. к. 7-5 разряды зарезервированы, в них записываем 0. Четвертый разряд отвечает за разрядность, его устанавливаем в 0 (10 разрядное преобразование). Третий разряд определяет, когда начать преобразование, его устанавливаем в 1(немедленно). Разряды со 2 по 0 определяют номер канала. Обнаружить факт завершения преобразования:
готовность в регистре AD_RESULT;
флаг в INT_PEND;
запрос на прерывание.
Мы будем пользоваться битом состояния регистра AD_RESULT.
По выполнении условия завершения преобразования считываем результат и сохраняем его во внешней памяти. Совокупность результатов должна быть представлена в виде массива.
Листинг программы:
MCS-96 MACRO ASSEMBLER D_LAB 05/15/10
21:37:32 PAGE 1
DOS D.40 (046-N) MCS-96 MACRO ASSEMBLER, V1.3
SOURCE FILE: lab_4_4.a96
OBJECT FILE: lab_4_4.obj
CONTROLS SPECIFIED IN INVOCATION COMMAND: <none>
LOC OBJECT STMT SOURCE STATEMENT
1 ;****************************************************************************
2 d_lab MODULE main
3 ; Бригада ³4
4 ; Виноградов К.Ю & Евдокимов С.Н.
5 $nolist ; подавление листинга
71 ;****************************************************************************
72 ; внутренние параметры
73 ;****************************************************************************
9000 74 dseg at 9000h
9000 75 data_1: dsw 200 ; Массив 1 для результатов
9190 76 data_2: dsw 200 ; Массив 2 для результатов
0030 77 rseg at (30h) ; сегмент регистров
0030 78 count: dsw 1 ; счетчик
0032 79 ptr_1: dsw 1 ; указатель 1
0034 80 ptr_2: dsw 1 ; указатель 2
0036 81 buf: dsw 1 ; промежуточные данные
82
83 ;****************************************************************************
84 ;блок внешних связей
85 ;****************************************************************************
86 ;****************************************************************************
87 ;ââîä:
88 ;вывод:
89 ;****************************************************************************
8100 90 cseg at 8100h ; сегмент кода программы
8100 FA 91 di ; запретить прерывания
8101 A1640030 92 ld count,#100 ; счетчик на 100 элементов
8105 A1009032 93 ld ptr_1,#data_1 ; указатель на 1 элемент
массива 1
8109 A1909134 94 ld ptr_2,#data_2 ; указатель на 1 элемент
массива 2
810D B10014 95 ldb wsr, #0 ;
8110 B1080B 96 ldb ioc2, #00001000b ;
8113 B10114 97 ldb wsr, #01 ; в окне 1 доступен регистр
AD_TIME
8116 B18903 98 ldb ad_time, #10001001b ; Tsam Tconv
8119 B10F14 99 ldb wsr, #15 ;
811C B10014 100 loop1: ldb wsr, #0 ; 6 k
811F B10E02 101 ldb ad_command, #00001110b ; 8-битное
преобразование
8122 3B02FD 102 loop2: jbs ad_result, 3, loop2 ; переход
8125 A00236 103 ld buf, ad_result ; запись значения регистра
ad_result
8128 080636 104 shr buf, #6 ; сдвиг на 6 разрядов
812B C23336 105 st buf, [ptr_1]+ ; сохранение результата в
массиве
812E A1000036 106 ld buf, #0 ; обнуление
8132 B00236 107 ldb buf, ad_result ; запись значения регистра
ad_result
8135 710736 108 andb buf, #00000111b ; логическое сложение
8138 C23336 109 st buf, [ptr_1]+ ; сохранение результата в
массиве
813B A1000036 110 ld buf, #0 ; обнуление
813F B10F02 111 ldb ad_command, #00001111b ; 8-битное
преобразование
8142 3B02FD 112 loop3: jbs ad_result, 3, loop3 ; переход
8145 A00236 113 ld buf, ad_result ; запись значения регистра
ad_result
8148 080636 114 shr buf, #6 ; сдвиг на 6 разрядов
814B C23536 115 st buf, [ptr_2]+ ; сохранение результата в
массиве
814E A1000036 116 ld buf, #0 ; обнуление
MCS-96 MACRO ASSEMBLER D_LAB 05/15/10
21:37:32 PAGE 2
LOC OBJECT STMT SOURCE STATEMENT
8152 B00236 117 ldb buf, ad_result ; запись значения регистра
ad_result
8155 710736 118 andb buf, #00000111b ; логическое сложение
8158 C23536 119 st buf, [ptr_2]+ ; сохранение результата в
массиве
815B A1000036 120 ld buf, #0 ; обнуление
815F E130BA 121 djnzw count, loop1 ; счетчик сравнивается с 0,
вычитается 1 и выполняет
ñÿ loop1.
8162 F0 122 ret ;
123 ;*****************************************************************************
8163 124 END
MCS-96 MACRO ASSEMBLER D_LAB 05/15/10
21:37:32 PAGE 3
SYMBOL TABLE LISTING
--------------------
N A M E VALUE ATTRIBUTES
AD_COMMAND. . . . . . . . . . . 0002H NULL ABS BYTE
AD_RESULT . . . . . . . . . . . 0002H NULL ABS BYTE
AD_RESULT_HI. . . . . . . . . . 0003H NULL ABS BYTE
AD_RESULT_LO. . . . . . . . . . 0002H NULL ABS BYTE
AD_TIME . . . . . . . . . . . . 0003H NULL ABS BYTE
BAUD_RATE . . . . . . . . . . . 000EH NULL ABS BYTE
BUF . . . . . . . . . . . . . . 0036H REG ABS WORD
COUNT . . . . . . . . . . . . . 0030H REG ABS WORD
D_LAB . . . . . . . . . . . . . ----- MODULE MAIN STACKSIZE(0)
DATA_1. . . . . . . . . . . . . 9000H DATA ABS WORD
DATA_2. . . . . . . . . . . . . 9190H DATA ABS WORD
HSI_MODE. . . . . . . . . . . . 0003H NULL ABS BYTE
HSI_STATUS. . . . . . . . . . . 0006H NULL ABS BYTE
HSI_TIME. . . . . . . . . . . . 0004H NULL ABS WORD
HSO_COMMAND . . . . . . . . . . 0006H NULL ABS BYTE
HSO_TIME. . . . . . . . . . . . 0004H NULL ABS WORD
IMASK1. . . . . . . . . . . . . 0013H NULL ABS BYTE
INT_MASK. . . . . . . . . . . . 0008H NULL ABS BYTE
INT_MASK1 . . . . . . . . . . . 0013H NULL ABS BYTE
INT_PEND. . . . . . . . . . . . 0009H NULL ABS BYTE
INT_PEND1 . . . . . . . . . . . 0012H NULL ABS BYTE
INT_PENDING . . . . . . . . . . 0009H NULL ABS BYTE
IOC0. . . . . . . . . . . . . . 0015H NULL ABS BYTE
IOC1. . . . . . . . . . . . . . 0016H NULL ABS BYTE
IOC2. . . . . . . . . . . . . . 000BH NULL ABS BYTE
IOC3. . . . . . . . . . . . . . 000CH NULL ABS BYTE
IOPORT0 . . . . . . . . . . . . 000EH NULL ABS BYTE
IOPORT1 . . . . . . . . . . . . 000FH NULL ABS BYTE
IOPORT2 . . . . . . . . . . . . 0010H NULL ABS BYTE
IOS0. . . . . . . . . . . . . . 0015H NULL ABS BYTE
IOS1. . . . . . . . . . . . . . 0016H NULL ABS BYTE
IOS2. . . . . . . . . . . . . . 0017H NULL ABS BYTE
IPEND1. . . . . . . . . . . . . 0012H NULL ABS BYTE
LOOP1 . . . . . . . . . . . . . 811CH CODE ABS ENTRY
LOOP2 . . . . . . . . . . . . . 8122H CODE ABS ENTRY
LOOP3 . . . . . . . . . . . . . 8142H CODE ABS ENTRY
PTR_1 . . . . . . . . . . . . . 0032H REG ABS WORD
PTR_2 . . . . . . . . . . . . . 0034H REG ABS WORD
PTSSEL. . . . . . . . . . . . . 0004H NULL ABS WORD
PTSSRV. . . . . . . . . . . . . 0006H NULL ABS WORD
PWM_CONTROL . . . . . . . . . . 0017H NULL ABS BYTE
PWM1_CONTROL. . . . . . . . . . 0016H NULL ABS BYTE
PWM2_CONTROL. . . . . . . . . . 0017H NULL ABS BYTE
R0. . . . . . . . . . . . . . . 0000H NULL ABS WORD
SBUF. . . . . . . . . . . . . . 0007H NULL ABS BYTE
SP. . . . . . . . . . . . . . . 0018H NULL ABS WORD
SP_CON. . . . . . . . . . . . . 0011H NULL ABS BYTE
SP_STAT . . . . . . . . . . . . 0011H NULL ABS BYTE
T2CAPTURE . . . . . . . . . . . 000CH NULL ABS WORD
T2CONTROL . . . . . . . . . . . 000CH NULL ABS BYTE
TIMER1. . . . . . . . . . . . . 000AH NULL ABS WORD
TIMER2. . . . . . . . . . . . . 000CH NULL ABS WORD
WATCHDOG. . . . . . . . . . . . 000AH NULL ABS BYTE
MCS-96 MACRO ASSEMBLER D_LAB 05/15/10
21:37:32 PAGE 4
N A M E VALUE ATTRIBUTES
WSR . . . . . . . . . . . . . . 0014H NULL ABS BYTE
ASSEMBLY COMPLETED, NO ERROR(S) FOUND.