⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 写入原程序.txt

📁 写入N字节数据程序 把N个字节数据写入起始地址为ADDR的EEPROM内
💻 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 + -