Advertisement
Guest User

Untitled

a guest
Jul 17th, 2017
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ' Led1  an PortB.0
  2.  
  3. ' Led2  an PortB.3
  4. ' Led3  an PortB.4
  5. ' Led4  an PortB.5
  6.  
  7. ' Led5  an PortB.6
  8. ' Led6  an PortB.7
  9.  
  10. ' Led7  an PortC.0
  11. ' Led8  an PortC.1
  12. ' Led9  an PortC.2
  13. ' Led10 an PortC.3
  14.  
  15. ' Led-Reserve an PortD.0
  16.  
  17. ' Speaker an PortD.1
  18. ' TVA an PortC.5
  19.  
  20. ' Osc int. 1MHz
  21.  
  22. $regfile = "m8def.dat"
  23. $crystal = 1000000
  24.  
  25. Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
  26. Config Lcd = 16 * 2
  27. Cursor Off
  28. Cls
  29.  
  30. Config Timer0 = Timer , Prescale = 1024
  31. On Timer0 Timerroutine
  32.  
  33. Enable Interrupts
  34.  
  35. Config Adc = Single , Prescaler = Auto , Reference = Avcc
  36. Start Adc
  37. '---------------------------
  38. Dim I As Byte
  39. Dim Messreihen As Byte
  40. Messreihen = 20
  41. Dim Adcarray(20) As Word
  42. Dim Tmesswert As Long
  43. Dim Messwert As Long , Anzeige As Word , Reserveled As Bit
  44. Dim Scaler As Byte , Speakerscaler As Byte , Nobeep As Bit
  45. Dim Adcvoll As Word , Adcreserve As Word , Adcleer As Word
  46.  
  47. Dim Voll As Long , Reserve As Long , Leer As Long , Messbereich As Long , Prozent As Single
  48. Dim Reservegrenze As Long , Vollgrenze As Long
  49. Dim Normalbereich As Long , Reservebereich As Long
  50. Dim Keypressed As Bit
  51. '---------------------------
  52. Const On = 0
  53. Const Off = 1
  54. '---------------------------
  55. ' config adc-values
  56.  
  57. Adcvoll = 155
  58. Adcreserve = 500
  59. Adcleer = 595
  60.  
  61. ' // config
  62. '----------------------------
  63.  
  64.  
  65.  
  66. Voll = Adcvoll * -1
  67. Reserve = Adcreserve * -1
  68. Leer = Adcleer * -1
  69.  
  70. Messbereich = Leer - Voll
  71.  
  72. Vollgrenze = Adcvoll + Voll
  73. Vollgrenze = Vollgrenze + Messbereich
  74. Vollgrenze = Vollgrenze * -1
  75.  
  76. Reservegrenze = Adcreserve + Voll
  77. Reservegrenze = Reservegrenze + Messbereich
  78. Reservegrenze = Reservegrenze * -1
  79.  
  80. Normalbereich = Vollgrenze - Reservegrenze
  81. Reservebereich = Reservegrenze
  82.  
  83. Ddrb = &B11111111
  84. Ddrc = &B00001111
  85. Config Portd.0 = Output
  86. Config Portd.1 = Output
  87.  
  88.  
  89. '---------------------------
  90.  
  91.  
  92. Led1 Alias Portb.0
  93. Led2 Alias Portb.1
  94. Led3 Alias Portb.2
  95. Led4 Alias Portb.3
  96. Led5 Alias Portb.4
  97. Led6 Alias Portb.5
  98.  
  99. Led7 Alias Portc.0
  100. Led8 Alias Portc.1
  101. Led9 Alias Portc.2
  102. Led10 Alias Portc.3
  103.  
  104. Speaker Alias Portd.1
  105.  
  106. '---------------------------
  107. Timer0 = 236
  108. Nobeep = 0
  109.  
  110. Gosub Alloff
  111. Gosub Startprogramm
  112.  
  113. Enable Timer0
  114. Start Timer0
  115. Gosub Timerroutine
  116.  
  117. Do
  118.  
  119.    Dim Adcval As Word
  120.    Dim Lcdprozent As Word
  121.    Dim Sc As Word
  122.    Incr Sc
  123.    If Sc => 5 Then
  124.       Adcval = Getadc(5)
  125.       Sc = 0
  126.    End If
  127.    Lcdprozent = Prozent
  128.    Home Upper
  129.    Lcd "MITTEL:" ; Lcdprozent ; "% ALM:" ; Nobeep ; " "
  130.    Home Lower
  131.    Lcd "ADC:" ; Adcval ; " LED:" ; Anzeige ; "   "
  132.  
  133. Loop
  134.  
  135. End
  136. '--------------------------
  137.  
  138. Timerroutine:
  139.    Timer0 = 236                                             '0,02 sek
  140.  
  141.    ' reservealarm abschalten
  142.    If Pinc.4 = 0 And Nobeep = 0 And Keypressed = 0 And Reserveled = 1 Then
  143.       Keypressed = 1
  144.       Nobeep = 1
  145.       Sound Speaker , 400 , 20
  146.       Waitms 10
  147.       Sound Speaker , 400 , 19
  148.    Elseif Pinc.4 = 1 Then
  149.       Keypressed = 0
  150.    End If
  151.    ' reservealarm einschalten
  152.    If Pinc.4 = 0 And Nobeep = 1 And Keypressed = 0 And Reserveled = 1 Then
  153.       Keypressed = 1
  154.       Nobeep = 0
  155.       Sound Speaker , 100 , 20
  156.       Waitms 10
  157.       Sound Speaker , 100 , 19
  158.       Waitms 10
  159.       Sound Speaker , 100 , 18
  160.       Waitms 50
  161.       Sound Speaker , 100 , 20
  162.       Waitms 10
  163.       Sound Speaker , 100 , 19
  164.       Waitms 10
  165.       Sound Speaker , 100 , 18
  166.    Elseif Pinc.4 = 1 Then
  167.       Keypressed = 0
  168.    End If
  169.    '// steuerung reservealarm
  170.  
  171.    Incr Scaler
  172.    If Scaler => 50 Then
  173.  
  174.       Incr Speakerscaler
  175.       Decr Messreihen
  176.       For I = 1 To Messreihen
  177.          Adcarray(i) = Adcarray(i + 1)
  178.       Next I
  179.       Incr Messreihen
  180.       Messwert = Getadc(5)
  181.       If Messwert > Adcleer Then Messwert = Adcleer
  182.       Messwert = Messwert + Voll
  183.       Messwert = Messwert + Messbereich
  184.       Messwert = Messwert * -1
  185.       Adcarray(messreihen) = Messwert
  186.  
  187.       Gosub Mittelwert
  188.  
  189.  
  190.       ' prozentuale balkenanzeige
  191.       If Messwert > Reservegrenze Then
  192.          ' anzeige normalbereich
  193.          Tmesswert = Messwert - Reservegrenze
  194.          Prozent = 100 / Normalbereich
  195.          Prozent = Prozent * Tmesswert
  196.          Anzeige = Prozent / 10
  197.          Anzeige = Anzeige + 1
  198.  
  199.       Else
  200.          ' anzeige reservebereich
  201.          Prozent = 100 / Reservebereich
  202.          Prozent = Prozent * Messwert
  203.          Anzeige = Prozent / 10
  204.       End If
  205.  
  206.  
  207.  
  208.       If Anzeige > 10 Then Anzeige = 10
  209.  
  210.       'steuerung reserve
  211.       If Messwert > Reservegrenze Then
  212.          Reserveled = 0
  213.       Else
  214.          ' warnton reservebeginn
  215.          If Reserveled = 0 Then
  216.             Sound Speaker , 500 , 15
  217.             Waitms 50
  218.             Sound Speaker , 500 , 15
  219.             Waitms 100
  220.             Sound Speaker , 500 , 15
  221.  
  222.          'warnton bei restbalken 1, jede minute
  223.          Elseif Reserveled = 1 And Anzeige = 0 And Speakerscaler => 10 Then
  224.             If Nobeep = 0 Then
  225.                Sound Speaker , 1000 , 18
  226.                Waitms 10
  227.                Sound Speaker , 2000 , 18
  228.                Waitms 10
  229.                Sound Speaker , 1000 , 18
  230.                Waitms 10
  231.                Sound Speaker , 2000 , 18
  232.             End If
  233.             Speakerscaler = 0
  234.  
  235.          'warnton bei restbalken 1, jede minute
  236.          Elseif Reserveled = 1 And Anzeige <= 1 And Speakerscaler => 60 Then
  237.             If Nobeep = 0 Then
  238.                Sound Speaker , 1000 , 18
  239.                Waitms 10
  240.                Sound Speaker , 1000 , 18
  241.                Waitms 10
  242.                Sound Speaker , 1000 , 18
  243.             End If
  244.             Speakerscaler = 0
  245.          'warnton bei restbalken 2, alle 2 minuten
  246.          Elseif Reserveled = 1 And Anzeige <= 2 And Speakerscaler => 120 Then
  247.             If Nobeep = 0 Then
  248.                Sound Speaker , 1000 , 18
  249.                Waitms 10
  250.                Sound Speaker , 1000 , 18
  251.             End If
  252.             Speakerscaler = 0
  253.          'warnton bei restbalken 3, alle 3 minuten
  254.          Elseif Reserveled = 1 And Anzeige <= 3 And Speakerscaler => 180 Then
  255.             If Nobeep = 0 Then
  256.                Sound Speaker , 1000 , 18
  257.             End If
  258.             Speakerscaler = 0
  259.          End If
  260.          Reserveled = 1
  261.       End If
  262.       ' //steuerung reserve
  263.       If Reserveled = 0 Then
  264.          Reset Portd.0
  265.       Else
  266.          If Nobeep = 0 Then
  267.             Set Portd.0
  268.          Else
  269.             Toggle Portd.0
  270.          End If
  271.       End If
  272.  
  273.  
  274.       Gosub Alloff
  275.       Gosub Seton
  276.  
  277.       Scaler = 0
  278.    End If
  279.  
  280. Return
  281. '--------------------------
  282. Mittelwert:
  283.    Messwert = 0
  284.    For I = 1 To Messreihen
  285.       Messwert = Messwert + Adcarray(i)
  286.    Next I
  287.    Messwert = Messwert / Messreihen
  288. Return
  289.  
  290. Alloff:
  291.    Led1 = Off : Led2 = Off : Led3 = Off : Led4 = Off : Led5 = Off : Led6 = Off : Led7 = Off : Led8 = Off : Led9 = Off : Led10 = Off
  292. Return
  293.  
  294. Seton:
  295.    If Anzeige => 1 Then Led1 = On
  296.    If Anzeige => 2 Then Led2 = On
  297.    If Anzeige => 3 Then Led3 = On
  298.    If Anzeige => 4 Then Led4 = On
  299.    If Anzeige => 5 Then Led5 = On
  300.    If Anzeige => 6 Then Led6 = On
  301.    If Anzeige => 7 Then Led7 = On
  302.    If Anzeige => 8 Then Led8 = On
  303.    If Anzeige => 9 Then Led9 = On
  304.    If Anzeige => 10 Then Led10 = On
  305.  
  306. Return
  307.  
  308. Startprogramm:
  309. Const Wartezeit = 100
  310.  
  311.    ' array füllen
  312.    Messwert = Getadc(5)
  313.    If Messwert > Adcleer Then Messwert = Adcleer
  314.    Messwert = Messwert + Voll
  315.    Messwert = Messwert + Messbereich
  316.    Messwert = Messwert * -1
  317.  
  318.    '------------------
  319.    For I = 1 To Messreihen
  320.       Adcarray(i) = Messwert
  321.    Next I
  322.  
  323.       If Messwert > Reservegrenze Then
  324.          ' anzeige normalbereich
  325.          Tmesswert = Messwert - Reservegrenze
  326.          Prozent = 100 / Normalbereich
  327.          Prozent = Prozent * Tmesswert
  328.          Anzeige = Prozent / 10
  329.          Anzeige = Anzeige + 1
  330.  
  331.       Else
  332.          ' anzeige reservebereich
  333.          Prozent = 100 / Reservebereich
  334.          Prozent = Prozent * Messwert
  335.          Anzeige = Prozent / 10
  336.       End If
  337.  
  338.    Anzeige = Prozent / 9
  339.    If Anzeige > 10 Then Anzeige = 10
  340.  
  341.    If Anzeige => 1 Then Led1 = On : Waitms Wartezeit
  342.    If Anzeige => 2 Then Led2 = On : Waitms Wartezeit
  343.    If Anzeige => 3 Then Led3 = On : Waitms Wartezeit
  344.    If Anzeige => 4 Then Led4 = On : Waitms Wartezeit
  345.    If Anzeige => 5 Then Led5 = On : Waitms Wartezeit
  346.    If Anzeige => 6 Then Led6 = On : Waitms Wartezeit
  347.    If Anzeige => 7 Then Led7 = On : Waitms Wartezeit
  348.    If Anzeige => 8 Then Led8 = On : Waitms Wartezeit
  349.    If Anzeige => 9 Then Led9 = On : Waitms Wartezeit
  350.    If Anzeige => 10 Then Led10 = On : Waitms Wartezeit
  351.  
  352. Return
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement