Forum: Mikrocontroller und Digitale Elektronik Subroutine und Wait in BASCOM geht nicht


von Timo R. (tire)


Lesenswert?

Hallo,


ich habe ein Programm mit Subroutinen, bei denen die Übergabe in die Sub 
nicht funktioniert, es kommt nichts an. Der Aufruf:
Call Sequenzumsetzung( "0202210000000001")
oder
Call Sequenzumsetzung(Taste1)

Die Simulation zeigt - nichts wird übergeben. Was mach ich falsch?

Ebenso der Wait-Befehl: von warten keine Spur, der Wartebefehl wird 
ignoriert.

Kannn jemand helfen?

Hier das Programm in den Grundzügen - einige Teile habe ich zu 
Testzwecken wieder ausgebaut.


Danke
Timo

1
' ------------------------------------------------------------------------------------
2
' lese RC5 ein und sende in RC-MM
3
' ------------------------------------------------------------------------------------
4
5
6
7
$regfile = "m8def.dat"                                      ' specify the used micro
8
$crystal = 12000000                                         ' used crystal frequency
9
$lib "mcsbyte.lbx"                                          'use byte library for smaller code
10
$sim
11
12
Config Portd.4 = Output                                     ' für IR-Sendediode
13
Config Timer2 = Timer , Prescale = 1
14
15
   Rcmm Alias Portd.4
16
17
18
' -- Subroutinen
19
Declare Sub Taktgenerierung(byval Pulsmenge As Byte , Byval Bitform As Byte)
20
Declare Sub Sequenzumsetzung(byval daten As String)
21
22
23
24
Const P_plus = "0202210000000132"
25
Const P_minus = "0202210020000133"
26
Const Mute1 = "0202210020000031"
27
Const Mute2 = "0202210000000031"
28
Const Power1 = "0202210000000030"
29
Const Power2 = "0202210020000030"
30
31
Const Taste0 = "0202210020000000"
32
Const Taste1 = "0202210000000001"
33
Const Taste2 = "0202210020000002"
34
Const Taste3 = "0202210000000003"
35
Const Taste4 = "0202210000000010"
36
Const Taste5 = "0202210020000011"
37
Const Taste6 = "0202210020000012"
38
Const Taste7 = "0202210000000013"
39
Const Taste8 = "0202210000000020"
40
Const Taste9 = "0202210000000021"
41
42
43
44
45
46
47
   Enable Timer2                                            ' Timer2 für Ereugung 36kHz einschalten
48
49
   Rcmm = 1                                                 ' IR_Diode abschalten
50
51
' *************************************************************************************************************
52
Funktionsmodus:
53
54
55
      Call Sequenzumsetzung( "0202210000000001")
56
      Wait 1
57
58
      Goto Funktionsmodus
59
60
61
62
63
64
65
66
' *************************************************************************************************************
67
68
Sub Sequenzumsetzung(byval Daten As String)
69
   Dim J As Byte
70
   Dim Teil As String * 2
71
72
   'Header
73
   Call Taktgenerierung(15 , 1)
74
   Call Taktgenerierung(10 , 0)
75
76
77
   For J = 1 To Len(daten)
78
      Teil = Mid(daten , J , 1)
79
         Select Case Teil
80
            Case "0"                                        '"00"
81
               Call Taktgenerierung(6 , 1)
82
               Call Taktgenerierung(10 , 0)
83
            Case "1"                                        ' "01"
84
               Call Taktgenerierung(6 , 1)
85
               Call Taktgenerierung(16 , 0)
86
87
            Case "2"                                        '"10"
88
               Call Taktgenerierung(6 , 1)
89
               Call Taktgenerierung(22 , 0)
90
91
            Case "3"                                        '"11"
92
               Call Taktgenerierung(6 , 1)
93
               Call Taktgenerierung(28 , 0)
94
95
         End Select
96
97
   Next
98
99
100
      Call Taktgenerierung(6 , 1)
101
102
103
End Sub
104
105
' *************************************************************************************************************
106
107
108
Sub Taktgenerierung(byval Pulsmenge As Byte , Byval Bitform As Byte)
109
    Dim I As Byte
110
   Start Timer2
111
112
   Pulsmenge = Pulsmenge * 2                                ' Faktor 2 da auf Flanken getoggelt wird
113
   For I = 1 To Pulsmenge
114
        ' so lange verharren, bis der Counter den Zielwert hat
115
        Tcnt2 = 0
116
        While Tcnt2 < 121                                   '= 36kHz
117
        Wend
118
119
        ' Ausgang toggeln
120
        If Bitform = 1 Then
121
           Toggle Rcmm
122
        End If
123
        Tcnt2 = 0
124
   Next
125
126
  Stop Timer2
127
128
End Sub

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
Noch kein Account? Hier anmelden.