Du gibts beim call ja das "40" als literal an, daher das "byval"
bei "byref" (also so wie bei deinem declare) muß das argument in einer variablen stehen
anders:
Code:
Declare Sub Hand_drehen_links(v As Byte)  
dim varia as byte

 Do 
    varia = 40 
   Call Hand_drehen_links(varia) 
 Loop 
End 
Sub Hand_drehen_links(v As Byte) 
     M_5_v = 1 
     Compare1b = V 
     M_5_r = 0 
     Led = 1 
End Sub
Konkret heißt das, bei "byval" übergibt er der sub eine KOPIE des wertes, daher kann sie auch im Porgrammspeicher stehen.

Bei "byref" (oder nix) übergibt er die (SRAM-) adresse der Variablen

Klaro ?