📄 shibiema.asm
字号:
BSF FANGYA,0
GOTO BACKSHI2
BACKSHI2_BUDING
BACKSHI2
RETURN
;=====================================
;一区关的情况下检测2区有无关闭,然后做出判断
;=====================================
;SHUNXU_CLOSE1
;===============================
;BTFSS LAG_FA,2
;GOTO OPEN_2
;BCF LAG_FA,7 ;2 XIAN CLOSE
;RETURN
;OPEN_2
; BSF LAG_FA,7 ;2 HOU CLOSE
;RETURN
;======================================================
;=====================================
;2区关的情况下检测1区有无关闭,然后做出判断
;=====================================
;SHUNXU_CLOSE2
;===============================
;BTFSS LAG_FA,1
;GOTO OPEN_1
;BSF LAG_FA,7 ;2 HOU CLOSE
;RETURN
;OPEN_1
;BCF LAG_FA,7 ;2 XIAN CLOSE
;RETURN
;##################################&&&&&&&&&&&$$$$$$$$$@@@@@@@@@@@@@@@!!!!!!!!!!!!!
CHENGJI
MOVLW .51
SUBWF ADRES,1
BTFSS STATUS,0
CLRF ADRES
CLRF H_B
CLRF L_B
MOVLW 8
MOVWF BIT
MOVF CHUNG,W
;MOVLW .99
BCF STATUS,0
CLOOP
RRF ADRES
BTFSC STATUS,0
ADDWF H_B
RRF H_B
RRF L_B
DECFSZ BIT
GOTO CLOOP
CHU
MOVLW 00H
MOVWF CHUH
MOVLW .204
MOVWF CHUL
CHUZI CLRF SHANGH
CLRF SHANGL
CALL DIVYIWEI
CLRF YUH
CLRF YUL
DIVLOOP BCF STATUS,0
RLF P1L
RLF P1H
RLF YUL
RLF YUH
MOVF CHUH,W
SUBWF YUH ,W
BTFSS STATUS,2
GOTO ASP
MOVF CHUL,W
SUBWF YUL,W
ASP BTFSS STATUS,0
GOTO PUP
MOVF CHUL,W
SUBWF YUL
BTFSS STATUS,0
DECF YUH
MOVF CHUH,W
SUBWF YUH
BSF STATUS,0
PUP RLF L_B
RLF H_B
DECFSZ BIT
GOTO DIVLOOP
MOVF H_B,W
MOVWF SHANGH
MOVF L_B,W
MOVWF SHANGL
RETLW 0
DIVYIWEI
MOVLW .16
MOVWF BIT
MOVF H_B,W
MOVWF P1H
MOVF L_B,W
MOVWF P1L
CLRF H_B
CLRF L_B
RETLW 0
CHU5
MOVLW 00H
MOVWF CHUH
MOVLW .11
MOVWF CHUL
MOVF 2FH,W
MOVWF H_B
MOVF 2EH,W
MOVWF L_B
CALL CHUZI
RETURN
;##########$$$$$$$$$$$$$@@@@@@@@@@@@@@@@@%%%%%%%%%%%%%%%
WRBYTES
CLRF FLAG
MOVWF FSR ;源数据地址送F4
MOVLW 0A0H
MOVWF TXBUF ;从机器地址送TXBUF
CALL BSTART ;发送开始条件
CALL TX ;发送从机器地址
MOVF ADDR,W ;发送要写入的24L01的起始地址
MOVWF TXBUF
CALL TX
WRLOOP
MOVF 0,W
MOVWF TXBUF ;把主机的数据先放到TXBUF中去
CALL TX ;把一个字节数据写到24L01
INCF FSR,1
DECFSZ NUMBER, 1 ;已写入N个字节
GOTO WRLOOP
CALL BSTOP
RETLW 0
;**********************************
RDBYTES
MOVWF FSR ;目标数据地址送FSR
MOVLW 0A0H
MOVWF TXBUF ;从设备地址送TXBUF
CALL BSTART ;发送开始条件
CALL TX ;发送从机器地址
MOVF ADDR,W ;发送要读入数据的起始地址
MOVWF TXBUF
CALL TX
CALL BSTART ;发送开始命令
MOVLW 0A1H
MOVWF TXBUF
CALL TX ;发送读控制信号
RDLOOP
CALL RX
MOVF RXBUF,W ;从2401中读出一字节给RXBUF
MOVWF 0 ;再送给主机的寄存器
INCF FSR,1
DECFSZ NUMBER ,1 ;已读完N个字节
GOTO LOWACK ;否,发出应答信号
BSF STATUS,RP0
MOVLW B'00000000'
MOVWF TRISD
BCF STATUS,RP0
NOP
BSF RD,SDA
BCF RD,SCL
NOP
BSF RD,SCL
CALL BSTOP
RETLW 0
LOWACK
BSF STATUS,RP0
MOVLW B'00000000'
MOVWF TRISD
BCF STATUS,RP0
NOP
BCF RD,SDA ;SDA输出低电瓶,发出应答信号
NOP
BSF RD,SCL
NOP
BCF RD,SCL
GOTO RDLOOP ;读下一个字节
;*************开始*********************
BSTART
BSF STATUS,RP0
MOVLW B'00000000'
MOVWF TRISD
BCF STATUS,RP0
NOP
NOP
NOP
NOP
NOP
BSF RD,SDA ;
BSF RD,SCL ;同为高电平
NOP
NOP
NOP
NOP
BCF RD,SDA ;在SCL=1时产生下降沿
NOP
NOP
NOP
NOP
BCF RD,SCL
RETLW 0
;************* 写一个字节数据 *********************
TX
MOVLW 08H
MOVWF CNT ;一字节8
TXLP
BCF FLAG,0
BTFSC TXBUF,7
BSF FLAG,0
BSF STATUS,RP0
MOVLW B'00000000'
MOVWF TRISD
BCF STATUS,RP0
NOP
BTFSS TXBUF,7 ;从第七位开始送数据,从高到低.
GOTO TX0
BSF RD,SDA
GOTO TX1
TX0 BCF RD,SDA ;根据缓冲器的第7位去写RB,SDA
TX1 NOP
BCF RD,SCL
NOP
NOP
NOP
NOP
NOP
BSF RD,SCL ;SCL产生一上升沿,发送一位数据
NOP
NOP
BCF RD,SCL
RLF TXBUF,1
DECFSZ CNT ,1 ;发送8次???一个字节是否发送完??
GOTO TXLP ;否,发送下一位.
BSF STATUS,RP0
MOVLW B'00001000' ;RB7变输入态.
MOVWF TRISD
BCF STATUS,RP0
NOP
ACK NOP
BCF RD,SCL
NOP
NOP
NOP
BSF RD,SCL
NOP
NOP
BTFSC RD,SDA ;检测是否受到从机发来响应信号.
GOTO ACK
BCF RD,SCL
RETLW 0
;**************结束********************
BSTOP
BSF STATUS,RP0
MOVLW B'00000000';
MOVWF TRISD
BCF STATUS,RP0
NOP
BCF RD,SDA
BSF RD,SCL
NOP
NOP
NOP
BSF RD,SDA ;SDA产生上升沿,操作结束.
NOP
NOP
NOP
NOP
NOP
BCF RD,SCL
NOP
RETLW 0
;**************读一个字节数据********************
RX
MOVLW 08H
MOVWF CNT ;共8位.
CLRF RXBUF
BSF STATUS,RP0
MOVLW B'00001000'
MOVWF TRISD
BCF STATUS,RP0
NOP
RXLP
BSF RD,SCL ;**&&&&&&&&&
BCF STATUS,0
NOP
NOP
NOP
NOP
NOP
BTFSC RD,SDA
BSF STATUS,0 ;否,1 to C ,是,C中仍为0
RLF RXBUF,1 ;C移入RXBUF.
BCF RD,SCL
DECFSZ CNT,1
GOTO RXLP ;一个字节未完,继续.
RETLW 0
;**********************************
ROMW
MOVF BUF,W
MOVWF BUFFER1
MOVF ZUF,W
MOVWF BUFFER1+1
MOVF BMAX,W
MOVWF BUFFER1+2
MOVF BMIN,W
MOVWF BUFFER1+3
MOVLW 4 ;将BUFFER1开始的四字节数据写入24C01的10H-13H
MOVWF NUMBER ;buffer1为40H,BUFFER+3为43H
MOVLW 10H ;ROM中的地址
;MOVLW 22H
MOVWF ADDR
MOVLW BUFFER1
CALL WRBYTES
RETLW 0
;*************************************
ROMR
MOVLW 4 ;将24C01的10H-13H存放的数据读入BUFFER1开始四字节中
MOVWF NUMBER
MOVLW 10H
;MOVLW 22H
MOVWF ADDR
MOVLW BUFFER1
CALL RDBYTES
MOVF BUFFER1,W
MOVWF BUF
MOVF BUFFER1+1,W
MOVWF ZUF
MOVF BUFFER1+2,W
MOVWF BMAX
MOVF BUFFER1+3,W
MOVWF BMIN
RETLW 0
;&&&&&$$$$$$$$$$$$$$$$$$$
SERVE
MOVF BUF,W
SUBWF BUF_B,0
BTFSS STATUS,2
GOTO FUBUF
MOVF ZUF,W
SUBWF ZUF_B,0
BTFSS STATUS,2
GOTO FUZUF
MOVF BMAX,W
SUBWF BMAX_B,0
BTFSS STATUS,2
GOTO XIE1
MOVF BMIN,W
SUBWF BMIN_B,0
BTFSS STATUS,2
GOTO XIE2
MOVF HOUR,W
SUBWF HOUR_BUF,0
BTFSS STATUS,2
GOTO XIE_HOUR
MOVF TIAN,W
SUBWF TIAN_BUF,0
BTFSS STATUS,2
GOTO XIE_TIAN
;MOVF MINUTE,W ;分钟不保存
;SUBWF MINUTE_BUF,0
;BTFSS STATUS,2
;GOTO XIE_MINUTE
RETLW 0
FUBUF
MOVF BUF,W
MOVWF BUF_B
CALL ROMW
RETLW 0
FUZUF
MOVF ZUF,W
MOVWF ZUF_B
CALL ROMW
RETLW 0
XIE1
MOVF BMAX,W
MOVWF BMAX_B
CALL ROMW
RETLW 0
XIE2
MOVF BMIN,W
MOVWF BMIN_B
CALL ROMW
RETLW 0
XIE_HOUR
MOVF HOUR,W
MOVWF HOUR_BUF
CALL ROMW_TIME
RETLW 0
XIE_TIAN
MOVF TIAN,W
MOVWF TIAN_BUF
CALL ROMW_TIME
RETLW 0
;XIE_MINUTE
;MOVF MINUTE,W
;MOVWF MINUTE_BUF
;CALL ROMW_TIME
;RETLW 0
;_________________________________
ROMW_TIME
MOVLW 2 ;分钟不保存;将TIAN开始的2字节数据写入24C01的20H-21H
MOVWF NUMBER ;
MOVLW 25H ;ROM中的地址
MOVWF ADDR
MOVLW TIAN
CALL WRBYTES
RETLW 0
;_________________________________
ROMR_TIME
MOVLW 2 ;将24C01的20H-21H存放的数据读入TIAN开始2字节中
MOVWF NUMBER
MOVLW 25H
MOVWF ADDR
MOVLW TIAN
CALL RDBYTES
MOVF TIAN,W
MOVWF TIAN_BUF
MOVF HOUR,W
MOVWF HOUR_BUF
;MOVF MINUTE,W
;MOVWF MINUTE_BUF
RETLW 0
;==================================
SHIBIEMA_R
MOVLW 1 ;将24C01的50H存放的数据读入BUFFER1开始1字节中
MOVWF NUMBER
MOVLW 50H
MOVWF ADDR
MOVLW BUFFER1
CALL RDBYTES
MOVF BUFFER1,W
BANKSEL SHIBIEMA
MOVWF SHIBIEMA
RETLW 0
;_________________________________
FILL (NOP),YUAN-$
ORG 0FFEH
YUAN
PAGESEL ZIDONG
GOTO ZIDONG
;**********************************
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -