S
soulraven
Guest
man padėti šiuo kodu bando padaryti tachometers su pic16f887.Tik parodykite man visą laiką 330.
Nustatyti CCP1 fiksuoti bet nieko ....
jei yra blogai?
Aš į main.c
ccp1_isr ();
turometru ();
kur aš blogai?
Kodas:# include "main.h"# prioritetas CCP1, TIMER1# define BytePtr (var kompensuoti) (char *)(&( char *) var kompensuoti)# byte PIR1 = 0xF9E
# bit TMR1IF = PIR1.0int8 gc_timer1_extension = 0;
int8 gc_capture_flag = FALSE;
Int32 g32_ccp_delta;//------------------------------------------------ ------
# int_timer1
tuščia timer1_isr (tuščia)
(
gc_timer1_extension ;
)//------------------------------------------------ ------# int_ccp1
tuščia ccp1_isr (tuščia)
(
char timer_ext_copy;
Int32 current_ccp;
statinio Int32 old_ccp = 0;gc_capture_flag = TRUE;current_ccp = (Int32) CCP_1;/ / Gavimas vietos kopiją laikmatç Įtr.
timer_ext_copy = gc_timer1_extension;jei (TMR1IF)
(
if (* BytePtr (current_ccp, 1) <2) / / Was BPP paimkite po Timer1 suvynioti?
timer_ext_copy / / Jei taip, vč kopiją laikmatç Įtr./ / Kadangi mes žinome laikmatis nutraukti laukia, galime tik
/ / Rankena tai čia ir dabar. Tai taupo mažai apkrovos išjungimo
/ / Procesoriaus.
gc_timer1_extension / / didinti realaus laiko pratęsimas
TMR1IF = 0; / / Tada išvalyti Timer1 pertraukti
)/ / Įdėkite laikmatç išplėtimas į tinkamą vietą į 32-bitų
/ / VAK vertę.
/ / Ty. Įdėkite ją į vietą "EE" taip: 0x00EEnnnn
/ / (Nnnn = BPP).
* BytePtr (current_ccp, 2) = timer_ext_copy;g32_ccp_delta = (current_ccp> old_ccp)?
current_ccp - old_ccp: current_ccp (0x1000000 - old_ccp);/ / Įrašyti dabartinį CCP vertės kitą kartą.
old_ccp = current_ccp//=======================
tuščia turometru ()
(
int16 frecventa;
int16 dažnumas;
Int32 current_ccp_delta;set_timer1 (0);
setup_timer_1 (T1_INTERNAL | T1_DIV_BY_1);
setup_ccp1 (CCP_CAPTURE_RE);/ / Įjungti interrupts.
clear_interrupt (INT_TIMER1);
enable_interrupts (INT_TIMER1);clear_interrupt (INT_CCP1);
enable_interrupts (INT_CCP1);
enable_interrupts (Globalus);/ / o (1)
/ / (
disable_interrupts (Globalus);
current_ccp_delta = g32_ccp_delta;
enable_interrupts (Globalus);jei (gc_capture_flag == TRUE)
(
dažnis = (int16) ((5000000L (current_ccp_delta>> 1)) / current_ccp_delta);
frecventa = (dažnumas * 60) / 2;lcd_gotoxy (5,1);
printf (lcd_putc "% lu \ n" frecventa);
printf ( "% lu \ n \ r", frecventa);
/ / Printf (lcd_putc "% lu Hz, delta =% liukso \ n \ r", dažnis, current_ccp_delta);gc_capture_flag = FALSE;
)
kitas
(
lcd_gotoxy (5,1);
printf (lcd_putc, "0 \ n");
printf ( "0 \ r");
)delay_ms (100);
/ /))
Nustatyti CCP1 fiksuoti bet nieko ....
jei yra blogai?
Aš į main.c
ccp1_isr ();
turometru ();
kur aš blogai?
Kodas:# include "main.h"# prioritetas CCP1, TIMER1# define BytePtr (var kompensuoti) (char *)(&( char *) var kompensuoti)# byte PIR1 = 0xF9E
# bit TMR1IF = PIR1.0int8 gc_timer1_extension = 0;
int8 gc_capture_flag = FALSE;
Int32 g32_ccp_delta;//------------------------------------------------ ------
# int_timer1
tuščia timer1_isr (tuščia)
(
gc_timer1_extension ;
)//------------------------------------------------ ------# int_ccp1
tuščia ccp1_isr (tuščia)
(
char timer_ext_copy;
Int32 current_ccp;
statinio Int32 old_ccp = 0;gc_capture_flag = TRUE;current_ccp = (Int32) CCP_1;/ / Gavimas vietos kopiją laikmatç Įtr.
timer_ext_copy = gc_timer1_extension;jei (TMR1IF)
(
if (* BytePtr (current_ccp, 1) <2) / / Was BPP paimkite po Timer1 suvynioti?
timer_ext_copy / / Jei taip, vč kopiją laikmatç Įtr./ / Kadangi mes žinome laikmatis nutraukti laukia, galime tik
/ / Rankena tai čia ir dabar. Tai taupo mažai apkrovos išjungimo
/ / Procesoriaus.
gc_timer1_extension / / didinti realaus laiko pratęsimas
TMR1IF = 0; / / Tada išvalyti Timer1 pertraukti
)/ / Įdėkite laikmatç išplėtimas į tinkamą vietą į 32-bitų
/ / VAK vertę.
/ / Ty. Įdėkite ją į vietą "EE" taip: 0x00EEnnnn
/ / (Nnnn = BPP).
* BytePtr (current_ccp, 2) = timer_ext_copy;g32_ccp_delta = (current_ccp> old_ccp)?
current_ccp - old_ccp: current_ccp (0x1000000 - old_ccp);/ / Įrašyti dabartinį CCP vertės kitą kartą.
old_ccp = current_ccp//=======================
tuščia turometru ()
(
int16 frecventa;
int16 dažnumas;
Int32 current_ccp_delta;set_timer1 (0);
setup_timer_1 (T1_INTERNAL | T1_DIV_BY_1);
setup_ccp1 (CCP_CAPTURE_RE);/ / Įjungti interrupts.
clear_interrupt (INT_TIMER1);
enable_interrupts (INT_TIMER1);clear_interrupt (INT_CCP1);
enable_interrupts (INT_CCP1);
enable_interrupts (Globalus);/ / o (1)
/ / (
disable_interrupts (Globalus);
current_ccp_delta = g32_ccp_delta;
enable_interrupts (Globalus);jei (gc_capture_flag == TRUE)
(
dažnis = (int16) ((5000000L (current_ccp_delta>> 1)) / current_ccp_delta);
frecventa = (dažnumas * 60) / 2;lcd_gotoxy (5,1);
printf (lcd_putc "% lu \ n" frecventa);
printf ( "% lu \ n \ r", frecventa);
/ / Printf (lcd_putc "% lu Hz, delta =% liukso \ n \ r", dažnis, current_ccp_delta);gc_capture_flag = FALSE;
)
kitas
(
lcd_gotoxy (5,1);
printf (lcd_putc, "0 \ n");
printf ( "0 \ r");
)delay_ms (100);
/ /))