📄 写入原程序.txt
字号:
;写入N字节数据程序
;把N个字节数据写入起始地址为ADDR的EEPROM内。
;(待写入字节数不得大于EEPROM的页容量。)
;********************************************
B_COUNT EQU 08H ;字节计数寄存器
DIGITS EQU 0AH ;需写入的字节数
ADDR EQU 0BH ;待写入的数据的首地址
SLAVE EQU 0CH ;EEPROM的IIC总线地址(1010 A2 A1 A0 0)
DATA0 EQU 10H ;写入数据的寄存器0
DATA1 EQU 11H ;X
~~~~~~
DATAn EQU 1XH ;写入数据的寄存器n
WR
MOVLW DIGITS ;设计写入的字节数
MOVWF B_COUNT
MOVLW SLAVE ;把受控器件的IIC总线地
MOVWF TXBUF ;址存入发送缓冲寄存器
CALL BSTART ;发送开始命令
CALL TX ;发送受控器件的IIC总线地址
MOVFW ADDR
MOVWF TXBUF ;
CALL TX ;发送写入启始地址
MOVLW DATA0 ;设计写入数据指针
MOVWF FSR
WR0
MOVFW 0H ;用间址寻址方法取出待写入
MOVWF TXBUF ;的数据的发送缓冲寄存器
CALL TX ;写入一字节数据
INCF FSR ;指针指向下一个数据
DECFSZ B_COUNT ;是否全部发送完?
GOTO WR0
CALL BSTOP ; 发出结束命令
END
;**********************************************
;读出N字节数据程序:
;从EEPROM中连续读出N字节。
;**********************************************
DIGITS EQU 0AH ;需写入的字节数
ADDR EQU 0BH ;待写入的数据的首地址
SLAVE EQU 0CH ;EEPROM的IIC总线地址(1010 A2 A1 A0 0)
DATA0 EQU 10H ;写入数据的寄存器0
~~~~
DATAn EQU 1XH ;写入数据的寄存器
RD
MOVLW DIGITS
MOVWF B_COUNT ;设计读出数据字节
MOVLW SLAVE
MOVWF TXBWF ;放入受控IIC总线地址
CALL BSTART ;发送开始命令
CALL TX ;发送IIC总线地址
MOVFW ADDR
CALL TX
MOVFW ADDR
MOWF TXBUF ;发送待读出数据
CALL TX ;的起始地址
MOVLW SLAVE
MOVWF TUBUF
BSF TXBUF,0 ;设置"读"命令
CALL BSTART ;发出开始命令
CALL TX ;发送"读"命令
MOVLW DATA0 ;设置读出数据
MOVWF FSR ;存储区起始指针
RD0
CALL RX ;读一字节数据
MOVFW RXBUF
MOVWF 0H ;存入寄存器
INCF FSR
DECFSZ R_COUNT
GOTO RD0
CALL BSTOP
END
;*******************************************************
;发送数据子程序
;*******************************************************
TXBUF EQU 1CH
TX MOVLW 8
MOVWF COUNT
TXLP
MOVLW B'00111111'
TRIS RB
BCF EEPROM,D0 ;确定发
BTFSC TXBUF,7 ;送数据
BSF EEPROM,D0
CALL BITOUT ;串行数据输出
BCF 3,0
RLF TXBUF ;移位,准备发送下一个数据
DECFSZ COUNT ;是否发完一字节
GOTO TXLP
CALL BITIN ;接收认可信号
RETLW 0
END SUB
;************************************************************
;接受数据子程序
:************************************************************
RXBUF EQU 1DH ;接收数据寄存器
RX
MOVLW 8 ;设置字节长度
MOVWF COUNT
CLRF RXBUF
RXLP
CALL BITIN
BTFSC EEPROM,DI
BSF RXBUF,0
BCF 3,0
RLF RXBUF
DECFSZ COUNT
GOTO RXLP
BSF EEPROM,D0
CALL BITOUT
RETLW 0
END SUB
;*************************************************************
;PIC发送一位数据给EEPROM
;*************************************************************
BITOUT
MOVLW B'00111111' ;设RB,SDA
TRIS RB ;RB,SCL为输出
BTFSS EEPROM,D0 ;状态
GOTO BITO ;确定待发送
BSF RB,SDA ;位状态
NOP
GOTO CLK1
BITO
BCF RB.SDA
NOP
NOP
CLK1
BSF RB,SCL
NOP
NOP
NOP
NOP
BCF RB,SCL
RETLW 0
END SUB
;************************************************************
;从EEPROM中读出1位数据
;************************************************************
BIGIN
MOVLW B'101111111' ;RB,SDA为输出端
TRIS RB
BCF EEPROM,DI
BSF RB,SCL ;时钟置"1"
NOP
BTFSC RB,SDA ;读SDA
BSF EEPROM,DI
NOP
BCF RB,SCL ;时钟"0"
RETLW 0H
END SUB
;*************************************************************
;"开始命令"程序
;*************************************************************
BSTART
MOVLW B'00111111' ;置SCL,
TRIS RB ;SDA为输出状态
BSF RB,SCL
NOP
NOP
NOP
BCF RB,SDA ;发出"开始"命令
NOP
NOP
NOP
BCF RB,SCL
RETLW 0
;*************************************************************
;"停止"命令发送子程序
;*************************************************************
BSTOP
BCF RB,SDA
NOP
NOP
NOP
BSF TB,SCL
NOP
NOP
NOP
BSF RB,SDA ;发出"停止"命令
RETLW 0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -