/****************************************************************************** * Erzeugung einer Sinuskurve am Bildschirm (Terminalprogramm) 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 "serio.h" #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 /********************* Prototypen *********************************************/ void main (void); /* */ interrupt ( 0x10 ) void cc0 (void); /* taste a: externer Interrupt */ interrupt ( 0x11 ) void cc1 (void); /* taste b: externer Interrupt */ interrupt ( 0x12 ) void cc2 (void); /* taste c: externer Interrupt */ interrupt ( 0x13 ) void cc3 (void); /* taste d: externer Interrupt */ /******************************************************************************/ unsigned int periode, amplitude; char huge cFeld[65536]; /*============================================================================*/ void main (void) { int anzahl; int index; register int y,kurve; register unsigned long int x_grad; register int step = PERIODE_0; 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 */ init_serio(); IEN=1; //****ramtest*********************************************** for(index=0; index<=1000; index++) cFeld[index]='.'; anzahl=0; for(index=0; index<=1000; index++) { if(cFeld[index]=='.') printf("t"); 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; } /*============================================================================*/ /*============================================================================*/ interrupt ( 0x12 ) void cc2 (void) { if (amplitude < AMPLITUDE_MAX) ++amplitude; } /*============================================================================*/ /*============================================================================*/ interrupt ( 0x13 ) void cc3 (void) { if (amplitude > AMPLITUDE_MIN) --amplitude; } /*============================================================================*/