Замена микросхемы 1827ВЕ1-0000000 в Г4-164 на AVR -МК - Измерительная техника - Ответ 14316328
09.03.2020, 05:06. Показов 21786. Ответов 228
Ответ
Данные с КОП
Код
Int3=1
Bit=/0=1 (don't read )
1)
prepare to read from LD using PIN34
Send SyncLD
read nDB0 (poke to nD0)
2)
prepare to read from LD using PIN34
Send SyncLD
read nDB1 (poke to nD1)
3)
prepare to read from LD using PIN34
Send SyncLD
read nDB2 (poke to nD2)
4)
prepare to read from LD using PIN34
Send SyncLD
read nDB3 (poke to nD3)
5)
prepare to read from LD using PIN34
Send SyncLD
read nDB4 (poke to nD4)
6)
prepare to read from LD using PIN34
Send SyncLD
read nDB5 (poke to nD5)
7)
prepare to read from LD using PIN34
Send SyncLD
read nDB6 (poke to nD6)
8)
prepare to read from LD using PIN34
Send SyncLD
read /0=1 (poke to nD7)
DBInput=~DBDBInput;
// теперь DBInput в положительной логике, как в посылаемых исходных кодах
// (на переключателях , логически ), старший бит равен 0
Send_data_accept
Добавлено через 42 минуты
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
| uint8_t GetBitInformLD ( )
{
SetPinsDefault1();
SetPin34Input();
SetAddrInformInLD();
//SetPin34Input();
if( CheckPin34In()==0) { return 0x00 ; } else { return 0x01 ; }
}
uint8_t GetByteLD( )
{
uint8_t db ;
// nLD0 ,nLD1,nLD2,nLD3,nLD4,nLD4,nLD5,nLD6, 1
db=0;
SetPin34Input();
//fix SendStrobeSync to 50 us only for LD ,remove set pin 34 out for this subroutine
SendPulseSync50us(ADDR_SYNC); //Pin36 to multiplexer ,Sync
if (GetBitInformLD ( ) ==0) { db|=0x01; } //nLD0
SendPulseSync50us(ADDR_SYNC); //Pin36 to multiplexer ,Sync
if (GetBitInformLD ( ) ==0) { db|=0x02; } //nLD1
SendPulseSync50us(ADDR_SYNC); //Pin36 to multiplexer ,Sync
if (GetBitInformLD ( ) ==0) { db|=0x04; } //nLD2
SendPulseSync50us(ADDR_SYNC); //Pin36 to multiplexer ,Sync
if (GetBitInformLD ( ) ==0) { db|=0x08; } //nLD3
SendPulseSync50us(ADDR_SYNC); //Pin36 to multiplexer ,Sync
if (GetBitInformLD ( ) ==0) { db|=0x10; } //nLD4
SendPulseSync50us(ADDR_SYNC); //Pin36 to multiplexer ,Sync
if (GetBitInformLD ( ) ==0) { db|=0x20; } //nLD5
SendPulseSync50us(ADDR_SYNC); //Pin36 to multiplexer ,Sync
if (GetBitInformLD ( ) ==0) { db|=0x40; } //nLD6
SendPulseSync50us(ADDR_SYNC); //Pin36 to multiplexer ,Sync
//if (GetBitInformLD ( ) ==0) { db|=0x80; } //n0
//SendPin38_Pulse1_20uS();
return db;
} |
|
Добавлено через 14 минут
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
|
void SendPin36Pulse1()
{
delay_us(1);
SetPin36High(); //send pulse
delay_us(50); //fix
SetPin36Low(); //not active
delay_us(40); //fix
}
void SendPin36Pulse2()
{
delay_us(1);
SetPin36High(); //send pulse
delay_us(40); //fix
SetPin36Low(); //not active
delay_us(40); //fix
}
void SendPulseSyncInLD( )
{
SetPinsDefault1();
SetPin34In();
SetAddrSync (ADR_SYNC);
SendPin36Pulse1();
}
void SendPulseSyncInGCD( )
{
SetPinsDefault1();
SetPin34In();
SetAddrSync ( ADDR_SYNC_POOL);
SendPin36Pulse2();
} |
|
Добавлено через 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
| uint8_t GetByteLD( )
{
uint8_t db ;
// nLD0 ,nLD1,nLD2,nLD3,nLD4,nLD4,nLD5,nLD6, 1
db=0;
SetPin34Input();
SendPulseSyncInLD( ); //Pin36 to multiplexer ,Sync
if (GetBitInformLD ( ) ==0) { db|=0x01; } //nLD0
SendPulseSyncInLD( ); //Pin36 to multiplexer ,Sync
if (GetBitInformLD ( ) ==0) { db|=0x02; } //nLD1
SendPulseSyncInLD( ); //Pin36 to multiplexer ,Sync
if (GetBitInformLD ( ) ==0) { db|=0x04; } //nLD2
SendPulseSyncInLD( ); //Pin36 to multiplexer ,Sync
if (GetBitInformLD ( ) ==0) { db|=0x08; } //nLD3
SendPulseSyncInLD( ); //Pin36 to multiplexer ,Sync
if (GetBitInformLD ( ) ==0) { db|=0x10; } //nLD4
SendPulseSyncInLD( ); //Pin36 to multiplexer ,Sync
if (GetBitInformLD ( ) ==0) { db|=0x20; } //nLD5
SendPulseSyncInLD( ); //Pin36 to multiplexer ,Sync
if (GetBitInformLD ( ) ==0) { db|=0x40; } //nLD6
SendPulseSyncInLD( ); //Pin36 to multiplexer ,Sync
if (GetBitInformLD ( ) ==0) { db|=0x80; } //n0
SendPulse_data_accept(); //optimize plce of this subroutine
return db;
}
uint8_t GetByteGCd( )
{
uint8_t db ;
//
db=0;
SendPulseSyncInGCD( ); //Pin36 to multiplexer ,SyncPool
if (GetBitInformGCd ( )==0) { db|=0x01; } //
SendPulseSyncInGCD( ); //Pin36 to multiplexer ,SyncPool
if (GetBitInformGCd ( ) ==0) { db|=0x02; } //
SendPulseSyncInGCD( ); //Pin36 to multiplexer ,SyncPool
if (GetBitInformGCd ( ) ==0) { db|=0x04; } //
SendPulseSyncInGCD( ); //Pin36 to multiplexer ,SyncPool
if (GetBitInformGCd ( ) ==0) { db|=0x08; } //
SendPulseSyncInGCD( ); //Pin36 to multiplexer ,SyncPool
if (GetBitInformGCd ( )==0) { db|=0x10; } //
SendPulseSyncInGCD( ); //Pin36 to multiplexer ,SyncPool
if (GetBitInformGCd ( ) ==0) { db|=0x20; } //
SendPulseSyncInGCD( ); //Pin36 to multiplexer ,SyncPool
if (GetBitInformGCd ( ) ==0) { db|=0x40; } //
SendPulseSyncInGCD( ); //Pin36 to multiplexer ,SyncPool
if (GetBitInformGCd ( ) ==0) { db|=0x80; } //
//fix sub
//optimize inversion of the data
return db;
} |
|
Добавлено через 40 минут
В нашей программе в сообщениях при нажатии кнопок бит ,посылаемый первым , отображается слева , когда валкодер крутят на 1 позицию по часовой стрелке, посылка равна восемь нулей. При ДУ ( при совпадении МАП , ложном ОИ, если ДУ истинно ,нет разадресации,нет ПНМ,ВНМ , когда горит светодиод ДУ ) прерывания с клавиатуры закрыты , опрос для кодов от валкодера и клавиатуры программно не подается.
Добавлено через 7 минут
Для совпадения наших битов с принятыми можно записать
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
| uint8_t GetByteGCd( )
{
uint8_t db ;
//
db=0;
//nr0;nc0;nr2;nr1;nc1;x;x;x
SendPulseSyncInGCD( ); //Pin36 to multiplexer ,SyncPool
if (GetBitInformGCd ( )!=0) { db|=0x01; } //
SendPulseSyncInGCD( ); //Pin36 to multiplexer ,SyncPool
if (GetBitInformGCd ( )!=0) { db|=0x02; } //
SendPulseSyncInGCD( ); //Pin36 to multiplexer ,SyncPool
if (GetBitInformGCd ( )!=0) { db|=0x04; } //
SendPulseSyncInGCD( ); //Pin36 to multiplexer ,SyncPool
if (GetBitInformGCd ( ) !=0) { db|=0x08; } //
SendPulseSyncInGCD( ); //Pin36 to multiplexer ,SyncPool
if (GetBitInformGCd ( )!=0) { db|=0x10; } //
SendPulseSyncInGCD( ); //Pin36 to multiplexer ,SyncPool
if (GetBitInformGCd ( )!=0) { db|=0x20; } //
SendPulseSyncInGCD( ); //Pin36 to multiplexer ,SyncPool
if (GetBitInformGCd ( )!=0) { db|=0x40; } //
SendPulseSyncInGCD( ); //Pin36 to multiplexer ,SyncPool
if (GetBitInformGCd ( )!=0) { db|=0x80; } //
7 6 5 4 3 2 1 0
x;x;x;nc1;nr1;nr2;nc0;nr0;
return db;
} |
|
, первый бит будет добавляться в младший разряд , последний в последние , а на положительность направления приращения проверяют сравнением байта скан-кода по прер 1 после приема 8 бит (каждый после СИ ОПР ) с нулем. Тогда записать скан -коды задом наперед и перевести в двоичные , обрабатывать по маске без 3 последних . Если с этим определились , программу можно упростить до "гридликовых" кодов, занося их в дефайны правильно .
Добавлено через 26 минут
Доработать эмулятор для возможности ввода с 2 и 3 дочерних окон ( делать окно активным, или уточнить как это сделать ) .
Добавлено через 14 минут
посмотреть в книге Петзольда (и т.д. ) .
Добавлено через 3 часа 54 минуты
В виртуалку можно добавить хендлеры контролов, заменяющих светодиоды, пробросив их от заданного дочернего окна
при вызове, а вот из окна в окно и с активным дочерним окном пока проблемы (не вводится, не делается активным, но кнопка нажимается, переписать ) :
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
| uint8_t GPIB_BYTE;
int ADL=0; //you can temporary set it into 1 and build alt. edition without ATN=1 layer
void SetLed( HWND hwnd , int ItemId, int led_on)
{
if(led_on){ SendMessage(GetDlgItem( hwnd, ItemId ) , BM_SETCHECK ,TRUE, 0);}
else { SendMessage(GetDlgItem( hwnd, ItemId ) , BM_SETCHECK ,FALSE, 0);}
return;
}
void SetRENLed(HWND hwnd, int ledren_on )
{
SetLed( hwnd, IDC_LED_REN, ledren_on);
return;
}
void SetPLLSegment(HWND hwnd,int segpll_on )
{
SetLed( hwnd, IDC_PLL_SEGMENT_M, segpll_on);
return;
}
void SetTextOutLD(HWND hwnd, uint8_t byte_ttl)
{
uint8_t byteout=~byte_ttl;
char edittxt[25] ;
int b[8];
byteout|=0x80;
if((byteout&0x01)!=0) { b[0]= 1 ; } else { b[0]= 0 ; }
if((byteout&0x02)!=0) { b[1]= 1 ; } else { b[1]= 0 ; }
if((byteout&0x04)!=0) { b[2]= 1 ; } else { b[2]= 0 ; }
if((byteout&0x08)!=0) { b[3]= 1 ; } else { b[3]= 0 ; }
if((byteout&0x10)!=0) { b[4]= 1 ; } else { b[4]= 0 ; }
if((byteout&0x20)!=0) { b[5]= 1 ; } else { b[5]= 0 ; }
if((byteout&0x40)!=0) { b[6]= 1 ; } else { b[6]= 0 ; }
if((byteout&0x80)!=0) { b[7]= 1 ; } else { b[7]= 0 ; }
sprintf(edittxt, "(8th)%d%d%d%d%d%d%d%d(1st)",b[7],b[6],b[5],b[4],b[3],b[2],b[1],b[0] );
//snprintf()
SetDlgItemText(hwnd,IDC_OUT_LD , edittxt );
}
int CheckMLA(HWND hwnd , uint8_t ByteVal )
{
if (ByteVal ==0x3F) {return 0; }
if( ((ByteVal &0x01)!=0)&& (IsDlgButtonChecked(hwnd, IDC_A1_TTL) )){
if( ((ByteVal &0x02)!=0)&& (IsDlgButtonChecked(hwnd, IDC_A2_TTL) )){
if( ((ByteVal &0x04)!=0)&& (IsDlgButtonChecked(hwnd, IDC_A3_TTL) )){
if( ((ByteVal &0x08)!=0)&& (IsDlgButtonChecked(hwnd, IDC_A4_TTL) )){
if( ((ByteVal &0x10)!=0)&& (IsDlgButtonChecked(hwnd, IDC_A5_TTL) )){
return 1;
}}}}}
return 0;
}
void GetByteGPIBFromEditbox( HWND hwnd )
{
int editlength;
char edittxt[3]={'2','0',0};
uint8_t ByteVal=0x00;
GetDlgItemText(hwnd, IDC_INPUT_DB_GPIB , edittxt, 3);
editlength=strlen(edittxt);
ByteVal =(uint8_t ) atoi(edittxt ) ;
if(IsDlgButtonChecked(hwnd, IDC_REN_TTL) ){
if(!IsDlgButtonChecked(hwnd, IDC_IFC_TTL) ){
if( IsDlgButtonChecked(hwnd, IDC_ATN_TTL) ){
if( ByteVal ==0x01){ ADL=0;SetRENLed( hwnd,0 ); }
// if( ByteVal ==0x14){ /* DCL restart controller */ ADL=0; SetRENLed( hwnd,0 );}
//if(( ByteVal ==0x04)&&(ADL==1) ){ /* SDC restart controller */ ADL=0; SetRENLed( hwnd,0 );}
if((ByteVal&0b11110000)==0x20)
{
if(CheckMLA( hwnd , ByteVal )) { ADL=1; }
//fix logic
}
}}}
if (ADL==1) { SetRENLed( hwnd,1 ); } else { SetRENLed( hwnd,0 ); }
if( IsDlgButtonChecked(hwnd, IDC_REN_TTL) ){
if(! IsDlgButtonChecked(hwnd, IDC_IFC_TTL) ){
if(! IsDlgButtonChecked(hwnd, IDC_ATN_TTL) ){
if(ADL==1){ // ~ , after ACDS, for handshake successful , if ADL =1 check
SetTextOutLD(hwnd, ByteVal);
SendMessage(GetDlgItem( hwnd, IDC_DATA_ACCEPT ) , BM_SETCHECK ,TRUE, 0);
Beep(523,500); //only for emulator, to view accept
SendMessage(GetDlgItem( hwnd, IDC_DATA_ACCEPT ) , BM_SETCHECK ,FALSE, 0);
MessageBox(NULL, edittxt, " DB ", 0);
}}}}
} |
|
Добавлено через 3 часа 42 минуты
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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
| bool CompareAddress(uint8_t DB, uint8_t MLA )
{
//D5_2 and D10
if (DB&1F)==MLA) { return TRUE ;} else {return FALSE; }
}
void DC_D9(uint8_t DB_TTL, bool *DC1, bool *DC9)
{
switch(DB_TTL&0x0F)
{
case 1: *DC1=1; *DC9=0; break;
case 9: *DC1=0; *DC9=1; break;
default : *DC1=0; *DC9=0; break;
}
return;
}
bool Get_KD15(uint8_t DB_TTL, bool DC9 )
{
bool y1,y2,y3;
y1= (!( (DC9)&&((DB_TTL&0x02)!=0)&&((DB_TTL&0x04)!=0) ));
y2=1^(DB_TTL&0x10);
y3=((!y1)&(!y2));
return y3;
}
void DC_D8_D11_D3 ( uint8_t DB_TTL, bool ATN_TTL ,bool D13_12, bool Q_D15,bool *y1_D13 )
{
uint8_t inDC;
bool DC0 ;
inDC=(DB_TTL&0x07);
if(!ATN_TTL) { inDC|=0x08; }
switch(inDC)
{
case 0: DC0=1; break;
default : DC0=0; break;
}
bool x1_D13= (!(Q_D15& DC0)) ;
if(D13_12) { *y1_D13=0; }
else { *y1_D13=(!x1_D13); }
return;
}
void DC_D8_D7_2_CD15 ( uint8_t DB_TTL, bool ATN_TTL ,bool D13_12, bool *y2_D13 , bool *y3_D13 )
{
uint8_t inDC;
bool DC2, DC3 ;
inDC=(DB_TTL&0x07);
if(!ATN_TTL) { inDC|=0x08; }
switch(inDC)
{
case 0: DC2=0; DC3=0; break;
case 2: DC2=1; DC3=0; break;
case 3: DC2=0; DC3=1; break;
default : DC2=0; DC3=0; break;
}
bool x2_D13=(!(DC2& DC3)) ;
bool x3_D13=FALSE;
if(D13_12) { *y2_D13=0; *y3_D13=0; }
else { *y2_D13=(!x2_D13); *y3_D13=(!x3_D13); }
return;
}
/*
C J K R Qn nQn
rise 0 0 0 Qn-1 !Qn-1
rise 1 0 0 1 0
rise 0 1 0 0 0
rise 1 1 0 !Qn-1 !Qn-1
x x x 1 0 1
*/
void TriggerD15( bool R, bool S, bool J1, bool K1, bool Crise1 , bool *Qout1, bool *nQout1 )
{
static bool Q1, nQ1;
//static bool C1;
//problem with rise detection
if (Crise1)
{
if((J1)&(K1)) { Q1= Q1; nQ1=nQ1; }
if((J1)&(!K1)) { Q1=TRUE; nQ1=FALSE; }
if((K1)&(!J1)) { Q1=FALSE; nQ1=TRUE; }
if((J1)&(K1)) { Q1=nQ1; nQ1=Q1; }
if(S1) { Q1=TRUE; nQ1=FALSE; }
if(R1) { Q1=FALSE; nQ1=TRUE; }
}
if(S1) { Q1=TRUE; nQ1=FALSE; }
if(R1) { Q1=FALSE; nQ1=TRUE; }
return;
}
void TriggerD15_2( bool R2, bool S2, bool J2, bool K2, bool Crise2 , bool *Qout2, bool *nQout2 )
{
static bool Q2, nQ2;
//problem with rise detection
if (Crise2)
{
//C1=C;
if((J2)&(K2)) { Q2= Q2; nQ2=nQ2; }
if((J2)&(!K2)) { Q2=TRUE; nQ2=FALSE; }
if((K2)&(!J2)) { Q2=FALSE;nQ2=TRUE; }
if((J2)&(K2)) { Q2=nQ2; nQ2=Q2; }
if(S2) { Q2=TRUE; nQ2=FALSE; }
if(R2) { Q2=FALSE; nQ2 =TRUE; }
}
if(S2) { Q2=TRUE; nQ2=FALSE; }
if(R2) { Q2=FALSE; nQ2=TRUE; }
return;
}
bool RD15_D6( bool nrtl, bool REN_TTL ,bool dc1, bool d13_y1 )
{
return ( (!nrtl)|(!REN_TTL )|( !((dc1)&(d13_y1))) );
}
void ParseDCD12_D3( bool ATN_TTL , inNQD15 , bool *y1_pin3, bool *y2_pin8)
{
bool y1= ((!ATN_TTL)&(!inNQD15 ));
*y1_pin3=y1;
bool y2=(y1 |ATN_TTL);
*y2_pin8=(!y2);
}
bool D12_D16_PARSEElement(bool ATN_TTL, bool inNQD15 , bool inA, bool inB)
{
bool inAE,inBE;
ParseDCD12_D3( ATN_TTL , inNQD15 , inBE, inAE);
return( ((inA)&(inAE)) | ((inB)&(inBE)) );
}
void ParseD14_2( bool S , bool C, bool inD, bool *outQ )
{
static bool Q1 ;
if(C) { Q1=inD; }
if(S) { Q1=0; }
*outQ =Q1;
}
void ParseD14_1( bool S , bool C, bool inD, bool *outQ )
{
static bool Q1 ;
if(C) { Q1=inD; }
if(S) { Q1=0; }
*outQ =Q1;
} |
|
Добавлено через 2 часа 30 минут
Проверить отрицательность логики по прер1, прер2 и прер3 (особенно ).
Инд ДУ =0 ( полож. )(выход 14 = 1 ), когда триггер сброшен (прибор разадресован, хотя бы по кнопке на передней панели ),
на выходе 11 D11.4 приоритетно лог. 1 от нуля , тогда прер3=1 ТТЛ , нет сигнала (отрицательная логика ).
Добавлено через 48 секунд
Схему прерываний дорабатывать.
Добавлено через 30 минут
decode.h (может потребоваться для виртуалки и моделирования, подключаемые файлы и внешние триггерные модули подключать в файле над ним , логика ТТЛ, коды шин для подпрограмм приводятся к положительной логике внутренней шины после ТТЛизации отрицательной логики с открытым коллектором для шины и положительной с ОК для ГП и ДП ( отрицательной для нГП, нДП) )
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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
| ...
bool CompareAddress(uint8_t DB, uint8_t MLA )
{
//D5_2 and D10
if (DB&1F)==MLA) { return TRUE ;} else {return FALSE; }
}
void DC_D9(uint8_t DB_TTL, bool *DC1, bool *DC9)
{
switch( (DB_TTL&0x0F))
{
case 1: *DC1=1; *DC9=0; break;
case 9: *DC1=0; *DC9=1; break;
default : *DC1=0; *DC9=0; break;
}
return;
}
void DC_D9_DC1 (uint8_t DB_TTL, bool *DC1 )
{
switch(DB_TTL&0x0F)
{
case 1: *DC1=1; break;
case 9: *DC1=0; break;
default : *DC1=0; break;
}
return;
}
void DC_D9_DC9(uint8_t DB_TTL, bool *DC9)
{
switch(DB_TTL&0x0F)
{
case 1: *DC9=0; break;
case 9: *DC9=1; break;
default : *DC9=0; break;
}
return;
}
bool Get_KD15(uint8_t DB_TTL, bool DC9 )
{
bool y1,y2,y3;
y1=(bool)(!( (DC9==TRUE)&&((DB_TTL&0x02)!=0)&&((DB_TTL&0x04)!=0) ));
y2=(bool)(1^( DB_TTL &(0x10) ) );
y3=(bool)((!(y1==TRUE))&(!(y2==TRUE)));
return y3;
}
void DC_D8_D11_1 ( uint8_t DB_TTL, bool ATN_TTL , bool Q_D15, bool *x1_D13 )
{
uint8_t inDC;
bool DC0 ;
inDC=(DB_TTL&0x07);
if(!(ATN_TTL)) { inDC|=0x08; }
switch(inDC)
{
case 0: DC0=1; break;
default : DC0=0; break;
}
bool x1__D13= (!(Q_D15& DC0)) ;
*x1_D13 =(!(x1__D13));
return;
}
void DC_D8_D11_D13_1 ( uint8_t DB_TTL, bool ATN_TTL , bool D13_12, bool Q1_D15, bool *y1_D13 )
{
uint8_t inDC;
bool DC0 ;
inDC=(DB_TTL&0x07);
if(!(ATN_TTL) ) { inDC|=0x08; }
switch(inDC)
{
case 0: DC0=1; break;
default : DC0=0; break;
}
bool x1_D13= (!((Q1_D15)& (DC0)) ) ;
if(D13_12==TRUE) { *y1_D13=FALSE; } else { *y1_D13=(!(x1_D13)); }
return;
}
void DC_D8_D7_2_D13_2 ( uint8_t DB_TTL, bool ATN_TTL ,bool D13_12, bool *y2_D13 )
{
uint8_t inDC;
bool DC2, DC3 ;
inDC=(DB_TTL&0x07);
if(!ATN_TTL) { inDC|=0x08; }
switch(inDC)
{
case 0: DC2=0; DC3=0; break;
case 2: DC2=1; DC3=0; break;
case 3: DC2=0; DC3=1; break;
default : DC2=0; DC3=0; break;
}
bool x2_D13=(!((DC2)&(DC3))) ;
if(D13_12==TRUE) { *y2_D13=FALSE; } else { *y2_D13=(!(x2_D13)); }
return;
}
void DC_D13_3 ( bool D13_12, bool *y3_D13 )
{
bool x3_D13=FALSE;
if(D13_12) { *y3_D13=0; } else { *y3_D13=(!(x3_D13)); }
return;
}
bool RD15_D6( bool nrtl, bool REN_TTL ,bool dc1, bool d13_y1 )
{
return ( (!nrtl)|(!(REN_TTL) )|( !((dc1)&(d13_y1))) );
}
void ParseDCD12_D3( bool ATN_TTL , inNQD15 , bool *y1_pin3, bool *y2_pin8)
{
bool y1= ((!ATN_TTL)&(!inNQD15 )); *y1_pin3=y1;
bool y2=(y1 |ATN_TTL); *y2_pin8=(!(y2));
return;
}
bool D12_D16_PARSEElement(bool ATN_TTL, bool inNQD15 , bool inA, bool inB)
{
bool inAE,inBE;
ParseDCD12_D3( ATN_TTL , inNQD15 , inBE, inAE);
return( ((inA)&(inAE)) | ((inB)&(inBE)) );
}
/*******************************************************/
bool GetC( uint8_t DB_TTL, bool ATN_TTL , bool D13_12)
{
bool Y2_D13 ;
DC_D8_D7_2_D13_2 ( DB_TTL, ATN_TTL , D13_12, &Y2_D13 );
return (bool)Y2_D13;
}
bool GetJ_minterm(uint8_t DB_TTL , uint8_t MLA_switch )
{
return CompareAddress( DB_TTL, MLA_switch );
}
bool GetK1_minterm(uint8_t DB_TTL )
{
bool DC9;
DC_D9_DC9( DB_TTL, &DC9);
Get_KD15(uint8_t DB_TTL, bool DC9 );
}
bool GetR1( bool IFC_TTL) { return (!(IFC_TTL)) ; }
bool GetR2(uint8_t DB_TTL, bool REN_TTL , bool ATN_TTL, bool nrtl , D13_12, Q1_D15 )
{
bool dc1, d13_y1;
DC_D9_DC1(DB_TTL, &dc1 );
DC_D8_D11_D13_1 ( DB_TTL, ATN_TTL , D13_12, Q1_D15, &d13_y1 );
return RD15_D6 ( nrtl, REN_TTL , dc1, d13_y1 );
}
bool GetInt3OutTTL( bool ATN_TTL, bool DAV_TTL, bool Q2_D15 )
{
// If Q2_D15=0 -local , Q2_D15=1 remote,
bool y3_d16=(bool) D12_D16_PARSEElement(ATN_TTL, nQ1D15 , FALSE , DAV_TTL);
return (bool) (!((Q2_D15)&(y3_d16))) ;
}
bool GetIndREN( bool Q2_D15)
//bool GetIndREN( bool nQ2_D15)
{
//1 remote 0 local
//return (bool)(!nQ2_D15);
return (bool)( Q2_D15);
} |
|
Добавлено через 2 часа 46 минут
Кнопка ДУ на передней панели обычно выполняет функцию внм (rtl), светодиод ДУ (REN, или прибор адресован). минтерм nrtl- это инверсия от rtl, истинного когда кнопка ДУ нажата (там на корпус замыкается, поэтому у нас nrtl=0, когда кнопка нажата) . Это обрабатывается без процессора , как и сигнал сегмента ошибки ФАПЧ (там из ЧФД провод, хотя от неправильных кодов это косвенно зависит).
Вернуться к обсуждению: Замена микросхемы 1827ВЕ1-0000000 в Г4-164 на AVR -МК Измерительная техника
0
|