16. marts 2006 - 12:24Der er
6 kommentarer og 1 løsning
Problem med at læse port ( microcontroller )
Jeg leger med en arm PLC2119
Jeg har problemer med at læse indput fra en kontakt.
Kan en vise mig hvordan det burde gøres. Hvis du ikke kender typen af MC vil jeg gerne høre forslag aligevel.
Her er et eksempel jeg selv har prøvet at lave, men det virker ikke rigtigt.
int main (void) { IO1DIR = 0xff000000; while(1) { if ((IO1PIN & 0x00ffffff) >= 0x00000000) IO1SET = 0xff000000; else IO1CLR = 0xff000000; }; return 0; } Hvad er der galt.?
De fleste virksomheder har efterhånden bevist, at AI virker.
Pilotprojekter leverer resultater. Medarbejdere bruger generative AI-værktøjer. Nye use cases dukker op på tværs af organisationen.
jeg har aldrig leget med den der. Men kender C til microcontrollere ret godt.
Dit "return 0;" virker forkert der er ikke noget at returnere siden det ikke er en funktion du har lavet. Den skal blive i while løkken. main returnere aldrig. Derfor må det hedde: void main (void)
Du vil udmaske en bestemt port pin i if'en ikke ?
Hvis så hvorfor bruges der så 0x00ffffff og ikke 0b00111111 ?
Men igen jeg kender ikke din controller og de er jo ikke ens ;o) men har den 32 port pins ?
jeg ville normalt også lave min main som en void, men min compiler laver en advarsel, hvis jeg laver main void, og for ikke at se på den hele tiden, laver jeg den int. Det har jo ingen betydning, da jeg jo aldrig retunerer
Det med masken, er fordi det er en 32 bit port
Hvis vi ser bort fra ovennævnte, vil du så ikke mene det ser korrekt ud?
Ok. du har så valgt 8bit som udgang og du sætte dem H el. L afhængig af input på ALLE de andre pin's! De skal jo så være høje alle sammen på samme tid. Er det meningen ?
Du skal egentlig blot udmaske det bit kontakten er hængt op på. Det med >=0x00000000 er ikke nødvendig, if'en er sand hvis bare port resultatet er 0x00ffffff.
Kom lige til at tænke på: Hvis man nu kan håbe/regne med at alle portpin står H og du kun trækker 1 low så må man kunne gøre det sår'n: int main (void) { IO1DIR = 0xff000000; while(1) { if ((IO1PIN & 0x00ffffff) < 0x00ffffff) IO1SET = 0xff000000; else IO1CLR = 0xff000000; }; return 0; }
Jeg har fået det til at virke, det var i udmaskningen problemet lå.
Jeg and'er men 0x00ffffff, men det er kun en bit jeg skal maske på, så da jeg ændrede det til 0x00010000 så virkede det. som den var før ville den altid være true.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.