Скачиваний:
24
Добавлен:
15.09.2014
Размер:
3.37 Кб
Скачать
#include <stdio.h>
#include <dos.h>
#include <math.h>
#include <stdlib.h>
#include <graphics.h>
#include <time.h>
#include <conio.h>


#define INT 8           /* Прерывание таймера   */
#define N 100 /* Максимальное количество показаний */

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

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

static int y[N];  /* Накопитель показаний          */
static int ny;     /* Индекс в массиве y            */
static int yc;     /* Текущее значение              */
static int kf;     /* Счетчик вызовов oldtime       */



void main()
{
  unsigned StHz=65535u;  /* Старый коэфф. деления      */
  unsigned MyHz=16384u;  /* Новый коэфф. деления       */
  int dd,                  /* Графический драйвер        */


      m,                   /* Графический режим          */
      errorcode;           /* Код ошибки                 */
  double x;                /* Аргумент функций sin и cos */

  textbackground(0);
  clrscr();
  textattr(0x0a);
  cprintf("                                     Lab N1                     ");
  cprintf("                                                 Timer Control                 ");
  textattr(0x8e);
  gotoxy(35,12);
  cprintf("Please wait");
  /* Программирование канала 0 */
  outportb(0x43,0x36);                   /* Управляющий байт */
  outportb(0x40,MyHz&0x00ff); /* Младший байт счетчика */
  outportb(0x40,MyHz>>8);   /* Старший байт счетчика */
  ny=-1;            /* Признак того, что АЦП еще не началось */
  kf=7;
  /* Подключение к вектору */


  StInt = getvect(INT);
  setvect(INT,MyInt);


  /* Запуск "непрерывного процесса" */
  randomize();
  for (x=ny=0; ny<N; x+=1)
  {
	int k = (int) (x)%100;
	yc=(int)(1/2*k+100*sin(x/5)*random(3)+150);
  }
  /* Восстановление вектора */


  setvect(INT,StInt);   // восстановление стандартного обработчика прерывания


  /* Восстановление канала 0 */
  outportb(0x43,0x36);                   /* Управляющий байт */
  outportb(0x40,StHz&0x00ff); /* Младший байт счетчика */
  outportb(0x40,StHz>>8);   /* Старший байт счетчика */


  dd=3;
  m=1;
  initgraph(&dd,&m,"C:\\BORLANDC\\BGI");

  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,"Result of Arifmetic Numeric Convertion");


  setcolor(9);
  rectangle(15,40,624,330);
  setcolor(11);

  for(ny=0; ny<N; ny++)
  {
   circle(22+ny*6,190-y[ny]/3,2);
   line(22+ny*6,190,22+ny*6,190-y[ny]/3);
  }
  setcolor(3);
  line(17,190,623,190);
  setcolor(12);
  settextstyle(0,0,1);
  outtextxy(260,340,"Press any key ...");
  delay(100);
  getch();
  closegraph();


}

/* Новый обpаботчик пpеpиваний таймеpа */
void interrupt MyInt(...)
{
  if (--kf<0) {
    /* Виклик StInt - на 8-ой раз */
    (*StInt)();
    kf=7;
    }
  else /* иначе - сброс контроллера */
    outportb(0x20,0x20);
  if ((ny>=0)&&(ny<N))  /* и N показаний еще не набрано, */
  {
      //sound(ny*100);
      delay(50);
      nosound();
      y[ny++]=yc;        /* запоминание очередного показания */
  }
}
Соседние файлы в папке lab1sem