Godzina wystawienia kontroli ...

O

Otaru

Guest
Hi, I am używasz PIC16F877 kontroli L293D do silnika.Zagadnienie to byłem w stanie ustawić czas kontroli zatrzymać silnik, gdy jest czas na ...Niezależnie od tego, jak duża wartość w moim C programowania.Będzie nadal zatrzymać mniej niż 1sec czasu.Prosimy o poradę.Dzięki!

Poniżej jest mój kodowania:

# ifndef __CPU_16F877__
# błąd "Ten program jest dostosowany do PIC16F877 kontroler"
# endif

#
include "io16f877.h" / / sprzętu zarejestrować plik definicji.

int timer_value = 0xEA60; / / dziesiętnie 60000.

void DelayUs (int count)
(
int i;
int j;
for (i = 0; i <count; i )
(
for (j = 0; j <500000000; j );
/ / To dla pętli ma 5 NOPs
i odpady 1 nas dla naszych PIC częstotliwości zegara 20MHz.
)
)

void initialize_IO_ports (void)
(
/ / ustaw cyfrowej IO portów na wymóg.
TRISB = 0x01; / / porta jako wkład.
TRISD = 0x00; / / portD jako wyjście.

/ / wyraźne wyjście portów na początku.
PORTD = 0x00; / / portD jasne.
)void initialize_timer1 (void)
(
TMR1CS = 0;
/ / Ustaw prescalar wartość 1:8
tj. timer1 count = 8x200ns = 1600nS.
T1CKPS1 = 1;
T1CKPS0 = 1;
/ / Skorzystaj z danych za organizację przerwań.
GIE = 1; / / global przerwać aktywne.
PEIE = 1; / / peryferyjnych przerwać aktywne.
TMR1IE = 1; / /
enable timer1 przerwać.
)/ / Funkcja ta ładuje timer_value w timer1
i pozwala.
void load_timer1 (int timer_value)
(
TMR1ON = 0; / / wyłącz timer1 przed załadunkiem wartości.
TMR1IF = 0; / / timer1 banderą wyczyszczone.
TMR1H = (wartości 0xFFFF-timer_value)>> 8; / / load timer1 wysokim rejestrze.
TMR1L = wartości 0xFFFF-timer_value; / / load timer1 niskim rejestrze.
TMR1ON = 1; / /
enable timer1.
)

int main ()
(
int motor_switch = 0;
int i;
RB0 = motor_switch;
initialize_IO_ports ();
initialize_timer1 ();
load_timer1 (timer_value);

if (RB0 == 1)
(
RD0 = 1;
for (i = 10; i> 0; i -)
(
DelayUs (10000);
)
)
w przeciwnym razie
RD0 = 0;
)

/ * koniec programu * /

 
One thing I zauważyliśmy, że j, a 16-bitowa liczba całkowita może mieć maksymalną wartość 65.535.Kod:void DelayUs (int count)

(

int i;

int j;

for (i = 0; i <count; i )

(

for (j = 0; j <500000000; j );

/ / To dla pętli ma 5 NOPs i odpady 1 nas dla naszych PIC częstotliwości zegara 20MHz.

)

)

 
oh ...I tak powinno go edytować do 65535 dla maksymalnej?void DelayUs (int count)
(
int i;
int j;
for (i = 0; i <count; i )
(
for (j = 0; j <65535; j );
/ / To dla pętli ma 5 NOPs
i odpady 1 nas dla naszych PIC częstotliwości zegara 20MHz.
)
)

 
Give it a go.
Let me know what happens.
Czy używasz MPLAB SIM?To jest bardzo dobre, jeśli działa w SIM, to będzie działać w sprzęt.

 
Dzięki!Miałem próbował się z nim.Ale nic się nie zmieniło.I nie używać MPLAB SIM spróbować jako pracownia nie ma tego oprogramowania.

I zauważyliśmy, że moje wyjście (portD) nie ma żadnego napięcia pomiędzy PIC oraz kontrolera IC chip.Mam stara się rozwiązać ten problem, ale nie wydaje się dobrym wynikiem.

 

Welcome to EDABoard.com

Sponsor

Back
Top