<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)驅(qū)動(dòng)I2C(24C02)匯編語言程序

          51單片機(jī)驅(qū)動(dòng)I2C(24C02)匯編語言程序

          作者: 時(shí)間:2016-11-28 來源:網(wǎng)絡(luò) 收藏
          ;程序說明:將MPU內(nèi)部的55h~~~58h中的內(nèi)容由外部中斷0經(jīng)I2C總線寫到24c02中,然后由外部中斷1將所寫的內(nèi)容讀到
          ;MPU內(nèi)部數(shù)據(jù)存儲(chǔ)器60H~~63H
          SCL EQU P1.1
          SDA EQU P1.0
          org 0000h
          jmp begin
          org 0003H
          ljmp write
          org 0013H
          ljmp read
          ;主程序
          begin:
          mov 55H,#41H
          mov 56h,#42h
          MOV 57h,#43H
          MOV 58H,#44H
          mov tcon,#0
          setb ex0
          setb ex1
          setb ea
          main:
          nop
          jmp main
          ;**********************************************************
          ;讀24C02的數(shù)據(jù)的程序
          read:
          ACALL START ;開始信號(hào)
          MOV A,#0A0H ;發(fā)從機(jī)的地址
          ACALL SEND ;發(fā)送控制字
          ACALL ACKI;接收應(yīng)答
          JC OUTEND ;不響應(yīng),轉(zhuǎn)結(jié)束
          MOV A,#00H;設(shè)置要讀取從器件的片內(nèi)地址
          ACALL SEND
          ACALL ACKI
          JC OUTEND
          ACALL START ;開始信號(hào)
          ORL A,#0A1H;設(shè)置控制字,準(zhǔn)備接收
          ACALL SEND ;發(fā)送控制字
          ACALL ACKI
          JC OUTEND
          MOV R2,#4 ;準(zhǔn)備接收數(shù)據(jù)的字節(jié)數(shù)
          MOV R1,#60H ;接收字節(jié)存放在主器件中的地址60H
          IN0:
          ACALL REV ;接收一個(gè)字節(jié)
          ACALL ACKO;主機(jī)向24C02發(fā)送應(yīng)答信號(hào)
          MOV @R1,A ;把接收到數(shù)據(jù)存放到存儲(chǔ)單元中
          INC R1
          DEC R2
          CJNE R2,#1,IN0 ;判斷是否為最后一個(gè)接收字節(jié)
          ACALL REV ;接收最后一個(gè)字節(jié)
          ACALL ACKN;
          MOV @R1,A ;把接收到數(shù)據(jù)存放到存儲(chǔ)單元中
          OUTEND:
          ACALL STOP ;停止信號(hào)
          jnb p3.3,$
          reti
          ;**********************************************************
          ;寫24C02的數(shù)據(jù)的程序
          write:
          LCALL START ;開始信號(hào)
          MOV A,#0A0H ;定控制字,準(zhǔn)備發(fā)送
          ACALL SEND ;發(fā)送控制字
          ACALL ACKI ;接收應(yīng)答
          JC WRITEEND ;從器件不響應(yīng),轉(zhuǎn)結(jié)束
          MOV A,#00H ;設(shè)置從器件片內(nèi)地址
          ACALL SEND ;發(fā)送片內(nèi)地址
          ACALL ACKI
          JC WRITEEND
          MOV R2,#4;設(shè)置發(fā)送字節(jié)數(shù)
          MOV R1,#55H ;主器件中要發(fā)送數(shù)據(jù)的頭地址
          OUT1:
          MOV A,@R1
          ACALL SEND;發(fā)送數(shù)據(jù)
          ACALL ACKI;
          JC WRITEEND
          INC R1
          DJNZ R2,OUT1 ;發(fā)送未結(jié)束,繼續(xù)發(fā)送
          WRITEEND:
          ACALL STOP ;停止信號(hào)
          jnb p3.2,$;防止再次中斷
          reti
          ;********************************************************
          ;********************
          ;I2C模擬程序
          ;開始信號(hào)
          START:
          CLR SCL
          SETB SDA
          ACALL DELAY
          SETB SCL
          ACALL DELAY
          CLR SDA
          ACALL DELAY
          CLR SCL
          RET
          ; 停止信號(hào):
          STOP:CLR SCL
          CLR SDA
          ACALL DELAY
          SETB SCL
          ACALL DELAY
          SETB SDA
          ACALL DELAY
          RET
          ; 接收一個(gè)字節(jié)
          REV: MOV R0,#08H
          REV0: SETB SCL
          LCALL DELAY
          MOV C,SDA
          RLC A
          CLR SCL
          LCALL DELAY
          DJNZ R0,REV0
          RET
          ;發(fā)送一個(gè)字節(jié)
          SEND:
          MOV R0,#08H
          CLR SCL
          SEND0:
          RLC A
          MOV SDA,C
          SETB SCL
          ACALL DELAY
          CLR SCL
          DJNZ R0,SEND0
          SETB SDA
          RET
          ;接收一個(gè)應(yīng)答位:
          ACKI:
          SETB SCL
          ACALL DELAY
          MOV C,SDA
          CLR SCL
          RET
          ; 發(fā)送一個(gè)接收應(yīng)答位
          ACKO:
          CLR SDA
          ACALL DELAY
          SETB SCL
          ACALL DELAY
          CLR SCL
          ACALL DELAY
          SETB SDA
          ACALL DELAY
          RET
          ;發(fā)送一個(gè)非接收接收應(yīng)答位
          ACKN:
          SETB SDA
          ACALL DELAY
          SETB SCL
          ACALL DELAY
          CLR SCL
          ACALL DELAY
          DELAY:
          NOP
          NOP
          NOP
          RET
          END


          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();