Форум программистов, компьютерный форум CyberForum.ru

как исправить ошибку outportb(0x43,0x36); /* Управляющий байт */ - C++

Восстановить пароль Регистрация
 
Hunter557
13 / 13 / 0
Регистрация: 20.02.2010
Сообщений: 35
30.11.2011, 22:32     как исправить ошибку outportb(0x43,0x36); /* Управляющий байт */ #1
Доброго времени суток. Есть программка для управления таймером с такими параметрами: R= 0 - 1 ; F(x)=y=50*sin(x/(10+R))+150 ; Частота=36.4 Гц
И соответственно код:
C++
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
    #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=(іnt)(50*sin(x/(10+ random(2)))+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);
    }
Выдает ошибку в 46 строке:
outportb(0x43,0x36); /* Управляющий байт */
Ошибка:
Bad call of intrinsic function
Как можно исправить этот баг?

использую Turbo C++ 3.1
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.11.2011, 22:32     как исправить ошибку outportb(0x43,0x36); /* Управляющий байт */
Посмотрите здесь:

Как исправить ошибку? C++
Как исправить ошибку C++
C++ Как исправить ошибку?
C++ Как исправить ошибку?
C++ Как исправить ошибку?
Как исправить ошибку? C++
Как исправить ошибку? C++
Как исправить ошибку? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 06:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru