All pastes #758563 Raw Edit

Unbenannt

public c v1 · immutable
·published 2007-11-02 11:12 UTC
rendered paste body
/** comp_02_hupertz ====================================================================* Hupertz, Manuel | ITA 05 | 2007-10-28 | Platz 11* ======================================================================================** ==Beschreibung: ======================================================================* 	Leistungssteuerung mit der Compare-Funktion von Timer 2*	50% Puls-Pause**	Taster 	an P1.0 low-aktiv, Wirkung beim Loslassen: ~~~~~~~\_/*	Last	an P1.2 high-aktiv, EIN: _/~~\__/~~\__/~~\_, AUS: ________** ==Funktion: ==========================================================================* 	Simulator: EIN / AUS funktioniert - 0,5s-Grenze noch nicht implementiert*	Hardware: noch nicht getestet* ======================================================================================*//******************************** Quelltextdateien ************************************/#include <reg515c.h>/**************************** Adress-Spezifikationen **********************************///sbit P1_0 = P1^0;	//Taster zum Starten / Stoppen (Öffner)//sbit P1_2 = P1^2;	//Last (Lampe)/********************************** Konstanten ****************************************///#define ENTER 0x0D//statischer Wert für zOverflow:#define ZOV 0x10000L //L := long//Variablentyp boolean in C:typedef int bool;#define TRUE   (1)#define FALSE  (0)/******************************** globale Variablen ***********************************///Timer-Startwert:static unsigned int ZSTART = ZOV-10*833; //833 := trun = 0,5ms / 833*10 := 5ms / 200Hz//zstart = zov-(zov-trun/tclock), tclock = 6/fosc = 0,6µs//zstart = 65536-(65536-5ms/0,6µs)//Comparewert (833*5 := 2,5ms / 100Hz - 50% Ausgangsleistung):static unsigned int ZCOMPARE = ZOV-5*833;bool isOn;	            //Last, TRUE: Last EIN / FALSE: Last AUSbool isDown = FALSE;	//Taster, TRUE: Taster gedrückt, LOW-Signal                             //FALSE: Taster nicht gedrückt, HIGH-Signalunsigned int count = 0;unsigned int stopp1 = 0;unsigned int stopp2 = 0;/****************************** Funktionsdeklarationen ********************************/void main (void);						//Haupt-Funktionvoid initialize_seriell (void);			//Initialisiert die serielle Schnittstellevoid putchar (char ch);					//benötigt für andere Funktionenvoid printstring (char *p);				//Text ausgeben//void printuchar(unsigned char byte);	//nicht benötigt//char getchar(void); 					//nicht benötigtvoid initialize_p10 (void);			    //Initialisiert P1.0void initialize_timer2 (void);			//Initialisiert timer2//void p10_int (void);void timer2_int (void);/******************************** Hauptprogramm ***************************************/void main (void) {	//Serielle Schnittstelle initialisieren:	if (BD == 0)        initialize_seriell();	//Timer 2 / P1.0-Interrupt initialisieren:    initialize_p10();	initialize_timer2();	//Interrupt-Logik des Controllers aktivieren:	EAL = 1;	//Ausgabe des Titels etc.:  	printstring("comp_02_hupertz.c");		  	printstring("\n\nHupertz\nITA 05\n29.10.2007\n\n\n");	//Überschrift:	printstring("Beschreibung:\nLeistungssteuerung mit der Compare-Funktion\nvon Timer 2\n50% Puls-Pause\n\n");	//Endlosschleife:	while (TRUE)	{	}}/*------------------------------------------------------------------------------------ */void initialize_seriell (void)	  {  SCON  = 0x50;		//SCON: mode 1, 8-bit UART, enable rcvr.  PCON |= 0x80;     //SMOD Bit setzen.   SRELH = 0x03;     //9600 baud @ 10MHz für C515C.  SRELL = 0xBF;		  BD    = 1;		//Baudratengenerator verwenden.  TI    = 1;     	//vorausgegangenes Transmit beendet.  }//-------------------------------------------------------------------------------------*/void putchar (char ch)  {  while(TI == 0);	// voriges Transmit Ende abwarten  TI=0;             // für nächste Übertragung löschen  SBUF=ch;			// Byte seriell senden  }//-------------------------------------------------------------------------------------*/void printstring (char *ptext)  {  while(*ptext != '\0')    {    putchar(*ptext);    ptext++;    }  }/*-------------------------------------------------------------------------------------*//*char getchar (void) 	{  	char cget;  	do{    	while(RI == 0);		//Receive Ende abwarten ==> empfangenes Zeichen komplett.    	cget=SBUF;          //seriell eingelesenes Byte in Variable speichern.    	RI=0;               //bereit zum Einlesen des nächsten Zeichens.    	}while(cget==0x11); //PC (Keil-Umgebung) sendet regelmäßig 0x11 --> unterdrücken.  	return(cget);	}*//*-------------------------------------------------------------------------------------*//*void printuchar (unsigned char byte){		unsigned char h, z, e;	h = byte / 100;	z = byte / 10 % 10;	e = byte % 10;	putchar(h + 0x30);	putchar(z + 0x30);	putchar(e + 0x30);}*//*-------------------------------------------------------------------------------------*/void initialize_timer2 (void){    ET2 = 1;    //Konfiguration 'timer 2 control register':	T2CON = 0x51;	//U.A. Interruptansteuerung P1.0 über positive Flanke.	//Konfiguration des C/C-Register 2 (0x20h = 00100000b):	CCEN  = 0x20;				//Setzen von Timer / Reload / Compare-Wert:	TL2   = ZSTART;				TH2   = ZSTART >> 8;	CRCL  = ZSTART;	CRCH  = ZSTART >> 8;	CCL2  = ZCOMPARE;	CCH2  = ZCOMPARE >> 8;}/*-------------------------------------------------------------------------------------*/void initialize_p10 (void){    EX3 = 1;	//Interrupt-Freigabe P1.0.	IEX3 = 0;   //Overflow-Flag von P1.0 löschen.}/*-------------------------------------------------------------------------------------*/void p10_int (void) interrupt 10 {    IEX3 = 0;    if (!isDown) {        isDown = TRUE;        T2CON = 0x11;        stopp1 = count;    }    else {        isDown = FALSE;        T2CON = 0x51;        stopp2 = count;        stopp2 -= stopp1;        if (isOn)	//Wenn Last momentan EIN.    	{    		CCEN = 0;		//Compare Register 2 AUS.    		isOn = FALSE;	//Last AUS.            printstring("Last AUS.\n");    	}    	else		//Wenn Last momentan AUS.    	{    		CCEN=0x20;		//Compare Register 2 EIN.    		isOn = TRUE;	//Last EIN.            printstring("Last EIN.\n");    	}    }    //int stopp2 = timerbla;        			}/*-------------------------------------------------------------------------------------*/void timer2_int (void) interrupt 5 {    if (count <= 999)         count++;    else        count = 1;    /*	//Overflow Flag loeschen:	TF2 = 0;		//10ms * 50 = 0.5s	if (count == 50) {				//count zurücksetzen 		count = 0;		//Meldung an P1.4		P1_4 = 0;	}*/}	/*-------------------------------------------------------------------------------------*/