《電子技術應用》
您所在的位置:首頁 > 通信與網絡 > 設計應用 > PIC16C74B單片機與AT24C64通訊
PIC16C74B單片機與AT24C64通訊
互聯網
摘要: ;=======================================;PIC16C74B單片機與AT24C64通訊;該程序實現的功能是:;將I...
關鍵詞: 51單片機 MCU
Abstract:
Key words :
;=======================================        
;PIC16C74B單片機與AT24C64通訊
;該程序實現的功能是:
;將I2C_A,I2C_B.....I2C_K內容寫入EEPROM中
;同時在EEPROM中讀出數據從新寫入各個寄存器
;=======================================
        LIST  P=16C74B
        #include
        ERRORLEVEL  -302
I2C_A    EQU      0X20    
I2C_B    EQU      0X21
I2C_C    EQU      0X22
I2C_D    EQU      0X23
I2C_E    EQU      0X24
I2C_F    EQU      0X25
I2C_G    EQU      0X26    
REG1     EQU      0X2B
REG2     EQU      0X2C
COUNT    EQU      0X71            ;I2C
BCOUNT   EQU      0X72            ;I2C
TXBUF    EQU      0X73            ;I2C
RXBUF    EQU      0X74            ;I2C
BUSCON   EQU      0X75            ;I2C
BUSSTA   EQU      0X76            ;I2C
I2CBUF   EQU      0X77            ;I2C
SLAVEADDR        EQU    0XA0      ;I2C
DATAADDRH        EQU    0X01      ;I2C
DATAADDRL        EQU    0X00      ;I2C
;---------------------------------------    
;BUSCON
;---------------------------------------    
SLAVE_RW        EQU       7
LAST_BYTE_RX    EQU       6
SLAVE_ACTIVE    EQU       5
TIME_OUT        EQU       4
;---------------------------------------    
;BUSSTA
;---------------------------------------
BUS_BUSY          EQU       7
TX_PROGRESS       EQU       6
RX_PROGRESS       EQU       5
TX_SUCCESS        EQU       4
RX_SUCCESS        EQU       3
FATAL_ERROR       EQU       2    ;SLAVE EEPROM 
ABORT             EQU      1
ACK_ERROR         EQU       0
;---------------------------------------
R_NOT_W  EQU       0           
TRUE     EQU       1
FALSE    EQU       0
SDA      EQU     0X04            ;I2C
SCL      EQU     0X03            ;I2C
;=======================================
        ORG     0X00
        GOTO    START
        ORG     0X20
START   BCF     STATUS,RP1
        BCF     STATUS,RP0
        CLRF    RA
        CLRF    RB
        CLRF    RC
        CLRF    RD
        CLRF    RE      
        BSF     STATUS,RP0
        CLRF    TRISA
        CLRF    TRISB                      
        CLRF    TRISC
        CLRF    TRISD
        CLRF    TRISE
        MOVLW   0X02
        MOVWF   I2C_A
        MOVLW   0X04
        MOVWF   I2C_B
        MOVLW   0X03
        MOVWF   I2C_C
        MOVLW   0X03
        MOVWF   I2C_D
        MOVLW   0X05
        MOVWF   I2C_E
        MOVLW   0X06
        MOVWF   I2C_F
        MOVLW   0X04
        MOVWF   I2C_G
;=======================================        
START1  
        CALL   I2CBUS_INIT
        CALL   REGTOI2CBUF
        CALL   I2CWRITE
        CALL   CLRI2CBUF
        CALL   D10
        CALL   I2CREAD      
        CALL   I2CBUFTOREG
        GOTO   START1
;=======================================    
;CLRI2CBUF
;---------------------------------------
CLRI2CBUF
        BCF        STATUS,RP0
        MOVLW      I2CBUF
        MOVWF      FSR
        MOVLW      0X08
        MOVWF      COUNT
CLRLOOP CLRF       INDF
        INCF       FSR,F
        DECFSZ     COUNT,F
        GOTO       CLRLOOP
        RETURN
;---------------------------------------    
;將各個REGSTER數據寫入 I2CBUF 緩沖區
;---------------------------------------
REGTOI2CBUF
        BCF        STATUS,RP0
        MOVLW      I2CBUF
        MOVWF      FSR
        MOVF       I2C_A,W
        MOVWF      INDF
        INCF       FSR,F
        MOVF       I2C_B,W
        MOVWF      INDF
        INCF       FSR,F
        MOVF       I2C_C,W
        MOVWF      INDF
        INCF       FSR,F
        MOVF       I2C_D,W
        MOVWF      INDF
        INCF       FSR,F
        MOVF       I2C_E,W
        MOVWF      INDF
        INCF       FSR,F
        MOVF       I2C_F,W
        MOVWF      INDF
        INCF       FSR,F
        MOVF       I2C_G,W
        MOVWF      INDF
        RETURN
;---------------------------------------
;將 I2CBUF 緩沖區數據寫入各個REGSTER 
;---------------------------------------        
I2CBUFTOREG
        BCF        STATUS,RP0
        MOVLW      I2CBUF
        MOVWF      FSR
        MOVF       INDF,W
        MOVWF      I2C_A
        INCF       FSR,F
        MOVF       INDF,W
        MOVWF      I2C_B
        INCF       FSR,F
        MOVF       INDF,W
        MOVWF      I2C_C
        INCF       FSR,F
        MOVF       INDF,W
        MOVWF      I2C_D
        INCF       FSR,F
        MOVF       INDF,W
        MOVWF      I2C_E
        INCF       FSR,F
        MOVF       INDF,W
        MOVWF      I2C_F
        INCF       FSR,F
        MOVF       INDF,W
        MOVWF      I2C_G
        RETURN
;=======================================    
;將I2CBUF緩沖區內的數據寫入EEPROM
;=======================================
I2CWRITE
        CALL       I2CSTART
        BTFSS      BUSSTA,BUS_BUSY
        GOTO       TX_FAIL
        BCF        BUSCON,SLAVE_RW
        CALL       TX_SLAVE_ADDR
        BTFSS      BUSSTA,TX_SUCCESS    ;SUCESSFULL?
        GOTO       TX_FAIL
        CALL       TX_DATA_ADDR
        BTFSS      BUSSTA,TX_SUCCESS
        GOTO       TX_FAIL
        MOVLW      I2CBUF
        MOVWF      FSR
        MOVLW      07
        MOVWF      COUNT
T_BYTE_LOOP
        MOVF       INDF,W
        MOVWF      TXBUF
        CALL       I2CTXB
        BTFSS      BUSSTA,TX_SUCCESS
        GOTO       TX_FAIL
        INCF       FSR,F
        DECFSZ     COUNT,F
        GOTO       T_BYTE_LOOP
        GOTO       TX_PASS
TX_FAIL CALL       I2CSTOP
        BCF        BUSSTA,TX_PROGRESS
        BCF        BUSSTA,TX_SUCCESS
        RETLW      FALSE
TX_PASS
        CALL       I2CSTOP
        BCF        BUSSTA,TX_PROGRESS
        RETLW      TRUE
;---------------------------------------            
;從 EEPROM 中讀出數據到 I2CBUF 寄存器
;---------------------------------------
I2CREAD BCF        STATUS,RP0
        BCF        BUSSTA,RX_SUCCESS
        CALL       I2CSTART
        BTFSS      BUSSTA,BUS_BUSY
        GOTO       RX_FAIL
        BCF        BUSCON,SLAVE_RW
        CALL       TX_SLAVE_ADDR
        BTFSS      BUSSTA,TX_SUCCESS   
        GOTO       RX_FAIL
        CALL       TX_DATA_ADDR
        BTFSS      BUSSTA,TX_SUCCESS
        GOTO       RX_FAIL
        CALL       I2CSTART
        BSF        BUSCON,SLAVE_RW
        CALL       TX_SLAVE_ADDR
        BTFSS      BUSSTA,TX_SUCCESS 
        GOTO       RX_FAIL
        BCF        BUSSTA,LAST_BYTE_RX
        MOVLW      I2CBUF
        MOVWF      FSR
        MOVLW      07
        MOVWF      COUNT 
R_BYTE_LOOP
        MOVLW      0X01
        XORWF      COUNT,W
        BTFSC      STATUS,Z
        BSF        BUSSTA,LAST_BYTE_RX
        CALL       I2CRXB
        BTFSS      BUSSTA,RX_SUCCESS
        GOTO       RX_FAIL
        MOVF       RXBUF,W     
        MOVWF      INDF
        INCF       FSR,F
        DECFSZ  COUNT,F
        GOTO       R_BYTE_LOOP 
        GOTO       RX_PASS
RX_FAIL CALL       I2CSTOP
        BCF        BUSSTA,RX_PROGRESS
        BCF        BUSSTA,RX_SUCCESS
        RETLW      FALSE  
RX_PASS CALL       I2CSTOP
           BCF        STATUS,RP0
        BCF        BUSSTA,TX_PROGRESS
        BCF        BUSSTA,RX_PROGRESS
        BSF        BUSSTA,RX_SUCCESS
        RETLW      TRUE
;=======================================        
; I2C 初始化
;=======================================
I2CBUS_INIT
        BCF        STATUS,RP0
        MOVF       RC,W
        ANDLW      0X18
        MOVWF      RC
        CLRF       BUSSTA
        CLRF       BUSCON
        RETURN         
;=======================================    
; 傳送設備地址
;入口:  BUSCON
;出口:  BUSSTA
;=======================================
TX_SLAVE_ADDR
        BCF        STATUS,RP0
        BCF        BUSSTA,ACK_ERROR
        MOVLW      SLAVEADDR
        MOVWF      TXBUF
        BTFSC      BUSCON,SLAVE_RW
        BSF       TXBUF,R_NOT_W
        CALL       I2CTXB           
        BTFSC      BUSSTA,TX_SUCCESS 
        GOTO       TXADDR_SUCCESS
        CLRWDT
        BTFSS      BUSSTA,ACK_ERROR
        CALL       I2CSTOP
        GOTO       TXADDR_END
TXADDR_SUCCESS
        CLRWDT
TXADDR_END
        RETURN
;=======================================    
;TX_DATA_ADDR   發送寫/讀的地址
;=======================================
TX_DATA_ADDR
        BCF        STATUS,RP0
        MOVLW      DATAADDRH
        MOVWF      TXBUF
        CALL       I2CTXB
        BCF        STATUS,RP0
        BTFSS      BUSSTA,TX_SUCCESS
        GOTO       TX_DATA_ADDR_ERROR
        MOVLW      DATAADDRL
        MOVWF      TXBUF
        CALL       I2CTXB
        BCF        STATUS,RP0
        BTFSS      BUSSTA,TX_SUCCESS
        GOTO       TX_DATA_ADDR_ERROR
        GOTO       TX_DATA_END
TX_DATA_ADDR_ERROR
        BCF        BUSSTA,TX_PROGRESS
        BCF        BUSSTA,TX_SUCCESS
        BSF        BUSSTA,ACK_ERROR
TX_DATA_END
        RETURN
;=======================================    
;向 EEPROM 輸出一個8位數據,并檢測EEPROM的ACK信號
;入口:  TXBUF  寄存器
;       BUSSTA 寄存器
;出口:  EEPROM 存儲器
;       BUSSTA 寄存器
 ;======================================    
I2CTXB  BCF        STATUS,RP0
        BSF        BUSSTA,TX_PROGRESS
        BCF        BUSSTA,TX_SUCCESS
        MOVLW      0X08
        MOVWF      BCOUNT
TXLOOP  CLRWDT                
        BSF        STATUS,RP0     
        BCF        TRISC,SCL 
        NOP    
        BCF        TRISC,SDA     
        BCF        STATUS,RP0    
        RLF        TXBUF,F       
        BSF        STATUS,RP0
        BTFSC      STATUS,C
        BSF        TRISC,SDA
        NOP
        BSF        TRISC,SCL
        NOP
        NOP
        BCF        STATUS,RP0
        DECFSZ     BCOUNT,F
        GOTO       TXLOOP
;---------------------------------------
;檢測是EEPROM否有ACK信號產生,產生為正常
;檢測方法:
;   1. 將RC口的SCL.SDA分別設置為輸出和輸入狀態
;   2. 延時2個指令周期,將SCL設置為高電平
;   3. 延時2個指令周期,檢測RC口SDA的狀態
;   4. 如果為高電平,設置錯誤狀態,返回
;   5. 如果為低電平,延時2個指令周期后,將RC口SCL設置為低電平,繼續執行
;---------------------------------------
        BSF        STATUS,RP0
        BCF        TRISC,SCL
        BSF        TRISC,SDA
        NOP
        NOP
        BSF        TRISC,SCL
        NOP
        BCF        STATUS,RP0
        BTFSC      RC,SDA
        GOTO       TX_ERR
        BSF        STATUS,RP0
        BCF        TRISC,SCL
        BCF        STATUS,RP0
        BCF        BUSSTA,TX_PROGRESS
        BSF        BUSSTA,TX_SUCCESS
        BCF        BUSSTA,ACK_ERROR
        GOTO       TX_END
TX_ERR  BCF        BUSSTA,TX_PROGRESS
        BCF        BUSSTA,TX_SUCCESS
        BSF        BUSSTA,ACK_ERROR
TX_END  RETURN
;=======================================
;從EEPROM中讀出 8 位的數據,并發送發送ACK信號
;入口:  EEPROM  存儲器
;       BUSCON  寄存器
;出口:  RXBUF   寄存器
;       BUSSTA  寄存器
;=======================================
I2CRXB  BCF        STATUS,RP0
        BSF        BUSSTA,RX_PROGRESS
        BCF        BUSSTA,RX_SUCCESS
        MOVLW      0X08
        MOVWF      BCOUNT
RXLOOP  CLRWDT
        BSF        STATUS,RP0
        BCF        TRISC,SCL          ;定義TRISC為輸出
        BSF        TRISC,SDA          ;定義TRISC為輸入       
        NOP              
        NOP
        BSF        TRISC,SCL          ;TRISC輸出高電平
        NOP
        BCF        STATUS,RP0
        BCF        STATUS,C
        BTFSC      RC,SDA             ;原指令為BTFSC TRISC,SDA
        BSF        STATUS,C
        RLF        RXBUF,F
        DECFSZ     BCOUNT,F
        GOTO       RXLOOP
;---------------------------------------
;發送ACK信號到EEPROM
;判斷接收的是否為最后一個字節
;LAST_BYTE_RX為1,是    SDA發送一個高電平,結束
;LAST_BYTE_RX為0,不是  SDA發送一個低電平ACK,繼續接收
;---------------------------------------
        BSF        STATUS,RP0
        BCF        TRISC,SCL      
        BCF        TRISC,SDA      
        BTFSC      BUSCON,LAST_BYTE_RX      ;檢測是否是最后一個字節
        BSF        TRISC,SDA                ;是最后一個字節
        NOP                             ;發送ACK信號
        BSF        TRISC,SCL
        NOP
        NOP
        NOP
        NOP
        BCF        TRISC,SCL
        BCF        STATUS,RP0
        BCF        BUSSTA,RX_PROGRESS   
        BSF        BUSSTA,RX_SUCCESS
        RETURN
;=======================================
;I2C 開始信號
;輸入:  無
;輸出:  BUFSSTA
;=======================================
I2CSTART
        BSF     STATUS,RP0
        BSF     TRISC,SDA    ;1US
        NOP                     ;1US
        BSF     TRISC,SCL       ;1US
        NOP
        NOP
        BCF     TRISC,SDA
        NOP
        NOP
        BCF     STATUS,RP0
        BSF     BUSSTA,BUS_BUSY
        RETURN
;=======================================
;I2C 結束信號
;輸入:  無
;輸出:  BUSSTA
;=======================================
I2CSTOP
        BSF     STATUS,RP0
        BCF     TRISC,SCL
        BCF     TRISC,SDA
        BSF     TRISC,SCL
        NOP
        NOP
        BSF     TRISC,SDA
        NOP
        BCF     STATUS,RP0
        BCF     BUSSTA,BUS_BUSY              
        RETURN
;=======================================
; D10 @
;  clock in 4Mhz
;  delay 10ms
;=======================================    
D10    MOVLW    0X0D        
    MOVWF    REG1
LOOP2    MOVLW    0XFF        
    MOVWF    REG2
LOOP1    DECFSZ    REG2,f
    GOTO    LOOP1
    DECFSZ    REG1,f
    GOTO    LOOP2
    RETURN
;=======================================
I2CERR  CLRWDT
        NOP
        NOP
        NOP
        RETURN 
        END

此內容為AET網站原創,未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
宅男精品视频| 亚洲精品韩国| 欧美在线一二三区| 亚洲在线1234| 国产人成精品一区二区三| 久久精品国产精品亚洲精品| 欧美一级黄色网| 一区二区三区在线视频播放| 美女视频黄a大片欧美| 亚洲精品在线视频| 日韩视频在线一区二区三区| 国产精品久久久久久超碰| 久久经典综合| 午夜久久久久久久久久一区二区| 久久国产精品久久国产精品| 亚洲激情校园春色| 国产精品久久99| 欧美午夜一区| 另类尿喷潮videofree| 在线午夜精品| 亚洲精品久久久久| 国产精品一区毛片| 欧美成人黑人xx视频免费观看| 亚洲午夜在线视频| 99视频超级精品| 国产精品卡一卡二| 欧美在线3区| 欧美亚洲日本国产| 欧美在线观看一区二区三区| 亚洲欧美日韩在线观看a三区| 亚洲成人在线视频播放| 亚洲精品一区二区在线| 亚洲精品一区二区三区福利| 亚洲精品社区| 亚洲视频一二| 亚洲福利国产精品| 国产精品久久久一区二区三区| 国产综合在线视频| 久久激情视频免费观看| 久久国产精品一区二区| 久久久久网站| 亚洲专区国产精品| 亚洲激情小视频| 亚洲影院一区| 欧美在线观看日本一区| 99ri日韩精品视频| 亚洲一级片在线看| 亚洲日本中文| 国产一区二区三区久久久| 欧美日韩精品免费看| 久久视频国产精品免费视频在线| 亚洲国产专区校园欧美| 欧美一区二区三区视频| 亚洲精品少妇| 一区二区高清在线观看| 性久久久久久久| 久久综合中文字幕| 欧美日本在线视频| 免费观看成人| 欧美日韩无遮挡| 欧美国产欧美亚洲国产日韩mv天天看完整 | 亚洲激情偷拍| 在线一区二区日韩| 久久精品国产一区二区三区| 亚洲欧美成人在线| 一区二区三区精品国产| 香蕉精品999视频一区二区| 91久久夜色精品国产九色| 亚洲一区二区三区四区中文| 国产精品一区二区男女羞羞无遮挡| 国产欧美日韩精品专区| 亚洲国产小视频在线观看| 亚洲亚洲精品在线观看| 亚洲美女视频在线观看| 亚洲黄色精品| 亚洲免费人成在线视频观看| 亚洲高清成人| 久久精品成人一区二区三区| 野花国产精品入口| 亚洲精品视频二区| 亚洲午夜一区二区| 欧美好骚综合网| 国产精品久久久久久久久久妞妞| 国产一区二区在线观看免费播放| 最新国产の精品合集bt伙计| 亚洲欧美日韩在线综合| 日韩一级在线观看| 午夜激情一区| 亚洲综合欧美| 日韩写真视频在线观看| 久久久www成人免费精品| 久久精品99久久香蕉国产色戒 | 先锋影音网一区二区| 欧美激情精品久久久久久免费印度| 国产欧美一区二区三区在线老狼| 99精品国产99久久久久久福利| 最新69国产成人精品视频免费| 欧美一区日韩一区| 国产精品高清免费在线观看| 亚洲精选一区| 亚洲欧洲另类| 欧美日韩一区二区三区| 国产精品一区二区三区四区五区| 亚洲激情午夜| 亚洲国产精品久久久| 久久av在线| 国产精品稀缺呦系列在线| 欧美美女bbbb| 激情综合色丁香一区二区| 性欧美video另类hd性玩具| 亚洲综合三区| 欧美午夜不卡视频| 国产欧美日韩免费| 一本色道久久综合亚洲精品不| 亚洲欧美成人| 亚洲欧美日本另类| 欧美午夜精品久久久久免费视| 亚洲欧洲一区二区三区在线观看 | 快射av在线播放一区| 欧美视频在线观看一区| 99综合精品| 亚洲欧洲综合| 美女被久久久| 性欧美1819性猛交| 亚洲专区国产精品| 国产精品久久久久久久久搜平片 | 欧美日韩精品一区二区天天拍小说| 亚洲丰满在线| 亚洲精品麻豆| 欧美日本韩国一区二区三区| 亚洲国产一区二区在线| 亚洲欧洲午夜| 欧美激情视频在线免费观看 欧美视频免费一| 一区二区三区在线高清| 亚洲国产欧美日韩| 欧美成人国产| 亚洲美女色禁图| 亚洲午夜电影网| 国产精品乱码妇女bbbb| 亚洲欧美一区二区视频| 久久精品九九| 伊人久久婷婷色综合98网| 国内自拍亚洲| 亚洲国产欧美在线| 欧美激情性爽国产精品17p| 国产精品外国| 午夜精品美女自拍福到在线| 夜夜爽www精品| 欧美一区二区三区四区在线观看地址 | 亚洲精选中文字幕| 欧美高潮视频| 日韩一级黄色av| 午夜精品三级视频福利| 国产午夜亚洲精品不卡| 国产欧美一区二区三区视频| 香蕉成人伊视频在线观看 | 老司机亚洲精品| 亚洲欧洲日本mm| 国产精品magnet| 亚洲第一成人在线| 99精品欧美| 国产精品久久久久久久久久久久| 午夜精品一区二区三区在线 | 亚洲茄子视频| 亚洲综合精品四区| 国产视频欧美视频| 亚洲欧洲视频| 91久久久久| 亚洲乱码国产乱码精品精天堂| 亚洲视频第一页| 国产精品有限公司| 亚洲国产另类久久精品| 欧美日韩高清不卡| 亚洲欧美在线aaa| 国产精品麻豆va在线播放 | 国产精品区一区二区三| 欧美一区高清| 欧美激情乱人伦| 亚洲影院色无极综合| 美腿丝袜亚洲色图| 一本一本久久| 久久综合国产精品| 中文在线不卡视频| 免费成人美女女| 亚洲视频导航| 老牛国产精品一区的观看方式| 夜夜狂射影院欧美极品| 久久久最新网址| 一道本一区二区| 久久亚洲欧美国产精品乐播| 99精品国产在热久久下载| 久久久久欧美精品| 宅男66日本亚洲欧美视频| 蜜乳av另类精品一区二区| 亚洲一区二区三区在线| 欧美电影免费观看高清| 欧美一区影院| 国产精品免费一区豆花| 亚洲免费精彩视频| 黑人极品videos精品欧美裸|