久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

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

作者:韓冰   來源:本站原創   點擊數:  更新時間:2013年11月30日   【字體:

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

//This is the sixth program of the homework;
//Name :Wang Qi     Date:2013/3/11  北京化工大學   自實1001
     SDA EQU P2.0
    SCL EQU P2.1
    ORG 0000H     //主函數入口
    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  //計數器
   SETB EA                 //全局中斷
   SETB ET1  //允許定時器1
   SETB TR1 //啟動定時器1
                   SETB IT1 //外部中斷跳變觸發方式
   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                //保護現場
 PUSH TL1    
 CLR  TR1                 //停止T1計數
  MOV  R2,#01H 
                 CALL DU
                 MOV P1,R3    
 POP TL1
 POP TH1
 SETB TR1 
 RETI
WT1:        MOV TH1,#4CH      //定時函數
                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協議摘自網絡  Thanks to the author
XIE: //寫數據子程序,R2是要寫入的24c02的字節位置地址,R3是要寫入的內容
LCALL STAR;起始條件
MOV A,#10100000B //尋址24C02的總線硬件地址并使用寫入命令
LCALL SDATA        //傳輸數據A給24C02
MOV A,R2                //確定要寫入的字節位置地址
LCALL SDATA        //傳輸數據A給24C02
MOV A,R3               //把數據R3寫入剛指定的字節地址
LCALL SDATA       //傳輸數據A給24C02
LCALL STOP          //寫入結束
LCALL CHULI //提供2ms給24C02內部處理剛寫入的數據
RET
DU:   ;讀數據子程序,R2是要讀的24c02的字節位置地址,讀完后A傳給R3
LCALL STAR;起始條件
MOV A,#10100000B//尋址24C02的總線硬件地址并使用寫入命令
LCALL SDATA      //傳輸數據A給24C02
MOV A,R2   //注意,這里是使24C02的字節地址指針變成R2的值,也就是確定要讀取的字節位置地址
LCALL SDATA     //傳輸數據A給24C02
LCALL STAR        //重復起始條件
MOV A,#10100001B//尋址24C02的總線硬件地址并使用讀出命令(這里正式發起讀命令)
LCALL SDATA//傳輸數據A給24C02
LCALL RDATA//從之前指定的字節地址中讀出字節內容到A
LCALL STOP //讀取完畢(這里并沒有連續讀取,只能讀一個字節,要多個字節連續讀取,請自己在R2上做變址讀取循環)
MOV R3,A     //讀出的字節傳給R3
RET
STAR:SETB SDA //起始條件子程序
SETB SCL
NOP
NOP
NOP
NOP
CLR SDA
NOP
NOP
NOP
NOP
RET
SDATA:MOV R0,#08H //向24C02傳輸數據子程序
LOOP0:CLR SCL
RLC A
MOV SDA,C
NOP
NOP
SETB SCL
NOP
NOP
NOP
NOP
DJNZ R0,LOOP0
CLR SCL
NOP
SETB SDA
NOP
NOP
SETB SCL
REP:MOV C,SDA
JC REP
NOP
NOP
NOP
CLR SCL
NOP
NOP
RET
RDATA:MOV R0,#08H  //從24C02讀取數據子程序(讀取一個字節以后不做應答)
LOOP1:SETB SCL
NOP
NOP
NOP
NOP
MOV C,SDA
RLC A
CLR SCL
NOP
NOP
NOP
NOP
DJNZ R0,LOOP1
SETB SCL
NOP
NOP
NOP
NOP
CLR SCL
RET
STOP:CLR SDA   ;結束條件
NOP
NOP
NOP
NOP
SETB SCL
NOP
NOP
NOP
NOP
SETB SDA
NOP
NOP
NOP
NOP
RET
CHULI:  //1999uS ;這里是用于寫完數據以后留給24C02的內部數據處理時間,2ms是一個非常保險的時間,最短需要1ms
    MOV R6,#04H
    WR0:
    MOV R5,#0F8H
    DJNZ R5,$
    DJNZ R6,WR0
    RET
END
 

關閉窗口

相關文章

主站蜘蛛池模板: 日本一二区视频 | 亚洲欧美在线一区 | 国产成人啪免费观看软件 | 97国产一区二区精品久久呦 | 久久合久久 | 亚洲国产一区二区三区在线观看 | 99久久精品国产麻豆演员表 | 日韩区 | 国产精品久久久久一区二区三区 | 日韩一区不卡 | 亚洲成人动漫在线观看 | 精品日韩 | 久久久国产网站 | 亚洲精品久久久久久久久久久 | 日韩资源| 亚洲午夜精品久久久久久app | 国产一级片av | 成人在线中文字幕 | 中文字幕一区二区三区四区 | 亚洲综合五月天婷婷 | 亚洲天堂精品一区 | 国产成人久久精品一区二区三区 | 日韩一区二区三区视频 | 四虎影音 | 综合九九 | 亚洲成人精品免费 | 午夜爽爽爽男女免费观看 | 免费在线黄 | 成人精品免费视频 | 日日日操 | 可以免费观看的av片 | 久久久青草 | 99re99| 日日干夜夜操天天操 | 91在线观看| 久久久婷| 在线 丝袜 欧美 日韩 制服 | 午夜精品一区二区三区在线观看 | 91麻豆精品国产91久久久更新资源速度超快 | 蜜桃五月天 | 99草免费视频 |