機(jī)電之家資源網(wǎng)
單片機(jī)首頁|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
EM78系列單片機(jī)--I2C串行總線的控制
EM78系列單片機(jī)--I2C串行總線的控制
 更新時間:2008-7-26 20:10:00  點(diǎn)擊數(shù):2
【字體: 字體顏色
SEEPROM 寫入數(shù)據(jù)傳送格式如下:
START
從地址
0
A
地址字節(jié)
A
數(shù)據(jù)字節(jié)1
A
數(shù)據(jù)字節(jié)N
A
STOP
A為從設(shè)備的確認(rèn)位。
SEEPROM 讀出數(shù)據(jù)傳送格式如下:(A為確認(rèn)位。)
START
從地址
0
A
地址字節(jié)
A
START
從地址
1
A
數(shù)據(jù)字節(jié)
A
。。。
最后字節(jié)
STOP
圖  5.10 程序流程圖
3.參考例程
;*****************************************************************************
;**  EM78單片機(jī)與24Cxx / 85Cxx 串行CMOS EEPROM接口I2C總線讀/寫的程序
;**  (所有時隙均基于2MHZ晶體震蕩器頻率)
;*****************************************************************************
;       存儲器定義
PC      EQU     2               ; Program counter
STAT    EQU     3               ; EM78 status byte
FSR     EQU     4               ; RAM 選擇寄存器
P5      EQU     5               ; Port A use to select device address
P6      EQU     6               ; P6.7 = SDA, P6.6 = SCL
;
STATUS  EQU     08              ; Status register
FLAG    EQU     09              ; Common flag bits register
EEPROM  EQU     0A              ; Bit buffer
ERCODE  EQU     0B              ; Error code (to indicate bus status)
ADDR    EQU     10  &, nbsp;           ; Address register
DATAI   EQU     11              ; Stored data input register
DATAO   EQU     12              ; Stored data output register
SLAVE   EQU     13              ; Device address (1010xxx0)
TXBUF   EQU     14              ; TX buffer
RXBUF   EQU     15              ; RX buffer
COUNT   EQU     16          ,     ; Bit counter
TIMER0  EQU     18              ; Delay timer0
TIMER1  EQU     19              ; Delay timer1
;-----------------------------------------------------------------------------
;                     位定義
; Status bits
Z       EQU     2
C       EQU     0
; FLAG Bits
ERROR   EQU     0               ; Error flag
; EEPROM Bits
DI      EQU     7               ; EEPROM input
DO      EQU     6               ; EEPROM output
; I2C Device Bits
SDA     EQU     7               ; P6.7, data in/out
SCL     EQU     6               ; P6.6, serial clock
;-----------------------------------------------------------------------------
;       兩線I2C - CPU 通信錯誤狀態(tài)表和子程序
;  input  :     W-reg   = error code
;  output :     ERCODE  = error code
;           FLAG(ERROR) = 1
;         code          error status mode
;       -------         ------------------------------------------------------
;           1   :       SCL locked low by device (bus is still busy)
;           2   :       SDA locked low by device (bus is still busy)
;           3   :       No acknowledge from device (no handshake)
;           4   :       SDA bus not released for master to generate STOP bit
;-----------------------------------------------------------------------------
    org     0x0000
        JMP     start
;按照錯誤狀態(tài)表識別SCL狀態(tài)和SDA數(shù)據(jù)子程序
ERR
        JBS     FLAG,ERROR      ; Remain as first error encountered
        MOV     ERCODE,A          ; Save error code
        BS      FLAG,ERROR      ; Set error flag
        RET    
;-----------------------------------------------------------------------------
;       啟動總線通信程序
;       input   : none
;       output  : initialize bus communication
;-----------------------------------------------------------------------------
;Generate START bit (SCL is high while SDA goes from high to low transition)
;and check status of the serial clock.
BSTART
        MOV     A,@B'00111111'     ; Put SCL, SDA line in output state
        IOW     P6
        bs      P6,SDA          ;make sure sda is high
        BS      P6,SCL          ; Set clock high
        MOV     A,@1               ; Ready error status code 1
        JBS     P6,SCL          ; Locked?
        CALL    ERR             ; SCL locked low by device
        BC      P6,SDA          ; SDA goes low during SCL high
    NOP                     ; Timing adjustment
        NOP
        NOP
        BC      P6,SCL          ; Start clock train
        RET    
;-----------------------------------------------------------------------------
;       啟動總線通信程序
;       Input   :       None
;       Output  :       Bus communication, STOP condition
;-----------------------------------------------------------------------------
;Generate STOP bit (SDA goes from low to high during SCL high state)
;and check bus conditions.
BSTOP
        MOV     A,@B'00111111'     ; Put SCL, SDA line in output state
        IOW     P6
        BC      P6,SDA          ; Return SDA to low
        BS      P6,SCL          ; Set SCL high
        nop
        nop
        MOV     A,@1               ; Ready error code 1
        JBS     P6,SCL          ; High?
        CALL    ERR             ; No, SCL locked low by device
        BS      P6,SDA          ; SDA goes from low to high during SCL high
        MOV     A,@4               ; Ready error code 4
        JBS     P6,SDA          ; High?
        CALL    ERR             ; No, SDA bus not release for STOP
        RET   
END SUB
;-----------------------------------------------------------------------------
;       從EM78 發(fā)送數(shù)據(jù)到串行EEPROM, 一位一位子程序
;       Input   :       None
;       Output  :       To (DI) of serial EEPROM device
;-----------------------------------------------------------------------------
BITIN
        MOV     A,@B'10111111'     ; Force SDA line as input
        IOW     P6
        BS      P6,SDA          ; Set SDA for input
        BC      EEPROM,DI
        BS      P6,SCL          ; Clock high
        MOV     A,@1
        JBS     P6,SCL          ; Skip if SCL  is high
        JMP     BIT1
        JBS     FLAG,ERROR      ; Remain as first error encountered
        MOV     ERCODE,A          ; Save error code
        BS      FLAG,ERROR      ; Set error flag
BIT1
        JBC     P6,SDA          ; Read SDA pin
        BS      EEPROM,DI       ; DI = 1
    NOP                     ; Delay
        BC      P6,SCL          ; Return SCL to low    
        RET   
;-----------------------------------------------------------------------------
;       從串行EEPROM 接收數(shù)據(jù), 一位一位子程序
;       Input   :       EEPROM file
;       Output  :       From (DO) of serial EEPROM device to PIC
;-----------------------------------------------------------------------------
BITOUT
        MOV     A,@B'00111111'     ; Set SDA, SCL as outputs
        IOW     P6
        JBS     EEPROM,DO
        JMP     BIT0
        BS      P6,SDA          ; Output bit 0
        MOV     A,@2
        JBC     P6,SDA          ; Check for error code 2
        JMP     CLK1
        JBS     FLAG,ERROR      ; Remain as first error encountered
        MOV     ERCODE,A          ; Save error code
        BS      FLAG,ERROR      ; Set error flag
        JMP     CLK1            ; SDA locked low by device
BIT0
        BC      P6,SDA          ; Output bit 0
        NOP                     ; Delay
        NOP
        NOP
CLK1:  BS      P6,SCL
        MOV     A,@1               ; Error code 1
        JBC     P6,SCL          ; SCL locked low?
        JMP     BIT2            ; No.
        JBS     FLAG,ERROR      ; Yes.
        MOV     ERCODE,A          ; Save error code
        BS      FLAG,ERROR      ; Set error flag
BIT2:  NOP
        NOP
        BC      P6,SCL          ; Return SCL to low
        RET   
  • 上一篇: EM78系列單片機(jī)--異步串行通信設(shè)計
  • 下一篇: EM78系列單片機(jī)--HT1380串行實時時鐘芯片
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實性、準(zhǔn)確性和合法性。
    機(jī)電之家對此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請聯(lián)系機(jī)電之家,機(jī)電之家將及時作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會
    中國行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1