Keil c-Problem

O

onde

Guest
ahoj!

Mám problém s týmto programom:
/ / Timerinterrupt

# Include <reg517a.h>

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

main ()
(
P4 = 0x01;
TMOD = 0x01, / / Časovač 0 Mode 1 16 Bit
Th0 = -39; / / každých 10ms Int.
TL0 = 0;
ET0 = 1; / / Časovač 0 Prerušenie zdravotne postihnutých
EAL = 1, / / aby sa všetky

TR0 = 1; / /

while (1)
(
)
)

Problém je, že P4 je posunutý až 1 time (od 0x01 až 0x10), po tomto sa nič Happing.
Any Idea??

 
čo máte na mysli, že P4 swapy iba raz, k tomu, aby prechod od 0x01 až 0x10 to musí byť posun štyrikrát??

 
Vložíte aj statments ako keby miesto blokovanie statments ako [ak]
[ostatné]
bloky.
Myslím, že v budúcom posun, P4 posun jeden čas LEFT: 0x02 -> 0x04,
potom ďalšia if konať: P4 prejsť späť na RIGHT: 0x04 -> 0x02.
Postupnosť jednotlivých nastať prerušenie cyklu.

Zmeniť vyhlásenie [ak] [ostatné] blok!

 
Nazdar,

thx for your answer a pre vás tip

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Úsmev" border="0" />AUA, myslím, že to nie je môj deň.
dovidenia

 
Ďalšia vec:
aj keď môj kompilátor akceptuje
while (1)
(
)

Píšu:
while (1)
(
;
)tiež mali zlé skúsenosti s:
(
blablabla ...

goto xyz_label;

blablabla ...

xyz_label:
)

jeden z překladačů I'm using chcel vidieť "," medzi etiketu a držiakThomaz

 
Dobrý deň, onde,

Popíšte prosím Váš problém jasný, aby ostatní ľudia vám môžu pomôcť.
Váš problém nie je kompilátor, alebo dokonca k * l problém.
Myslím, že si prajete realizovať konštantné a opakovane posun až P4.
Ak áno, musíte sa zaregistrovať počasie dvojzmennej udalosti dostať tam bounderies.Ak áno, zaregistrujte sa a otoč sa posun smerom.

Prosím, miesto pre bližšie informácie.

Robby

 
Nazdar,

Ak dáte th druhá podmienka vo vyhlásení ELSE, dostanete seceuence: 1, 2, 4, 8, 16, 32, 64, 128, 64, 128, 64, 128 ...a tak ďalej, pretože ste sa decideif ste-posun nahor alebo nadol-Shifting.Sometihg likethis Wil dobre,

unsigned char UP = 1;

void timer0 prerušenia () (1 pomocou

if (UP)
if ((P4 <<= 1) <0x80) (
UP = 0;
)
iné

 
Nazdar,

Ak dáte th druhá podmienka vo vyhlásení ELSE, dostanete seceuence: 1, 2, 4, 8, 16, 32, 64, 128, 64, 128, 64, 128 ...a tak ďalej, pretože ste sa decideif ste-posun nahor alebo nadol-Shifting.Sometihg likethis Wil dobre,

unsigned char UP = 1;

void timer0 prerušenia () (1 pomocou

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

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

...............Zvyšok rutinné
)

 
Optimalizovaný kód takto:

# Define pravda 1
# Define falošné 0

typedef trochu bool;

bool UP = 1;

void timer0 prerušenia () pomocou 1
(
if (UP & & P4 <0x80)
P4 <<= 1;
else if (UP)
(
UP = 0;
P4>> = 1;
)
else if (P4> 0x01)
P4>> = 1;
iné
(
UP = true;
P4 <<= 1;
)
)

 
Dobrý deň, onde,

Podľa môjho názoru, môže váš problém príde nejaké obmedzenia použitia.
P4 je deklarovaný v reg517a.h k nižšie.
SFR P4 = 0xE8;

V mojom prípade, ak môžem použiť špeciálne Funcion register (SFR),
Používam nahradiť premennú typu unsigned char.

# Include <reg517a.h>

void INTTIM0 (void) prerušenie 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, / / Časovač 0 Mode 1 16 Bit
Th0 = -39; / / každých 10ms Int.
TL0 = 0;
ET0 = 1; / / Časovač 0 Prerušenie zdravotne postihnutých
EAL = 1, / / aby sa všetky

TR0 = 1; / /

while (1)
(
)
)

 

Welcome to EDABoard.com

Sponsor

Back
Top