Gut, versuch dich mal damit.
Alle drei Funktionen sind ineinander gemischt, der Effekt ist pseudo-gleichzeitig. Daher gibt es 3 "i" und 3 zeit-Counter und getrennte "P2", damit sie sich nicht in die Quere kommen.
Ich kann's nicht testen, daher kann schon sein, daß irgendwas nicht gleich funzt. In diesem Fall hast du aber am meisten davon, wenn du versucht, das Ganze zu verstehen und dann selbst daran rumzubasteln.
Edit: "schau, schau", weil wir es hier meistens mit 8-Bit Geräten zu tun haben.Code:#include <reg167.h> #define eins 2000 #define zwei 100 #define drei 50 void softdelay (); void erstes(); void zweites(); void drittes(); sbit port15= P2^15; static unsigned int i_1; static unsigned int Cnt_1; static unsigned int Patt_1; static unsigned int i_2; static unsigned int Cnt_2; static unsigned int Patt_2; static unsigned int i_3; static unsigned int Cnt_3; void main(void) { i_1 = 0; i_2 = 0; i_3 = 0; DP2 = 0xFFFF; Patt_1 = 0x0001; Patt_2 = 0x0100; port15 = 1; Cnt_1 = eins; Cnt_2 = zwei; Cnt_3 = drei; while(1) { if (Cnt_1 > 0) Cnt_1--; else { erstes(); Cnt_1 = eins; } if (Cnt_2 > 0) Cnt_2--; else { zweiter(); Cnt_2 = zwei; } if (Cnt_3 > 0) Cnt_3--; else { drittes(); Cnt_3 = drei; } softdelay(); } } ;---------------------------------------------- void erstes (void) { i_1++; Patt_1 <<= 1; if (i_1 >= 8) { i_1 = 0; Patt_1 = 0x0001; } P2 &= 0xFF00; P2 |= Patt_1; } ;---------------------------------------------- void zweites(void) { i_2++; if (i_2 >= 12) { i_2 = 0; Patt_2 = 0x0100; } else { if (i_2 < 6) Patt_2 <<= 1; else Patt_2 >>= 1; } P2 &= 0x00FF; P2 |= Patt_2; } ;---------------------------------------------- void drittes(void) { port15 ^= 1; } ;---------------------------------------------- void softdelay() { for (j=0; j <2000; j++) {}; }
Lesezeichen