#include #include #include #include void DelayT0(unsigned long count); //delay "10" 10us void WriteData(unsigned char cData); //datem am lcd void WriteInstr(unsigned char cInstr); //befehl an lcd void DisplayBusy(void); //busy flag lcd abfragen void InitLcd(void); //lcd initialisieren void WriteLine(unsigned char *text,unsigned char cursor); //schreiben einer ganzen linie void ReadAD(void); //spannungswerte lesen void ReadADS(void); //strom werte lesen void ShowCounts(float ergebnis); //anzeige auf display void display(float val, uchar *ptr ); //float to asci //***************lcd ports**************** #define LCDPORT P2 #define ENA P1_B0 //enable lcd #define RW P1_B1 //schreiben oder lesen lcd #define RS P1_B2 //befehl senden oder lesen lcd #define BF P2_B7 //*****************da ports************** //spannung #define DATA P0_B7 #define CLK P0_B6 #define CS P0_B5 //strom #define DATAS P0_B1 #define CLKS P0_B3 #define CSS P0_B0 //*****************encoder**************** #define ENC P1_B6 //lcd variablen************************** #define clear_LCD 0x01 #define home_LCD 0x02 #define set_LCD 0x38 #define LCD_off 0x0E #define entry_mode 0x06 #define cursor_off 0x0C #define cursor_blink 0x0F #define EZeile 0x80 //1.Zeile anfang #define ZZeile 0xC0 //2.Zeile anfang //lcd text***************************************** code char welcome1[]="Test Programm "; code char welcome2[]=" "; code char leer[] =" "; near char buf[] = ""; //buffer für int zahl ins ram speichern; near char ComChar[] = ""; near float AnalogBuf=0; //buffer für analogwert wandlerspannung near unsigned char encoder_l; near unsigned char encoder_r; near unsigned int zaehler=100; IRQ_VECTOR(ext_int5,IRQ_INT5) void ext_int5 (void) interrupt { EA = 0; EX5 = 0; //interrupt 5 sperren EXIF &= 15; //lösche alle interrupt flags encoder_l=0; //flags löschen encoder_r=0; DelayT0(60); //entprellen 2ms if(ENC == 1) //drehrichtung festellen zaehler +=1; if(ENC == 0) zaehler -=1; } void main(void) { unsigned char i; unsigned char az_zeichen; EA = 0; PCON|=128; // Baudrate double SCON = 126; // 8 Bit UART - PC-compatible, TI-FLAG set! TH1=256-(XTAL/(192L*BAUDRATE)); // Calculate baudrate divisor TMOD=32; // use timer 1 as baudrate generator TCON=64; // dto. // Init Timer0 (assume UART initialised by startup code) TMOD &= 0xF0; // TMOD Timer 0: 8 bit counter TMOD |= 0x02; // 8 Bit Reload Mode TH0 = 6; // FRQ is XTAL/3000 : 11.0592 MHz: 3.6864 kHz DelayT0(10000); //warten bis alle spannung stabil sind InitLcd(); WriteInstr(0x0C); //cursor off; WriteLine(welcome1,EZeile); //begrüssungstext WriteLine(welcome2,ZZeile); DelayT0(50000); EA = 1; EX5 = 1; for(;;){ ReadAD(); printf("%fA",AnalogBuf); az_zeichen=sprintf(buf,"%d",zaehler); //int to string WriteInstr(0xC0); for(i=0;i< az_zeichen;i++){ WriteData(buf[i]); } EA = 1; EX5=1; //interrupt freigeben DelayT0(1000); } }