|  | 
 
| ; Description: Receive IR Remote control NEC code list p=12C508A, f=INHX8M, r=DEC, b=8, C=80
 __config (_MCLRE_OFF & _CP_ON & _WDT_OFF & _IntRC_OSC)
 __idlocs H'0001' INDF equ 0x00
 TMR0 equ 0x01
 PCL equ 0x02
 STATUS equ 0x03
 FSR equ 0x04
 OSCCAL equ 0x05
 GPIO equ 0x06
 Bit7 equ 0x07
 Bit6 equ 0x06
 Bit5 equ 0x05
 Bit4 equ 0x04
 Bit3 equ 0x03
 Bit2 equ 0x02
 Bit1 equ 0x01
 Bit0 equ 0x00
 W equ 0x00
 F equ 0x01
 ; STATUS Register
 GPWUF equ Bit7
 PA0 equ Bit5
 NOT_TO equ Bit4
 NOT_PD equ Bit3
 Z equ Bit2
 DC equ Bit1
 C equ Bit0
 ; GPIO Register
 bIRDataIn equ Bit0
 bSystemPowerOut0 equ Bit1
 ; Configuration Bits
 _MCLRE_ON equ 0x0fff
 _MCLRE_OFF equ 0x0fef
 _CP_ON equ 0x0ff7
 _CP_OFF equ 0x0fff
 _WDT_ON equ 0x0fff
 _WDT_OFF equ 0x0ffb
 _LP_OSC equ 0x0ffc
 _XT_OSC equ 0x0ffd
 _IntRC_OSC equ 0x0ffe
 _ExtRC_OSC equ 0x0fff
 ; Macro Definition
 PowerDownSystem MACRO
 bcf GPIO, bSystemPowerOut0
 ENDM
 PowerUpSystem MACRO
 bsf GPIO, bSystemPowerOut0
 ENDM
 ; General Purpose Register
 DelayCounter1 equ 0x07
 DelayCounter2 equ 0x08
 AddrCode equ 0x10
 AddrCodeNot equ 0x11
 DataCode equ 0x12
 DataCodeNot equ 0x13
 Result equ 0x14
 PowerState equ 0x15
 ButtonTemp equ 0x16
 Bit equ 0x17
 GetBitCounter equ 0x18
 GetBitCountLo equ 0x19
 GetBitCountHi equ 0x1A
 PausecountLo equ 0x1B
 PausecountHi equ 0x1C
 errorflag equ 0x1D
 ; Constant Definition
 cPowerOn equ 0xFF
 cPowerOff equ 0x00
 cPowerHi equ 0x82
 cPowerLo equ 0x7D
 cAddressHi equ 0xF0
 cAddressLo equ 0x0F
 ;==============================================================================
 org 0000h
 movwf OSCCAL
 goto main
 ;------------------------------------------------------------------------------
 ; Function: pDelay1ms
 ; Overview: This is a very accurate 1ms delay for a 4MHz clock.
 ;------------------------------------------------------------------------------
 pDelay1ms:
 movlw .198
 movwf DelayCounter1
 nop
 nop
 tagDelay1ms_01:
 nop
 nop
 decfsz DelayCounter1, F
 goto tagDelay1ms_01
 retlw 0x00
 ;------------------------------------------------------------------------------
 ; Function: pDelay250ms
 ; Overview:
 ;------------------------------------------------------------------------------
 pDelay250ms:
 movlw .250
 movwf DelayCounter2
 tagDelay250ms_01:
 call pDelay1ms
 decfsz DelayCounter2, F
 goto tagDelay250ms_01
 retlw 0x00
 ;------------------------------------------------------------------------------
 ; Function: pGetBit
 ; Overview:
 ;------------------------------------------------------------------------------
 pGetBit:
 tagBitStart:
 clrf errorflag
 clrf GetBitCountLo
 clrf GetBitCountHi
 
 tagBitWait:
 btfss GPIO, bIRDataIn
 goto tagBitWait
 tagBitLoop:
 incfsz GetBitCountLo, F
 goto tagBitNext
 incf GetBitCountHi, F
 movlw .3
 subwf GetBitCountHi,W
 btfsc STATUS,C
 goto errorret
 tagBitNext:
 btfsc GPIO, bIRDataIn
 goto tagBitLoop
 
 movlw .1
 subwf GetBitCountHi, W
 btfsc STATUS, Z
 goto tagBitIsOne
 tagBitIsZero:
 movlw 0x00
 movwf Bit
 goto tagBitDone
 tagBitIsOne:
 movlw 0xff
 movwf Bit
 goto tagBitDone
 tagBitDone:
 retlw 0x00
 errorret:
 bsf errorflag,Bit0
 retlw 0x00
 ;------------------------------------------------------------------------------
 ;==============================================================================
 ; Program Main Entry.
 ;==============================================================================
 main:
 movlw B'11000111'
 option
 movlw B'11111101'
 tris GPIO
 
  owerUpSystem movlw B'11111111'
 movwf GPIO
 movlw cPowerOn
 movwf PowerState
 initial:
 clrf AddrCode
 clrf AddrCodeNot
 clrf DataCode
 clrf DataCodeNot
 doIrCheck:
 btfsc GPIO, bIRDataIn
 goto doIrCheck
 ;================================================
 ;call pGetBit
 leaderWait:
 btfss GPIO, bIRDataIn
 goto leaderWait
 call pGetBit
 pauseWait:
 ;btfsc GPIO, bIRDataIn
 ;goto pauseWait
 movf GetBitCountLo,W
 movwf PausecountLo
 movf GetBitCountHi,W
 movwf PausecountHi
 movlw 0x02
 subwf PausecountHi,W
 btfss STATUS,Z
 ;btfss PausecountHi,Bit1
 goto doIrCheck
 ;btfsc GPIO,bIRDataIn
 ;goto
 ;================================================
 AddrBit0:
 call pGetBit
 btfsc errorflag,Bit0
 goto doIrCheck
 btfss Bit, Bit7
 goto AddrBit0Zero
 AddrBit0One:
 bsf AddrCode, Bit0
 goto AddrBit1
 
 AddrBit0Zero:
 bcf AddrCode, Bit0
 ;------------------------------------------------
 AddrBit1:
 call pGetBit
 btfsc errorflag,Bit0
 goto doIrCheck
 btfss Bit, Bit7
 goto AddrBit1Zero
 AddrBit1One:
 bsf AddrCode, Bit1
 goto AddrBit2
 
 AddrBit1Zero:
 bcf AddrCode, Bit1
 ;------------------------------------------------
 AddrBit2:
 call pGetBit
 btfsc errorflag,Bit0
 goto doIrCheck
 btfss Bit, Bit7
 goto AddrBit2Zero
 AddrBit2One:
 bsf AddrCode, Bit2
 goto AddrBit3
 
 AddrBit2Zero:
 bcf AddrCode, Bit2
 ;------------------------------------------------
 AddrBit3:
 call pGetBit
 btfsc errorflag,Bit0
 goto doIrCheck
 btfss Bit, Bit7
 goto AddrBit3Zero
 AddrBit3One:
 bsf AddrCode, Bit3
 goto AddrBit4
 
 AddrBit3Zero:
 bcf AddrCode, Bit3
 ;------------------------------------------------
 AddrBit4:
 call pGetBit
 btfsc errorflag,Bit0
 goto doIrCheck
 btfss Bit, Bit7
 goto AddrBit4Zero
 AddrBit4One:
 bsf AddrCode, Bit4
 goto AddrBit5
 
 AddrBit4Zero:
 bcf AddrCode, Bit4
 ;------------------------------------------------
 AddrBit5:
 call pGetBit
 btfsc errorflag,Bit0
 goto doIrCheck
 btfss Bit, Bit7
 goto AddrBit5Zero
 AddrBit5One:
 bsf AddrCode, Bit5
 goto AddrBit6
 
 AddrBit5Zero:
 bcf AddrCode, Bit5
 ;------------------------------------------------
 AddrBit6:
 call pGetBit
 btfsc errorflag,Bit0
 goto doIrCheck
 btfss Bit, Bit7
 goto AddrBit6Zero
 AddrBit6One:
 bsf AddrCode, Bit6
 goto AddrBit7
 
 AddrBit6Zero:
 bcf AddrCode, Bit6
 ;------------------------------------------------
 AddrBit7:
 call pGetBit
 btfsc errorflag,Bit0
 goto doIrCheck
 btfss Bit, Bit7
 goto AddrBit7Zero
 AddrBit7One:
 bsf AddrCode, Bit7
 goto AddrNotBit0
 
 AddrBit7Zero:
 bcf AddrCode, Bit7
 ;++++++++++++++++++++++++++++++++++++++++++++++++
 AddrNotBit0:
 call pGetBit
 btfsc errorflag,Bit0
 goto doIrCheck
 btfss Bit, Bit7
 goto AddrNotBit0Zero
 AddrNotBit0One:
 bsf AddrCodeNot, Bit0
 goto AddrNotBit1
 
 AddrNotBit0Zero:
 bcf AddrCodeNot, Bit0
 ;------------------------------------------------
 AddrNotBit1:
 call pGetBit
 btfsc errorflag,Bit0
 goto doIrCheck
 btfss Bit, Bit7
 goto AddrNotBit1Zero
 AddrNotBit1One:
 bsf AddrCodeNot, Bit1
 goto AddrNotBit2
 
 AddrNotBit1Zero:
 bcf AddrCodeNot, Bit1
 ;------------------------------------------------
 AddrNotBit2:
 call pGetBit
 btfsc errorflag,Bit0
 goto doIrCheck
 btfss Bit, Bit7
 goto AddrNotBit2Zero
 AddrNotBit2One:
 bsf AddrCodeNot, Bit2
 goto AddrNotBit3
 
 AddrNotBit2Zero:
 bcf AddrCodeNot, Bit2
 ;------------------------------------------------
 AddrNotBit3:
 call pGetBit
 btfsc errorflag,Bit0
 goto doIrCheck
 btfss Bit, Bit7
 goto AddrNotBit3Zero
 AddrNotBit3One:
 bsf AddrCodeNot, Bit3
 goto AddrNotBit4
 
 AddrNotBit3Zero:
 bcf AddrCodeNot, Bit3
 ;------------------------------------------------
 AddrNotBit4:
 call pGetBit
 btfsc errorflag,Bit0
 goto doIrCheck
 btfss Bit, Bit7
 goto AddrNotBit4Zero
 AddrNotBit4One:
 bsf AddrCodeNot, Bit4
 goto AddrNotBit5
 
 AddrNotBit4Zero:
 bcf AddrCodeNot, Bit4
 ;------------------------------------------------
 AddrNotBit5:
 call pGetBit
 btfsc errorflag,Bit0
 goto doIrCheck
 btfss Bit, Bit7
 goto AddrNotBit5Zero
 AddrNotBit5One:
 bsf AddrCodeNot, Bit5
 goto AddrNotBit6
 
 AddrNotBit5Zero:
 bcf AddrCodeNot, Bit5
 ;------------------------------------------------
 AddrNotBit6:
 call pGetBit
 btfsc errorflag,Bit0
 goto doIrCheck
 btfss Bit, Bit7
 goto AddrNotBit6Zero
 AddrNotBit6One:
 bsf AddrCodeNot, Bit6
 goto AddrNotBit7
 
 AddrNotBit6Zero:
 bcf AddrCodeNot, Bit6
 ;------------------------------------------------
 AddrNotBit7:
 call pGetBit
 btfsc errorflag,Bit0
 goto doIrCheck
 btfss Bit, Bit7
 goto AddrNotBit7Zero
 AddrNotBit7One:
 bsf AddrCodeNot, Bit7
 goto DataBit0
 
 AddrNotBit7Zero:
 bcf AddrCodeNot, Bit7
 ;++++++++++++++++++++++++++++++++++++++++++++++++
 DataBit0:
 call pGetBit
 btfsc errorflag,Bit0
 goto doIrCheck
 btfss Bit, Bit7
 goto DataBit0Zero
 DataBit0One:
 bsf DataCode, Bit0
 goto DataBit1
 
 DataBit0Zero:
 bcf DataCode, Bit0
 ;------------------------------------------------
 DataBit1:
 call pGetBit
 btfsc errorflag,Bit0
 goto doIrCheck
 btfss Bit, Bit7
 goto DataBit1Zero
 DataBit1One:
 bsf DataCode, Bit1
 goto DataBit2
 
 DataBit1Zero:
 bcf DataCode, Bit1
 ;------------------------------------------------
 DataBit2:
 call pGetBit
 btfsc errorflag,Bit0
 goto doIrCheck
 btfss Bit, Bit7
 goto DataBit2Zero
 DataBit2One:
 bsf DataCode, Bit2
 goto DataBit3
 
 DataBit2Zero:
 bcf DataCode, Bit2
 ;------------------------------------------------
 DataBit3:
 call pGetBit
 btfsc errorflag,Bit0
 goto doIrCheck
 btfss Bit, Bit7
 goto DataBit3Zero
 DataBit3One:
 bsf DataCode, Bit3
 goto DataBit4
 
 DataBit3Zero:
 bcf DataCode, Bit3
 ;------------------------------------------------
 DataBit4:
 call pGetBit
 btfsc errorflag,Bit0
 goto doIrCheck
 btfss Bit, Bit7
 goto DataBit4Zero
 DataBit4One:
 bsf DataCode, Bit4
 goto DataBit5
 
 DataBit4Zero:
 bcf DataCode, Bit4
 ;------------------------------------------------
 DataBit5:
 call pGetBit
 btfsc errorflag,Bit0
 goto doIrCheck
 btfss Bit, Bit7
 goto DataBit5Zero
 DataBit5One:
 bsf DataCode, Bit5
 goto DataBit6
 DataBit5Zero:
 bcf DataCode, Bit5
 ;------------------------------------------------
 DataBit6:
 call pGetBit
 btfsc errorflag,Bit0
 goto doIrCheck
 btfss Bit, Bit7
 goto DataBit6Zero
 DataBit6One:
 bsf DataCode, Bit6
 goto DataBit7
 
 DataBit6Zero:
 bcf DataCode, Bit6
 ;------------------------------------------------
 DataBit7:
 call pGetBit
 btfsc errorflag,Bit0
 goto doIrCheck
 btfss Bit, Bit7
 goto DataBit7Zero
 DataBit7One:
 bsf DataCode, Bit7
 goto DataNotBit0
 
 DataBit7Zero:
 bcf DataCode, Bit7
 ;++++++++++++++++++++++++++++++++++++++++++++++++
 DataNotBit0:
 call pGetBit
 btfsc errorflag,Bit0
 goto doIrCheck
 btfss Bit, Bit7
 goto DataNotBit0Zero
 DataNotBit0One:
 bsf DataCodeNot, Bit0
 goto DataNotBit1
 
 DataNotBit0Zero:
 bcf DataCodeNot, Bit0
 ;------------------------------------------------
 DataNotBit1:
 call pGetBit
 btfsc errorflag,Bit0
 goto doIrCheck
 btfss Bit, Bit7
 goto DataNotBit1Zero
 DataNotBit1One:
 bsf DataCodeNot, Bit1
 goto DataNotBit2
 
 DataNotBit1Zero:
 bcf DataCodeNot, Bit1
 ;------------------------------------------------
 DataNotBit2:
 call pGetBit
 btfsc errorflag,Bit0
 goto doIrCheck
 btfss Bit, Bit7
 goto DataNotBit2Zero
 DataNotBit2One:
 bsf DataCodeNot, Bit2
 goto DataNotBit3
 
 DataNotBit2Zero:
 bcf DataCodeNot, Bit2
 ;------------------------------------------------
 DataNotBit3:
 call pGetBit
 btfsc errorflag,Bit0
 goto doIrCheck
 btfss Bit, Bit7
 goto DataNotBit3Zero
 DataNotBit3One:
 bsf DataCodeNot, Bit3
 goto DataNotBit4
 
 DataNotBit3Zero:
 bcf DataCodeNot, Bit3
 ;------------------------------------------------
 DataNotBit4:
 call pGetBit
 btfsc errorflag,Bit0
 goto doIrCheck
 btfss Bit, Bit7
 goto DataNotBit4Zero
 DataNotBit4One:
 bsf DataCodeNot, Bit4
 goto DataNotBit5
 
 DataNotBit4Zero:
 bcf DataCodeNot, Bit4
 ;------------------------------------------------
 DataNotBit5:
 call pGetBit
 btfsc errorflag,Bit0
 goto doIrCheck
 btfss Bit, Bit7
 goto DataNotBit5Zero
 DataNotBit5One:
 bsf DataCodeNot, Bit5
 goto DataNotBit6
 
 DataNotBit5Zero:
 bcf DataCodeNot, Bit5
 ;------------------------------------------------
 DataNotBit6:
 call pGetBit
 btfsc errorflag,Bit0
 goto doIrCheck
 btfss Bit, Bit7
 goto DataNotBit6Zero
 DataNotBit6One:
 bsf DataCodeNot, Bit6
 goto DataNotBit7
 
 DataNotBit6Zero:
 bcf DataCodeNot, Bit6
 ;------------------------------------------------
 DataNotBit7:
 call pGetBit
 btfsc errorflag,Bit0
 goto doIrCheck
 btfss Bit, Bit7
 goto DataNotBit7Zero
 DataNotBit7One:
 bsf DataCodeNot, Bit7
 goto ReceiverEnd
 
 DataNotBit7Zero:
 bcf DataCodeNot, Bit7
 ;++++++++++++++++++++++++++++++++++++++++++++++++
 
 ReceiverEnd:
 doCheckAddress:
 movlw 0x01 ;custom address code
 xorwf AddrCode, W
 btfss STATUS, Z
 goto doNotThisDevice
 movlw 0x0C ;custom data code
 xorwf DataCode, W
 btfss STATUS, Z
 goto doNotPowerButton
 goto toggleSystemPower
 doNotThisDevice:
 doNotPowerButton:
 call pDelay250ms
 call pDelay250ms
 goto clearVariables
 ;================================================
 call pDelay250ms
 ;================================================
 toggleSystemPower:
 btfsc PowerState, Bit7
 goto turnPowerOff
 ;------------------------------------------------
 turnPowerOn:
 movlw cPowerOn
 movwf PowerState
 PowerUpSystem
 goto afterToggleSystemPower
 ;------------------------------------------------
 turnPowerOff:
 call pDelay250ms
 call pDelay250ms
 call pDelay250ms
 call pDelay250ms
 call pDelay250ms
 call pDelay250ms
 call pDelay250ms
 call pDelay250ms
 
 movlw cPowerOff
 movwf PowerState
 PowerDownSystem
 nop
 afterToggleSystemPower:
 call pDelay250ms
 clearVariables:
 clrf AddrCode
 clrf AddrCodeNot
 clrf DataCode
 clrf DataCodeNot
 goto doIrCheck
 end
 | 
 |