P
pete
Guest
Nazdar,
Zde je program pro měření dvou sad impulsů, z nichž každý oddělený 500usec.
Pro každý soubor impulsů, začíná hlavičkou 2.4ms šířka pulsu, po nichž následuje 0.6ms reprezentovat "0", nebo 1.2ms reprezentovat "1".Interval jakéhokoliv impulsu je 500usec.
Když obdrží správné kombinace, bude PIC svítí LED.Vstupní obvykle vysoká bez signálu.Dvě sady pulsy jsou potřebné k ověření správnosti přenosu od zdroje.Můj problém je, jeho neběží, by tedy odpovídající LED dioda nesvítí.Žádný problém s tímto programem a vaše komentáře je vysoce ceněn.Díky.
# include <16f628a.h>
# pojistky NOMCLR, INTRC, NOWDT, NOLVP, NOBROWNOUT, PUT, NOPROTECT
# use zpoždění (hodiny = 4000000)
# byte CMCON = 0x1F
# byte VRCON = 0x9F
# define CMCON 7
# define VRCON 0
# byte portb = 0x06
# byte porta = 0x05int loop = 0, abyte [4] = (1,1,1,1), abyte1 [4] = (0,0,0,0), stav [4] = (0,0,0,0);
dlouhé c;
void zde (long);
void decode (void);
void getpulsewidth (void);
void analyzovat (void);
delay_ms (10); / / stabilizovat o power-up
# INT_EXT
void getpulsewidth (void)
(
setup_timer_1 (T1_DISABLED);
set_timer1 (0);
while (! vstup (PIN_B0));
setup_timer_1 (T1_INTERNAL | T1_DIV_BY_1);
while (vstup (PIN_B0));
setup_timer_1 (T1_DISABLED);
c = get_timer1 ();
)
main ()
(
while (true)
(
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);
zde (c);
decode ();
analyzovat ();
)
)
void zde (long c)
(
if (c <200 | | c == 0)
(
bit_clear (porta, 0);
bit_clear (Porta, 1);
bit_clear (Porta, 2);
)
)
void decode (void)
(
int i;
for (i = 0; i <= 3; i )
(
getpulsewidth ();
stav = c;
)
for (i = 0; i <= 3; i )
(
if (stav <100)
abyte = 0;
jiné
abyte = 1;
)
smyčky loop = 1;
)
analyzovat ()
(
if (loop> 1)
(
if ((abyte [0] == abyte1 [0 ])&&( abyte [1] == abyte1 [1 ])&&( abyte [2] == abyte1 [2]) & &
(abyte [3] == abyte1 [3]))
(
if (! abyte [0] & & abyte [1] & & abyte [2] & & abyte [3])
output_high (PIN_A0);
else if (abyte [0] & &! abyte [1] & &! abyte [2] & &! abyte [3])
output_low (PIN_A0);
else if (abyte [0] & &! abyte [1] & & abyte [2] & & abyte [3])
output_high (PIN_A1);
else if (! abyte [0] & & abyte [1] & &! abyte [2] & &! abyte [3])
output_low (PIN_A1);
else if (abyte [0] & & abyte [1] & &! abyte [2] & & abyte [3])
output_high (PIN_A2);
else if (! abyte [0] & &! abyte [1] & & abyte [2] & &! abyte [3])
output_low (PIN_A2);
)
)
jiné
(
int i;
for (i = 0; i <= 3; i )
abyte1 = abyte ;
decode ();
)
)
Zde je program pro měření dvou sad impulsů, z nichž každý oddělený 500usec.
Pro každý soubor impulsů, začíná hlavičkou 2.4ms šířka pulsu, po nichž následuje 0.6ms reprezentovat "0", nebo 1.2ms reprezentovat "1".Interval jakéhokoliv impulsu je 500usec.
Když obdrží správné kombinace, bude PIC svítí LED.Vstupní obvykle vysoká bez signálu.Dvě sady pulsy jsou potřebné k ověření správnosti přenosu od zdroje.Můj problém je, jeho neběží, by tedy odpovídající LED dioda nesvítí.Žádný problém s tímto programem a vaše komentáře je vysoce ceněn.Díky.
# include <16f628a.h>
# pojistky NOMCLR, INTRC, NOWDT, NOLVP, NOBROWNOUT, PUT, NOPROTECT
# use zpoždění (hodiny = 4000000)
# byte CMCON = 0x1F
# byte VRCON = 0x9F
# define CMCON 7
# define VRCON 0
# byte portb = 0x06
# byte porta = 0x05int loop = 0, abyte [4] = (1,1,1,1), abyte1 [4] = (0,0,0,0), stav [4] = (0,0,0,0);
dlouhé c;
void zde (long);
void decode (void);
void getpulsewidth (void);
void analyzovat (void);
delay_ms (10); / / stabilizovat o power-up
# INT_EXT
void getpulsewidth (void)
(
setup_timer_1 (T1_DISABLED);
set_timer1 (0);
while (! vstup (PIN_B0));
setup_timer_1 (T1_INTERNAL | T1_DIV_BY_1);
while (vstup (PIN_B0));
setup_timer_1 (T1_DISABLED);
c = get_timer1 ();
)
main ()
(
while (true)
(
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);
zde (c);
decode ();
analyzovat ();
)
)
void zde (long c)
(
if (c <200 | | c == 0)
(
bit_clear (porta, 0);
bit_clear (Porta, 1);
bit_clear (Porta, 2);
)
)
void decode (void)
(
int i;
for (i = 0; i <= 3; i )
(
getpulsewidth ();
stav = c;
)
for (i = 0; i <= 3; i )
(
if (stav <100)
abyte = 0;
jiné
abyte = 1;
)
smyčky loop = 1;
)
analyzovat ()
(
if (loop> 1)
(
if ((abyte [0] == abyte1 [0 ])&&( abyte [1] == abyte1 [1 ])&&( abyte [2] == abyte1 [2]) & &
(abyte [3] == abyte1 [3]))
(
if (! abyte [0] & & abyte [1] & & abyte [2] & & abyte [3])
output_high (PIN_A0);
else if (abyte [0] & &! abyte [1] & &! abyte [2] & &! abyte [3])
output_low (PIN_A0);
else if (abyte [0] & &! abyte [1] & & abyte [2] & & abyte [3])
output_high (PIN_A1);
else if (! abyte [0] & & abyte [1] & &! abyte [2] & &! abyte [3])
output_low (PIN_A1);
else if (abyte [0] & & abyte [1] & &! abyte [2] & & abyte [3])
output_high (PIN_A2);
else if (! abyte [0] & &! abyte [1] & & abyte [2] & &! abyte [3])
output_low (PIN_A2);
)
)
jiné
(
int i;
for (i = 0; i <= 3; i )
abyte1 = abyte ;
decode ();
)
)