1. gzyueqian
      13352868059
      首頁 > 新聞中心 > > 正文

      用PIC12C508A單片機控制模型源程序

      更新時間: 2006-03-20 14:05:35來源: 粵嵌教育瀏覽量:3748

      ; 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

      免費預約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 在线中文字幕亚洲欧美一区 | 嫩草研究所久久久精品 | 久久精品久国产 | 亚洲视频中文字幕 | 亚洲国产日本一区二区 | 午夜亚洲国产理论片中文飘花 |