Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Текст программы. /*-------Лабораторная работа N6----------------*/





/*-------Лабораторная работа 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);

}







Date: 2015-05-22; view: 497; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.008 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию