|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Тексты программных модулей библиотеки
В программных модулях библиотеки обычно предусматривается контроль ошибок и выход из модуля по ошибкам задания исходных данных и по тайм-ауту.
#define Base 0x3A5
int set_mode(int regim) { if ((regim = = 5) || ((regim = = 6) || ((regim = = 9) || ((regim = = 10)) { _out(Base+10, regim); return 0; } return 1; }
int set_mux_chan(int chan) { if ((chan >15) || (chan <0)) { return 2; } _out(Base+4, chan); return 0; }
int get_ready(int Timeout) { t=0; do { t++; if (t>Timeout) return 3; } while ((_inp (Base+3) & 1)!= 1); return 0; } int adc_read(*data) { int data_lo,data_hi;
data_lo=_inp(Base+5); data_hi=_inp(Base+6); if (data_hi & 0x10) /*бит 5 установлен в 1 - переполнение*/ { return 4; } *data = (data_lo+(data_hi<<8)); return 0; }
int dac_out(int data) { _out(Base+8, (data & 0xFF)); _out(Base+9, ((data>>8) & 0xFF)); return 0; )
void adc_start() { _out(Base+7, 0); } Примеры программ Пример 1. /************************************************************/ /* Программа обеспечивает ввод 100 значений аналогового сигнала */ /*по всем 8 каналам мультиплексора. Запуск АЦП - программный, */ /*частота опроса - 100 Гц, */ /*************************************************************/ #include <conio.h> #include <windows.h> int i,j,r1,r2,status; int data[100][8]; main() { _outp(Base+10,9); /* Установка кода режима 1001 регистра режима */ /* Запуск АЦП - программный, условие готовности - от АЦП */ for (i=0;i<100;i++) { for(j=0;j<7;j++) { _out(Base+4,j); /* Включение j-го канала мультиплексора */ _out(Base+0,0); /* Сброс готовности АЦП */ _out(Base+7,0); /* Запуск АЦП */ status=0; while (status!= 1) status = _inp(0x3A5) & 1; r1=_inp(Base+5); {Чтение мл. байта вых. кода АЦП} r2=_inp(Base+6); {Чтение ст. байта вых. кода АЦП} data[i][j]=r1+(r2 << 8); {Формирование элемента выходного массива данных} } Sleep(10); } } Пример 2. /******************************************************************/ /* Программа обеспечивает вывод 4096 значений пилообразного */ /*аналогового сигнала длительностью 4096 мсек */ /******************************************************************/
#include <conio.h> #include <windows.h>
int i; main() { for (i=0;i<4096;i++) { _out(Base+,(i & 0x00ff); /*Вывод младшего байта числа i*/ _out(Base+9,(i & 0xff00) >> 8; /*Вывод старшего байта числа i*/ Sleep(1); } } Пример 3. /*******************************************************************/ /* Программа обеспечивает ввод цифрового кода через порт А ППИ и вывод */ /* в прерывистом режиме этого же кода через порт С ППИ */ /*******************************************************************/ #include <conio.h> #include <windows.h> int data; main() { _out(Base+19,90):=90; {Установка режима ППИ. Порт А - на ввод, } { порт В, С - на вывод} for(;;) { data:=_inp(Base+16); /*Ввод цифрового кода через порт А ППИ*/ _out(Base+18,data); /*Вывод data через порт С ППИ*/ Sleep(10); _out(Base+18,0); /*Сброс кода в регистре порта С ППИ*/ Sleep(10); } Пример 4. /*******************************************************************/ /* Функция обеспечивает загрузку кода времени KDT и запуск */ /*интервального таймера */ /*******************************************************************/ void InitTimer (void) { /*Установка режима 2 таймера (делитель частоты)*/ _out(Base+15,0x34); /*Загрузка управл. слова для СТ0*/ _out(Base+15,0x74); /*Загрузка управл. слова для СТ1*/ _out(Base+15,0x0B4); /*Загрузка управл. слова для СТ2*/ /*Загрузка кода времени в счетчики СТ0 и СТ1*/ _out (Base+12,0x0E8); /*Загрузка мл. байта кода 1000 в СТ0 */ _out (Base+12,0x03); /*Загрузка ст. байта кода 1000 в СТ0 */ _out(Base+13,KDT); /*Загрузка мл. байта кода KDT в СТ1 */ _out(Base+13,0); /*Загрузка ст. байта кода KDT в СТ1 */ /*Запуск таймера*/ _out(Base+11,3); }
Контрольные вопросы и задачи
1. Входы порта А ППИ соединены с выходами 8-разрядного тумблерного регистра. Составить программу ввода в ЭВМ аналогового сигнала с частотой 1 Гц по каналу М мультиплексора. Код номера канала читать с трех младших разрядов тумблерного регистра. 2. Входы порта А ППИ соединены с выходами 8-разрядного тумблерного регистра. Составить программу регистрации в ЭВМ с помощью АЦП аналогового сигнала с периодичностью 1 сек. Останов регистрации - при включении тумблера D0. 3. Составить программу ввода данных по 8 каналам. Интервал дискретности измерений - 10 мс задавать с помощью таймера, количество отсчетов - 10000. 4. Составить программу формирования и вывода с помощью имеющихся в составе модуля ЦАП сигнала управления Y=1+Cos(t)B, где t-время в мс. Количество точек за период синусоидального сигнала – 628. Считать, что масштаб преобразования ЦАП – 1мВ/ед. кода.
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.007 сек.) |