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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 單片機匯編實驗六:I2C串行總線存儲器讀寫實驗

          單片機匯編實驗六:I2C串行總線存儲器讀寫實驗

          作者: 時間:2016-12-01 來源:網絡 收藏
          實驗要求:由AT89S52內部定時器1,按方式1工作,每1秒鐘24C02的0001H單元內容加2,以鍵盤作為外部中斷輸入信號,有鍵按下時,讀取0001H單元內容并由LED顯示。

          //This is the sixthprogramof the homework;
          //Name :Wang Qi Date:2013/3/11 北京化工大學 自實1001
          SDA EQU P2.0
          SCL EQU P2.1
          ORG 0000H //主函數(shù)入口
          SJMP MAIN
          ORG 0013H //外部中斷1入口
          LJMP WZD0
          ORG 001BH //計時器1入口
          LJMP WT1
          ORG 0050H
          MAIN: MOV SP,#60H
          MOV TMOD,#10H //設置T1工作方式
          MOV TH1,#4CH //設初值
          MOV TL1,#00H
          MOV R7,#10 //計數(shù)器
          SETB EA //全局中斷
          SETB ET1 //允許定時器1
          SETB TR1 //啟動定時器1
          SETB IT1 //外部中斷跳變觸發(fā)方式
          SETB EX1 //允許外部中斷1
          OK: MOV C,P3.4 //掃描鍵盤
          JNC OK1
          MOV C,P3.5
          JNC OK1
          MOV C,P3.6
          JNC OK1
          MOV C,P3.7
          JNC OK1
          SJMP OK
          OK1: CLR P3.3 //中斷信號
          SETB P3.3
          SJMP OK
          WZD0:
          SETB P3.3 //中斷程序
          PUSH TH1 //保護現(xiàn)場
          PUSH TL1
          CLR TR1 //停止T1計數(shù)
          MOV R2,#01H
          CALL DU
          MOV P1,R3
          POP TL1
          POP TH1
          SETB TR1
          RETI
          WT1: MOV TH1,#4CH //定時函數(shù)
          MOV TL1,#00H
          DJNZ R7,RET0
          MOV R7,#10 //1秒到來了
          INC 30H
          INC 30H
          mov R2,#01H
          MOV R3,30H
          CALL XIE
          RET0: RETI

          //////////////I2C協(xié)議摘自網絡 Thanks to the author
          XIE: //寫數(shù)據(jù)子程序,R2是要寫入的24c02的字節(jié)位置地址,R3是要寫入的內容
          LCALL STAR;起始條件
          MOV A,#10100000B //尋址24C02的總線硬件地址并使用寫入命令
          LCALL SDATA //傳輸數(shù)據(jù)A給24C02
          MOV A,R2 //確定要寫入的字節(jié)位置地址
          LCALL SDATA //傳輸數(shù)據(jù)A給24C02
          MOV A,R3 //把數(shù)據(jù)R3寫入剛指定的字節(jié)地址
          LCALL SDATA //傳輸數(shù)據(jù)A給24C02
          LCALL STOP //寫入結束
          LCALL CHULI //提供2ms給24C02內部處理剛寫入的數(shù)據(jù)
          RET
          DU: ;讀數(shù)據(jù)子程序,R2是要讀的24c02的字節(jié)位置地址,讀完后A傳給R3
          LCALL STAR;起始條件
          MOV A,#10100000B//尋址24C02的總線硬件地址并使用寫入命令
          LCALL SDATA //傳輸數(shù)據(jù)A給24C02
          MOV A,R2 //注意,這里是使24C02的字節(jié)地址指針變成R2的值,也就是確定要讀取的字節(jié)位置地址
          LCALL SDATA //傳輸數(shù)據(jù)A給24C02
          LCALL STAR //重復起始條件
          MOV A,#10100001B//尋址24C02的總線硬件地址并使用讀出命令(這里正式發(fā)起讀命令)
          LCALL SDATA//傳輸數(shù)據(jù)A給24C02
          LCALL RDATA//從之前指定的字節(jié)地址中讀出字節(jié)內容到A
          LCALL STOP //讀取完畢(這里并沒有連續(xù)讀取,只能讀一個字節(jié),要多個字節(jié)連續(xù)讀取,請自己在R2上做變址讀取循環(huán))


          上一頁 1 2 下一頁

          評論


          技術專區(qū)

          關閉
          看屁屁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); })();