Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 采用PIC16F887汇编语言的红外接收机_Assembly_Project_Pic_Receiver_Infrared - Fatal编程技术网

Assembly 采用PIC16F887汇编语言的红外接收机

Assembly 采用PIC16F887汇编语言的红外接收机,assembly,project,pic,receiver,infrared,Assembly,Project,Pic,Receiver,Infrared,我一直在为学校做一个项目。它涉及PIC汇编编程。我使用44针演示板 我必须做一个红外接收器,它有一个改变LED亮度的输出。我知道到目前为止,我必须做一个PWM控制。然而,我仍然在努力破解这些按钮。 我使用的发射器有NEC编码。我的输入设置是数字的,通过内部电阻端口B,0上拉。我试图用TMR0中断轮询输入 系统设置为4MHz振荡器,TMR0每Osc/4递增一次。预分频器为1:2,因此每2μs定时器递增1。Timer0预载为D'206',因此中断50*2μs=100μs。根据NEC协议,逻辑0具有5

我一直在为学校做一个项目。它涉及PIC汇编编程。我使用44针演示板

我必须做一个红外接收器,它有一个改变LED亮度的输出。我知道到目前为止,我必须做一个PWM控制。然而,我仍然在努力破解这些按钮。 我使用的发射器有NEC编码。我的输入设置是数字的,通过内部电阻端口B,0上拉。我试图用TMR0中断轮询输入

系统设置为4MHz振荡器,TMR0每Osc/4递增一次。预分频器为1:2,因此每2μs定时器递增1。Timer0预载为D'206',因此中断50*2μs=100μs。根据NEC协议,逻辑0具有562,5μs低信号,逻辑1具有1687,5μs低信号,之后为562,5高信号

因此1687.5μs/100μs=16,562.5μs/100μs=5。我试着从8中减去它们。所以我可以检查什么是状态,零位是活动的还是低的

我不知道我在哪一部分出错了。我将在下面留下我的代码。此代码有一个LED闪烁,而它应该设置端口D,如果按下音量+按钮,则0 LED亮起。因此,通过这种方式,我将知道我是否能够检测到按钮,并对PWM进行操作

每一个答案都很感激

ISR:                        ;IF ISR GLOBAL INT 0  
    btfss   INTCON,T0IF   
    retfie                  ;if there is no interrupt
    banksel 0               ;ISR occur in Bank0
    movwf   W_save          ;save WORK register's value
    movf    STATUS,W       
    movwf   STATUS_save     ;save STATUS register's value

    call    IR              ;call IR
    goto    ISR_EXIT

ISR_EXIT:
    bcf     INTCON,T0IF     ;TMR0 interrupt flag clear
    movlw   b'01100110'     ;preload 206
    movwf   TMR0

    movf    STATUS_save,W
    movwf   STATUS          ;STATUS register original value reload
    swapf   W_save,f        ;WORK register original value reload
    swapf   W_save,W
    retfie                  ;retfie -> global int = 1

IR:
    btfss   PORTB,0         ;testing IR input
    bsf     ir_reg,0        ;button was pressed

    btfss   ir_reg,0        ;button was pressed?
    goto    NO_BUTTON

    btfsc   PORTB,0         ;HIGH signal?
    goto    HIGH_P

    btfss   ir_reg,1        ;previous was HIGH?
    goto    HIGH_TO_LOW

    incf    time,f          ;increment time
    goto    ISR_EXIT

HIGH_P:
    btfsc   ir_reg,1        ;was previous LOW?
    goto    LOW_TO_HIGH

    incf    time,f          ;increment time

    goto    ISR_EXIT

HIGH_TO_LOW:                ;transition between HIGH to LOW pulses
    bsf     PORTD,3
    movf    time,W     
    movwf   high_pulse      ;saving HIGH pulse's time
    clrf    time            ;time variable clear
    bcf     ir_reg,1        ;previous pulse was HIGH
    goto    CALC

CALC:
    movf    high_pulse,W    ;high pulse's time into Work
    bcf     STATUS,Z        ;STATUS ZERO CLEAR

    sublw   D'10'           ;LOW_P -> 5-10 = -5,HIGH_P - > 16-10 = 6
    btfsc   STATUS,Z        ;if subtraction = +
    bsf     ir_reg,3        ;subtraction ended positive -> LOGIC 1
    bcf     ir_reg,3        ;subtraction ended negative -> LOGIC 0
    goto    ADD_BITS

ADD_BITS:
    bsf     PORTD,2
    btfsc   ir_reg,3        ;if LOGIC 1
    bsf     STATUS,C        ;carry bit 1
    bcf     STATUS,C        ;carry bit 0

    goto    ROTATE

ROTATE:
    bsf     PORTD,1
    rlf     naddress        ;Carry is rotated to naddress LSB
    rlf     address         ;naddress MSB rotated to address LSB through Carry
    rlf     ncommand        ;address MSB rotated to ncommand LSB through Carry
    rlf     command         ;ncommand MSB rotated to command LSB through Carry

    incf    pulses          ;every time we have a rotation increment variable
    movf    pulses,W
    bcf     STATUS,Z        ;status zero clear
    sublw   D'32'           ;33-pulses,we have a decoded signal
    btfss   STATUS,Z        ;if Zero set
    goto    ISR_EXIT        ;goto NO_button
    goto    LED_FLASH

LED_FLASH:
    movf    command,W
    bcf     STATUS,Z
    sublw   b'10101000'     ;+ button command: b'10101000'
    btfss   STATUS,Z
    goto    NO_BUTTON
    bsf     PORTD,0
    goto    ISR_EXIT

LOW_TO_HIGH:                ;transition between LOW to HIGH pulses
    movf    time,W
    movwf   low_pulse       ;saving LOW pulse's time
    clrf    time            ;time variable clear
    bsf     ir_reg,1        ;previous pulse was LOW
    goto    ISR_EXIT

NO_BUTTON:
    btfsc   PORTB,0
    goto    ISR_EXIT

    clrf    pulses          ;clearing variables
    clrf    ir_reg
    clrf    time
    clrf    address
    clrf    naddress
    clrf    address
    clrf    ncommand
    clrf    command
    goto    ISR_EXIT

INIT:
;OSCCON INIT
    banksel OSCCON
    movlw   b'01100000'     ;4Mhz oscillator
    movwf   OSCCON

;OUTPUT INIT
    banksel TRISD
    clrf    TRISD           ;TRISD OUTPUT
    banksel PORTD
    clrf    PORTD           ;PORTD LOW

;INPUT INIT
    banksel TRISB
    bsf     TRISB,RB0       ;RB0 INPUT
    bsf     WPUB,RB0

    movlw   0x00
    banksel ANSELH
    movwf   ANSELH          ;RB0 DIGITAL

    call Delay

;OPTION REG INIT / TMR0
    banksel OPTION_REG
    movlw   b'00000000'     ;TMR0 prescale 1:2 increment every 2us
    movwf   OPTION_REG
    movlw   b'01100110'     ;preload 206
    movwf   TMR0            ;50 tick until overflow 50*2us = 100us

;INTCON INIT
    banksel INTCON
    bcf     INTCON,T0IF     ;TMR0 overflow flag clear
    bsf     INTCON,T0IE     ;TMR0 overflow enable
    bsf     INTCON,GIE      ;global interrupt enable

    return

MAIN:

    call INIT
    call FLASH              ;LED FLASH
    goto $-1
    END

我傲慢地认为你的任务简单明了

我大错特错了。我花了三天时间编写和测试一个可以解码NEC红外遥控协议的应用程序

仅仅是试图理解在各种网站上发现的所谓文件就存在重大挑战。所有这些都是误导和不完整的。整理这些乱七八糟的东西花了整整一天的时间

这就是我的工作:

    list n=0,c=255,r=dec    ; Make .LST file look nice
    errorlevel -302         ; Suppress Register in operand not in bank 0 warning.
#define MAIN_ASM
;
; File:     main.asm
; Date:     2020-05-23
; Target:   PIC16F887
; Author:   dan1138
;
; Description:
;   Decoder for NEC Infrared Remote control protocol.
;
;   Physical transport:
;       Long flash  (> 8ms)
;       Pause       (COMMAND when pause is more than 4ms), 
;                   (REPEAT when pause is less than 4ms but greater than 2ms)
;       Short flash (0.5 to 0.6ms)
;     Repeats 32 times:
;       Pause       DATA is one when pause is more than 1ms, else DATA is zero.
;       Short flash (0.5 to 0.6ms)
;
;
;                         PIC16F887
;                 +----------:_:----------+
;       VPP ->  1 : RE3/MCLR/VPP  PGD/RB7 : 40 <> PGD
;           <>  2 : RA0/AN0       PGC/RB6 : 39 <> PGC
;           <>  3 : RA1/AN1      AN13/RB5 : 38 <>
;           <>  4 : RA2/AN2      AN11/RB4 : 37 <>
;           <>  5 : RA3/AN3   PGM/AN9/RB3 : 36 <> 
;           <>  6 : RA4/T0CKI     AN8/RB2 : 35 <> 
;           <>  7 : RA5/AN4      AN10/RB1 : 34 <> 
;           <>  8 : RE0/AN5  INT/AN12/RB0 : 33 <> IR_RECEIVERn
;           <>  9 : RE1/AN6           VDD : 32 <- 5v0
;           <> 10 : RE2/AN7           VSS : 31 <- GND
;       PWR -> 11 : VDD               RD7 : 30 -> LCD_ON
;       GND -> 12 : VSS               RD6 : 29 -> LCD_E
;           -> 13 : RA7/OSC1          RD5 : 28 -> LCD_RW
;           <- 14 : RA6/OSC2          RD4 : 27 -> LCD_RS
;           <> 15 : RC0/SOSCO   RX/DT/RC7 : 26 <>    
;           <> 16 : RC1/SOSCI   TX/CK/RC6 : 25 <>    
;           <> 17 : RC2/CCP1          RC5 : 24 <>
;           <> 18 : RC3/SCL       SDA/RC4 : 23 <>    
;    LCD_D4 <> 19 : RD0               RD3 : 22 <> LCD_D7
;    LCD_D5 <> 20 : RD1               RD2 : 21 <> LCD_D6
;                 +-----------------------:
;                          DIP-40
;
; Include Special Function Register definitions
;
#include "p16f887.inc"
#include "main.inc"
#include "lcd.inc"
;
; PIC16F887 Configuration Bit Settings
; Assembly source line config statements
;
 __CONFIG _CONFIG1, _FOSC_INTRC_NOCLKOUT & _WDTE_OFF & _PWRTE_OFF & _MCLRE_ON & _CP_OFF & _CPD_OFF & _BOREN_OFF & _IESO_ON & _FCMEN_OFF & _LVP_OFF
 __CONFIG _CONFIG2, _BOR4V_BOR21V & _WRT_OFF
;
; Power on reset vector
;
RES_VECT    CODE    0x0000      ; processor reset vector
    pagesel START
    GOTO    START               ; go to beginning of program
;
; Interrupt context save area
;
ISR_DATA    UDATA_SHR
WREG_SAVE   res     1
STATUS_SAVE res     1
PCLATH_SAVE res     1
NEC_IR_State        res 1
NEC_IR_StartFlash   res 1
NEC_IR_CdPause      res 1
;
; Data area for protocol decoder
;
NEC_IR_DATA   UDATA
NEC_IR_RawData      res 4
NEC_IR_Address      res 1
NEC_IR_Command      res 1
NEC_IR_Flags        res 1
#define BIT_NEC_IR_Flags_COMMAND NEC_IR_Flags,0
#define BIT_NEC_IR_Flags_REPEAT  NEC_IR_Flags,1
;
; Interrupt Service Routine
;
ISR_VECT    CODE    0x0004      ; interrgot vector
ISR:
    movwf   WREG_SAVE           ; 
    movf    STATUS,W            ; These register: WREG, STATUS, PCLATH
    movwf   STATUS_SAVE         ; are what, at the minimum, must be saved 
    movf    PCLATH,W            ; and restored on an interrupt.
    movwf   PCLATH_SAVE         ;
    clrf    STATUS              ; Force to memory bank 0
    clrf    PCLATH              ; Force to code page 0
;
; Handle external INT interrupt request
;
    btfsc   INTCON,INTE
    btfss   INTCON,INTF
    goto    INT_End
    bcf     INTCON,INTF
;
; Block flash detection until application loop is done
;
    btfss   BIT_NEC_IR_Flags_COMMAND
    btfsc   BIT_NEC_IR_Flags_REPEAT
    goto    INT_End

    movf    NEC_IR_State,F
    skpz    
    goto    NEC_IR_NextState
;
; Look for initial long flash
;
    clrf    NEC_IR_StartFlash
    clrf    TMR0
    bcf     INTCON,T0IF
MeasureStartFlash:
    btfsc   PORTB,0             ; Skip if flash still on
    goto    EndOfFlash
    btfss   INTCON,T0IF
    goto    MeasureStartFlash
    bcf     INTCON,T0IF
    incfsz  NEC_IR_StartFlash,W
    movwf   NEC_IR_StartFlash
    goto    MeasureStartFlash
EndOfFlash:
    clrf    TMR0
    bcf     INTCON,T0IF
    clrf    NEC_IR_CdPause
    movlw   8
    subwf   NEC_IR_StartFlash,W
    btfss   STATUS,C            ; Skip if count equal or greater than 8 T0IF ticks
    goto    INT_End
;
; Measure pause after flash
;
MeasurePause:
    btfss   PORTB,0             ; Skip if flash still off
    goto    EndOfPause
    btfss   INTCON,T0IF
    goto    MeasurePause
    bcf     INTCON,T0IF
    incfsz  NEC_IR_CdPause,W
    movwf   NEC_IR_CdPause
    goto    MeasurePause
EndOfPause:
    btfss   PORTB,0             ; Skip when flash goes off
    goto    EndOfPause
    clrf    TMR0
    bcf     INTCON,T0IF
    bcf     INTCON,INTF
    movlw   4
    subwf   NEC_IR_CdPause,W
    btfsc   STATUS,C            ; Skip if count less than 4 T0IF ticks
    goto    ReceiveCommandState
    banksel NEC_IR_Flags
    bsf     BIT_NEC_IR_Flags_REPEAT ; Assert this is a REPEAT event
    goto    INT_End
ReceiveCommandState:
    movlw   d'32'
    movwf   NEC_IR_State      ; Advnace to state 32 when we expect ADDRESS/COMMAND data
INT_End:
;
    movf    PCLATH_SAVE,W       ;
    movwf   PCLATH              ; Restore the saved context of the
    movf    STATUS_SAVE,W       ; interrupted execution.
    movwf   STATUS              ;
    swapf   WREG_SAVE,F         ;
    swapf   WREG_SAVE,W         ;
    retfie                      ; Exit ISR and enable the interrupts.
;
; Receive COMMAND or REPEAT event
;
NEC_IR_NextState:
    banksel PORTB
    bcf     STATUS,C
    btfsc   INTCON,T0IF
    bsf     STATUS,C
    banksel NEC_IR_RawData
    rlf     NEC_IR_RawData,F
    rlf     NEC_IR_RawData+1,F
    rlf     NEC_IR_RawData+2,F
    rlf     NEC_IR_RawData+3,F
EndOfBit:
    banksel PORTB
    btfss   PORTB,0             ; Skip when flash goes off
    goto    EndOfBit
    clrf    TMR0
    bcf     INTCON,T0IF
    decf    NEC_IR_State,F
    btfss   STATUS,Z
    goto    INT_End
;
; Validate ADDRESS and COMMAND
;
    banksel NEC_IR_RawData
    comf    NEC_IR_RawData,W
    xorwf   NEC_IR_RawData+1,W
    btfss   STATUS,Z
    goto    INT_End
    comf    NEC_IR_RawData+2,W
    xorwf   NEC_IR_RawData+3,W
    btfss   STATUS,Z
    goto    INT_End

    movf    NEC_IR_RawData+1,W
    movwf   NEC_IR_Command
    movf    NEC_IR_RawData+3,W
    movwf   NEC_IR_Address
    bsf     BIT_NEC_IR_Flags_COMMAND
    goto    INT_End
;
; Initialize the PIC hardware
;
START:
    clrf    INTCON              ; Disable all interrupt sources
    banksel BANK1
    clrf    PIE1
    clrf    PIE2

    movlw   b'01100000'
    movwf   OSCCON              ; Set internal oscillator at 4MHz

    movlw   b'10000001'         ; Pull-ups off, INT edge high to low, WDT prescale 1:1
    movwf   OPTION_REG          ; TMR0 clock edge low to high, TMR0 clock = FCY, TMR0 prescale 1:4
                                ; TIMER0 will assert the overflow flag every 256*4 (1024)
                                ; instruction cycles, with a 4MHz oscilator this ia 1.024 milliseconds.

    movlw   b'11111111'         ;
    movwf   TRISA

    movlw   b'11111111'         ;
    movwf   TRISB

    movlw   b'11111111'         ;
    movwf   TRISC

    movlw   b'11111111'         ;
    movwf   TRISD

    ; Set all ADC inputs for digital I/O
    banksel BANK3
    movlw   b'00000000'
    movwf   ANSEL
    movlw   b'00000000'
    movwf   ANSELH
    banksel BANK2
    clrf    CM1CON0             ; turn off comparator
    clrf    CM2CON0             ; turn off comparator
    banksel BANK1
    movlw   b'00000000'
    movwf   ADCON1
    clrf    VRCON               ; turn off voltage reference
    banksel BANK0
    movlw   b'10000000'
    movwf   ADCON0

    pagesel main
    goto    main
;
; Main data
;
MAIN_DATA   UDATA
RepeatCount res     1
;
; Main application code
;
MAIN_PROG   CODE
; 
; Main application initialization
;
main:
    lcall   OpenXLCD

    movlw   LINE_ONE
    lcall   SetDDRamAddr

    movlw   LOW(LCD_message1)
    movwf   pszLCD_RomStr
    movlw   HIGH(LCD_message1)
    movwf   pszLCD_RomStr+1
    lcall   putrsXLCD

    banksel NEC_IR_Flags
    clrf    NEC_IR_Flags
    clrf    NEC_IR_State
    bcf     BIT_NEC_IR_Flags_COMMAND
    bcf     BIT_NEC_IR_Flags_REPEAT
    bcf     INTCON,INTF
    bsf     INTCON,INTE
    bsf     INTCON,GIE
;
; Application process loop
;
AppLoop:
    movf    NEC_IR_Flags,F      ; Check for event
    btfsc   STATUS,Z            ; Skip if any event bit set
    GOTO    AppLoop             ;

    banksel NEC_IR_Flags
    btfsc   BIT_NEC_IR_Flags_REPEAT ; skip of not a REPEAT event
    goto    IncrementCount
    banksel RepeatCount
    clrf    RepeatCount
;
; Increment repeat count
;
IncrementCount:
    banksel RepeatCount
    incfsz  RepeatCount,W
    movwf   RepeatCount

;
; Show measurement for Start Of Transmission (SOT) flash
;
    movlw   LINE_TWO
    lcall   SetDDRamAddr
    movf    NEC_IR_StartFlash,W
    lcall   PutDecXLCD
;
; Show measurement for pause after SOT flash
;
    movlw   ' '
    lcall   WriteDataXLCD
    movf    NEC_IR_CdPause,W
    lcall   PutDecXLCD
;
; Show decoded ADDRESS and COMMAND
;
    movlw   ' '
    lcall   WriteDataXLCD
    banksel NEC_IR_Address
    movf    NEC_IR_Address,W
    lcall   PutHexXLCD
    banksel NEC_IR_Command
    movf    NEC_IR_Command,W
    lcall   PutHexXLCD
;
; Show REPEAT count
;
    movlw   ' '
    lcall   WriteDataXLCD
    banksel RepeatCount
    movf    RepeatCount,W
    lcall   PutHexXLCD
;
; Clear event flags to enable capture of next event
;
    banksel NEC_IR_Flags
    clrf    NEC_IR_Flags

    lgoto   AppLoop
;
; LCD messages
;
MAIN_CONST   code
LCD_message1:
    dt  "NEC IR Decode v0",0
    END
列表n=0,c=255,r=dec;使.LST文件看起来很好
错误级别-302;禁止操作数中的寄存器不在列组0中警告。
#定义主组件
;
; 文件:main.asm
; 日期:2020-05-23
; 目标:PIC16F887
; 作者:丹1138
;
; 说明:
;   NEC红外遥控协议解码器。
;
;   实际运输:
;       长闪烁(>8ms)
;       暂停(暂停超过4ms时的命令),
;                   (暂停时间小于4ms但大于2ms时重复)
;       短闪光(0.5到0.6ms)
;     重复32次:
;       当暂停时间超过1ms时,暂停数据为1,否则数据为零。
;       短闪光(0.5到0.6ms)
;
;
;                         PIC16F887
;                 +----------:_:----------+
;       VPP->1:RE3/MCLR/VPP PGD/RB7:40 PGD
;             2:RA0/AN0 PGC/RB6:39 PGC
;             3:RA1/AN1 AN13/RB5:38
;             4:RA2/AN2 AN11/RB4:37
;             5:RA3/AN3 PGM/AN9/RB3:36
;             6:RA4/T0CKI AN8/RB2:35
;             7:RA5/AN4 AN10/RB1:34
;             8:RE0/AN5 INT/AN12/RB0:33受托人
;             9:RE1/AN6 VDD:32 LCD_打开
;       GND->12:VSS RD6:29->LCD_E
;           -> 13:RA7/OSC1 RD5:28->LCD\U RW
;            液晶显示器
;            15:RC0/SOSCO RX/DT/RC7:26
;            16:RC1/SOSCI TX/CK/RC6:25
;            17:RC2/CCP1 RC5:24
;            18:RC3/SCL SDA/RC4:23
;    LCD_D4 19:RD0 RD3:22 LCD_D7
;    LCD_D5 20:RD1 RD2:21 LCD_D6
;                 +-----------------------:
;                          DIP-40
;
; 包括特殊功能寄存器定义
;
#包括“p16f887.inc”
#包括“main.inc”
#包括“液晶显示器公司”
;
; PIC16F887配置位设置
; 汇编源代码行配置语句
;
__配置配置1、FOSC、INTRC、NOCLKOUT、WDTE、OFF、PWRTE、MCLRE、ON、CP、OFF、CPD、OFF、BOREN、OFF、IESO、ON、FCMEN、OFF、LVP、OFF
__配置2、\u BOR4V\u BOR21V和\u WRT\u关闭
;
; 上电复位矢量
;
存储代码0x0000;处理器复位向量
寻呼启动
转到开始;转到程序的开头
;
; 中断上下文保存区
;
ISR_数据UDATA_SHR
WREG_保存资源1
状态\保存资源1
PCLATH_保存分辨率1
NEC_IR_状态res 1
NEC\u IR\u启动闪存1
NEC\u IR\u CD暂停分辨率1
;
; 协议解码器的数据区
;
NEC\u IR\u数据UDATA
NEC\u IR\u原始数据资源4
NEC\u IR\u地址res 1
NEC_IR_命令res 1
NEC_IR_标志res 1
#定义位NEC\U IR\U标志\U命令NEC\U IR\U标志,0
#定义位NEC\U IR\U标志\U重复NEC\U IR\U标志,1
;
; 中断服务程序
;
ISR矢量代码0x0004;中间矢量
行业特殊风险:
movwf WREG_SAVE;
movf状态,W;这些寄存器:WREG、STATUS、PCLATH
movwf状态保存;至少必须保存哪些内容
movf-PCLATH,W;并在中断时恢复。
movwf PCLATH_SAVE;
clrf状态;强制存储到内存组0
clrf-PCLATH;强制对第0页进行编码
;
; 处理外部INT中断请求
;
btfsc INTCON,INTE
btfss INTCON,INTF
转到INTU End
bcf INTCON,INTF
;
; 阻止闪光检测,直到应用程序循环完成
;
btfss位NEC IR标志命令
btfsc位\u NEC\u IR\u标志\u重复
转到INTU End
movf NEC_IR_状态,F
skpz
转到NEC_IR_NextState
;
; 寻找最初的长闪光
;
clrf NEC\u IR\u启动闪存
CLRFTMR0
bcf国际公司,T0IF
MeasureStartFlash:
btfsc端口B,0;如果闪存仍处于打开状态,则跳过
后藤
btfss INTCON,T0IF
goto MeasureStartFlash
bcf国际公司,T0IF
incfsz NEC_IR_StartFlash,W
movwf NEC\u IR\u启动闪存
goto MeasureStartFlash
内插灰烬:
CLRFTMR0
bcf国际公司,T0IF
clrf NEC\u IR\u CdPause
movlw 8
subwf NEC\u IR\u启动闪光,W
btfss状态,C;如果计数等于或大于8,则跳过
转到INTU End
;
; 测度p