📄 transmit_a.asm
字号:
MOVLW 0X14
MOVWF EEADR
CALL EE_WRITEBYTE
BSF STATUS,RP0
MOVLW 0X44
MOVWF EEADR
CALL EE_WRITEBYTE
BSF STATUS,RP0
MOVLW 0X15
MOVWF EEADR
MOVF EE_REMAIN_DATA,0
MOVWF WR_DATA
CALL EE_WRITEBYTE
BSF STATUS,RP0
MOVLW 0X45
MOVWF EEADR
CALL EE_WRITEBYTE
BSF STATUS,RP0
MOVLW 0X16
MOVWF EEADR
MOVF EE_CRC_DATA,0
MOVWF WR_DATA
CALL EE_WRITEBYTE
BSF STATUS,RP0
MOVLW 0X46
MOVWF EEADR
CALL EE_WRITEBYTE
BCF STATUS,RP0
RETURN
WIRTE_IDLOW:
BCF STATUS,RP0 ;BANK0
MOVF ID_CODE_L,0
BSF STATUS,RP0
MOVWF WR_DATA
CALL REMAIN_DATA ;GET REMAIN DATA AND CRC DATA
BSF STATUS,RP0
MOVLW 0X17
MOVWF EEADR
CALL EE_WRITEBYTE
BSF STATUS,RP0
MOVLW 0X47
MOVWF EEADR
CALL EE_WRITEBYTE
BSF STATUS,RP0
MOVLW 0X18
MOVWF EEADR
MOVF EE_REMAIN_DATA,0
MOVWF WR_DATA
CALL EE_WRITEBYTE
BSF STATUS,RP0
MOVLW 0X48
MOVWF EEADR
CALL EE_WRITEBYTE
BSF STATUS,RP0
MOVF EE_CRC_DATA,0
MOVLW 0X19
MOVWF EEADR
MOVF EE_CRC_DATA,0
MOVWF WR_DATA
CALL EE_WRITEBYTE
BSF STATUS,RP0
MOVLW 0X49
MOVWF EEADR
CALL EE_WRITEBYTE
BCF STATUS,RP0
RETURN
WRITE_SQUENCE:
BCF STATUS,RP0 ;BANK0
MOVF SQUENCE_CODE,0
BSF STATUS,RP0
MOVWF WR_DATA
MOVLW 0X21
MOVWF EEADR
CALL EE_WRITEBYTE
BSF STATUS,RP0
MOVLW 0X51
MOVWF EEADR
CALL EE_WRITEBYTE
BCF STATUS,RP0
RETURN
WRITE_SYSMBOL:
BCF STATUS,RP0
MOVF SYSMBOL_CODE,0
BSF STATUS,RP0
MOVWF WR_DATA
MOVLW 0X61
MOVWF EEADR
CALL EE_WRITEBYTE
BSF STATUS,RP0
MOVLW 0X71
MOVWF EEADR
CALL EE_WRITEBYTE
BCF STATUS,RP0
RETURN
;*--------------EEPROM READ SUBROUTINE------------*
EE_READBYTE: ;read 1byte data from eeprom
BSF STATUS,RP0 ;change to bank0
MOVLW 0X03
MOVWF EE_COUNT ;perbyte must third read
EE_READ:
;bsf STATUS,RP0 ;Bank 1
MOVF RD_EE_ADDR,0 ;RD
movwf EEADR ;Address to read
bsf EECON1,RD ;EE Read
BCF EECON1,WREN ;WRITE disable
movf EEDAT,W ;Move data to W
MOVWF RD_DATA
;BCF STATUS,RP0 ;change to bank0
DECFSZ EE_COUNT,1 ;decide have read third?
GOTO NEXT_COUNTINUE
GOTO DECIDE_RD_DATA
NEXT_COUNTINUE:
BTFSC EE_COUNT,1 ;decide EE_COUNT is 2?
GOTO BIT2_IS_0
MOVWF RD_DATA2
GOTO EE_READ
BIT2_IS_0:
MOVWF RD_DATA1
GOTO EE_READ
DECIDE_RD_DATA:
MOVF RD_DATA,0
XORWF RD_DATA1,0
BTFSS STATUS,Z ;if equal 0 next instruction is nop
GOTO COMPARE_DATA2
RETURN
COMPARE_DATA2:
MOVF RD_DATA,0
IORWF RD_DATA2,0
BTFSC STATUS,Z
GOTO COMPARE_DATA1_2
RETURN
COMPARE_DATA1_2:
MOVF RD_DATA1,0
IORWF RD_DATA2,0
BTFSC STATUS,Z
GOTO EE_READBYTE
MOVF RD_DATA1,0
MOVWF RD_DATA
RETURN
READ_DATA:
BSF STATUS,RP0 ;BANK1
MOVWF RD_EE_ADDR
CALL EE_READBYTE
MOVF RD_DATA,0
MOVWF EE_RDTEMP
INCF RD_EE_ADDR,1 ;EEPROM ADDRESS +1 remain data
CALL EE_READBYTE
MOVF RD_DATA,0
MOVWF EE_RDTEMP1 ;save remain data
INCF RD_EE_ADDR,1 ;eeprom address+1 crc data
CALL EE_READBYTE
MOVF RD_DATA,0
MOVWF EE_RDTEMP2
BCF STATUS,C
RLF EE_RDTEMP2,1
BCF STATUS,C
RLF EE_RDTEMP1,1 ;LEFT SHIFT 1 BIT
RLF EE_RDTEMP1,1 ;LEFT SHIFT 1 BIT
MOVF EE_RDTEMP1,0
ADDWF EE_RDTEMP2,0 ;EE_TEMP1+EE_TEMP2(REMAIN DATA+CRC DATA)
XORWF EE_RDTEMP,0 ;decide (source data=remain data+crc data?)
BTFSC STATUS,Z
GOTO READ_SUCCEED
MOVLW 0X2E
ADDWF EEADR,1
MOVWF RD_EE_ADDR
CALL EE_READBYTE
MOVF RD_DATA,0
MOVWF EE_RDTEMP
INCF RD_EE_ADDR,1 ;EEPROM ADDRESS +1 remain data
CALL EE_READBYTE
MOVF RD_DATA,0
MOVWF EE_RDTEMP1 ;save remain data
INCF RD_EE_ADDR,1 ;eeprom address+1 crc data
CALL EE_READBYTE
MOVF RD_DATA,0
MOVWF EE_RDTEMP2
BCF STATUS,C
RLF EE_RDTEMP2,1
BCF STATUS,C
RLF EE_RDTEMP1,1 ;LEFT SHIFT 1 BIT
RLF EE_RDTEMP1,1 ;LEFT SHIFT 1 BIT
MOVF EE_RDTEMP1,0
ADDWF EE_RDTEMP2,0 ;EE_TEMP1+EE_TEMP2(REMAIN DATA+CRC DATA)
IORWF EE_RDTEMP,0 ;decide (source data=remain data+crc data?)
BTFSS STATUS,Z
GOTO READ_SUCCEED
BCF STATUS,RP0
BSF FLAG,EE_FLG_ERROR
RETURN
READ_SUCCEED:
BCF STATUS,RP0
BCF FLAG,EE_FLG_ERROR
RETURN
READ_IDCODE:
BSF STATUS,RP0
MOVLW 0X11 ;READ ID CODE HIGH 8BTI
CALL READ_DATA
MOVF EE_RDTEMP,0
BCF STATUS,RP0
MOVWF ID_CODE_H ;SAVE TO HIGH REGISTER
BSF STATUS,RP0
MOVLW 0X14 ;READ ID CODE MIDDLE 8BIT
CALL READ_DATA
MOVF EE_RDTEMP,0
BCF STATUS,RP0
MOVWF ID_CODE_MID ;SAVE TO MIDDLE REGISTER
BSF STATUS,RP0
MOVLW 0X17 ;READ ID CODE LOW 8BIT
CALL READ_DATA
MOVF EE_RDTEMP,0
BCF STATUS,RP0
MOVWF ID_CODE_L ;SAVE TO LOW REGISTER
RETURN
READ_SQUENCE:
BSF STATUS,RP0 ;BANK1
MOVLW 0X21
MOVWF RD_EE_ADDR
CALL EE_READBYTE
MOVF RD_DATA,0
MOVWF EE_RDTEMP
MOVLW 0X51
MOVWF RD_EE_ADDR
CALL EE_READBYTE
MOVF RD_DATA,0
MOVWF EE_RDTEMP1
MOVF EE_RDTEMP1,0
XORWF EE_RDTEMP,0
BTFSC STATUS,Z
GOTO END_SQUEN
MOVF EE_RDTEMP,0
BCF STATUS,RP0
MOVWF SQUENCE_CODE
BSF FLAG,EE_FLG_ERROR
RETURN
END_SQUEN:
MOVF EE_RDTEMP,0
BCF STATUS,RP0
MOVWF SQUENCE_CODE
RETURN
READ_SYSMBOL:
BSF STATUS,RP0 ;BANK1
MOVLW 0X61
MOVWF RD_EE_ADDR
CALL EE_READBYTE
MOVF RD_DATA,0
MOVWF EE_RDTEMP
MOVLW 0X71
MOVWF RD_EE_ADDR
CALL EE_READBYTE
MOVF RD_DATA,0
MOVWF EE_RDTEMP1
MOVF EE_RDTEMP1,0
XORWF EE_RDTEMP,0
BTFSC STATUS,Z
GOTO END_SQUEN1
MOVF EE_RDTEMP,0
BCF STATUS,RP0
MOVWF SQUENCE_CODE
BSF FLAG,EE_FLG_ERROR
RETURN
END_SQUEN1:
MOVF EE_RDTEMP,0
BCF STATUS,RP0
MOVWF SQUENCE_CODE
RETURN
;*------------INTERRUPT SUBROUTINE-----------------*
INT_ADDRESS: ;interruption subroutine
movwf w_temp ; save off current W register contents
movf STATUS,w ; move status register into W register
movwf status_temp ; save off contents of STATUS register
MOVF PCLATH,W
MOVWF PCLATH_TEMP
BTFSS PIR1,INTF ;decide whether it is sp12 wakeup
GOTO DECIDE_TIM0 ;is not external interruption
BSF FLAG,FLG_INTF ;set interrupt flag
BCF PIR1,INTF ;clear this interrupt symbol
DECIDE_TIM0:
BTFSS INTCON,T0IF ;decide timer0 interruption's flag have set?
GOTO DECIDE_TIME1
BCF INTCON,T0IF
MOVLW 0XF0
MOVWF TMR0
INCF TIMER0_COUNT,1
MOVLW 0X50
SUBWF TIMER0_COUNT,0
BTFSS STATUS,C
GOTO INT_RETURN
CLRF TIMER0_COUNT
BSF FLAG,KEY_PRESSED
BSF FLAG,SECOND_SY
INCF TIMER0_COUN1,1
MOVLW 0XFE
SUBWF TIMER0_COUN1,0
BTFSS STATUS,C
GOTO INT_RETURN
CLRF TIMER0_COUN1
INCF TIMER0_COUN2,1
MOVLW 0X8D
SUBWF TIMER0_COUN2,0
BTFSS STATUS,C
GOTO INT_RETURN
BSF FLAG,HOUR2_SY
CLRF TIMER0_COUN2
GOTO INT_RETURN
DECIDE_TIME1:
BTFSS PIR1,TMR1IF ;DECIDE TIMER1 INTERRUPT
GOTO INT_RETURN ;is not timer1 interrupt
BCF PIR1,TMR1IF ;is timer1 interrupt
MOVLW 0XEC ;SET TIMER1 INTERRUPTION 10MS
MOVWF TMR1H
MOVLW 0X77
MOVWF TMR1L
MOVLW 0X10
MOVWF T1CON
INT_RETURN:
MOVF PCLATH_TEMP,W
MOVWF PCLATH
movf status_temp,w ; retrieve copy of STATUS register
movwf STATUS ; restore pre-isr STATUS register contents
swapf w_temp,f
swapf w_temp,w ; restore pre-isr W register contents
retfie ; return from interrupt
END ; directive 'end of program'
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -