Nur mit dem hochzählen möchte es noch nicht so ganz.
Edit: quark, bin etwas daneben.

du arbeitest ja erst Main1 ab, dann kommt Main2 und dann Main3. dann immer abwechselnd Main2 und Main3. in Main3 incrementierst du Zeit (Zeit+1) nach 100ms, dann kommt wieder Main2 und wieder Main3.

da wird nirgends mit nem "IF Zeit = 5 Then Zeit =0" Zeit zurückgesetzt.

auserdem ist Zeit nirgends ein Wert zugewiesen. du solltest in Main1 "Zeit=0" schreiben.


Die meisten Do-Loops kannst du dir auch spaaren, da das Programm da nie hinkommt (davor wird mit Goto gesprungen)
Code:
$regfile = "m16def.dat" 
$crystal = 16000000 


Config Porta.0 = Output 
Config Portd.7 = Output 
Config Pina.2 = Input 
Dim Zeit As Byte 
Dim A As Byte 
Dim Main2 As Long 
Dim Main1 As Long 
Dim Main3 As Long 


Main1: 
Zeit=0
Portd.7 = 1 
Waitms 300 
Portd.7 = 0 
Waitms 300 
Portd.7 = 1 
Waitms 300 
Portd.7 = 0 
Goto Main2 
 

Main2: 
Do 
If Pina.2 = 0 Then 
 Goto Main3
Else
 Zeit=0
End if 

Loop

Main3: 

Do 

Waitms 100 

Zeit = Zeit + 1 

If Zeit = 5 Then 
Porta.0 = 1 
Waitms 3000
Porta.0 = 0 
End If 
Waitms 3000 
Goto Main2