АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Тексты программных модулей библиотеки

Читайте также:
  1. Возможности стандартной графической библиотеки.
  2. Жизненный цикл программных средств компьютерных информационных технологий
  3. ЗАДАЧА ПОКРЫТИЯ СХЕМ НАБОРОМ КОНСТРУКТИВНЫХ МОДУЛЕЙ.
  4. ЗАДАЧА РАЗМЕЩЕНИЯ КОНСТРУКТИВНЫХ МОДУЛЕЙ
  5. ИДЕАЛЫ, ВЛАСТЬ И ХАРАКТЕР МОДУЛЕЙ
  6. Избранные тексты
  7. Избранные тексты
  8. Избранные тексты
  9. КЛАССИФИКАЦИЯ МЕТОДОВ ПРОЕКТИРОВАНИЯ ПРОГРАММНЫХ ПРОДУКТОВ
  10. Классификация служебных программных средств
  11. КЛАССЫ ПРОГРАММНЫХ ПРОДУКТОВ
  12. Культурная диффузия и ее современные контексты

 

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

 

#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мВ/ед. кода.

 

 


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.006 сек.)