This is my last variant of code; works fine in ISIS, hope to my car too.
Code:
'
' Varianta cu ASM from www.rentron.com
' Thanks to Mr.Bruce !
'
' PIC12F675: +--U--+
' +5V [ ] GND
' key 5 |---/--- >[ ]< ---/---| key 1
' key 4 |---/--- >[ ]< ---/---| key 2
' pull-up! key 3 |---/--- >[ ]>--[4K7]-- NPN Transistor, IR LED
@ DEVICE PIC12F675, intrc_osc, wdt_off, pwrt_on, mclr_off, bod_off
INCLUDE "MODEDEFS.BAS"
DEFINE OSC 4
CMCON=7
OPTION_REG.7=0
TRISIO = %00111011
WPU=%00111011
IOCB=%00111011
ANSEL=0
but1 var gpio.0
but2 var gpio.1
LED var gpio.2
but3 var gpio.3
but4 var gpio.4
but5 var gpio.5
zecime CON 3 '// = ( 3 * 25uS) = 0.07 mS burst
zero CON 12 '// =( 12 * 25us) = 0.30 mS burst
unu CON 24 '// = (24 * 25uS) = 0.60 mS burst
delay var word
i var byte
cycles var byte
acycles var byte
GIE var intcon.7 ' global interrupt enable 1=on ; 0=off
gpie var intcon.3 ' port change interrupt enable 1=0n ; 0=off
gpif var intcon.0 ' port change interrupt flag bit
GIE=0
GPIE=1
'=========================================
main:
@ sleep
pause 100
IF but1=0 then ; VOLUME UP
acycles= unu + zero + zecime ' ~ 970 uS
delay=970
GOSUB IR_REMOTE
ENDIF
IF but2=0 then ; VOLUME DOWN
acycles= unu + unu + zecime ' ~ 1270 uS
delay= 1270
GOSUB IR_REMOTE
ENDIF
IF but3=0 then ; BUTTON UP
acycles= unu + unu + zero + zecime ' ~ 1570 uS
delay = 1570
GOSUB IR_REMOTE
ENDIF
IF but4=0 then ; BUTTON DOWN
acycles= unu + unu + unu + zecime ' ~ 1870 uS
delay = 1870
GOSUB IR_REMOTE
ENDIF
IF but5=0 then ; MUTE
acycles= unu + unu + unu + zero + zecime ' ~ 2170 uS
delay = 2170
GOSUB IR_REMOTE
ENDIF
GPIF=0 'Clear port change interrupt flag
PAUSE 50
Goto Main
'=========================================
ir_REMOTE:
cycles=acycles
call Pulse
pauseus delay
cycles=zero + zecime ' ~ 670 uS
call Pulse
return
'=========================================
Pulse: '// Emits # of 40kHz bursts held in variable Cycles
ASM ;// with auto delay between bursts
bsf gpio, 2 ;// 1uS, LED=on [need 25uS total
goto $+1 ;// 3uS (2uS per goto $+1)
goto $+1 ;// 5uS
goto $+1 ;// 7uS
goto $+1 ;// 9uS
goto $+1 ;// 11uS
goto $+1 ;// 13uS
bcf gpio, 2 ;// 14uS, LED=off
goto $+1 ;// 16uS
goto $+1 ;// 18uS
goto $+1 ;// 20uS
goto $+1 ;// 22uS
decfsz _Cycles,F ;// 23uS
goto _Pulse ;// 25us
ENDASM
RETURN '// Return to Main
'========================================
END
If see obviously mistakes, please tell me. Thank You, all !
Bookmarks