/* erzeugung einer sinus-kurve mit variabler periodendauer (leds_high_byte) und amplitude (leds_low_byte) ausgabe ueber die serielle schnittstelle 0 taste a gedrueckt: P2.0: cc0: (pos. Flanke): periodendauer: kleiner taste b gedrueckt: P2.1: cc1: (pos. Flanke): periodendauer: groesser taste c gedrueckt: P2.2: cc2: (pos. Flanke): amplitude: groesser taste d gedrueckt: P2.3: cc3: (pos. Flanke): amplitude: kleiner */ #include // Register Definitionen C167 #include #include #include #define PI 3.141592654 #define PERIODE_0 1 #define PERIODE_START 10 #define PERIODE_MIN 0 #define PERIODE_MAX 31 #define AMPLITUDE_START 38 #define AMPLITUDE_MIN 0 #define AMPLITUDE_MAX 38 #define INTERVALL 1 #define MITTE 40 #define BAUDRATE 9600.0 /* Baudrate fuer asynchr. ser. Schnittstelle 0 */ #define fCPU 20000000.0 /* Taktfrequenz fCPU=20MHz bei fOSZ=40MHz */ /********************* Prototypen ****************************************/ void ser0_init_poll (void); /* Initialisierung ASC0 -> Polling! */ void cc0 (void); /* taste a: periodendauer: kleiner */ void cc1 (void); /* taste b: periodendauer: groesser */ void cc2 (void); /* taste c: amplitude: groesser */ void cc3 (void); /* taste d: amplitude: kleiner */ /*************************************************************************/ unsigned int idata periode; unsigned int idata amplitude; char huge cFeld[49152]; /*=======================================================================*/ void main (void) { register int y,kurve; register unsigned long int x_grad; register int step = PERIODE_0; int index; periode = PERIODE_START; amplitude = AMPLITUDE_START; CCM0 = 0x1111; /*CAPCOM_1_Kanal_1234: taste_a, taste_b, taste_c, taste_d*/ CC0IC = 0x0078; /* IR=0, IE=1, ILVL=14, GLVL=0 */ CC1IC = 0x0079; /* IR=0, IE=1, ILVL=14, GLVL=1 */ CC2IC = 0x007a; /* IR=0, IE=1, ILVL=14, GLVL=2 */ CC3IC = 0x007b; /* IR=0, IE=1, ILVL=14, GLVL=3 */ ser0_init_poll(); S0TIR=1; IEN=1; //****ramtest*********************************************** for(index=0; index<=1000; index++) cFeld[index]='.'; for(index=0; index<=1000; index++) { if(cFeld[index]=='.') printf("k"); else { printf("FEHLER im RAM\n"); while(1){} //Loop_for_ever } } //********************************************************** while (1) { for (x_grad=0; x_grad<=360*INTERVALL; x_grad=x_grad+step) { y=amplitude*sin(periode*(x_grad%360)*(PI/180)); if (y>0) { for (kurve=1; kurveMITTE && kurve==MITTE) printf("|"); printf(" "); } printf("*\n"); } if (y<0) { for (kurve=1; kurve PERIODE_MIN) --periode; } /*=======================================================================*/ /*=======================================================================*/ void cc2 (void) interrupt 0x12 { if (amplitude < AMPLITUDE_MAX) ++amplitude; } /*=======================================================================*/ /*=======================================================================*/ void cc3 (void) interrupt 0x13 { if (amplitude > AMPLITUDE_MIN) --amplitude; } /*=======================================================================*/