Hallo! Habe ein PS2 Keyboard an einen 8051 angeschlossen. DATA auf P1.5 CLOCK auf /INT0 (P3.2) Vcc und GND entsprechend Nun mache ich folgendes: EA = 1 (interrupts enable) EX0 = 1 (int0 enable) IT0 = 1 (react on falling edge) CLK = 1 (keyboard only sends if clk & data are 1) DATA = 1 (~) Jetzt hab ich mir eine interrupt 0 funktion geschrieben, die nix macht, außer das da ein breakpoint drin ist. Problem ist, er springt dort nie rein. Sobald ich ne Taste drücke müsste das keyboard doch ein clk signal senden und der controller in die interrupt behandlung springen, oder? Habe ich was vergessen? Danke Karl
Muss ich das so connecten wie auf der Seite von Tobi beschrieben mit Kondensatoren oder geht es auch einfach die leitungen an den uC anzuschließen so wie es in den atmel application notes z.b. beschrieben steht? Danke.
Da der 8051 quasi Open Collector Ausgänge hat, kannst du die Leitungen direkt anschließen. Wie gesagt: Einige Tastaturen funktionieren nur, nachdem sie initialisiert wurden. D.h. nach dem Einschalten senden sie eine Meldung an den PC, der darauf mit einer Bestätigung und meistens mit der Initialiaiserung antwortet. Nur dann funktionieren die Tastaturen.
Heißt quasi open collector ausgänge das ich sowohl ein signal von der tastatur empfangen kann sowie ein signal vom uC auf die leitung legen kann? "D.h. nach dem Einschalten senden sie eine Meldung" -> müsste das nicht schon den interrupt auslösen? Oder schalt ich die interrupts vielleicht zu spät ein und krieg das signal deswegen nicht? Danke
>Heißt quasi open collector ausgänge das ich sowohl ein signal von der >tastatur empfangen kann sowie ein signal vom uC auf die leitung legen >kann? Ja, immer wenn ein Bit auf High gesetzt ist, ist es als Eingang verwendbar. Nach dem Selbststest der Tastatur sendet diese den Wert AA und zeigt an, dass der Test erfolgreich war. Es müsste also eigentlich ein Interrupt kommen. Poste mal den Code.
sbit CLK = P3^2; sbit DAT = P1^2; void esr0_int() interrupt 0 { counter++; //hier ist ein breakpoint } void main() { IT0 = 1; EX0 = 1; EA = 1; DAT = 1; CLK = 1; while(1); } Ich hab den Code leider nicht hier, aber so ungefähr sieht er aus. Hängt ne Tastatur dran, springt er nie zum breakpoint. Setz ich den Interrupt per hand mit nem 10k pullup widerstand springt er bei absteigender taktflanke rein.
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.