P
Pete
Guest
Salut tout le monde!
J'ai essayé d'écrire le programme ci-dessous pour décoder les 2 séries d'impulsions et une fois décodé, correspondant s'allume.L'entrée est normalement Salut.Il existe 2 types d'impulsions d'entrée.Objet de 2 jeux est d'assurer légitimes de la transmission de la source.Ces 2 jeux identiques d'impulsions doivent être décodées et allumer une LED en fonction de la combinaison des 4 impulsions après l'en-tête.
- - - - - - - - - - -----------
|____| | __ | | __ | | _ | | _ | |____| | __ | | __ | | _ | | _ |Header = 2,4 ms
"One" = 1,2 ms
«Faible» = 0.6ms
Intervalle de toutes les impulsions est 500usec.
Sans signal, entrée normalement élevée.Lorsque le signal arrive, il passe au niveau bas, avec durée de l'impulsion donnée ci-dessus.
Exemple ci-dessus est un signe de tête 1100 tête de 1100.
Ci-dessous le code mais ne fonctionne pas.S'il vous plaît aider!!Merci ....
# Include <> 16f628a.h
# Fusibles NOMCLR, INTRC, NOWDT, NOLVP, NOBROWNOUT, PUT, NOPROTECT
retarder la consommation de # (horloge = 4000000)
# CMCON octet = 0x1F
# VRCON octet = 0x9F
# Define CMCON 7
# Define VRCON 0
# PORTB = 0x06 octets
# Porta octet = 0x05boucle int = 0, abyte [5] = (1,1,1,1,1), abyte1 [5] = (0,0,0,0,0);
c long, l'état [5] = (0,0,0,0,0);
nul ici (long);
décoder (void);
getpulsewidth long (void);
void analyser (void);
delay_ms (10); / / stabiliser la mise sous tension# INT_EXT
getpulsewidth long (void)
(
disable_interrupts (GLOBAL);
setup_timer_1 (T1_DISABLED);
set_timer1 (0);
while (! entrée (PIN_B0));
setup_timer_1 (T1_INTERNAL | T1_DIV_BY_1);
while (entrée (PIN_B0));
setup_timer_1 (T1_DISABLED);
retour get_timer1 ();
enable_interrupts (GLOBAL);
)
main ()
(
while (true)
(
set_tris_a (0b11110000);
port_b_pullups (TRUE);
set_tris_b (0b11111101);
ext_int_edge (H_TO_L);
setup_timer_1 (T1_INTERNAL | T1_DIV_BY_1);
enable_interrupts (INT_EXT);
enable_interrupts (GLOBAL);
c = getpulsewidth ();
ici (c);
decode ();
analyser ();
)
)
nul ici (à long c)
(
if (c <200 | | c == 0)
(
bit_clear (Porta, 0);
bit_clear (Porta, 1);
bit_clear (Porta, 2);
)
)
décoder (void)
(
int i;
for (i = 0; i <= 4; i )
(
c = getpulsewidth ();
statut = c;
)
for (i = 0; i <= 4; i )
(
if (status <100)
abyte = 0;
d'autre
abyte = 1;
)
boucle la boucle = 1;
)
analyser ()
(
if (boucle> 1)
(
if (([abyte 1] == abyte1 [1 ])&&( abyte [2] == abyte1 [2 ])&&( abyte [3] == abyte1 [3]) & &
([Abyte 4] == abyte1 [4]))
(
if (! abyte [1] & & [abyte 2] & & [abyte 3] & & [abyte 4])
output_high (PIN_A0);
else if (abyte [1] & &! [abyte 2] & &! [abyte 3] & &! [abyte 4])
output_low (PIN_A0);
else if (abyte [1] & &! [abyte 2] & & [abyte 3] & & [abyte 4])
output_high (PIN_A1);
else if (! abyte [1] & & [abyte 2] & &! [abyte 3] & &! abyte [4])
output_low (PIN_A1);
else if (abyte [1] & & [abyte 2] & &! [abyte 3] & & [abyte 4])
output_high (PIN_A2);
else if (! abyte [1] & &! [abyte 2] & & [abyte 3] & &! [abyte 4])
output_low (PIN_A2);
)
)
d'autre
(
(
int i;
for (i = 0; i <= 4; i )
abyte1 = abyte ;
)
decode ();
)
)Code:
J'ai essayé d'écrire le programme ci-dessous pour décoder les 2 séries d'impulsions et une fois décodé, correspondant s'allume.L'entrée est normalement Salut.Il existe 2 types d'impulsions d'entrée.Objet de 2 jeux est d'assurer légitimes de la transmission de la source.Ces 2 jeux identiques d'impulsions doivent être décodées et allumer une LED en fonction de la combinaison des 4 impulsions après l'en-tête.
- - - - - - - - - - -----------
|____| | __ | | __ | | _ | | _ | |____| | __ | | __ | | _ | | _ |Header = 2,4 ms
"One" = 1,2 ms
«Faible» = 0.6ms
Intervalle de toutes les impulsions est 500usec.
Sans signal, entrée normalement élevée.Lorsque le signal arrive, il passe au niveau bas, avec durée de l'impulsion donnée ci-dessus.
Exemple ci-dessus est un signe de tête 1100 tête de 1100.
Ci-dessous le code mais ne fonctionne pas.S'il vous plaît aider!!Merci ....
# Include <> 16f628a.h
# Fusibles NOMCLR, INTRC, NOWDT, NOLVP, NOBROWNOUT, PUT, NOPROTECT
retarder la consommation de # (horloge = 4000000)
# CMCON octet = 0x1F
# VRCON octet = 0x9F
# Define CMCON 7
# Define VRCON 0
# PORTB = 0x06 octets
# Porta octet = 0x05boucle int = 0, abyte [5] = (1,1,1,1,1), abyte1 [5] = (0,0,0,0,0);
c long, l'état [5] = (0,0,0,0,0);
nul ici (long);
décoder (void);
getpulsewidth long (void);
void analyser (void);
delay_ms (10); / / stabiliser la mise sous tension# INT_EXT
getpulsewidth long (void)
(
disable_interrupts (GLOBAL);
setup_timer_1 (T1_DISABLED);
set_timer1 (0);
while (! entrée (PIN_B0));
setup_timer_1 (T1_INTERNAL | T1_DIV_BY_1);
while (entrée (PIN_B0));
setup_timer_1 (T1_DISABLED);
retour get_timer1 ();
enable_interrupts (GLOBAL);
)
main ()
(
while (true)
(
set_tris_a (0b11110000);
port_b_pullups (TRUE);
set_tris_b (0b11111101);
ext_int_edge (H_TO_L);
setup_timer_1 (T1_INTERNAL | T1_DIV_BY_1);
enable_interrupts (INT_EXT);
enable_interrupts (GLOBAL);
c = getpulsewidth ();
ici (c);
decode ();
analyser ();
)
)
nul ici (à long c)
(
if (c <200 | | c == 0)
(
bit_clear (Porta, 0);
bit_clear (Porta, 1);
bit_clear (Porta, 2);
)
)
décoder (void)
(
int i;
for (i = 0; i <= 4; i )
(
c = getpulsewidth ();
statut = c;
)
for (i = 0; i <= 4; i )
(
if (status <100)
abyte = 0;
d'autre
abyte = 1;
)
boucle la boucle = 1;
)
analyser ()
(
if (boucle> 1)
(
if (([abyte 1] == abyte1 [1 ])&&( abyte [2] == abyte1 [2 ])&&( abyte [3] == abyte1 [3]) & &
([Abyte 4] == abyte1 [4]))
(
if (! abyte [1] & & [abyte 2] & & [abyte 3] & & [abyte 4])
output_high (PIN_A0);
else if (abyte [1] & &! [abyte 2] & &! [abyte 3] & &! [abyte 4])
output_low (PIN_A0);
else if (abyte [1] & &! [abyte 2] & & [abyte 3] & & [abyte 4])
output_high (PIN_A1);
else if (! abyte [1] & & [abyte 2] & &! [abyte 3] & &! abyte [4])
output_low (PIN_A1);
else if (abyte [1] & & [abyte 2] & &! [abyte 3] & & [abyte 4])
output_high (PIN_A2);
else if (! abyte [1] & &! [abyte 2] & & [abyte 3] & &! [abyte 4])
output_low (PIN_A2);
)
)
d'autre
(
(
int i;
for (i = 0; i <= 4; i )
abyte1 = abyte ;
)
decode ();
)
)Code: