Hírek:

Fontos tudnivalók a migrációval kapcsolatban, Kérlek nézd meg a Régi fórumról új fórumra való költözés

Main Menu

Segítség, béna vagyok!

Indította gaben, 2024 április 09, 15:35

Előző téma - Következő téma

9hpa53xy

 #define spkout_dir   : SBIT(DDRD,3);
 
int beep()
{
int cycle;
for (cycle=0; cycle=255; cycle++)
   {
   spkout == spkout;
   _delay_us(1);
   }  
}
És nem fut le....
Error   34   expected '' before ':' token
Error   33   expected primary-expression before ':' token   

4ybj8h3c8

For ciklus sorvége pontosvessző (szerintem, rég írtam már C programot)
időzítést is növelheted első körben, jobban észreveszed a történést
első sorban kettőspont jó?

s7manbs8

#define spkout_dir  SBIT(DDRD,3);
 
int beep()
{
int cycle;
for (cycle=0; cycle=255; cycle++)
{
spkout == spkout;
_delay_us(1);
}
}
 
 
De ez mit is akrna csinálni ? Ott az a kettőspont nem kell az első sorban.

s7manbs8

meg a végén se a pontosveszsző, de ez mi akarna lenni ?
 
"spkout == spkout"

s7manbs8

for (cycle=0; cycle=255; cycle++)  helyett
 
for (cycle=0; cycle<255; cycle++)   ez akarna klenni gondolom.
 
Na most megyek a boltba addig nem tudok segíteni míg vissza nem érek ...

000000000

Javítva a fgv.:
 
int beep()  
{  
int cycle;  
for (cycle=0; cycle==255; cycle++)  
{  
  spkout = spkout;  
  _delay_us(1);  
}  
}  
 
A hiba a for ciklusban van, a feltételnél két egyenlőség jel kell, mert összehasonlítás.
A másik hiba a spkout == spkout;, ennél egy egyenlőség jel kell csak, mert értékadás.
Igaz az spkout = spkout; sornak nem nagyon van értelme, hogy egy változó felvegye önmaga értékét, ez a sor így nem csinál semmit...

4ybj8h3c8

No pont az ilyenek miatt rühellem a C programozást.

000000000

Éppen ezek miatt a dolgok miatt átlátható a C nyelv. :)

9hpa53xy

 #define spkout      : SBIT(PORTD,3)
 #define spkout_dir   : SBIT(DDRD,3)
 
int beep()
{
int cycle;
for (cycle=0; cycle<255; cycle++)
   {
   spkout = ~spkout
   _delay_us(1)
   }  
}
 
rá van kötve egy piezzo az egyik lábra, és ha meghívod az eljárást, akkor idegesítő hangot ad.
 
bocs, pascalos vagyok, de sajnos váltanom kell.
 
spkout = ~spkout < itt akad el.

000000000

Az spkout változót ha jól látom egy bitnek definiáltad. A ~ operátor szerintem csak byte vagy int stb. változókon negálást csinál, szerintem ez biten nem fog működni, igaz nem ismerem az AVR studiót, de sztem ez lesz a probléma.
 
próbáld meg bit invertálással:
 
spkout = !spkout;

9hpa53xy

ugyanaz....
33   expected '' before ':' token   
32   expected primary-expression before ':' token   
 
:/

000000000

Még annyi, hogy ez így egy 1Mhz-es jel lesz 255usec hosszú, ha ezt egy piezo buzzeren akarod hallani, az nem fog menni. tegyél be több várakozást a ciklusba.

000000000

Valahol sztem hiányzik egy pontosvessződ a sor végén, másold be a kódot ahogy most van.

9hpa53xy

Procedure Beep;
Var
 Cycle:Byte;
Begin
 For Cycle:=0 to 255 do
 Begin
  PortD3_bit:= not PortD3_bit;
  Delay_us(80);
 End;
End;
 
Ez az eredeti kód. ezt próbálom átszenvedni C be.

9hpa53xy

//******************************************************************************
//** Beep **
//******************************************************************************
int beep()
{
int cycle;
for (cycle=0; cycle<255; cycle++)
   {
   spkout = !spkout
   _delay_us(80)
   }  
}