main(void) { //===Hier sollten Variablen deklariert werden ============================ //unsigned char i = 0; //char text[60]; //int x,y; //===Hier die notwendigen Initialisierungsschritte ======================= //=(1)== Port-Initialisierung ============================================ init_Port(); // Initialisierung der Port Register //(2)=== Clock-System-Initialisierung ==================================== //== XT2() oder Dco() als Taktquelle einstellen //== durch Ein- oder Auskommentieren //== DCO ist bei LPM Einsatz bevorzugt muß zyklisch kalibriert werden //== XT2 ist quarzstabil muß nicht zyklisch kalibriert werden // //XT2 (); // XT2 Taktquelle aktivieren mit 7.3728MHz DCO (); // Dco Taktquelle aktivieren mit 7.3728MHz // beachte DELTA //=(3)== Timer-Initialisierung= ========================================== init_Timer_A(); // Init Timer für Sekundeninterrupt // !! noch leere Funktion //=(4)== USART-Initialisierung =========================================== init_UART1(); // UART-RS232 mit 115.2kBit/s initialisieren // !! noch leere Funktion //=(5)== CC1100-Transceiver-Initialisierung ============================== init_UART0_SPI(); // CC1100 SPI UART initalisieren init_CC1100_POWERDOWN(); // CC1100 init und in RX Mode setzen // !!!Interrupte sind ab jetzt freigegeben!! //== Adresse und Funkkanal des Transceivers setzen //== für die Arbeitsplaetze HWPx (x=1...10) sollten //== ID=x und channnel=x gesetzt werden ID = 1; // Adresse setUid(ID); // Adresse im Transceiver setzen channel = 1; // Funkkanal switchFreq(channel); // Funkkanal im Transceiver setzen //== Soll der Transceiver genutzt werden müssen folgende zwei Zeilen //== auskommentiert werden: init_CC1100_IDLE(); // CC1100 in den IDLE Mode setzen init_CC1100_POWERDOWN();// CC1100 in den PowerDown Mode setzen //=(6)== LCD-Display-Initialisierung ===================================== dogm_reset(); // Hardware Reset des LCD Controllers dogm_init(); // Initialisierung der LCD Controller Register lcd_clear(WHITE); // Grafikspeicher auf dem MSP430 löschen //lcd_string(BLACK, 15, 25, "MSP430-GESTARTET!"); // Textausgabe lcd_paint(); // Grafikspeicher auf das LCD Display ausgeben #define LED_ROT (0x01) // 0 0 1 P4.0 #define LED_GELB (0x02) // 0 1 0 P4.1 #define LED_GRUEN (0x04) // 1 0 0 P4.2 #define LED_ALL (LED_ROT | LED_GELB | LED_GRUEN) #define LED_ON(led) (BIT_CLR(P4OUT, led)) #define LED_OFF(led) (BIT_SET(P4OUT, led)) #define LED_TOGGLE(led) (BIT_TOGGLE(P4OUT, led)) #define IS_LED_ON(led) (!(P4OUT & led)) #define TASTE_LINKS (0x1) #define TASTE_RECHTS (0x2) #define SLEEP_QUANTUM 10000 #define SLEEP(n) do { /* sleep for n seconds */ \ long time = n * 100000; /* wait() sleeps 10*n microseconds */ \ while(time > SLEEP_QUANTUM) { \ wait(SLEEP_QUANTUM); \ time -= SLEEP_QUANTUM; \ } \ wait(time); \ } while(0) // alle Leitungen auf Eingang TS_TIP_DIR_IN; TS_YP_DIR_IN; TS_YM_DIR_IN; TS_XP_DIR_IN; TS_XM_DIR_IN; // die Ausgangsregister vorbereitend setzen TS_XM_0; // XM X-Achse wird auf 0 gesetzt TS_TIP_1; // YP Y-Achse wird über einen PullUp Widerstand auf 1 gezogen // Die Ausgaenge jetzt freigeben TS_XM_DIR_OUT; // XM auf 0 TS_TIP_DIR_OUT; // YP auf 1 BIT_SET(P1IE, BIT6); BIT_CLR(P1IFG, BIT6); _bis_SR_register(GIE); //===Hier die Endlosschleife quasi das Betriebssystem===================== print_value(); while(1){ // linker Taster gedrueckt -> gruen an if (P1IN & TASTE_LINKS) { LED_OFF(LED_ROT | LED_GELB); LED_ON(LED_GRUEN); // rechter Taster gedrueckt -> rot an } else if (P1IN & TASTE_RECHTS) { LED_OFF(LED_GRUEN | LED_GELB); LED_ON(LED_ROT); // kein Taster gedrueckt -> gelb an } else { LED_OFF(LED_GRUEN | LED_ROT); LED_ON(LED_GELB); } } // Ende der Endlosschleife } // Ende Main
void aufgabe28() { char str[255]; char *i,*j=str; int len; int knopp=0,ax=0,ay=0,az=0; int lastax=-1; int lastay=-1; int lastaz=-1; // Arbeitspalznummer +10 setUid(17); // Selbe fequenz wie unsere Nachbarn mit denen wir komunizieren wollen switchFreq(8); while(1) { if(do_output==1) { // Daten des Packets holen und vorbereiten sprintPacket(str); len=strlen(str); writestr(str); // Code welcher die Funtionalitaet folgender Zeile hat // sscanf(j,"%d\t%d\t%d\r\n",NULL,NULL,ax,ay,az,knopp); j=str; while(*j!='\t') j++; j++; while(*j!='\t') j++; i=++j; while(*j!='\t') j++; *j='\0'; ax=atoi(i); i=++j; while(*j!='\t') j++; *j='\0'; ay=atoi(i); i=++j; while(*j!='\t') j++; *j='\0'; az=atoi(i); i=++j; while(*j!='\r') j++; *j='\0'; knopp=atoi(i); // Je nach dem welcher Knopf gedrueckt wurde LEDs einschalten if(knopp==2){ LED_ON(GREEN); } if(knopp==1){ LED_OFF(GREEN); } // Entscheiden ob einer der Beschleunigungswerte mehr als // 20 % vom alten abweicht - wenn ja rote LED einschalten if(lastax!=-1){ if( abs(lastay-ay) >= lastay*0.2 || abs(lastax-ax) >= lastax*0.2 || abs(lastaz-az) >= lastaz*0.2 ){ LED_ON(RED); }else{ LED_OFF(RED); } } // alte Werte fuer den naechten Druchlauf setzen lastax=ax; lastay=ay; lastaz=az; // gelbe LED als Statusanzeige toggeln LED_TOGGLE(YELLOW); do_output=0; // ACK an den sender schicken sprintf(str,"FACK:%d",len); sendPacket(18,17,str,strlen(str)); } } }
main(void) { //===Hier sollten Variablen deklariert werden ============================ //unsigned char i = 0; //char text[60]; //int x,y; //===Hier die notwendigen Initialisierungsschritte ======================= //=(1)== Port-Initialisierung ============================================ init_Port(); // Initialisierung der Port Register //(2)=== Clock-System-Initialisierung ==================================== //== XT2() oder Dco() als Taktquelle einstellen //== durch Ein- oder Auskommentieren //== DCO ist bei LPM Einsatz bevorzugt muß zyklisch kalibriert werden //== XT2 ist quarzstabil muß nicht zyklisch kalibriert werden // //XT2 (); // XT2 Taktquelle aktivieren mit 7.3728MHz DCO (); // Dco Taktquelle aktivieren mit 7.3728MHz // beachte DELTA //=(3)== Timer-Initialisierung= ========================================== init_Timer_A(); // Init Timer für Sekundeninterrupt // !! noch leere Funktion //=(4)== USART-Initialisierung =========================================== init_UART1(); // UART-RS232 mit 115.2kBit/s initialisieren // !! noch leere Funktion //=(5)== CC1100-Transceiver-Initialisierung ============================== init_UART0_SPI(); // CC1100 SPI UART initalisieren init_CC1100_POWERDOWN(); // CC1100 init und in RX Mode setzen // !!!Interrupte sind ab jetzt freigegeben!! //== Adresse und Funkkanal des Transceivers setzen //== für die Arbeitsplaetze HWPx (x=1...10) sollten //== ID=x und channnel=x gesetzt werden ID = 1; // Adresse setUid(ID); // Adresse im Transceiver setzen channel = 1; // Funkkanal switchFreq(channel); // Funkkanal im Transceiver setzen //== Soll der Transceiver genutzt werden müssen folgende zwei Zeilen //== auskommentiert werden: init_CC1100_IDLE(); // CC1100 in den IDLE Mode setzen init_CC1100_POWERDOWN();// CC1100 in den PowerDown Mode setzen //=(6)== LCD-Display-Initialisierung ===================================== dogm_reset(); // Hardware Reset des LCD Controllers dogm_init(); // Initialisierung der LCD Controller Register lcd_clear(WHITE); // Grafikspeicher auf dem MSP430 löschen //lcd_string(BLACK, 15, 25, "MSP430-GESTARTET!"); // Textausgabe lcd_paint(); // Grafikspeicher auf das LCD Display ausgeben #define LED_ROT (0x01) // 0 0 1 P4.0 #define LED_GELB (0x02) // 0 1 0 P4.1 #define LED_GRUEN (0x04) // 1 0 0 P4.2 #define LED_ALL (LED_ROT | LED_GELB | LED_GRUEN) #define LED_ON(led) (BIT_CLR(P4OUT, led)) #define LED_OFF(led) (BIT_SET(P4OUT, led)) #define LED_TOGGLE(led) (BIT_TOGGLE(P4OUT, led)) #define IS_LED_ON(led) (!(P4OUT & led)) #define TASTE_LINKS (0x1) #define TASTE_RECHTS (0x2) #define SLEEP_QUANTUM 10000 #define SLEEP(n) do { /* sleep for n seconds */ \ long time = n * 100000; /* wait() sleeps 10*n microseconds */ \ while(time > SLEEP_QUANTUM) { \ wait(SLEEP_QUANTUM); \ time -= SLEEP_QUANTUM; \ } \ wait(time); \ } while(0) BIT_CLR(P1DIR, TASTE_LINKS); BIT_CLR(P1IES, TASTE_LINKS); // LH BIT_SET(P1IE, TASTE_LINKS); BIT_CLR(P1IFG, TASTE_LINKS); BIT_SET(P1DIR, BIT2); _bis_SR_register(GIE); memset(uart_buffer, 0, sizeof(uart_buffer)); //===Hier die Endlosschleife quasi das Betriebssystem===================== while(1){ //BIT_SET(P1OUT, BIT2); //BIT_SET(P1OUT, BIT2); //SHT11_Read_Sensor(); //sprintf(uart_buffer, "%s %s\r\n", temp_char, humi_char); //print_buf(uart_buffer); //lcd_clear(WHITE); // Grafikspeicher auf dem MSP430 löschen //lcd_string(BLACK, 15, 25, uart_buffer); // Textausgabe //lcd_paint(); // Grafikspeicher auf das LCD Display ausgeben //wait(30000); } // Ende der Endlosschleife } // Ende Main