Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Re: 3 FRAGEN ZU ZEITSCHALTPROGRAMM Kategorie: Programmierung Basic (von ManfredW, Homepage - 2.09.2005 16:20)
 Als Antwort auf 3 FRAGEN ZU ZEITSCHALTPROGRAMM von hecktor - 2.09.2005 14:50
Hallo,
Du benutzt ein Programm von meiner homepage.
Die Antworten habe ich eingefügt.
MfG ManfredW
>
>
>
>                             iCH BIN DOOF UND MUSS NUN EUCH FRAGEN: WAS MACH ICH FALSCH ?
Was soll die Selbstbezichtigung? Wer programmiert, kann nicht doof sein sondern ist kreativ!
>
>                                                             ICH HABE 3 PROBLEME
>
> define  LINE     byte[1]
> define  CHAR     byte[1]
> define  POS      byte[1]
> define  BARS     byte[1]
> define  BIN      byte[1]
> define  DEZ      byte[1]
> define LCD_INIT   &H101
> define LCD_CLR    &H11D
> define LCD_LINE1  &H125
> define LCD_LINE2  &H12A
> define LCD_POSL1  &H12F
> define LCD_POSL2  &H133
> define LCD_SCRL   &H13B
> define LCD_SCRR   &H140
> define LCD_BAR    &H145
> define LCD_BIN    &H154
> define LCD_DEZ    &H1C3
> define LCD_WRT    &H1A4
> define LCD_PRINT  &H179
> define wiled1          port[1]
> define waled2          port[2]
> define schrled3        port[3]
> define schlled4        port[4]
> define ventled5        port[5]
> define pumpled6        port[6]
> define vschalter7      port[7]
> define wschalter8      port[8]
> define key_val  ad[8]
> define ProgNr       byte[2]
> define Wartezeit    byte[3] '
> define Schritt      byte[4]
> define x    byte[5]
> define Bytefrei6    byte[6]
> define wert1        byte[7]
> define wert2        byte[8]
> define wert12          word[4]
> define wert3        byte[9]
> define key          byte[10]
> define Bit81_88     byte[11]
> define Zaehler1     byte[12]
> define Zaehler2     byte[13]
> define Zykluszeit      byte[14]
> define TimerAlt        word[8]
> define wert1Bit0           Bit [49]
> define wert1Bit1           Bit [50]
> define wert1Bit2           Bit [51]
> define wert1Bit3           Bit [52]
> define wert1Bit4           Bit [53]
> define wert1Bit5           Bit [54]
> define wert1Bit6           Bit [55]
> define wert1Bit7           Bit [56]
> define FlankeZeitpuls      Bit[81]
> define TastaturFlanke      Bit[82]
> define AufrufbitKey7       Bit[83]'
> define AufrufbitKey9       Bit[84]'
> define BitFrei5            Bit[85]'
> define BitFrei6            Bit[86]
> define SekPuls             Bit[87]'
> define LoeschLCD           Bit[88]
>  sys lcd_init
>  sys lcd_clr
>  Zaehler1 = 127
>  Zaehler2 = 65
> #Anfang
>  if ProgNr < 1 then goto ende12
>  SekPuls  = OFF
>  wert1 = second
>  if wert1Bit0 = FlankeZeitpuls  then goto ende1
>  FlankeZeitpuls = wert1Bit0
>  SekPuls  = ON
>  AufrufbitKey7  = OFF
>  AufrufbitKey9  = OFF
> #ende1

Hier kannst Du schrittunabhängiges Programm einfügen, z.B Vibration
>  if (Wartezeit = 0) then goto Schritt
>  if (sekpuls = OFF) then goto Ende12
>  Wartezeit = Wartezeit -1 '
>  goto Ende12
> #Schritt
>  if (Schritt = 1) then goto Schritt1 '
>  if (Schritt = 2) then goto Schritt2 '
>  if (Schritt = 3) then goto Schritt3 '
>  if (Schritt = 4) then goto Schritt4 '
>  if (Schritt = 5) then goto Schritt5 '
>  if (Schritt = 6) then goto Schritt6 '
>  if (Schritt = 7) then goto Schritt7 '
>  if (Schritt = 8) then goto Schritt8 '

>  'WIE SAEGE ICH DEM PROGRAMM DAS vschalter7 und Key = 7 DAS SELBE AUSLÖSEN
>  'if vschalter7 then key = 7 'funzt nicht
Du kannst den Eingang Tastatur nicht einschalten sondern nur abfragen.
Das byte Key kannst Du zwar mit 7 setzen, doch im Keydecoder wird es sofort wieder rückgesetzt, weil dort geprüft wird, ob Taste 7 gedrückt wurde.
Wenn Du Dich daran halten würdest, was ich Dir früher schon geantwortet habe, wertest Du AufrufbitKey7 aus. Dann kannst  vschalter7 oder Taste7 drücken und dieselbe Funktion auslösen.

>  Schritt = 1
>  goto Ende12
> #Schritt1
>  ventled5 = OFF '
>  Wartezeit = 10 '
>  Goto Schrittweiter
> #Schritt2 '
> 'if AufrufbitKey7 then goto SCHRITTWEITER  FUNKTIONIETRT HIER NICHT DESHALB DAS #VIBRATIONSABSCHALTUNG
Wo ist hier das Unterprogramm #Vibrationsabschaltung?
Während der Wartezeit wird der Schritt nicht durchlaufen und AufrufbitKey7 wird im Tasturbaustein rückgesetzt, denn es ist nur ein Zyklus eingeschaltet.

>  pumpled6 = OFF : wiled1 = ON : schrled3 = ON  '
>  Wartezeit = 10'
>  Goto Schrittweiter
> #Schritt3 '
>  schrled3 = OFF : wiled1 = OFF : waled2 = ON'
>  Wartezeit = 10'x
>  Goto Schrittweiter
> #Schritt4 '
>   waled2 = OFF :wiled1 = ON : schlled4 = ON :'
>  Wartezeit = 10'
>  Goto Schrittweiter
> #Schritt5
>   schlled4 = OFF : wiled1 = OFF :waled2 = ON
>  Wartezeit = 10'
>  Goto Schrittweiter
> #Schritt6
>  waled2 = OFF :ventled5 = ON
>  Wartezeit = 5'
>  Goto Schrittweiter
> #Schritt7
>  pumpled6 = ON
>  Wartezeit = 5'
>  goto Schrittweiter
> #Schritt8
>  Wartezeit = 5'
>  if wschalter8 = OFF then goto Anfang
Hier springst Du zum Anfang ohne andere Funktionen LCD, Tastatur usw, zu bearbeiten.
Es muss goto Ende12 sein.
> #Schrittweiter
>  Schritt = Schritt + 1
> #Ende12
>  Zykluszeit = (Timer - TimerAlt)'
>  TimerAlt = Timer
>  gosub Tastatur  
>  Goto LCD'        
> #Tastatur
>  gosub key_decode  
>  if key < 199 then goto Taste
>  TastaturFlanke = OFF
>  x = 1
>  Return
> #Taste  
>  if key =3 then goto plusvar
>  if key =6 then goto MinusZaehler2  
>  if ProgNr >< 1 then goto TastaturFlanke'
> #TastaturFlanke'
>  if TastaturFlanke = ON then Return '
>  TastaturFlanke = ON
>  if key =1 then goto ProgNrPlus  
>  if ProgNr >< 1 then return '
Ab hier arbeitet nur Programm 1
>  if Key = 7 then AufrufbitKey7 = ON
Die folgende Zeile soll nicht im Tastaturbaustein stehen, sondern im zuständigen Schritt.
Wenn die Funktion dauerhaft gebraucht wird, soll sie vor dem Schrittregister stehen und die Vibrationsabschaltung wird einmalig durchlaufen, weil nach meiner früheren Antwort vor der Tastatur steht AufrufbitKey7 = OFF.
goto ist zulässig, return des Unterprogramms wird benutzt.
>  if AufrufbitKey7 then goto Vibrationabschaltung
>  if Key = 9 then AufrufbitKey9 = ON
sinngemäß wie vor
>  if AufrufbitKey9 then goto Runterfahren
>  return
> #key_decode

Hier wird Dein Key = 7 überschrieben
>  key=255
> #nochmal
>  wert3 = key_val
>  if wert3 > 240 then return
>  Key = key -1                
>  if wert3 = key_val then goto TasteAusgeben
>  if Key > 240 then goto nochmal
>  return                        
> #TasteAusgeben
>  if wert3>=0   then key=10  
>  if wert3>14  then key=7    
>  if wert3>36  then key=4  
>  if wert3>57  then key=1  
>  if wert3>70  then key=0  
>  if wert3>100 then key=8  
>  if wert3>122 then key=5  
>  if wert3>142 then key=2  
>  if wert3>163 then key=11
>  if wert3>183 then key=9  
>  if wert3>204 then key=6  
>  if wert3>225 then key=3  
>  return
> #LCD
>  if LoeschLCD = OFF then goto Anzeige
>  LoeschLCD = OFF :sys LCD_CLR
> #Anzeige
>  if ProgNr =1 then goto LCDprg1
>  if ProgNr =2 then goto LCDprg2
>  SYS LCD_LINE1:sys LCD_PRINT:print"  WEIL NICHT ALLES IN EINE ZEILE PASST":
>  for wert1=1 to 22
>  SYS LCD_SCRL:pause 10
>  sys LCD_LINE1 '
>  wert1 = ProgNr :gosub Zahl1'        
>  sys LCD_PRINT:print" dr": gosub ue : sys LCD_PRINT:print"cke Taste 1"
>  sys LCD_LINE2 '
>  sys LCD_PRINT:print"f":gosub ue:sys LCD_PRINT:print"r Prog 1 bis 7"
>  goto Anfang '
> #LCDprg1
>  sys LCD_LINE1
>  DEZ = ProgNr : SYS LCD_DEZ              
>  sys LCD_PRINT:print"  warte "
>  DEZ = Wartezeit : SYS LCD_DEZ : sys LCD_PRINT:print" sec"
>  goto LCD67'
> #LCDprg2
>  sys LCD_LINE1 '
>  DEZ = ProgNr : SYS LCD_DEZ              
>  sys LCD_PRINT:print"  warte "
>  DEZ = Wartezeit : SYS LCD_DEZ : sys LCD_PRINT:print" sec"
>  goto LCD67
> #LCD67
>  sys LCD_LINE2 '
>  sys LCD_PRINT:print"Schritt "
>  DEZ = Schritt : SYS LCD_DEZ
>  goto Anfang
> #ProgNrPlus
>  ProgNr = ProgNr + 1
>  LoeschLCD = ON  '
>  if ProgNr > 8 then ProgNr = 1
>  return
> #Vibrationabschaltung
> schrled3 = OFF : schlled4 = OFF :wiled1 = OFF : waled2 = ON : return
> 'SCHRITTWETITER STATT SCHRLED3 U.S.W FUNKTIONIETRT HIER NUR EINMAL
Das liegt in Deiner Macht, je nachdem was Du programmierst.
 
> #Runterfahren
> 'WAS MUSS HIER STEHEN DAS ICH WIEDER IN DAS ERSTE PROGRAMM (DRÃœCKE 1-7)KOMME?
ProgNr = 1
return, bzw. goto ..

> #PlusZaehler1 '
>  Zaehler1 = Zaehler1 +1 :return
> #MinusZaehler1 '
>  Zaehler1 = Zaehler1 -1 :return
> #PlusZaehler2 '
>  Zaehler2 = Zaehler2 +1 :return
> #MinusZaehler2 '
>  Zaehler2 = Zaehler2 -1 :return
> #PlusVar '
>  Zaehler2 = Zaehler2 + x
>  x = x + 1
>  return
> #Zahl5
>  if wert12 <0 then gosub Minus else gosub space
>  wert12 =  abs (wert12)
>  if wert12 >= 10000 then CHAR = wert12 /10000 +&H30 else  CHAR = &H20
>  SYS LCD_WRT
> #Zahl4 '
>  if wert12 >= 1000 then CHAR = wert12 MOD 10000 /1000 +&H30 else  CHAR = &H20
>  SYS LCD_WRT
> #Zahl3Word '
>  if wert12 >= 100 then CHAR = wert12 MOD 1000 /100 +&H30 else  CHAR = &H20
>  SYS LCD_WRT
>  if wert12 >= 10 then CHAR = wert12 MOD 100 /10 +&H30 else  CHAR = &H20
>  SYS LCD_WRT
>  CHAR = wert12 MOD 10 +&H30
>  SYS LCD_WRT
>  Return
> #Zahl3
>  if wert1 >= 100 then CHAR = wert1/100 +&H30 else CHAR = &H20
>  SYS LCD_WRT
> #Zahl2 '
>  if wert1 >= 10 then CHAR = wert1 MOD 100 /10 +&H30 else  CHAR = &H20
>  SYS LCD_WRT
> #Zahl1
>  CHAR = wert1 mod 10 +&H30
>  SYS LCD_WRT : Return
> #Space CHAR = &H20 :SYS LCD_WRT :Return
> #Plus  CHAR = &H2B :SYS LCD_WRT :Return
> #Minus CHAR = &H2D :SYS LCD_WRT :Return
> #ae    CHAR = &HE1 :SYS LCD_WRT :Return
> #oe    CHAR = &HEF :SYS LCD_WRT :Return
> #ue    CHAR = &HF5 :SYS LCD_WRT :Return
> goto Anfang
>
>
sys-Prog fehlt hier
>
Brauchst Du denn mehrere  Programme (ProgNr) ?
>


Meine Homepage: http://manfred.wilzeck.de

 Antwort schreiben

Bisherige Antworten:

Re: 3 FRAGEN ZU ZEITSCHALTPROGRAMM (von hecktor - 4.09.2005 0:20)
    Antwort siehe Email an Hecktor (von ManfredW - 4.09.2005 11:21)