Something else popped into my head. The time between the start of each byte is exactly 1,250uS. The time it takes to transmit the total packet is 20mS, which means there are 16 digits. Can I do all of this manually? To be more specific, can I use GOSUB's for each number and just specify exactly how long I need the pulses to be? The data is predictable and I'm not seeing anything that doesn't look strange. There are only numbers transmitted and they are 0-9. My thought is something like this:

Code:
MAINLOOP:

'GATHER NUMBERS TO BE TRANSMITTED

SELECT CASE D0
    CASE 0
        GOSUB ZERO
    CASE 1
        GOSUB ONE
END SELECT

SELECT CASE D1
    CASE 0
        GOSUB ZERO
    CASE 1
        GOSUB ONE
END SELECT


SELECT CASE D2
    CASE 0
        GOSUB ZERO
    CASE 1
        GOSUB ONE
END SELECT

......

SELECT CASE D15
    CASE 0
        GOSUB ZERO
    CASE 1
        GOSUB ONE
END SELECT

PAUSE 5

GOTO MAINLOOP

.....

ZERO:
DO3=1
PAUSEUS 550
DO3=0
PAUSEUS 75
DO3=1
PAUSEUS 50
DO3=0
PAUSEUS 575
RETURN

ONE:
DO3=1
PAUSEUS 50
DO3=0
PAUSEUS 75
DO3=1
PAUSEUS 175
DO3=0
PAUSEUS 300
DO3=1
PAUSEUS 50
DO3=0
PAUSEUS 600
RETURN

TWO:
DO3=1
PAUSEUS 250
DO3=0
PAUSEUS 75
DO3=1
PAUSEUS 150
DO3=0
PAUSEUS 75
DO3=1
PAUSEUS 250
DO3=0
PAUSEUS 450
RETURN

THREE:
DO3=1
PAUSEUS 400
DO3=0
PAUSEUS 150
DO3=1
PAUSEUS 250
DO3=0 
PAUSEUS 450
RETURN

FOUR:
DO3=1
PAUSEUS 75
DO3=0
PAUSEUS 75
DO3=1
PAUSEUS 150
DO3=0
PAUSEUS 150
DO3=1
PAUSEUS 250
DO3=0
PAUSEUS 550
RETURN

FIVE:
DO3=1
PAUSEUS 150
DO3=0
PAUSEUS 75
DO3=1
PAUSEUS 150
DO3=0
PAUSEUS 75
DO3=1
PAUSEUS 325
DO3=0
PAUSEUS 475
RETURN

SIX:
DO3=1
PAUSEUS 150
DO3=0
PAUSEUS 75
DO3=1
PAUSEUS 475
DO3=0
PAUSEUS 550
RETURN

SEVEN:
DO3=1
PAUSEUS 325
DO3=0
PAUSEUS 300
DO3=1
PAUSEUS 150
DO3=0
PAUSEUS 475
RETURN

EIGHT:
DO3=1
PAUSEUS 800
DO3=0
PAUSEUS 450
RETURN

NINE:
DO3=1
PAUSEUS 325
DO3=0
PAUSEUS 150
DO3=1
PAUSEUS 325
DO3=0
PAUSEUS 450
RETURN