Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 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; Нарушение авторских прав |