Time control isyu ...

O

oTaRu

Guest
Hi, ako ay kasalukuyang gumagamit ng PIC16F877 upang makontrol L293D para sa motor.Ang isyu ay ako ay hindi nagawang mai-set ang oras control upang ihinto ang motor kapag ang panahon ay ...Kahit gaano kalaki ang halaga sa aking C programming.Ito ay pa rin tumigil sa mas mababa kaysa 1sec oras.Mangyari lamang na payo.Salamat!

Sa ibaba ay ang aking coding:

# ifndef __CPU_16F877__
# error "Ang program na ito ay ginawa para sa PIC16F877 controller"
# endif

# isama ang "io16f877.h" / / ang kahulugan ng hardware magrehistro file.

int timer_value = 0xEA60; / / decimal 60000.

magpawalang-bisa DelayUs (int count)
(
int i;
int j;
para sa (i = 0; i <count; i )
(
para sa (j = 0; j <500000000; j );
/ / Ito para sa loop ay 5 NOPs & wastes 1 sa amin para sa aming mga PIC orasan dalas ng 20MHz.
)
)

magpawalang-bisa initialize_IO_ports (walang laman)
(
/ / i-set ang digital IO port bilang bawat kinakailangan.
TRISB = 0x01; / / Porta bilang input.
TRISD = 0x00; / / portD bilang output.

/ / i-clear ang output port sa simula.
PORTD = 0x00; / / malinaw portD.
)magpawalang-bisa initialize_timer1 (walang laman)
(
TMR1CS = 0;
/ / Set prescalar halaga ng 1:8 ibig sabihin timer1 count = 8x200ns = 1600nS.
T1CKPS1 = 1;
T1CKPS0 = 1;
/ / Sumangguni sa datasheet para sa mga organisasyon ng interrupts.
GIE = 1; / / global makatakip-enable.
PEIE = 1; / / paligid makatakip-enable.
TMR1IE = 1; / / paganahin ang timer1 matigil.
)/ / Ang function na naglo-load timer_value sa timer1,
at nagbibigay-daan ito.
magpawalang-bisa load_timer1 (int timer_value)
(
TMR1ON = 0; / / huwag paganahin timer1 bago loading ang halaga.
TMR1IF = 0; / / timer1 bandila nalilimas.
TMR1H = (0xFFFF-timer_value)>> 8; / / load timer1 mataas magrehistro.
TMR1L = 0xFFFF-timer_value; / / load timer1 mababa magrehistro.
TMR1ON = 1; / / paganahin ang timer1.
)

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

kung (RB0 == 1)
(
RD0 = 1;
para sa (i = 10; i> 0; ako -)
(
DelayUs (10000);
)
)
kung hindi
RD0 = 0;
)

/ * dulo ng programa * /

 
Isa bagay ako may napansin na j, isang 16-bit integer ay maaari lamang magkaroon ng isang maximum na halaga ng 65535.Code:magpawalang-bisa DelayUs (int count)

(

int i;

int j;

para sa (i = 0; i <count; i )

(

para sa (j = 0; j <500000000; j );

/ / Ito para sa loop ay 5 NOPs & wastes 1 sa amin para sa aming mga PIC orasan dalas ng 20MHz.

)

)

 
oh ...kaya ako dapat i-edit ito sa 65535 para sa pinakamataas na?magpawalang-bisa DelayUs (int count)
(
int i;
int j;
para sa (i = 0; i <count; i )
(
para sa (j = 0; j <65535; j );
/ / Ito para sa loop ay 5 NOPs & wastes 1 sa amin para sa aming mga PIC orasan dalas ng 20MHz.
)
)

 
Bigyan ito ng isang pumunta.
Hayaan akong malaman kung ano ang mangyayari.
Gumagamit ka ba mplab SIM?Ito ay tunay mabuti, kung ito ay gumagana sa SIM, ito ay gumagana sa hardware.

 
Salamat!Ako had tried ito.Ngunit wala ay nagbago.Hindi ko gamitin mplab SIM na subukan bilang aking lab wala ng software na ito.

Ako ay may napansin na ang aking output (portD) ay hindi magkakaroon ng anumang boltahe daloy sa pagitan ng mga PIC controller at ang IC chip.Ako ay nagsisikap na malutas ang problemang ito ngunit walang magandang resulta lilitaw.

 

Welcome to EDABoard.com

Sponsor

Back
Top