PDA

View Full Version : need code for ir on/off switch 12f629



FADI984
- 10th February 2013, 16:57
please help i need the code that work with 12f629 for the circuit that work as on \off switch using any remote control (i.e it can save ir command from remot ) i think that i use pulsin command in the program but i am not shure ....
there are many projects on net about that but it is ending with just hex file without orginal source code please.....please ......our friends
as example this project
http://www.ivica-novakovic.from.hr/IrOn-Off-eng.htm
68346835

Chirpy
- 11th February 2013, 06:01
check out this site, has alot of interestings dealing with ir.
http://www.rentron.com/PicBasic/IR_Chips.htm
also, here's a clip from that site for decoding the IR signal, maybe it'll help you in your setup.



FOR Index = 0 TO 12 '// Setup to read-in 13 pulses
PULSIN PORTA.7,0,IR_PULSE[Index] '// Read 13 low-going pulses on RA.7
NEXT Index '// Loop x times
DBYTE = $FF '// Start with all 1's and find each 0
FOR Index = 0 TO 7 '// Get 8 "data" bits
IF IR_PULSE[Index] < 100 THEN DBYTE.0[Index]=0 '// Less than 1mS = 0
NEXT Index
ABYTE = $FF '// Start with all 1's and find each 0 in pattern
X=0 '// Initialize address bit index pointer to bit 0
FOR Index = 8 TO 12 '// Get 5 address bits from IR_PULSE bits 8-12
IF IR_PULSE[Index] < 100 THEN ABYTE.0[X]=0
X = X + 1 '// Increment address bit index pointer
NEXT Index

FADI984
- 11th February 2013, 12:31
Tank you for this help....i think we need in your code to save the captured data in eeprom memory

Acetronics2
- 12th February 2013, 10:29
???

you do not need to ask for any code, as the Hex file to load into your Pic is provided within your link ... !!!
http://www.ivica-novakovic.from.hr/HexFiles/IrOn-Off.hex

just copy and paste it into your programmer ... et voilą !

Alain

FADI984
- 14th February 2013, 08:26
I know that mr .acetronics and thank you to the hint but i need orginal code to insert it inside my own bigger program that contain more functions..and it does not matter what kind of pic but the idea is how can you capture data from any remote and save it inside the micro( any pic)

Heckler
- 14th February 2013, 16:16
There is a pretty good APP NOTE over on the Parallax Basic Stamp web site.
I tried to attach the .pdf file here but it fails.

If you google "parallax remote ir" you will get a couple of hits on IR protocol and implimenting IR comms using BASIC.

PBP is quite similar to the BASIC used in the Basic Stamp microcontroller. So it should not be too dificult to apply what is contained in those app notes to PBP.

Certainly if the Basic Stamp can do it then most any PIC can do it better:)

FADI984
- 15th February 2013, 19:44
Thank you mr.heckler ...it is realy good site and i got some good ideas from it ...and i traid to write code .. but the main proplem is that thair codecs depend on known ir protocol like sony or rc5 but my need is treating with unknown ir protocol (from any remot control) .................realy i spend 10 hour in one set on net and i failed ....thair are many projects about ir dimmer circuit depend on the same idea but the programmers execuse about orginal code and offer just hex file

Ioannis
- 19th February 2013, 13:17
Download this file (http://www.google.gr/url?sa=t&rct=j&q=control%20the%20wolrd%20form%20your%20armchair&source=web&cd=1&ved=0CDEQFjAA&url=http%3A%2F%2Fwww.electro-tech-online.com%2Fcustompdfs%2F2007%2F10%2FSony20InfraR ed20remot20control20decoding.pdf&ei=F3sjUYbrIoio0QWK64GwDA&usg=AFQjCNFHrDyP2W2FSNwLojOeGNVjorU0jQ&bvm=bv.42553238,d.d2k). It explains all these IR stuff you need.

Ioannis

FADI984
- 20th February 2013, 20:59
It is still not solved.....

cleberjean
- 5th February 2018, 03:05
please help i need the code that work with 12f629 for the circuit that work as on \off switch using any remote control (i.e it can save ir command from remot ) i think that i use pulsin command in the program but i am not shure ....
there are many projects on net about that but it is ending with just hex file without orginal source code please.....please ......our friends
as example this project
http://www.ivica-novakovic.from.hr/IrOn-Off-eng.htm
68346835




; IrOn-Off-v2-555.asm
; 01feb18

; Derived of IrOn-Off.hex from http://www.ivica-novakovic.from.hr/IrOn-Off-eng.htm

; Command to compile in Linux:
; gpasm -n IrOn-Off-v2-555.asm -o IrOn-Off-v2-555.hex


PROCESSOR 12F629
#INCLUDE p12f629.inc

; Watchdog ON
; __CONFIG _CPD_OFF & _CP_OFF & _BODEN_ON & _MCLRE_OFF & _PWRTE_ON & _WDT_ON & _INTRC_OSC_NOCLKOUT

; Watchdog OFF
__CONFIG _CPD_OFF & _CP_OFF & _BODEN_ON & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT

ERRORLEVEL -302 ; Don't complain about BANK 1 Registers during assembly


; RAM-Variables
LRAM_0x20 equ 0x20
LRAM_0x21 equ 0x21
LRAM_0x22 equ 0x22
LRAM_0x23 equ 0x23
LRAM_0x28 equ 0x28
LRAM_0x32 equ 0x32 ; temporary register to store data (between swapping bytes for example)
; Address 0x3A...0x43 (10 bytes) is a buffer that stores the received IR stream code, to handling
LRAM_0x44 equ 0x44
LRAM_0x45 equ 0x45
LRAM_0x46 equ 0x46
LRAM_0x47 equ 0x47
LRAM_0x4A equ 0x4A
LRAM_0x4B equ 0x4B
LRAM_0x4C equ 0x4C
LRAM_0x4D equ 0x4D
LRAM_0x50 equ 0x50 ; bit 0 = NoToggle flag (enable (bit 0 = 0) or disable (bit 0 = 1) the PIC's output invertion)
LRAM_0x52 equ 0x52
LRAM_0x53 equ 0x53
LRAM_0x5D equ 0x5D ; Counter. Used as byte counter and index by the handler routines of the IR stream
LRAM_0x5E equ 0x5E


;-------------------------------------------------------------------------------
; Defines
;-------------------------------------------------------------------------------
#DEFINE selBank0 BCF STATUS,RP0 ; select RAM bank 0
#DEFINE selBank1 BSF STATUS,RP0 ; select RAM bank 1
#DEFINE ON_OFF GPIO,0 ; on/off output
#DEFINE LED GPIO,2
#DEFINE PRG_BUTTON GPIO,4 ; programming button
#DEFINE IR_RECV GPIO,5 ; input pin for command received from ir receiver


;-------------------------------------------------------------------------------
; Constants
;-------------------------------------------------------------------------------
OUT_PIN equ 0 ; saida para o acionamento/desligamento (GPIO0)
IRREC_PIN equ 5 ; entrada do codigo recebido pelo receptor infravermelho (12F629 pin 2 - GPIO5)
PRG_BTN equ 4 ; programming button (12F629 pin 3 - GPIO4)
LED_PIN equ 2 ; IO do LED indicador da recepcao/programacao (GPIO2)


; Start of code
ORG H'0000'


; Reset-Vector
GOTO LADR_0x005A ; goes to the beginning of the program
NOP
NOP
NOP

; Interrupt-Vector
RETFIE ; ignore interrupts


; Reads EEPROM memory
; Input: W contains EEPROM address to read
; Output: W contains the data read
LADR_0x0001
BSF STATUS,RP0 ; select bank 1
MOVWF EEADR ; copy address in EEADR
BSF EECON1,0 ; prepara leitura
MOVF EEDATA,W ; loads data in EEPROM into W register
GOTO LADR_0x0055 ; returns to RAM bank 0 and exits of this sub-routine


; Writes a data (W value) in internal EEPROM
LADR_0x0006
BSF STATUS,RP0 ; select bank 1
MOVWF EEDATA ; copy data in EEDATA
BSF EECON1,2 ; enable writing in EEPROM

; DO NOT CHANGE THIS INSTRUCTIONS ORDER!
MOVLW 0x55 ; writing initiate (!!! REQUIRED SEQUENCE #1 !!!)
MOVWF EECON2 ; !!! REQUIRED SEQUENCE #2 !!!
MOVLW 0xAA ; !!! REQUIRED SEQUENCE #3 !!!
MOVWF EECON2 ; !!! REQUIRED SEQUENCE #4 !!!
BSF EECON1,1 ; write dada into EEPROM (!!! REQUIRED SEQUENCE #5 !!!)

BCF EECON1,2 ; clears WREN flag (!!! REQUIRED !!!)

; Waits writting have been finished
LADR_0x000E
BTFSC EECON1,1 ; is the writing completed?
GOTO LADR_0x000E ; no, then waits
GOTO LADR_0x0055 ; yes, then returns to RAM bank 0 and exits from this sub-routine


; Parece ser um timer com W contendo o tempo da pausa
LADR_0x0013
MOVWF LRAM_0x22

LADR_0x0014
MOVLW 0xFF ; b'11111111' d'255'
ADDWF LRAM_0x22,F
BTFSS STATUS,C
ADDWF LRAM_0x23,F
BTFSS STATUS,C
GOTO LADR_0x0055
MOVLW 0x03 ; b'00000011' d'003'
MOVWF LRAM_0x21
MOVLW 0xDF ; b'11011111' d'223'
CALL LADR_0x0020
GOTO LADR_0x0014


LADR_0x0020
ADDLW 0xE8 ; b'11101000' d'232'
MOVWF LRAM_0x20
COMF LRAM_0x21,F
MOVLW 0xFC ; b'11111100' d'252'
BTFSS STATUS,C
GOTO LADR_0x0029

LADR_0x0026
ADDWF LRAM_0x20,F
BTFSC STATUS,C
GOTO LADR_0x0026

LADR_0x0029
ADDWF LRAM_0x20,F
; CLRWDT
INCFSZ LRAM_0x21,F
GOTO LADR_0x0026

LADR_0x002F
BTFSS LRAM_0x20,1
GOTO LADR_0x0033
NOP
GOTO LADR_0x0033

LADR_0x0033
RETURN


LADR_0x0034
BCF STATUS,C
RRF LRAM_0x21,F
RRF LRAM_0x20,F
ADDLW 0xFF ; b'11111111' d'255'
BTFSC STATUS,C
GOTO LADR_0x0034
MOVF LRAM_0x20,W
GOTO LADR_0x0055


LADR_0x003C
MOVWF LRAM_0x22
MOVLW 0x03 ; b'00000011' d'003'
GOTO LADR_0x0045


LADR_0x003F
MOVWF LRAM_0x22
MOVLW 0x01 ; b'00000001' d'001'
GOTO LADR_0x0045


;
SubRout_04
MOVF LRAM_0x47,W
MOVWF LRAM_0x23
MOVF LRAM_0x46,W

LADR_0x0042
MOVWF LRAM_0x22
MOVLW 0x06 ; b'00000110' d'006'

LADR_0x0045
MOVWF LRAM_0x28
MOVF LRAM_0x23,W
SUBWF LRAM_0x21,W
BTFSS STATUS,Z
GOTO LADR_0x004C
MOVF LRAM_0x22,W
SUBWF LRAM_0x20,W

LADR_0x004C
MOVLW 0x04 ; b'00000100' d'004'
BTFSC STATUS,C
MOVLW 0x01 ; b'00000001' d'001'
BTFSC STATUS,Z
MOVLW B'00000010' ; bitmask
ANDWF LRAM_0x28,W
BTFSS STATUS,Z
MOVLW 0xFF ; b'11111111' d'255'

LADR_0x0055
; BCF STATUS,IRP ;
; BCF STATUS,RP0 ;
BCF STATUS,RP0 ; returns to RAM bank 0
; CLRWDT ; resets watchdog timer
RETURN


;------------------------------------------
; Sets up GPIO's and SFR's (program start)
;------------------------------------------
LADR_0x005A
CLRF INTCON ; disable all interrupts
CLRF T1CON ; stops TMR1
BCF PIR1,0 ; clears TMR1 overflow flag
MOVLW B'00000111' ; bitmask
MOVWF CMCON ; disable comparators
CLRF GPIO ; let all outputs pins in low level
BSF STATUS,RP0 ; select bank 1
BCF OPTION_REG,7 ; enable internal pull-up resistors
MOVLW B'00110010' ; bitmask
MOVWF WPU ; internal pull-ups resistors enabled on pins 2, 3 and 6 (IR data, programming button and 555 output)
MOVWF GPIO ; turns pins 2, 3 and 6 as inputs, another all pins as outputs
CALL 0x03FF ; gets calibration value
MOVWF OSCCAL ; copy it in OSCCAL
BCF STATUS,RP0 ; returns to bank 0

CLRF LRAM_0x50 ; o bit 4 deste endereco _PARECE_ conter um flag que indica o recebimento de dados ou nivel baixo pelo pino 2


; Program loop?
LADR_0x007C
CALL LADR_0x0203 ; checks if programming button has been pressed
CALL LADR_0x0122 ; checks if remote controler was actived
; CLRWDT ; keeps WDT reseted
BTFSC LRAM_0x50,4 ; this is a flag?
CALL LADR_0x0084
GOTO LADR_0x007C


LADR_0x0084
BSF GPIO,2 ; turn on LED on 12F629 pin 5 (indicating that the remote control has been pressed)
CALL Upd_LED ; updates 12F629 pin 5
CLRF LRAM_0x5D ; EEPROM initial address


LADR_0x0089
CALL Counter_Test
BTFSC STATUS,C ; is index < 10?
GOTO LADR_0x009E ; no, the last byte in EEPROM and RAM was compared and are equals
MOVF LRAM_0x5D,W ; yes, then copy index value to W
CALL LADR_0x0001 ; gets byte in EEPROM
MOVWF LRAM_0x53 ; copy it in address 0x53
MOVF LRAM_0x5D,W ; restore index value in W register
ADDLW 0x3A ; pointer to IR stream data address in RAM
MOVWF FSR
MOVF INDF,W ; gets byte in address indicated by FSR
MOVWF LRAM_0x32 ; copy it to address 0x32
; CLRWDT
MOVF LRAM_0x53,W
SUBWF LRAM_0x32,W ; compares byte stored in EEPROM IR stream data with the byte written in RAM IR stream data
BTFSS STATUS,Z ; bytes are equal?
GOTO LADR_0x00A3 ; bytes are different (wrong IR code)

LADR_0x009C
INCFSZ LRAM_0x5D,F ; increments index (next byte)
GOTO LADR_0x0089 ; gets next byte to compare

; If IR stream code is right, then toggle output
LADR_0x009E
CALL Toggle_Output ; inverts output (pin 7) status

LADR_0x00A3
BCF LRAM_0x50,4
MOVLW 0x01
MOVWF LRAM_0x44 ; b'00000001' d'001'
CLRF LRAM_0x45 ; b'00000000' d'000'

LADR_0x00A7
CALL SubRout_02
BTFSS STATUS,Z
GOTO LADR_0x00B9
; CLRWDT
BTFSS GPIO,5
BSF LRAM_0x50,4

LADR_0x00B5
; incrementa 16 bits contido em 0x45,0x44 (MSB,LSB)
INCF LRAM_0x44,F
BTFSC STATUS,Z ; testa 256
INCFSZ LRAM_0x45,F ; incrementa 0x45 (byte high) se 0x44 (byte low) = 256
GOTO LADR_0x00A7

LADR_0x00B9
; CLRWDT
BTFSC LRAM_0x50,4
GOTO LADR_0x00A3

LADR_0x00BD
MOVLW 0x01 ; b'00000001' d'001'
MOVWF LRAM_0x44
CLRF LRAM_0x45

LADR_0x00C0
CALL SubRout_02
BTFSS STATUS,Z
GOTO LADR_0x00D2
; CLRWDT
BTFSS GPIO,5
GOTO LADR_0x00A3 ;

LADR_0x00CE
INCF LRAM_0x44,F
BTFSC STATUS,Z
INCFSZ LRAM_0x45,F
GOTO LADR_0x00C0

LADR_0x00D2
BCF GPIO,2 ; turn off LED on pin 5
GOTO Upd_LED ; updates LED status


LADR_0x00D7
CLRF LRAM_0x5D ; initializes index counter with 0

; Fills 10 bytes in RAM (IR stream data buffer) with 0xFF
LADR_0x00D8
CALL Counter_Test ; stream end test
BTFSC STATUS,C
GOTO LADR_0x00E4
MOVF LRAM_0x5D,W
ADDLW 0x3A ; pointer to IR stream data in RAM
MOVWF FSR ; FSR now has the address to write
MOVLW 0xFF ; value to fill stream data into RAM
MOVWF INDF ; write 0xFF into address indicated by FSR
INCFSZ LRAM_0x5D,F ; index++
GOTO LADR_0x00D8 ; next write (to until 10 bytes)

LADR_0x00E4
CLRF LRAM_0x44
CLRF LRAM_0x45

LADR_0x00E6
INCF LRAM_0x44,F
BTFSC STATUS,Z
INCF LRAM_0x45,F
CALL LADR_0x0122
; CLRWDT ; for debug only
BTFSC LRAM_0x50,4
GOTO LADR_0x00FA
MOVF LRAM_0x44,W
MOVWF LRAM_0x20
MOVF LRAM_0x45,W
MOVWF LRAM_0x21
MOVLW 0xFD ; b'11111101' d'253'
MOVWF LRAM_0x23
MOVLW 0xE8 ; b'11101000' d'232'
CALL LADR_0x003C
BTFSS STATUS,Z
GOTO LADR_0x0119
GOTO LADR_0x00E6

; Starts the stream writing (copy) from RAM to the EEPROM
LADR_0x00FA
BCF GPIO,2 ; turn off LED on pin 5
CALL Upd_LED ; updates LED status
CLRF LRAM_0x5D ; initializes index/byte counter with zero

; Copy 10 bytes from RAM (address 3Ah up to 43h) to EEPROM
LADR_0x00FF
CALL Counter_Test ; checks if index/byte counter reached the end (LRAM_0x5D = 10)
BTFSC STATUS,C ; skip if no
GOTO LADR_0x0111 ; writing has ended
MOVF LRAM_0x5D,W
ADDLW 0x3A ; adds counter value with address of the first stream byte in RAM, to get the address of byte to read
MOVWF FSR
MOVF INDF,W ; gets byte to copy
MOVWF LRAM_0x32 ; copy it to address 32h
MOVF LRAM_0x5D,W ; copy counter value (index) to W register
BSF STATUS,RP0 ; select bank 1
MOVWF EEADR ; copy counter value (index) to EEADR
BCF STATUS,RP0 ; returns to bank 0
MOVF LRAM_0x32,W
CALL LADR_0x0006 ; writes byte in EEPROM
INCFSZ LRAM_0x5D,F ; next byte
GOTO LADR_0x00FF

LADR_0x0111
MOVLW 0x01 ; b'00000001' d'001'
MOVWF LRAM_0x23
MOVLW 0xF4 ; b'11110100' d'244'
CALL LADR_0x0013
BSF GPIO,2 ; turn on LED on pin 5
CALL Upd_LED ; updates LED status

LADR_0x0119
MOVLW 0x03 ; b'00000011' d'003'
MOVWF LRAM_0x23
MOVLW 0xE8 ; b'11101000' d'232'
CALL LADR_0x0013
BCF GPIO,2 ; turn off LED on pin 5
GOTO Upd_LED ; updates LED status


LADR_0x0122
BCF LRAM_0x50,4 ; resets stream end flag
; CLRWDT ; for debug only
BTFSC GPIO,5 ;
RETURN ;


LADR_0x0128
CALL Start_TMR1
CALL Wait_IRHigh ; waits IR pin to return for level high
CALL Stop_TMR1 ; stops TMR1 and copy it to LRAM_0x4A/LRAM_0x4B and LRAM_0x20/LRAM_0x21

MOVLW 0x01 ; b'00000001' d'001'
MOVWF LRAM_0x23
MOVLW 0x5E ; b'01011110' d'094' "^"
CALL LADR_0x003C
BTFSC STATUS,Z
RETURN


LADR_0x0144
CALL SubRout_03
MOVLW 0x04 ; b'00000100' d'004'
MOVWF LRAM_0x23
MOVLW 0xE2 ; b'11100010' d'226'
CALL LADR_0x003C
BTFSS STATUS,Z
GOTO LADR_0x0153
MOVLW 0xE2 ; b'11100010' d'226'
MOVWF LRAM_0x46
MOVLW 0x04 ; b'00000100' d'004'
MOVWF LRAM_0x47
GOTO LADR_0x0180

LADR_0x0153
CALL SubRout_03
MOVLW 0x0A ; b'00001010' d'010'
MOVWF LRAM_0x23
MOVLW 0x8C ; b'10001100' d'140'
CALL LADR_0x003C
BTFSS STATUS,Z
GOTO LADR_0x0162
MOVLW 0x84 ; b'10000100' d'132'
MOVWF LRAM_0x46
MOVLW 0x03 ; b'00000011' d'003'
MOVWF LRAM_0x47
GOTO LADR_0x0190

LADR_0x0162
CALL SubRout_03
MOVLW 0x0C ; b'00001100' d'012'
MOVWF LRAM_0x23
MOVLW 0xE4 ; b'11100100' d'228'
CALL LADR_0x003C
BTFSS STATUS,Z
GOTO LADR_0x0171
MOVLW 0xEE ; b'11101110' d'238'
MOVWF LRAM_0x46
MOVLW 0x02 ; b'00000010' d'002'
MOVWF LRAM_0x47
GOTO LADR_0x0190

LADR_0x0171
CALL SubRout_03
MOVLW 0x0C ; b'00001100' d'012'
MOVWF LRAM_0x23
MOVLW 0xE4 ; b'11100100' d'228'
CALL LADR_0x0042
BTFSS STATUS,Z
GOTO LADR_0x0180
MOVLW 0xB0 ; b'10110000' d'176'
MOVWF LRAM_0x46
MOVLW 0x04 ; b'00000100' d'004'
MOVWF LRAM_0x47
GOTO LADR_0x0188

LADR_0x0180
CALL Wait_IRLow
CALL Wait_IRHigh

LADR_0x0188
CALL Wait_IRLow
CALL Wait_IRHigh

LADR_0x0190
CLRF LRAM_0x5D ; initializes index/byte counter with zero

LADR_0x0191
CALL Counter_Test ; test for stream data end
BTFSC STATUS,C ; has stream data ended?
GOTO LADR_0x0201 ; no,
MOVLW 0x01
MOVWF LRAM_0x5E

LADR_0x0198
; CLRWDT ; for debug only
MOVLW 0x05 ; b'00000101' d'005'
SUBWF LRAM_0x5E,W
BTFSC STATUS,C
GOTO LADR_0x01FF
CALL Start_TMR1

; Checks end of IR command
LADR_0x01A5
; CLRWDT ; for debug only
BTFSS GPIO,5 ; checks if pin 2 of 12F629 is high
GOTO LADR_0x01B0 ; pin 2 of 12F629 is low
; CLRWDT ; for debug only
MOVLW 0x07 ; test for de TMR1 byte high
SUBWF TMR1H,W ; the carry flag will be set if TMR1H >= 7
BTFSS STATUS,C ;
GOTO LADR_0x01A5 ;

LADR_0x01B0
CALL Stop_TMR1 ; stops TMR1 and copy it to LRAM_0x4A/LRAM_0x4B and LRAM_0x20/LRAM_0x21
CALL SubRout_04
BTFSS STATUS,Z
GOTO LADR_0x01C8
BSF LRAM_0x52,7
GOTO Jump_01

LADR_0x01C8
BCF LRAM_0x52,7

Jump_01
CALL SubRout_01

;----------------------------------------------------------------
; Starts length measuring, in TMR1, of level low on 12F629 pin 2
;----------------------------------------------------------------
CALL Start_TMR1
CALL Wait_IRHigh
CALL Stop_TMR1
CALL SubRout_04
BTFSS STATUS,Z
GOTO LADR_0x01F5
BSF LRAM_0x52,7
GOTO Jump_02

LADR_0x01F5
BCF LRAM_0x52,7

Jump_02
CALL SubRout_01
INCFSZ LRAM_0x5E,F
GOTO LADR_0x0198

LADR_0x01FF
INCFSZ LRAM_0x5D,F
GOTO LADR_0x0191

LADR_0x0201
BSF LRAM_0x50,4
RETURN


; Checks if programming button is pressed
LADR_0x0203
; CLRWDT ; for debug only
BTFSC GPIO,4 ; is pressed the programming button?
RETURN ; no

; Starts programming procedure
LADR_0x0207
MOVLW 0x01 ; b'00000001' d'001'
MOVWF LRAM_0x4C
CLRF LRAM_0x4D

LADR_0x020A
MOVF LRAM_0x4C,W
MOVWF LRAM_0x20
MOVF LRAM_0x4D,W
MOVWF LRAM_0x21
MOVLW 0x13 ; b'00010011' d'019'
MOVWF LRAM_0x23
MOVLW 0x88 ; b'10001000' d'136'
CALL LADR_0x003F
BTFSS STATUS,Z
GOTO LADR_0x021C
; CLRWDT ; for debug only
BTFSC GPIO,4 ; is pressed the programming button?
GOTO LADR_0x0203 ; no
INCF LRAM_0x4C,F ; yes
BTFSC STATUS,Z
INCFSZ LRAM_0x4D,F
GOTO LADR_0x020A

LADR_0x021C
BSF GPIO,2 ; turn on LED on 12F629 pin 5
CALL Upd_LED ; updates LED status on 12F629 pin 5
CALL LADR_0x00D7
BCF GPIO,2 ; turn off LED on 12F629 pin 5
CALL Upd_LED ; updates LED status on 12F629 pin 5
RETURN


; Updates LED status
Upd_LED
BSF STATUS,RP0 ; select bank 1
BCF GPIO,2
BCF STATUS,RP0 ; returns to bank 0
RETURN


; Dois pontos do programa usa esta sub-rotina
SubRout_01
MOVF LRAM_0x5D,W
ADDLW 0x3A ; b'00111010' d'058' ":"
MOVWF FSR
MOVF LRAM_0x52,W
MOVWF INDF
BCF STATUS,C ; clears bit
RRF LRAM_0x52,F ; read bit in carry flag
RETURN


; Dois pontos do programa usa esta sub-rotina
SubRout_02
MOVF LRAM_0x44,W
MOVWF LRAM_0x20
MOVF LRAM_0x45,W
MOVWF LRAM_0x21
MOVLW 0x03 ; b'00000011' d'003'
MOVWF LRAM_0x23
MOVLW 0xE8 ; b'11101000' d'232'
GOTO LADR_0x003F


; Clears TMR1 and LRAM_0x4A/LRAM_0x4B and starts TMR1
Start_TMR1
BCF PIR1,0 ; clears the TMR1 overflow flag
MOVLW 0x00
MOVWF LRAM_0x4A ; clears LRAM_0x4A
MOVWF LRAM_0x4B ; clears LRAM_0x4B
MOVWF TMR1L ; clears TMR1L
MOVWF TMR1H ; clears TMR1H
BSF T1CON,0 ; enable TMR1 counting
RETURN


; Stops TMR1, copy it to LRAM_0x4A/LRAM_0x4B and LRAM_0x20/LRAM_0x21
Stop_TMR1
BCF T1CON,0 ; stops TMR1
MOVF TMR1L,W
MOVWF LRAM_0x4A ; copy TMR1L in LRAM_0x4A
MOVF TMR1H,W
MOVWF LRAM_0x4B ; copy TMR1H in LRAM_0x4B

; Copy LRAM_0x4A/LRAM_0x4B in LRAM_0x20/LRAM_0x21
SubRout_03
MOVF LRAM_0x4A,W
MOVWF LRAM_0x20
MOVF LRAM_0x4B,W
MOVWF LRAM_0x21
RETURN


; Waits IR pin go to level low
Wait_IRLow
; CLRWDT ; for debug only
BTFSC GPIO,5 ; is IR out pin low?
GOTO Wait_IRLow ; no
RETURN ; yes


; Waits IR pin go to level high
Wait_IRHigh
; CLRWDT ; for debug only
BTFSS GPIO,5 ; is IR out pin high?
GOTO Wait_IRHigh ; no
RETURN ; yes


; Checks if counter reached the end (.10)
; Returns carry flag = 1 if yes
Counter_Test
; CLRWDT ; for debug only
MOVLW .10 ; counter end limit
SUBWF LRAM_0x5D,W ; compares LRAM_0x5D with .10
RETURN


; Inverts PIC12F629 output (pin 7) state
Toggle_Output
MOVLW B'00000001' ; bitmask
XORWF GPIO,F ; toggle output state
BSF STATUS,RP0 ; select bank 1
BCF GPIO,0 ; updates the output with the new level
BCF STATUS,RP0 ; returns to bank 0
RETURN


End

vanmgman
- 13th March 2018, 18:14
Hello all, I am also on the Lookout for CODE similar to what the original Poster Asks..

Seems Alot of confused replies, pointing to a HEX file to program, that is NOT what I or the Original Poster is looking for.



FADI984 posted Code, which is VERY close to the Required CODE to operate the circuit that is at :
http://www.ivica-novakovic.from.hr/IrOn-Off-eng.htm

However FADI984's Code appears to be only 1 channel Control Likely the "IrOn-Off" one channel at the above site.

I am looking for CODE for the IrOn-Off v.2 infrared control (Same Site, lower down.. )

I would like to make some small modifications to the Code, a simple Maximum On Time limit / relay, and as well a Make / Break (Only 1 relay on.. ) function change..

The Importance of the CODE to learn / store the IR code is what is asked in the original post, that is also Tantamount for my modification.

D.