//           ********************
//           *Testschaltung 5435*
//           ********************
//      Flüssigkristallanzeige graph. FKA LC7981

//                 MSP430F5435
//              -----------------
//              |              XIN|- 32,768kHz
//              |                 |
//  Taster rot--|RST          XOUT|- 32,768kHz
//                            P7.7| LED rot
//              |             P7.6| LED gelb
//                            P2.2| FKA Steuerung RS- (4)
// 25Mhz  X2IN- |             P2.1| FKA Steuerung R/W-(5)
//              |             P2.0| FKA Steuerung E   (6)
// 25MHz X2OUT- |       P1.0..P1.7| Daten FKA
//              |                 |
//              |             P3.0|   SPI BL1
//       UTXD0  |P3.4         P3.1|-> Daten Ausgang    SPI/I²C
//       URXD0  |P3.5         P3.2|<- Data In  (SOMI0) SPI/I²C
//       UTXD1  |P3.6         P3.3|-> Serial Clock Out (UCLK) SPI/I²C
//       URXD1  |P3.7
//              |             P4.0|
//                            P4.1|
//                            P4.2|
//                            P4.3|
//              |             P4.6|
//              |             P4.7|
//    SD-CS     |P5.0         P2.7| SD Karte Einsteckkontrolle
//    SD-DI     |P5.1         P2.6|
//    SD-DO     |P5.2         P2.5|
//    SD-CLK    |P5.3         P2.4|
//              |P5.4         P2.3|
//                            P2.2| FKA Steuerung RS- (4)
//              |             P2.1| FKA Steuerung R/W-(5)
//              |             P2.0| FKA Steuerung E   (6)
//              |P5.5
//              |P5.6         P6.7|
//              |P5.7         P6.6|
//                            P6.5|
//                            P6.4|
//******************************************************************************



#include <msp430.h>
#include <stdio.h>           //für sprintf
#include <TS_5435-LC7981.h>  //FKA LC7981 mit 5435 ansteuern



void text_init(void);        // Initialisiert FKA
void programmversion(void);  // Programmversion anzeigen
void TimerA_einstellen(void);
unsigned int zahl;
unsigned int zahla;



int main(void)
   {

    WDTCTL = WDTPW + WDTHOLD;    // Stop watchdog timer

    P1DIR |= 0xFF;         //FKA Daten
    P2DIR  = 0x07;         //FKA Steuersignal
    text_init();           // Initialisiert FKA als Textanzeige
    text_loeschen();       // löscht alten Text
    programmversion();
    P7DIR |= 0xc0;         // für LED   P7.7=LED rot, 7.6=LED gelb
    P7OUT |= BIT6;
    P7OUT &= ~BIT6;
    P7OUT |= BIT7;
    TimerA_einstellen();
    for(;;);
    }


void programmversion(void)
  {
    char vers[26],z,c;
    char zaa[6],z1a;
   zahla=63000-2000;                               //soll mit 16bit variablen rechnen - i.O.

   lcd_write_command(LCD_CMD_CURSOR_LA,0);         //0 Zeilenanfang 1.Zeile --> 26 Zeichen pro Zeile
   lcd_write_command(LCD_CMD_CURSOR_HA,0);
   sprintf(vers,"%s","Vers.0051-CCS------TS5435"); // Programmversion anzeigen
    for (z=0; z<26;z++)
   {
   c=vers[z];
   lcd_write_command(LCD_CMD_WRITE_DATA, c);
   }
      lcd_write_command(LCD_CMD_CURSOR_LA,106);     // 26 Zeilenanfang 4.Zeile --> 26 Zeichen pro Zeile
      lcd_write_command(LCD_CMD_CURSOR_HA,0);
      sprintf(zaa,"%d",zahla);                      // falsches Ergebnis: -4536
   //   sprintf(zaa,"%X",zahla);                    //  richtig: 0xEE48 --> 61000
      for (z1a=0; z1a<6;z1a++)
      {
      lcd_write_command(LCD_CMD_WRITE_DATA,zaa[z1a]);
      }
   }

void TimerA_einstellen(void)
{
 unsigned int  Zeit_A,ZeitOB_A=0x0F,ZeitUB_A=0xFF;

     TA1CTL = TASSEL0 + TACLR;// + ID_3;    // TASSEL0 = Takteingang für ACLK(32kHz), TACLR--löscht Timer Vorteiler = 2
     TA1CTL |= MC0;           // Timer zählt bis CCRO
     TA1CCTL0 = CCIE;         // Interruptfreigabe
     Zeit_A =(ZeitOB_A << 8)|ZeitUB_A; // Zusammensetzen OB und UB
     TA1CCR0 =Zeit_A;         // Taktzeit:
   _EINT();                   // allg. Interrupt-Freigabe
}
#pragma vector=TIMER1_A0_VECTOR
__interrupt void TIMER1_A0_ISR(void)
   {
   char z1,za[6];

        P7OUT ^= 0x40;                 // LED gelb Toggle P7.6
        P7OUT ^= 0x80;

       zahl=zahl+100;

       lcd_write_command(LCD_CMD_CURSOR_LA,55);    //26 Zeilenanfang 3.Zeile --> 26 Zeichen pro Zeile
       lcd_write_command(LCD_CMD_CURSOR_HA,0);

       sprintf(za,"%d",zahl);
        for (z1=0; z1<6;z1++)

        {
        lcd_write_command(LCD_CMD_WRITE_DATA,za[z1]);
        }

   }

