最新免费av在线观看,亚洲综合一区成人在线,中文字幕精品无码一区二区三区,中文人妻av高清一区二区,中文字幕乱偷无码av先锋

登錄 免費(fèi)注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

誰幫我看看這段I\\0模擬I2C的代碼,究竟出了什么問題

作者:zhlking 欄目:單片機(jī)
誰幫我看看這段I\0模擬I2C的代碼,究竟出了什么問題
;-----------------------
;MCU:AT89C52,Fosc=22.1184MHZ
;程序內(nèi)容:向AT24C16.html">AT24C16寫一個(gè)字節(jié)的數(shù)據(jù),再讀出來,并送到P1口看是否正確
;------------------------


    SDA bit P1.4
    SCL bit P1.5

    ADDRH EQU 20H
    ADDRL EQU 21H
    ADDWH EQU 22H
    ADDWL EQU 23H
    _DATA EQU 24H



    ORG 0000H
    LJMP START

    ORG 0030H
START:     
    MOV SP,#60H    

    MOV ADDRH,#00H
    MOV ADDRL,#00H
    MOV ADDWH,#00H
    MOV ADDWL,#00H

    MOV _DATA,#0FH
    
    LCALL W_24C16    

    LCALL R_24C16
    
    MOV A,25H
    MOV P1,A        ;送到I/O口檢測收到的數(shù)據(jù)是否正確

;    RET
    SJMP $


;---------------------------
;讀AT24C16.html">AT24C16一個(gè)字節(jié)數(shù)據(jù)子程序
;---------------------------
R_24C16:
    LCALL _SIGNAL        ;調(diào)用發(fā)起始信號子程序
    MOV A,ADDRH        ;取要讀數(shù)據(jù)的高位地址
    CLR C
    RLC A            ;I/O口模擬I2C只能按位讀,左環(huán)移一位空出R/W位: 0 0 0 0 A10 A9 A8 R/W
    ORL A,#0a0H        ;保留器件地址1010,AT24C系列的EEPROM的型號地址均為1010
                ;1 0 1 0 A10 A9 A8 R/W
                ;AT24C16.html">AT24C16的片選信號A2A1A0均用硬件拉低的
                ;第一個(gè)1表示起始信號,最后一個(gè)1表示先寫高位地址            
    CALL SEND        ;發(fā)送高位地址
    MOV A,ADDRL        ;取低位地址
    LCALL SEND        ;發(fā)送低位地址
    LCALL _SIGNAL        ;調(diào)用發(fā)起始信號子程序,準(zhǔn)備傳數(shù)據(jù)
    MOV A,#0A1H        
    LCALL SEND        ;發(fā)送本器件地址
    LCALL READ
    CALL STOP        ;調(diào)用終止子程序
    RET

;---------------------------
;讀數(shù)據(jù)子程序
;---------------------------
READ:
    MOV R7,#08H
    CLR SCL
READ_LOP:
    CALL DELAY5US
    SETB SDA
    SETB SCL
    CALL DELAY5US
    MOV C,SDA
    MOV A,R2
    RLC A
    MOV R2,A
    CALL DELAY5US
    CLR SCL
    DJNZ R7,READ_LOP
    MOV 25H,A
    CLR SDA            ;應(yīng)答信號
    CALL DELAY5US
    SETB SCL
    RET
    



;---------------------------
;向AT24C16.html">AT24C16寫入一個(gè)字節(jié)數(shù)據(jù)子程序
;---------------------------

W_24C16:

    CALL _SIGNAL        ;調(diào)用發(fā)起始信號子程序
    MOV A,ADDWH        ;存儲單元地址高位0000,0 A10 A9 A8
    CLR C
    RLC A            ;左環(huán)移一位空出R/W位: 0 0 0 0 A10 A9 A8 R/W
    ORL A,#0a0H        ;保留器件地址1010,AT24C系列的EEPROM的型號地址均為1010;;第一個(gè)1表示起始信號,最后一個(gè)0表示先寫高位地址
                ;1 0 1 0 A10 A9 A8 0
    CALL SEND        ;調(diào)用發(fā)送子程序,發(fā)送第一個(gè)字節(jié)        
    MOV A,ADDWL        ;存儲單元地址低8位 0 0 0 0 0 0 0 0
    CALL SEND        ;發(fā)送低位地址
    MOV A,_DATA        ;把放在DATA里面要發(fā)送的數(shù)據(jù)給A
    CALL SEND        ;發(fā)送數(shù)據(jù)
    CALL STOP        ;調(diào)用發(fā)送終止信號子程序    
    RET            ;傳輸結(jié)束后必須發(fā)送終止子程序
    

;---------------------------
;發(fā)送I2C總線終止信號子程序,關(guān)閉24C16
;---------------------------
STOP:
    CLR SDA            ;SCL=1時(shí),SDA由0變?yōu)?,即為終止信號
    SETB SCL        
    CALL DELAY5US
    SETB SDA
    CALL DELAY5US
    CLR SCL
    CLR SDA
    CALL DELAY5US
    RET


;---------------------------
;發(fā)送子程序
;---------------------------
SEND:
    MOV R7,#08H    ;用I/O模擬I2C時(shí),必須按位傳輸,每個(gè)字節(jié)8位
    CLR SCL
SEND_LOP:
    RLC A        ;大循環(huán)左移
    MOV SDA,C    ;只能按位來傳輸
    CALL DELAY5US
    SETB SCL    ;;給SCL一個(gè)上升沿
    CALL DELAY5US
    CLR SCL        ;開始發(fā)送下一位,且SDA上的值只能在SCL為0時(shí)才能更改
    DJNZ R7,SEND_LOP
    SETB SDA     ;每次發(fā)完一個(gè)字節(jié)后都要發(fā)應(yīng)答信號
    CALL DELAY5US
    SETB SCL
    CALL DELAY5US
SEND_LOP1:        ;等待AT24C16.html">AT24C16的應(yīng)答信號
    MOV C,SDA    ;應(yīng)答信號一來則SDA變0
    JC SEND_LOP1
    CLR SCL
    RET        


;---------------------------
;發(fā)起始信號子程序
;---------------------------

_SIGNAL:
    SETB SCL            ;
2樓: >>參與討論
zhlking
幫幫忙!
有人指導(dǎo)一下么?

3樓: >>參與討論
jxmemail
出什么問題了?
 
參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
請教:從系統(tǒng)時(shí)鐘 到底是什么意思。恐x謝!
一個(gè)有關(guān)于A/D轉(zhuǎn)換的問題
如何將模擬信號轉(zhuǎn)變?yōu)閿?shù)字信號
是誰把我的信息給刪除了?
南京的初學(xué)者想求夠c51單片機(jī)開發(fā)板
免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 www.udpf.com.cn 浙ICP證030469號