Hallo. Ich möchte eigentlich etwas recht simples schreiben nur brauche ich da so eine Art threads (glaube ich zumindest^^). Und zwar habe ich folgendes: Ich habe zwei Ports. B und C. An C sind LEDS. Jetzt möchte ich wenn Pin 2 an B auf 1 gesetzt wird, das C auf 0xF0 gesetzt wird. Also das praktisch die obere hälfte aufleuchtet. Wenn Pin 1 an B auf gesetzt wird sol dagegen 0x0F aufleuchten. Mein Problem dabei ist, das man die möglichkeit haben soll, wenn Pin 1 oder 2 an B auf 1 gesetzt wird, dass man noch 250 ms sekunden zeit hat die andere seite ebenfalls auf 1 zu setzen. also das innerhalb der 250 ms es möglich ist, Port C auf 0xFF zu setzen. Wenn ich jetzt delay_ms nehmen würde, dann wäre das ja im grunde eine pause in der gar nix mehr geht. ich will aber das er im hintergrund zählt (also eben wie so eine art zusätzlicher thread) damit man innerhalb der zeit noch auf 1 setzen kann. ich hoffe es ist ein wenig rübergekommen was ich meine :) programmiere mit CodeVision in C und habe das AT90S8535. bisher habe ich folgdenden code (also ohne die 250ms geschichte...): ------------------------------ void main(void) { PORTB=0x00; DDRB=0x00; PORTC=0x00; DDRC=0xFF; while (1) { if(PINB.1) { PORTC=0x0F; delay_ms(2500); PORTC=0x00; } if(PINB.2) { PORTC=0xF0; delay_ms(2500); PORTC=0x00; } }; } ------------------------------ also bis jetzt kann man also auf der einen seite 1 setzen und die ein ehälfte wird für 2,5 sekunden eingeschaltet... viele dank für eure hilfe!! gruß christian
Das würde ich mit einem Timer lösen. Auch wenn ich jetzt nicht weis, wie man das mit CodeVision lösen kann, das Datenblatt ist sicherlich eine gute Anlaufstelle, denn die Register werden währscheinlich in CodeVision auch so ähnlich heißen wie im Datenblatt. CU - cl
lol :-).. hast du schon mal an schleifen und ifs gedacht? ---------------------------------- int x; while (1) { x=1; if(PINB.1) { PORTC=0x0F; while(x<=255) { if(PINB.2) { PORTC=0xFF; } x++; delay_ms(1); } delay_ms(2500); PORTC=0x00; } if(PINB.2) { PORTC=0xF0; while(x<=255) { if(PINB.1) { PORTC=0xFF; } x++; delay_ms(1); } delay_ms(2500); PORTC=0x00; } } ---------------- probiers mal vl damit. ich hoffe es funktioniert.
erstmal vielen dank für eure posts. @Schoaschi: lol^^ thx. darauf hätte ich auch ma kommen sollen. habs zwar noch nich gestet, aber sieht irgendwie total logisch aus das ganze^^. aua das tut weh :) werd gleich mal testen :) thx!!! cu
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.