русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2015-06-12; просмотров: 539; Нарушение авторских прав


/*-------Лабораторная работа N6----------------*/

/*-------"Управление таймером"------------------*/

 

/* Подключение стандартных заголовков */

#include <dos.h>

#include <math.h>

#include <stdlib.h>

#include <graphics.h>

#include <time.h>

#include <conio.h>

 

#define TIMEINT 8 /* Прерывание таймера */

#define NN 100 /* Максимальное количество показаний */

 

void interrupt (*oldtime)(); /* Новый обpаботчик пpеpываний таймеpа */

 

void interrupt newtime(); /* Старый обpаботчик пpеpываний таймеpа */

static int y[NN]; /* Накопитель показаний */

static int ny; /* Индекс в массиве y */

static int yc; /* Текущее значение */

static int kf; /* Счетчик вызовов oldtime */

union REGS rr; /* Запись нового вектора */

struct SREGS sr;

void *readvect(int in); /* Получение старого вектора */

void writevect(int in, void *h); /* Запись нового вектора */

/*-----------------------------------------------*/

void main()

{

unsigned oldtic=65535u; /* Старый коэфф. деления */

unsigned newtic=32768u; /* Новый коэфф. деления */

int dd, /* Графический драйвер */

 

m, /* Графический режим */

errorcode; /* Код ошибки */

double x; /* Аргумент функций sin и cos */

 

textbackground(0);

clrscr();

textattr(0x0a);

cprintf(" Лабораторная работа N6 ");

cprintf("\n Управление таймером ");

textattr(0x8e);

gotoxy(35,12);

cprintf("Please wait");

/* Программирование канала 0 */

outportb(0x43,0x36); /* Управляющий байт */

outportb(0x40,newtic&0x00ff); /* Младший байт счетчика */

outportb(0x40,newtic>>8); /* Старший байт счетчика */

ny=-1; /* Признак того, что АЦП еще не началось */

kf=15;

/* Подключение к вектору */



oldtime=readvect(TIMEINT);

writevect(TIMEINT,newtime);

/* Запуск "непрерывного процесса" */

randomize();

for (x=ny=0; ny<NN; x+=1)

yc=(int)(50*(sin(x/10)+cos(x/8))+random(11)+150);

/* Восстановление вектора */

writevect(TIMEINT,oldtime);

/* Восстановление канала 0 */

outportb(0x43,0x36); /* Управляющий байт */

outportb(0x40,oldtic&0x00ff); /* Младший байт счетчика */

outportb(0x40,oldtic>>8); /* Старший байт счетчика */

 

/* Вывод запомненных результатов */

dd=3; /* EGA, 16 цветов */

m=1; /* Режим 640*350 */

initgraph(&dd,&m,"");

/* проверка результата инициализации */

errorcode = graphresult();

if (errorcode != grOk) /* ошибка графического режима */

{

printf("Graphics error: %s\n", grapherrormsg(errorcode));

printf("Press any key to halt:");

getch();

exit(1); /* аварийное завершение */

}

setcolor(10);

settextstyle(0,0,2);

outtextxy(15,10,"Результати аналого-цифрового преобразования:");

 

setcolor(9);

rectangle(15,40,624,330);

setcolor(11);

for(ny=0; ny<NN; ny++)

{

circle(22+ny*6,330-y[ny]*1,2);

line(22+ny*6,330,22+ny*6,330-y[ny]*1);

}

setcolor(12);

settextstyle(0,0,1);

outtextxy(260,340,"Нажмите любую клавишу ...");

getch();

closegraph();

}

 

/* Новый обpаботчик пpеpиваний таймеpа */

void interrupt newtime()

{

if (--kf<0) {

/* Виклик oldtime — на 2-й раз */

(*oldtime)();

kf=1;

}

else /* иначе — сброс контроллера */

outportb(0x20,0x20);

if ((ny>=0) /* Если АЦП началось, */

&&(ny<NN)) /* и NN показаний еще не набрано, */

y[ny++]=yc; /* запоминание очередного показания */

}

 

/* Получение старого вектора */

void *readvect(int in)

{

rr.h.ah=0x35; rr.h.al=in;

intdosx(&rr,&rr,&sr);

return(MK_FP(sr.es,rr.x.bx));

}

 

/* Запись нового вектора */

void writevect(int in, void *h)

{

rr.h.ah=0x25;

rr.h.al=in;

sr.ds=FP_SEG(h);

rr.x.dx=FP_OFF(h);

intdosx(&rr,&rr,&sr);

}



<== предыдущая лекция | следующая лекция ==>
Описание алгоритма программы | Результаты работы программы


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.23 сек.