Keil C-Problem

O

onde

Guest
hallo!

Ik heb een probleem met het volgende programma:
/ / Timerinterrupt

# include <reg517a.h>

void INTTIM0 (void) onderbreken 1
(If (P4 <0x7f) P4 <<= 1;
if (P4> 0x02) P4>> = 1;
Th0 =- 39; / / 10ms
TL0 = 0;
)

main ()
(
P4 = 0x01;
TMOD = 0x01; / / Timer 0 Modus 1 16 Bit
Th0 = -39; / / every 10ms Int.
TL0 = 0;
ET0 = 1; / / Timer 0 Interrupt gehandicapten
EAL = 1; / / zodat alle

TR0 = 1; / /

while (1)
(
)
)

Het probleem is, P4 is slechts 1 keer verschoven (van 0x01 naar 0x10), na deze niets happing.
Any Idea???

 
wat je bedoelt dat P4 swaps slechts een keer, want het te verschuiven van 0x01 naar 0x10 moet worden verschuiving Vier keer??

 
U plaatst zowel statments als een if, in plaats van het blokkeren van de statments als [IF]
[anders]
blokken.
Ik bedoel dat in de volgende shift, P4 tijd een verschuiving naar links: 0x02 -> 0x04,
dan de volgende if-statement plaatsvinden: P4 terug verschuiving naar rechts: 0x04 -> 0x02.
De volgorde gebeuren elke cyclus onderbreken.

Wijzig de verklaring van [Als] [anders] block!

 
Hoi,

thx voor je answere en voor u hint

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Lachten" border="0" />AuA, ik denk dat het niet mijn dag.
dag

 
een ander ding:
zelfs als mijn compiler accepteert
while (1)
(
)

Ik schrijf:
while (1)
(
;
)had ook slechte ervaring met:
(
blablabla ...

goto xyz_label;

blablabla ...

xyz_label:
)

een van de samenstellers ik gebruik wilde zien van de ";" tussen het label en de beugelThomaz

 
Hallo onde,

Beschrijf uw probleem duidelijk, zodat andere mensen kunnen helpen.
Uw probleem is niet een compiler of zelfs ke * l probleem.
Ik denk dat je wenst te realiseren en een constante verschuiving herhaaldelijk via P4.
Zo ja, hebt u te registreren weer de twee ploegen gebeurtenissen komen er bounderies.Als dat zo is, registreren en draai rond de verschuiving richting.

Please post voor meer details.

Robby

 
Hoi,

Als u th tweede voorwaarde gesteld in een else-statement, krijgt u de seceuence: 1, 2, 4, 8, 16, 32, 64, 128, 64, 128, 64, 128 ...en zo verder, want je moet je decideif zijn up-shifting of Omlaag-Shifting.Sometihg wijze wil goed gaat,

unsigned char UP = 1;

timer0 void interrupt () met 1 (

if (UP)
if ((P4 <<= 1) <0x80) (
UP = 0;
)
anders

 
Hoi,

Als u th tweede voorwaarde gesteld in een else-statement, krijgt u de seceuence: 1, 2, 4, 8, 16, 32, 64, 128, 64, 128, 64, 128 ...en zo verder, want je moet je decideif zijn up-shifting of Omlaag-Shifting.Sometihg wijze wil goed gaat,

unsigned char UP = 1;

timer0 void interrupt () met 1 (

if (UP)
if (P4 <0x80)
P4 <<= 1;
else (
UP = 0;
P4>> = 1;
)

anders
if (P4> 0x01)
P4>> = 1;
else (
UP = 1;
P4 <<= 1;
)

...............Rest van routine
)

 
de geoptimaliseerde code als volgt:

# define true 1
# define false 0

typedef bit bool;

bool UP = 1;

void timer0 onderbreken () gebruik van 1
(
if (UP & & P4 <0x80)
P4 <<= 1;
else if (UP)
(
UP = 0;
P4>> = 1;
)
else if (P4> 0x01)
P4>> = 1;
anders
(
UP = true;
P4 <<= 1;
)
)

 
Hallo onde,

Naar mijn mening, uw probleem kan gebruik komt enkele beperking.
P4 is aangegeven in reg517a.h als van hieronder.
SFR P4 = 0xE8;

In mijn geval, wanneer ik gebruik de speciale funcion register (SFR),
Ik gebruik de vervanging van variabele van unsigned char type.

# include <reg517a.h>

void INTTIM0 (void) onderbreken 1
(
unsigned char IO = 0;

IO = P4;
if (IO <0x7f) (
IO <<= 1;
P4 = IO;
)
if (IO> 0x02) (
IO>> = 1;
P4 = IO;
)
Th0 =- 39; / / 10ms
TL0 = 0;
)

main ()
(
P4 = 0x01;
TMOD = 0x01; / / Timer 0 Modus 1 16 Bit
Th0 = -39; / / every 10ms Int.
TL0 = 0;
ET0 = 1; / / Timer 0 Interrupt gehandicapten
EAL = 1; / / zodat alle

TR0 = 1; / /

while (1)
(
)
)

 

Welcome to EDABoard.com

Sponsor

Back
Top