RC5 em CCS

Pessoall, boa tarde, alguém tem a parte de um programa para ler receptor IR RC5 em CCS? eu tenho em MikroC, mas o MikroC é limitado a 2k e não dá para fazer muita coisa. obrigado.
Fórum sobre desenvolvimento de sistemas embarcados: Hardware e Software, Tecnologias: Eletrônica digital e analógica, Microcontroladoras, Microprocessadores, Sistemas *NIX (Linux, BSD), Software embarcado Baremetal. Sem fins lucrativos.
http://www.asm51.com.br/phpbb/
' Biblioteca usado pelo receptor infravermelho
' 06/03/1999
' Miguel e Freeze
Include "ModeDefs.bas"
' Oscilador utilizado
DEFINE OSC 20
' Configurações para a porta serial
DEFINE HSER_RCSTA 90h 'Configura RX
DEFINE HSER_TXSTA 24h 'Configura TX
DEFINE HSER_BAUD 9600 'Baud Rate
DEFINE HSER_CLROERR 'Limpa bit OERR automaticamente (Overrun)
'Declaração de variáveis usadas na comunicação infravermelho RC5
Vet_Bits var bit[194] 'Amostras de níveis do pacote RC5
Vet_DupBits var bit[28] 'Duplas de bits do pacote RC5
Pac_RC5 var Word 'Pacote RC5 final de 12 bits
indRC5 var byte 'Auxiliar na construção de Vet_Bits
indRC52 var byte 'Auxiliar na construção de Vet_DupBits
qtniveis var byte 'Auxiliar da decodificação de Vet_Bits
IR_Com var byte 'Código do botão pressionado
IR_Sis var byte 'Código do sistema atual
IR_Ctr var byte 'Código do controle
IR_Sensor var PORTB.0 'Entrada física do sinal IR RC5
ind_pauseir var word 'Auxiliar na temporização de recepção IR
'Rotina de tratamento da recepção IR RC5. Retorna os dados de controle,
'sistema e comando. Se houve erro retorna 255 em IR_Ctr
Atualiza_IR:
if (IR_Sensor = 1) then return
for indRC5 = 0 to 193 'Neste looping recolhe amostras
Vet_Bits[indRC5] = IR_Sensor 'do pacote RC5 e grava no array
PauseUs 110 'Vet_Bits para ser decodificado.
next indRC5 'Amostras em tempos de 110us
indRC52 = 0 'Inicialização de variáveis
qtniveis = 1 'Define seqüências de 00 e 11
for indRC5 = 0 to 27 'Limpa Vet_Dups
Vet_DupBits[indRC5] = 0
next indRC5
Vet_DupBits[indRC52] = Vet_Bits[0] 'Decodificação de Vet_Bits
for indRC5 = 1 to 193 'Varre Vet_Bits por intervalos de 0 e 1
if Vet_Bits[indRC5]=Vet_DupBits[indRC52] then
qtniveis = qtniveis + 1
else
select case (qtniveis/5) 'Identifica seqüências de 00 ou 11
case 1 : 'se 1 então período de 888us de 1 ou 0
indRC52 = indRC52 + 1
Vet_DupBits[indRC52] = Vet_Bits[indRC5]
qtniveis = 1
case 2, 3 : 'se 2 ou 3 período então período de 1,67ms de 11 ou 00
indRC52 = indRC52 + 1
Vet_DupBits[indRC52] = Vet_Bits[indRC5-1]
indRC52 = indRC52 + 1
Vet_DupBits[indRC52] = Vet_Bits[indRC5]
qtniveis = 1
case else
return
end select
endif 'Agora Vet_DupBits possui as duplas de bits que
next indRC5 'irão constituir o pacote final RC5
indRC52 = 0 'Inicio da criação do pacote RC5.Se erro, então abortar
if not(not Vet_DupBits[indRC52] and Vet_DupBits[indRC52+1]) then return
For indRC5 = 11 to 0 step -1
indRC52 = indRC52 + 2
'Vare Vet_DupBits por duplas de bits e associa a 1 ou 0 para
'carregar no pacote. 00=0 01=1 10=0 11=1
if (not Vet_DupBits[indRC52] and not Vet_DupBits[indRC52+1]) then Pac_RC5.0[indRC5] = 0
if (not Vet_DupBits[indRC52] and Vet_DupBits[indRC52+1]) then Pac_RC5.0[indRC5] = 1
if (Vet_DupBits[indRC52] and not Vet_DupBits[indRC52+1]) then Pac_RC5.0[indRC5] = 0
if (Vet_DupBits[indRC52] and Vet_DupBits[indRC52+1]) then Pac_RC5.0[indRC5] = 1
Next indRC5
'Agora o pacote RC5 está formando com 12 bits.
'Desmembra pacote. 6 bits para comando, 5 para sistema e 1 para controle
IR_Com=Pac_RC5 & %00111111
IR_Sis=(Pac_RC5 >>6) & %00011111
IR_Ctr=(Pac_RC5 >>11)& %00000001
'Executa o comando recepcionado
if (Ir_ctr) then
if (Ir_sis = 0) then
select case Ir_com
case 16: hserout["l"] 'Volume +
case 17: hserout["o"] 'Volume -
end select
endif
if Ir_sis = 5 then
select case Ir_com
case 12: 'Liga/Desliga PC
case 50: hserout["w"] 'Previous
case 52: hserout["f"] 'Next
case 53: hserout["y"] 'Play
case 41: hserout["e"] 'Pause
case 54: hserout["p"] 'Stop
end select
endif
endif
IR_Ctr = 255
ind_pauseir = 0
for ind_pauseir = 1 to 4000
pauseus 100
next ind_pauseir
return
'Inicialização geral de variáveis
inits:
clear
TRISB = 1
'Inicio do programa principal
loop:
gosub atualiza_ir
goto loop
end