您可以添加到网摘 让更多人关注此文章:
; 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
;PowerUpSystem 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
|