Ooops! Sorry, here is the missing code!! :-)

Code:
;**********************************************************************
;                                                                     *
;    Filename:	    irmtxv4.inc                                       *
;**********************************************************************
;    Notes:
;
; IR transmitter prot.v4 (Manchester)
;**********************************************************************

	EXTERN mtx_buffer, mtx_delay
	EXTERN mtx_init, mtx_send
And:

Code:
;**********************************************************************
;                                                                     *
;    Filename:	    irmtxv4.asm                                       *
;**********************************************************************
;    Notes:
;
; IR transmitter prot.v4.2 (Manchester)
;**********************************************************************
;
; header : 20xbit1, 1xbit0
; bytes : 8xbitX, 1xbit1, 1xbit0
;
; packet structure: <data0> <data1> <data2> <checksum>
;
; 020 - library version
; untested!
;
; 021 - add half frame variable
;       remove buffer initialization
;
; 030-20050102 codec-v4.2: 
;              checksum with CRC-8
;              T=350 usec
;              3-byte buffer length
;
; 031-20050227 same format for IR
; the TX output is fixed, it uses the hardware PWM output pin
;
;**********************************************************************

	list      p=16F684
	#include <p16F684.inc>

	GLOBAL mtx_buffer, mtx_init, mtx_send, mtx_delay

packet_len	EQU 2
pwm_freq	EQU d'38000'

;dc_value	EQU d'500000' / pwm_freq
;dc1b_value	EQU (d'2000000' / pwm_freq) - (4 * dc_value)

; rather use the exact period rate/2 for duty cycle calculation
dc_value	EQU (d'1000000' / pwm_freq) >> 1
dc1b_value	EQU ( (d'1000000' / pwm_freq) << 1) - (dc_value << 2)

ccp1con_value	EQU (1<<CCP1M3) | (1<<CCP1M2) | (dc1b_value << 4)
pr2_value	EQU (d'1000000' / pwm_freq) - 1

;***** VARIABLE DEFINITIONS
mtxdata		UDATA

count1		res 1
count2		res 1
ncnt		res 1
bt		res 1
sum		res 1
mtx_buffer	res 2

mtx_delay	res 1 ; half_frame delay

;**********************************************************************

mtx		CODE

mtx_init
		BANKSEL T2CON
		movlw (1<<TMR2ON) | (0x00)
		movwf T2CON ; TMR2 on, 1:1 prescaler
		movlw dc_value
		movwf CCPR1L ; PWM duty cycle

		movlw 0 ; ccp1con_value
		movwf CCP1CON ; turn off CCP module

		BANKSEL PR2
		movlw pr2_value
		movwf PR2
		BANKSEL PORTA

		movlw .117 ; 350 usec
		movwf mtx_delay
		return
		;

mtx_send
		; send out buffer
outbuf		movlw 0x14 ; 20xbit1, 1xbit0

header		movwf count2
head0		call bit1
		decfsz count2,F
		goto head0
		call bit0

		movlw mtx_buffer
		movwf FSR
		movlw packet_len
		movwf count1
		movlw 0xff
		movwf sum
		;
outbu0		movf INDF,W
		call update_sum
		movf INDF,W
		call outbyte
		incf FSR,F
		decfsz count1,F
		goto outbu0
		movf sum,W
		call outbyte
		; buffer is sent

		return

update_sum	; fast CRC-8 algorithm with poly x^8+x^5+x^4+1
		; executes in 23 cycles per update

		xorwf	sum,f
		clrw
		btfsc	sum,7
		xorlw	0x7a
		btfsc	sum,6
		xorlw	0x3d
		btfsc	sum,5
		xorlw	0x86
		btfsc	sum,4
		xorlw	0x43
		btfsc	sum,3
		xorlw	0xb9
		btfsc	sum,2
		xorlw	0xc4
		btfsc	sum,1
		xorlw	0x62
		btfsc	sum,0
		xorlw	0x31
		movwf	sum
		return
		;
outbyte		movwf bt
		movlw 8
		movwf count2
outby0		rlf bt,F
		btfsc STATUS,C
		goto outby1
		call bit0
		goto outby2
outby1		call bit1
outby2		decfsz count2,F
		goto outby0
		;
		call bit1
		; and bit0

bit0		movlw pr2_value-3
		movwf TMR2

		movlw ccp1con_value ; HIGH
		movwf CCP1CON

ndelaya0	movf mtx_delay, W
		movwf ncnt
ndelaya1	decfsz ncnt, F
		goto ndelaya1

		movlw 0 ; to LOW transition
		movwf CCP1CON

ndelayb0	movf mtx_delay, W
		movwf ncnt
ndelayb1	decfsz ncnt, F
		goto ndelayb1

		return

bit1		movlw 0 ; LOW
		movwf CCP1CON

ndelayc0	movf mtx_delay, W
		movwf ncnt
ndelayc1	decfsz ncnt, F
		goto ndelayc1

		movlw pr2_value-3
		movwf TMR2
		movlw ccp1con_value ; to HIGH transition
		movwf CCP1CON

ndelaye0	movf mtx_delay, W
		movwf ncnt
ndelaye1	decfsz ncnt, F
		goto ndelaye1

		return

		end