P
Pete
Guest
Здрасти,
Това е програма за измерване на две групи от импулси, всеки, разделени от 500usec.
За всеки набор от импулси, той започва с глава импулс 2.4ms ширина следвани от 0.6ms да представлява "0" или 1.2ms да представлява "1".Интервал на всеки импулс е 500usec.
При правилна комбинация се получава, на мира ще свети един светодиод.Вход нормално висок, без сигнал.Две групи от импулси са длъжни да проверят достоверността на преноса от източника.Моят проблем е, не си работи, т.е. съответните LED няма да свети.Какъвто и проблем с тази програма и вашите коментари е високо ценена.Благодарности.
# включват <16f628a.h>
# предпазители NOMCLR, INTRC, NOWDT, NOLVP, NOBROWNOUT, пригодени, NOPROTECT
# употреба забавяне (часовник = 4000000)
# байт CMCON = 0x1F
# байт VRCON = 0x9F
# определят CMCON 7
# определят VRCON 0
# байт portb = 0x06
# байт Porta = 0x05Int линия = 0, abyte [4] = (1,1,1,1), abyte1 [4] = (0,0,0,0), статут [4] = (0,0,0,0);
дълго C;
нищожен тук (дължина);
нищожен декодиране (Void);
нищожен getpulsewidth (Void);
нищожен анализ (Void);
delay_ms (10); / / стабилизирането на властта-горе
# INT_EXT
нищожен getpulsewidth (Void)
(
setup_timer_1 (T1_DISABLED);
set_timer1 (0);
докато (! вход (PIN_B0));
setup_timer_1 (T1_INTERNAL | T1_DIV_BY_1);
докато (вход (PIN_B0));
setup_timer_1 (T1_DISABLED);
C = get_timer1 ();
)
Основните ()
(
а (вярно)
(
set_tris_a (0b11110000);
port_b_pullups (TRUE);
set_tris_b (0b11111101);
setup_timer_1 (T1_INTERNAL | T1_DIV_BY_1);
ext_int_edge (H_TO_L);
enable_interrupts (INT_EXT);
enable_interrupts (Global);
тук (в);
декодиране ();
анализ ();
)
)
нищожен тук (в дългосрочен)
(
IF (C <200 | | в == 0)
(
bit_clear (Porta, 0);
bit_clear (порта, 1);
bit_clear (порта, 2);
)
)
нищожен декодиране (Void)
(
Int I;
за (I = 0; I <= 3; I )
(
getpulsewidth ();
статут = C;
)
за (I = 0; I <= 3; I )
(
ако (статут <100)
abyte = 0;
в противен случай
abyte = 1;
)
линия = линия 1;
)
анализ ()
(
IF (линия> 1)
(
ако ((abyte [0] == abyte1 [0 ])&&( abyte [1] == abyte1 [1 ])&&( abyte [2] == abyte1 [2]) & &
(abyte [3] == abyte1 [3]))
(
ако (! abyte [0] & & abyte [1] & & abyte [2] & & abyte [3])
output_high (PIN_A0);
иначе, ако (abyte [0] & &! abyte [1] & &! abyte [2] & &! abyte [3])
output_low (PIN_A0);
иначе, ако (abyte [0] & &! abyte [1] & & abyte [2] & & abyte [3])
output_high (PIN_A1);
иначе, ако (! abyte [0] & & abyte [1] & &! abyte [2] & &! abyte [3])
output_low (PIN_A1);
иначе, ако (abyte [0] & & abyte [1] & &! abyte [2] & & abyte [3])
output_high (PIN_A2);
иначе, ако (! abyte [0] & &! abyte [1] & & abyte [2] & &! abyte [3])
output_low (PIN_A2);
)
)
в противен случай
(
Int I;
за (I = 0; I <= 3; I )
abyte1 = abyte ;
декодиране ();
)
)
Това е програма за измерване на две групи от импулси, всеки, разделени от 500usec.
За всеки набор от импулси, той започва с глава импулс 2.4ms ширина следвани от 0.6ms да представлява "0" или 1.2ms да представлява "1".Интервал на всеки импулс е 500usec.
При правилна комбинация се получава, на мира ще свети един светодиод.Вход нормално висок, без сигнал.Две групи от импулси са длъжни да проверят достоверността на преноса от източника.Моят проблем е, не си работи, т.е. съответните LED няма да свети.Какъвто и проблем с тази програма и вашите коментари е високо ценена.Благодарности.
# включват <16f628a.h>
# предпазители NOMCLR, INTRC, NOWDT, NOLVP, NOBROWNOUT, пригодени, NOPROTECT
# употреба забавяне (часовник = 4000000)
# байт CMCON = 0x1F
# байт VRCON = 0x9F
# определят CMCON 7
# определят VRCON 0
# байт portb = 0x06
# байт Porta = 0x05Int линия = 0, abyte [4] = (1,1,1,1), abyte1 [4] = (0,0,0,0), статут [4] = (0,0,0,0);
дълго C;
нищожен тук (дължина);
нищожен декодиране (Void);
нищожен getpulsewidth (Void);
нищожен анализ (Void);
delay_ms (10); / / стабилизирането на властта-горе
# INT_EXT
нищожен getpulsewidth (Void)
(
setup_timer_1 (T1_DISABLED);
set_timer1 (0);
докато (! вход (PIN_B0));
setup_timer_1 (T1_INTERNAL | T1_DIV_BY_1);
докато (вход (PIN_B0));
setup_timer_1 (T1_DISABLED);
C = get_timer1 ();
)
Основните ()
(
а (вярно)
(
set_tris_a (0b11110000);
port_b_pullups (TRUE);
set_tris_b (0b11111101);
setup_timer_1 (T1_INTERNAL | T1_DIV_BY_1);
ext_int_edge (H_TO_L);
enable_interrupts (INT_EXT);
enable_interrupts (Global);
тук (в);
декодиране ();
анализ ();
)
)
нищожен тук (в дългосрочен)
(
IF (C <200 | | в == 0)
(
bit_clear (Porta, 0);
bit_clear (порта, 1);
bit_clear (порта, 2);
)
)
нищожен декодиране (Void)
(
Int I;
за (I = 0; I <= 3; I )
(
getpulsewidth ();
статут = C;
)
за (I = 0; I <= 3; I )
(
ако (статут <100)
abyte = 0;
в противен случай
abyte = 1;
)
линия = линия 1;
)
анализ ()
(
IF (линия> 1)
(
ако ((abyte [0] == abyte1 [0 ])&&( abyte [1] == abyte1 [1 ])&&( abyte [2] == abyte1 [2]) & &
(abyte [3] == abyte1 [3]))
(
ако (! abyte [0] & & abyte [1] & & abyte [2] & & abyte [3])
output_high (PIN_A0);
иначе, ако (abyte [0] & &! abyte [1] & &! abyte [2] & &! abyte [3])
output_low (PIN_A0);
иначе, ако (abyte [0] & &! abyte [1] & & abyte [2] & & abyte [3])
output_high (PIN_A1);
иначе, ако (! abyte [0] & & abyte [1] & &! abyte [2] & &! abyte [3])
output_low (PIN_A1);
иначе, ако (abyte [0] & & abyte [1] & &! abyte [2] & & abyte [3])
output_high (PIN_A2);
иначе, ако (! abyte [0] & &! abyte [1] & & abyte [2] & &! abyte [3])
output_low (PIN_A2);
)
)
в противен случай
(
Int I;
за (I = 0; I <= 3; I )
abyte1 = abyte ;
декодиране ();
)
)