

// RC5 "simple" code generator
// header, bits #1 and #2
SENDBIT1
SENDBIT1
// toggle bit, bit #3SENDBIT0
// address, bit #4 to bit #8
SENDBIT0
SENDBIT0
SENDBIT1
SENDBIT0
SENDBIT1
// command, bit #9 to bit #14
SENDBIT1
SENDBIT1
SENDBIT0
SENDBIT1
SENDBIT0
SENDBIT1
// RC5 code generator
// 1 - Define data to be output
// not include the two start bits// only include Address and Command values
DATA 0x05,0x35
// 2 - Define IR speed
FLOAT BITTIME=1.778m
FLOAT BITTOGGLE = BITTIME / 2
// 3 - Declare working variables
INT DataOut
INT i,j,d,dTmp
// 4 - Top level
OUT = 0
SLEEP FOR 1000m // start after delay of 1 sec
// send header and toggle now, bits #1 to #3
GOSUB SENDBIT1
GOSUB SENDBIT1
GOSUB SENDBIT0
// address, bit #4 to bit #8// -> handled in following sub-routine when i=1
// command, bit #9 to bit #14
// -> handled in following sub-routine when i=2
// 5 - Read Data to send
LOOP:
i = i + 1 // i=1 > Address, i=2 > Command
if i > 2 THEN GOSUB THEEND
READ d
GOSUB OUTDATA
GOTO LOOP
// 6 - Send Data
OUTDATA:
// Data bits
FOR j=0 TO 7// i=1 > Address, read only bits #3 to #7
IF i=1 THEN
IF j < 3 THEN
CONTINUE
ENDIF
ENDIF
// i=2 > Command, read only bits #2 to #7
IF i=2 THEN
IF j < 2 THEN
CONTINUE
ENDIF
ENDIF
IF (d & (1 << 7-j)) THEN
GOSUB SENDBIT1
ELSE
GOSUB SENDBIT0
ENDIF
NEXT j
RETURN
SENDBIT0:
OUT = 1
SLEEP FOR BITTOGGLE
OUT = 0
SLEEP FOR BITTOGGLE
RETURN
SENDBIT1:
OUT = 0
SLEEP FOR BITTOGGLE
OUT = 1
SLEEP FOR BITTOGGLE
RETURN
THEEND:
// end of Tx
OUT = 0
END
