hallo! ich programmiere auf mplab einen microcontroller der bezeichnung pic16f877a! dabei befinden sich am port B die taster! diese sind mit RB2, RB3, RB4 und RB5 deklariert!ich muss allerdings diese taster erst entprellen, wofür ich eine funktion suche, denn an dieser beiße ich mir zur zeit die zähne aus! kann mir denn da jemand weiterhelfen?ich bin erst ein einsteiger und komm noch nicht so mit der programmierung zurecht! mfg robert-env
>wofür ich eine funktion suche, denn an >dieser beiße ich mir zur zeit die zähne aus! Hast du denn schon "irgendeine" Funktion, oder woran beißt du dir jetzt konkret die Zähne aus?
auf der sprut-homepage war ich schon, aber da ist das meiste auch in assembler! bis jetz hab ich diese anweisung geschrieben (teilweise aus dem netz und teilweise von mir): //wait_for_release (PORTB,0) void wait_for_release(char port, short pin) { char x=0; while(x !=5) { if (!bit_test(port,pin)) x++; else x=0; DelayMs(50); } } //wait_for_press (PORTB,0) void wait_for_press(char port, short pin) { char x=0; while (x!=5) { if (!bit_test(port,pin)) x=0; else x++; DelayMs(50); } } void entprellung (void) { while(1) { if (RB5==0 || RB4==0 || RB3==0 || RB2==0) { wait_for_release(port,pin); wait_for_press(port,pin); } else DelayMs(100); aber das funktioniert nicht so richtig!ich bekomm immer den fehler "undefiniertes symbol: _bit_test"! es muss allerdings auch nicht diese anweisung sein, über eine ganz neue form für eine tasterentprellung wäre ich auch nicht abgeneigt!!!!
>"undefiniertes symbol: _bit_test"
Kommt in deinem Code Ausschnitt gar nicht vor.
ja ich weiß, dass das nich vorkommt, abaer das wird nun mal angezeigt!ich kann den fehler auch anklicken, aber er wird mir nicht im programm angezeigt, wie sonst üblich...
danke für die hilfe peter, aber das hilft mir nicht viel weiter!denn ich programmiere ja in mplab, also ansi c und dakomme ich mit solchen anweisungen wie cli() etc. nicht weiter!!
>>kann mir denn da jemand weiterhelfen?ich bin erst ein einsteiger und >>komm noch nicht so mit der programmierung zurecht! Warum realisierst du dann keine Hardwareentprellung? Ist einfacher, sicherer und besser in der Performance.
>also ansi c und dakomme ich mit solchen >anweisungen wie cli() etc. nicht weiter!! Dann musst du es halt ansi-konform machen. Was macht cli()? Es wird einfach ein Bit im Status-Register gelöscht (Globales Interrupt-Bit). Du musst also bei deinem PIC nachsehen, welches Bit in welchem Register gelöscht werden soll.
robert-env wrote: > danke für die hilfe peter, aber das hilft mir nicht viel weiter!denn ich > programmiere ja in mplab, also ansi c und dakomme ich mit solchen > anweisungen wie cli() etc. nicht weiter!! cli(), sei() mußt Du durch die Funktionen des PIC für Interrupt disable/enable ersetzen (kann durch #define erfolgen). C ist ja portabel. Es sind nur Kleinigkeiten, die Hardware betreffend, die angepaßt werden müssen. Der Algorithmus selber ist CPU unabhängig. Peter
wieso denn so schwierig? Wenn dir 50ms nicht weh tun, mach es doch einfach so: if (PINB.0 == 0) { delay_ms(50); if (PINB.0 == 0 && check == 0) { // hier kommt dein Code rein } } else { check = 0; }
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.