ich habe ich habe den timer0 programmiert und kann damit verschiedene rechteck darstellen über 2 tastern von der EURO_535 platine.ich will jetzt mit den selben tastern einflüssen nehmen auf die Puls/Pause zeiten ohne die periode zu verändern.weiss jemand wie ich es realiesieren kann? danke im voraus
Da fehlt einiges, damit der geneigte Forumsuser mitkommt: EURO_535 lässt auf einen '51er-Controller schließen. Also: -Welche Programmiersprache? -Welchen Timermodus? -Wie sieht dein Programm aus? Gruß Elektrikser
signed int data Zeit; signed int data Zeit_2=7600;//normaleweise sollte 10000 aber ich will direkt auf 1hz deswegen 7600 lässt die LED blinken jede 10000*50µs = 0,5sec signed int data Zeit_1[10]={7600,3800,2500,1900,1500,1250,1080,950,830,750}; signed int data Zeit_low; signed int data Zeit_high; sbit Taster_1 =0x91; sbit Taster_2 =0x92; sbit Taster_3 =0x93; int a=200; //definition der warte zeit für taster entprellung int b=20; int i=0;//zählindex für die Zeit int c=0; /*leuchtdioden*/ sbit P3_2 = 0xB2; sbit P3_4 = 0xB4; void main (void) { SP= 0x7F; //stackpointersetzen Zeit = Zeit_2; // (zeit)=W_Zeit Zeit_low=0;//Led ausgeschaltet Zeit_high=Zeit_2;//Led an TR0=0;// Timer0 anhalten TF0=0; // overflowflag Timer0 löschen TMOD=1;//Timer0 einstellen TL0=0xCD; TH0=0xFF; TR0=1;// Timer0 starten ET0=1;// Interruptfreigabe EX4=1;// taster interrupt am port 1.1 freigeben EX5=1;// taster interrupt am port 1.2 freigeben EX6=1; EAL=1;// Interruptfreigabe while(1); } void Timerinto(void) interrupt 1 { TR0=0; // Timer0 anhalten TL0=0xCD; //Timer0 neu laden TH0=0xFF; TR0=1;//Timer0 starten Zeit--; //Zeit dekrementieren if(Zeit== 0)//wenn (Zeit) ==0 { Zeit= Zeit_high;//(Zeit)=W_Zeit P3_2= ~P3_2; //LED_Zustand invertieren }//end if } void Taster1(void) interrupt 11 { EX4=0;//interrupt sperren i++; Zeit_2=Zeit_1[i]; if(P3_2) a=200; while (a!=0) { b=20; while(b!=0) {b--;} a--; //insgesamt 1800 zyklen } c=5; while (c!=0) { if(Taster_1==0) {c=5;} else {c--;} } EX4=1; } void Taster2(void) interrupt 12 { EX5=0;//interrupt sperren i--; Zeit_2=Zeit_1[i]; a=200; while (a!=0) { b=20; while (b!=0) {b--;} a--; } c=5; while (c!=0) { if(Taster_2==0) {c=5;} else {c--;} } EX5=1;//interrupt Freigabe } danke die programmier sprache ist c ich will in prinzip jetzt 2 modus haben eine wo ich normale puls pause habe und eine wo ich puls pause beienflusse danke
Normale Puls-Pause? Meinst du damit 50% an, 50% aus? Im Endeffekt lädst du im Timer-Interrupt Lh0 und Tl0 jeweils mit dem nächsten Wert, den du brauchst. Bei 50/50 bleibt der Wert immer gleich. Willst du Puls und Pause zeitlich verändern, musst du einen anderen Wert laden und dir merken, ob du gerade die Pulszeit machst, oder die Pausenzeit. Wie du die Werte ausrechnen musst, weißt du? Erkläre mal genauer, wo dein Problem ist..
#include<reg515.h> #include<stdio.h> signed int data Zeit; signed int data Zeit_2=7600;//normaleweise sollte 10000 aber ich will direkt auf 1hz deswegen 7600 lässt die LED blinken jede 10000*50µs = 0,5sec signed int data Zeit_1[10]={7600,3800,2500,1900,1500,1250,1080,950,830,750}; signed int data Zeit_low; signed int data Zeit_high; sbit Taster_1 =0x91; sbit Taster_2 =0x92; sbit Taster_3 =0x93; int a=200; //definition der warte zeit für taster entprellung int b=20; int i=0;//zählindex für die Zeit int c=0; /*leuchtdioden*/ sbit P3_2 = 0xB2; sbit P3_4 = 0xB4; void main (void) { SP= 0x7F; //stackpointersetzen Zeit = Zeit_2; // (zeit)=W_Zeit Zeit_low=0;//Led ausgeschaltet Zeit_high=Zeit_2;//Led an TR0=0;// Timer0 anhalten TF0=0; // overflowflag Timer0 löschen TMOD=1;//Timer0 einstellen TL0=0xCD; TH0=0xFF; TR0=1;// Timer0 starten ET0=1;// Interruptfreigabe EX4=1;// taster interrupt am port 1.1 freigeben EX5=1;// taster interrupt am port 1.2 freigeben EX6=1; EAL=1;// Interruptfreigabe while(1); } void Timerinto(void) interrupt 1 { TR0=0; // Timer0 anhalten TL0=0xCD; //Timer0 neu laden TH0=0xFF; TR0=1;//Timer0 starten Zeit--; //Zeit dekrementieren if(Zeit== 0)//wenn (Zeit) ==0 { Zeit= Zeit_high;//(Zeit)=W_Zeit P3_2= ~P3_2; //LED_Zustand invertieren }//end if } void Taster1(void) interrupt 11 { EX4=0;//interrupt sperren i++; Zeit_2=Zeit_1[i]; if(P3_2) a=200; while (a!=0) { b=20; while(b!=0) {b--;} a--; //insgesamt 1800 zyklen } c=5; while (c!=0) { if(Taster_1==0) {c=5;} else {c--;} } EX4=1; } void Taster2(void) interrupt 12 { EX5=0;//interrupt sperren i--; Zeit_2=Zeit_1[i]; a=200; while (a!=0) { b=20; while (b!=0) {b--;} a--; } c=5; while (c!=0) { if(Taster_2==0) {c=5;} else {c--;} } EX5=1;//interrupt Freigabe } /* void Taster3(void) interrupt 13 { P3_4=1; }*/ void Taster1_1(void) interrupt 11 { EX4=0;//interrupt sperren i++; Zeit_2=Zeit_high+Zeit_low; if(Zeit_2!=0) { Zeit_low=Zeit_low+100; Zeit_high=Zeit_high-100; Zeit_2=Zeit_1[i]; } a=200; while (a!=0) { b=20; while(b!=0) {b--;} a--; } c=5; while (c!=0) { if(Taster_1==0) {c=5;} else {c--;} } EX4=1; } void Taster2_2(void) interrupt 12 { EX5=0;//interrupt sperren i--; Zeit_2=Zeit_1[i]; a=200; while (a!=0) { b=20; while (b!=0) {b--;} a--; } c=5; while (c!=0) { if(Taster_2==0) {c=5;} else {c--;} } EX5=1;//interrupt Freigabe } mit den erste 2 taster oben habe ich genau 50% puls/pause zeiten und dann will ich jetzt mit denselben tastern 80/20% puls pause verhältnisse haben und durch ein 3 taster auswählen wo ich mich befinde und das mit 2 taster programm will ich dann einfluss auf die puls pause zeiten haben kann ich sie kurz anrufen bitte? danke
Als erstes sollte das Puls/Pausenverhältnis programmiert werden. Dazu braucht man ein Bit, mit dem man sich merkt, ob man jetzt den Puls oder die Pause macht. Dieses Bit wird in der Interrupt-Routine gesetzt bzw. zurückgesetzt. Dann sollte man sich die Werte aufschreiben, die man für die einzelnen Verhältnisse benötigt (10%/90%, 20%/80%, usw.) und diese einzeln testen und mit dem Oszilloskop messen, ob sie stimmen. Sollte das funktionieren, geht es an die Programmierung der Menü-Tasten...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.