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

передача прерываний - C++

Восстановить пароль Регистрация
 
megakatapuz
0 / 0 / 0
Регистрация: 02.01.2010
Сообщений: 4
02.01.2010, 14:27     передача прерываний #1
Смысл такой нужно создать прерывание использовав 2 канал таймера забить его в цикл и через линию dtr передавать(через ик-передатчик) потом через линию DCD(данные поступают в ик-приемник) принимать данные прерывания , подключив 0 канал таймера определить с какой частатой приходят эти прерывания.
P.S. реализовать в bc 3.1

Добавлено через 24 минуты
есть код который передает числа с 1 до 9, изменить его как то надо
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
#include <conio.h>
#include <math.h>
#include <stdio.h>
#include <dos.h>
#include <stdlib.h>
 
// OBYAVLENIE PEREMENNIH I KONSTANT
#define BASE 0x3f8
 
static unsigned char ch0_h, ch0_l;
unsigned char kb;
int i=0, i0=0, j=0;
double Freq=10;
int interflag=0;
 
// PRERIVANIYE PO NAJATIYU KLAVISH
void interrupt (*SvInt09)(...);
void interrupt NewInt09(...)
 {disable();
    i0=0;
    kb=inportb(0x60);
    if((kb>=0x82)&&(kb<=0x8a))
        i=(kb-0x80)*(kb-0x80);
    outportb(0x20,0x20);
    enable();
 }
 
// PRERIVANIYE PO TAYMERU
void interrupt (*SvInt08)(...);
void interrupt NewInt08(...)
 {disable();
    interflag=1;
    outportb(0x20,0x20);
    enable();
 }
 
// VOSSTANOVLENIE RABOTI TAYMERA I OBRABOTCHIKOV PRERIVANIYA
void stop()
 {disable();
    outportb(0x43,0x36);
    outportb(0x40,ch0_l);
    outportb(0x40,ch0_h);
    setvect(0x08,SvInt08);
    setvect(0x09,SvInt09);
    enable();
 }
 
// NASTROIKA TAIMERA I ZAPUSK OBRABOTCHIKOV PRERIVANIY
void start()
 {disable();
    outportb(0x43,0x36);
    ch0_l=inportb(0x40);
    ch0_h=inportb(0x40);
    unsigned int c=(unsigned int)(1193180./Freq+0.5);
    outportb(0x40,(unsigned char)c&0x00ff);
    outportb(0x40,((unsigned char)c>>8)&0xff);
    SvInt08=getvect(0x08);
    SvInt09=getvect(0x09);
    setvect(0x08,NewInt08);
    setvect(0x09,NewInt09);
    atexit(stop);
    enable();
 }
 
// GLAVNAYA FUNKCIYA
void main()
 {unsigned int dcd=0x00, dcd0=0x00, dtr;
    clrscr();
    //ZAPUSK PRERVANIY
    start();
    outportb(BASE+4,inportb(BASE+4)|0x02);
    printf("\n   Vvodite chisla ot 1 do 9 dlya ego peredachi ili ESC dlya vihoda:\n   OUT - peredannye chisla\n   IN - prinyatie chosla\n\n   | OUT | IN |");
    dtr=inportb(BASE+4);
    if(dtr&0x01) dtr--;
    while(kb!=0x81)
     {while(interflag==1)
         {interflag=0;
            //PEREDACHA CHISLA
            if((i0==0)&&(i0!=i))
             {i0=i;
                printf("\n     %.0f",sqrt(i)-1);
             }
            if(i!=0)
             {outportb(BASE+4,dtr|0x01);
                i--;
             }
            if(i==0)
                outportb(BASE+4,dtr);
            //PRIYOM CHISLA
            dcd=~(inportb(BASE+6))>>7;
            dcd=dcd&0x01;
            if(dcd&0x01)
                j++;
            if((dcd0&0x01)&&(dcd0!=dcd))
                printf("\t   %.0f",sqrt(j)-1);
            if(dcd==0x00)
                j=0;
            if(dcd0!=dcd)
                dcd0=dcd;
         }
     }
 }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.01.2010, 14:27     передача прерываний
Посмотрите здесь:

Вызов функций через таблицу прерываний C++
C++ передача значения и передача переменной
Организация обработки прерываний C++
Как реализовать обработку прерываний в С++? C++
Организация прерываний в DOS, по средствам c++ C++
C++ Передача в функцию
C++ Обработчик прерываний
Обработка прерываний C++

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

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

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