P
Peten
Guest
Hei,
Tässä on ohjelma mitata kaksi pulssia, joka erotetaan 500usec.
Kunkin sarjan pulsseja, se alkaa otsikko pulssin 2.4ms leveys seuraa joko 0.6ms edustavat "0" tai 1.2ms edustavat "1".Aikaväli tahansa pulssi 500usec.
Kun oikea yhdistelmä on saatu, PIC se palaa LED.Input yleensä korkea, ei signaalia.Kaksi pulssia on tarkistettava todenperäisyyttä lähetyksen lähteestä.Minun ongelmani on, se ei ole käynnissä, eli vastaava LED ei pala.Mitään ongelmia tämän ohjelman ja kommentteja arvostetaan.Kiitos.
# include <16f628a.h>
# sulakkeet NOMCLR, INTRC, NOWDT, NOLVP, NOBROWNOUT, PUT, NOPROTECT
# käytön viive (kello = 4000000)
# tavu CMCON = 0x1F
# tavu VRCON = 0x9F
# define CMCON 7
# define VRCON 0
# tavu PORTB = 0x06
# tavu porta = 0x05int loop = 0, abyte [4] = (1,1,1,1), abyte1 [4] = (0,0,0,0), tila [4] = (0,0,0,0),
long C;
void täällä (pitkä);
void decode (void);
void getpulsewidth (void);
void analysoida (void);
delay_ms (10), / / vakauttaa on virta
# INT_EXT
void getpulsewidth (void)
(
setup_timer_1 (T1_DISABLED);
set_timer1 (0);
while (! input (PIN_B0));
setup_timer_1 (T1_INTERNAL | T1_DIV_BY_1);
while (input (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);
tässä (c);
decode ();
analysoida ();
)
)
void täällä (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 ();
tila = c;
)
for (i = 0, i <= 3, i )
(
if (status <100)
abyte = 0;
muuten
abyte = 1;
)
loop = silmukka 1;
)
analysoida ()
(
jos (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);
)
)
muuten
(
int i;
for (i = 0, i <= 3, i )
abyte1 = abyte ;
decode ();
)
)
Tässä on ohjelma mitata kaksi pulssia, joka erotetaan 500usec.
Kunkin sarjan pulsseja, se alkaa otsikko pulssin 2.4ms leveys seuraa joko 0.6ms edustavat "0" tai 1.2ms edustavat "1".Aikaväli tahansa pulssi 500usec.
Kun oikea yhdistelmä on saatu, PIC se palaa LED.Input yleensä korkea, ei signaalia.Kaksi pulssia on tarkistettava todenperäisyyttä lähetyksen lähteestä.Minun ongelmani on, se ei ole käynnissä, eli vastaava LED ei pala.Mitään ongelmia tämän ohjelman ja kommentteja arvostetaan.Kiitos.
# include <16f628a.h>
# sulakkeet NOMCLR, INTRC, NOWDT, NOLVP, NOBROWNOUT, PUT, NOPROTECT
# käytön viive (kello = 4000000)
# tavu CMCON = 0x1F
# tavu VRCON = 0x9F
# define CMCON 7
# define VRCON 0
# tavu PORTB = 0x06
# tavu porta = 0x05int loop = 0, abyte [4] = (1,1,1,1), abyte1 [4] = (0,0,0,0), tila [4] = (0,0,0,0),
long C;
void täällä (pitkä);
void decode (void);
void getpulsewidth (void);
void analysoida (void);
delay_ms (10), / / vakauttaa on virta
# INT_EXT
void getpulsewidth (void)
(
setup_timer_1 (T1_DISABLED);
set_timer1 (0);
while (! input (PIN_B0));
setup_timer_1 (T1_INTERNAL | T1_DIV_BY_1);
while (input (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);
tässä (c);
decode ();
analysoida ();
)
)
void täällä (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 ();
tila = c;
)
for (i = 0, i <= 3, i )
(
if (status <100)
abyte = 0;
muuten
abyte = 1;
)
loop = silmukka 1;
)
analysoida ()
(
jos (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);
)
)
muuten
(
int i;
for (i = 0, i <= 3, i )
abyte1 = abyte ;
decode ();
)
)