Hallo Achim,

sbi porte,d_en ;enable pin high
; call delay
out portb,r16 ;send data
; call delay
cbi porte,d_en ;enable pin liw
laut Datenblatt müssen die Daten min. 30ns anliegen, bevor EN von High auf Low geht. Ich würde "out portb,r16" als erstes in "dtaout:" ausführen lassen, dann kannst du die delay's weglassen.

Aber das ist sicher nicht die Ursache.

... bis auf 0x7f bzw. 0xff völlig unabhängig von dem Programmteil welches die Zeichen erzeugt.
Ich denke nicht, das es mit den Bytes $7F bzw. $FF zusammenhängt, da es sonst auch mit Kombinationen wie $7E oder $FE Probleme geben müsste.
Bei einem Flachbandkabel von 40cm Länge würde ich schon eher die Ursache suchen. Zumal das Übersprechen bei dieser Länge doch schon erheblich sein dürfte. Liegt eventuell die Ader für EN im Kabel neben einer Datenader ?