/ CNT0: Counter - // COUNTER mit TIMER0 (8 Bit) // Mega32: // Counter Input PB0 (PortB.0) // Pulse Output PA0 (PortA.0) // Damit ein Ergebnis angezeigt wird muss PA0 mit PB0 verbunden werden. // erforderliche Library: IntFunc_Lib.cc, LCD_Lib.cc, Key_Lib.cc // ADC_0: Messwertausgabe // Eingang ADC0 PA0 (PortA.0) // erforderliche Library: IntFunc_Lib.cc // Der Meßwert wird über die serielle Schnittstelle ausgegeben // Der ADC hat eine Auflösung von 10 Bit. // Bei einer Referenzspannung von 5V bedeutet dies 4,8828mV/Bit. (5V/1024Bit) // Deklaration der Formatierungsvariablen #define LF 0x0A #define CR 0x0D #define SPACE 0x20 int cnt; int count; //------------------------------------------------------------------------------ //Interruptserviceroutine für den 16 Bit Timer3 (Zykluszeit). //CNT wird bei Ausführung jedes mal um eins hochgezählt. //------------------------------------------------------------------------------ void Timer3_ISR (void) { int irqcnt; cnt=cnt+1; Msg_WriteChar('T'); Timer_T3Stop(); Timer_T3Time=0; Timer_T3Time(0xFFFF,PS_1024); irqcnt=Irq_GetCount(INT_TIM3CMPA); } //------------------------------------------------------------------------------ // Auswertung der am Eingang anliegenden Spannung // //------------------------------------------------------------------------------ void ADC_Read_Channel(byte channel) { word ADC_Wert; // In dieser Variablen wird der // gemessene Wert gespeichert. ADC_Set(ADC_VREF_VCC,channel); // Festlegung der Bezugsgröße des Eingangskanals // und Bestimmung des verwendeten Kanals. // In diesem Fall werden alle gemessenen // Werte auf 5V bezogen. ADC_Wert=ADC_Read(); // Einlesen des Wertes des Kanals Msg_WriteChar(channel|0x30); // Ausgabe der Kanalnummer über eine // bitweise ODER-Verknüpfung mit dem // Hexwert des ASCII-Zeichens 0. Msg_WriteChar(SPACE); Msg_WriteWord(ADC_Wert); // Ausgabe: gemessener Wert Msg_WriteChar(SPACE); // Ausgabe: Leerzeichen } //------------------------------------------------------- // Hauptprogramm //------------------------------------------------------- void main(void) { int flag_timer,flag_ausg; int i; cnt=0; flag_timer=1; flag_ausg=0; Port_DataDirBit(36,0); Irq_SetVect(INT_TIM3CMPA,Timer3_ISR); while (1) { while (!(Port_ReadBit(36))) { if (flag_timer) { Timer_T3Time(0xFFFF,PS_1024); flag_timer=0; flag_ausg=1; ADC_Read_Channel(ADC0); ADC_Read_Channel(ADC1); } } while (Port_ReadBit(36)) { if(flag_ausg) { count=Timer_T3GetCNT(); // Timer3 Wert les Msg_WriteWord(count); Msg_WriteChar(SPACE); Msg_WriteWord(cnt); Msg_WriteChar(CR); flag_timer=1; flag_ausg=0; Timer_T3Stop(); Timer_Disable(3); } } } }