亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? hi2c_asm.inc

?? 周立功試驗板DP51+程序
?? INC
字號:
;================================
;        LPC76X作主控器的硬件I2C軟件包(V1.1)
; 1  使用I2C總線軟件包時P1.2,P1.3切勿寫為0。
; 2  當定時器I溢出時,表明I2C總線出錯,不開定時器I中斷,程序
;    可能因為總線出錯而進入死循環等待ATN.
; 3  定時中斷返回出口是調用此次I2C操作指令的下一條指令,以便
;    檢查出錯原因,避免出現死循環。
; 4  MCU的最大時鐘8MHz
;    本版本是在V1.0的基礎上增加了兩個用戶接口子程序:IRDNBYTEEXT
;    和IWRNBYTEEXT。
;                                  更新時間:2002.06.03
;================================

;/* 定義I2CFG的位掩碼  */
CTVAL  EQU   02H   ;/*為I2CFG寄存器的參數定義,置位 ,CT1=1,CT0=0*/
BTIR   EQU   10H   ;/*使用時只要用或運算即可取相應狀態,TIRUN=1*/
BMRQ   EQU   40H   ;/*MASTRQ=1*/

;/* 定義I2CON的位掩碼  */
BCXA   EQU   80H   ;/*為I2CON寄存器的參數定義,置位CXA */ 
BIDLE  EQU   40H   ;/*置位IDLE*/
BCDR   EQU   20H   ;/*清DRDY*/
BCARL  EQU   10H   ;/*清ARL*/
BCSTR  EQU   08H   ;/*清STR*/
BCSTP  EQU   04H   ;/*清STP*/
BXSTR  EQU   02H   ;/*置位XSTR*/
BXSTP  EQU   01H   ;/*置位XSTP*/

 
;請求總線,申請成功ACK返回1(MCU成為主控器)
;注意:申請成功后總線已啟動,STR=1,DRDY=0。
;      在I2C器件沒有接收完正確的操作時,MCU會不能申請總線或結束總線的,
;      也就是說它會死循環等待。
GETBUS:              
           MOV    I2CFG,#BMRQ+BTIR+CTVAL       ;申請總線,設置CT1,CT0,啟動I定時器            
           MOV    R0,#30                       ;等待20ms無ATN,表明總線有誤
GETBUS_L1: MOV    R1,#0F0H
GETBUS_L2: JB     ATN,GETBUS_OK                ;等待總線認可(STR置1或ARL置1)
           DJNZ   R1,GETBUS_L2
           DJNZ   R0,GETBUS_L1
           MOV    R2,#80H                      ;總線失敗,置R2為01H
           RET
GETBUS_OK: JB     MASTER,GETB_END              ;總線申請成功 
           MOV    R2,#01H                      ;總線仲裁失敗,置R2為01H       
GETB_END:  RET
   

;結束總線,結束此次主控操作
ENDBUS:
           CLR    MASTRQ                  ;先取消主控器
           MOV    I2CON,#BXSTP+BCDR       ;允許CLK上升沿,發結束信號
           JNB    ATN,$                   ;等待CLK上升沿,CLK=1
           MOV    I2CON,#BCDR             ;清DRDY,以便接收結束信號
           JNB    ATN,$                   ;等待結束信號,SDA=1
           MOV    I2CON,#BCXA+BCSTP+BCARL ;總線已結束,將各標志位清零
           CLR    TIRUN                   ;關定時器
           SETB   CLRTI                   
           RET


;重新啟動總線
RRST:      
           MOV    I2CON,#BXSTR+BCDR       ;設置XSTR,重啟
           JNB    ATN,$                   ;等待CLK上升沿,CLK=1
           MOV    I2CON,#BCDR
           JNB    ATN,$                   ;等待起動信號,SDA=0
           RET                            ;若總線有誤,會在收發數據時/定時器I溢出時發現


;發送應答信號子程序
;返回ACK
SACK:           
           MOV    I2DAT,#00H              ;發送應答信號0。同時DYDY=0,釋放SCL
           JNB    ATN,$
           JB     DRDY,SACK_END
           MOV    R2,#04H                 ;發關非應答信號時出錯,置R2為04H
SACK_END:  RET


;發送非應答信號子程序
;返回ACK
SNACK:           
           MOV    I2DAT,#80H              ;發送非應答信號1
           JNB    ATN,$                   ;等待CLK上升
           JB     DRDY,SNACK_END          ;CLK上升沿時,DRDY置1
           MOV    R2,#08H                 ;發關非應答信號時出錯,置R2為08H
SNACK_END: RET



;發送字節數據子程序
;用了R3,A,CY
;入口參數:發送的數據在ACC;出口參數:返回ACK位
;注:啟動總線后,STR=1,DRDY=0,發第1位數據應
;  MOV    I2DAT,A    再  MOV  ICON,#BCSTR
SENDBYTE:  
           MOV   R3,#7                    
           MOV   I2DAT,A                   ;寫I2DAT時DRDY清零,并設置發送狀態 
           MOV   I2CON,#BCARL+BCSTR+BCSTP  ;清ARL,STR,STP
SENDB_L1:  JNB   ATN,$                    
           JNB   DRDY,SENDB_ERR
           RL    A
           MOV   I2DAT,A
           DJNZ  R3,SENDB_L1
           JNB   ATN,$                     ;1字節數據發送完畢
CHKACK:    MOV   I2CON,#BCDR+BCXA          ;轉為接收,接收應答信號 
           JNB   ATN,$                     ;等待CLK上升沿
           MOV   C,RDAT                    ;讀入應答位
           CPL   C
           MOV   ACK,C
SENDB_END: RET
             
SENDB_ERR: MOV   R2,#10H                   ;發送數據過程序中出錯,置R2=10H
           RET           

           
;接收字節數據子程序
;占用R3,CY,A
;出口參數:接收到的值在ACC里
RCVBYTE:  
           CLR    A
           MOV    R3,#8  
           MOV    I2CON,#BCARL+BCSTR+BCSTP;清ARL,STR,STP
RCVB_L1:   ORL    A,I2DAT                 ;讀I2DAT時,清DRDY,清發送狀態
           RL     A                       ;清完ARL,STR,STP,DRDY位后ATN為0
           JNB    ATN,$
           JNB    DRDY,RCVB_ERR  
           DJNZ   R3,RCVB_L1
           MOV    C,RDAT                  ;將最后一位讀入,因為開頭讀入的第1位無用
           RLC    A                       ;開頭第1位的作用讓DRDY=0,以便后而產生CLK上升沿
           RET
           
RCVB_ERR:  MOV   R2,#40H                  ;讀取數據過程序中出錯,置R2=10H
           RET           


;定時器I中斷
;若在主程序中不用此中斷,可能會出現死機現象。
; 功能:進行I2C總線的糾正工作
; 注意:其它高優先級中斷的處理時間要短(小于1020個機器周期),
;       以保證此中斷是在軟件包調用時產生的。

TIMERI_INT: 
           CLR     TIRUN
           SETB    CLRTI             ;清除定時器I溢出標志      
           CLR     MASTRQ            ;定時器I溢出中斷
           MOV     I2CON,#0BCH       ;強制結束I2C
           CLR     SCL               ;模擬產生I2C總線的結束信號
           CLR     SDA    
           ACALL   SDELAY
           SETB    SCL
           ACALL   SDELAY
           SETB    SDA
           DEC     SP                 ;出棧4字節,以便能正確返回
           DEC     SP
           DEC     SP
           DEC     SP         
           RETI   
SDELAY:    DB 0,0,0,0,0,0,0
           RET    

           
;無子地址單字節讀
;出口參數:讀出值在ACC
;          返回ACK=1操作正確
IRDBYTE:  
          CLR   ACK
          MOV   R2,#00H          
          LCALL GETBUS                     ;啟動總線
          CJNE  R2,#00H,IRDB_RET
          MOV   A,SLA
          INC   A
          LCALL SENDBYTE                   ;器件尋址
          JNB   ACK,IRDB_END
          LCALL RCVBYTE                    ;讀出立即地址數據
          LCALL SNACK                      ;發送非應答位以結束總線        
IRDB_END: LCALL ENDBUS                     ;結束總線
IRDB_RET: RET
                    

;有子地址多字節讀
;占用R0,R1,R3,ACC
;入口參數:器件從地址SLA 子地址SUBA  接收數據區MRD  讀入字節數NUMBYTE
;出口參數:ACK,ACK=1時操作正確。
IRDNBYTE:    
          CLR   ACK
          MOV   R2,#00H
          LCALL GETBUS                          ;取得總線
          CJNE  R2,#00H,IRDNB_RET
          MOV   R0,#MRD
          MOV   R1,NUMBYTE 
          MOV   A,SLA
          LCALL SENDBYTE
          JNB   ACK,IRDNB_END
          MOV   A,SUBA
          LCALL SENDBYTE
          JNB   ACK,IRDNB_END
          LCALL RRST                           ;發送器件子地址后即重新啟動總線
          MOV   A,SLA
          INC   A
          LCALL SENDBYTE
          JNB   ACK,IRDNB_END
IRDNB_L1: LCALL RCVBYTE                        ;讀出多個字節數據
          MOV   @R0,A
          INC   R0
          DJNZ  R1,IRDNB_L2
          LCALL SNACK        
IRDNB_END:LCALL ENDBUS                    
IRDNB_RET:RET
          
IRDNB_L2: LCALL SACK
          SJMP  IRDNB_L1
        
;無子地址寫單字節
;入口參數:寫入值在ACC
;出口參數:ACK為1時表明操作正確 
IWRBYTE:          
          CLR   ACK
          MOV   R2,#00H                  
          LCALL GETBUS
          CJNE  R2,#00H,IWRB_RET
          MOV   R1,A                        ;將A暫存在R1
          MOV   A,SLA
          LCALL SENDBYTE
          JNB   ACK,IWRB_END
          MOV   A,R1                    
          LCALL SENDBYTE                    ;器件尋址完后寫入數據
IWRB_END: LCALL ENDBUS         
IWRB_RET: RET
 
          
;有子址址多字節寫
;占用R0,R1,R3,ACC
;入口參數:器件從地址SLA 子地址SUBA  發送數據區MTD  讀入字節數NUMBYTE
;出口參數:ACK,ACK=1時操作正確。
IWRNBYTE:  
          CLR   ACK
          MOV   R2,#00H            
          LCALL GETBUS
          CJNE  R2,#00H,IWRNB_RET
          MOV   R0,#MTD
          MOV   R1,NUMBYTE
          MOV   A,SLA
          LCALL SENDBYTE                          ;器件尋址
          JNB   ACK,IWRNB_END                     ;器件無應答則結束
          MOV   A,SUBA
          LCALL SENDBYTE                          ;發送子地址
          JNB   ACK,IRDNB_END
IWRNB_L1: MOV   A,@R0                             ;取出入數據
          LCALL SENDBYTE                          ;寫入數據
          JNB   ACK,IRDNB_END
          INC   R0
          DJNZ  R1,IWRNB_L1                       ;寫完NUMBYTE個字節?
IWRNB_END:LCALL ENDBUS         
IWRNB_RET:RET



;無子地址多字節讀
;占用R0,R1,R3,ACC
;入口參數:器件從地址SLA 接收數據區MRD  讀入字節數NUMBYTE
;出口參數:ACK,ACK=1時操作正確。
IRDNBYTEEXT:   
           CLR   ACK
           MOV   R2,#00H
           LCALL GETBUS                          ;取得總線
           CJNE  R2,#00H,IRDNBEE_RET
           MOV   R0,#MRD
           MOV   R1,NUMBYTE 
           MOV   A,SLA
           INC   A
           LCALL SENDBYTE
           JNB   ACK,IRDNBEE_END
IRDNBEE_L1:LCALL RCVBYTE                        ;讀出多個字節數據
           MOV   @R0,A
           INC   R0
           DJNZ  R1,IRDNBEE_L2
           LCALL SNACK        
IRDNBEE_END:LCALL ENDBUS                    
IRDNBEE_RET:RET
          
IRDNBEE_L2:LCALL SACK
           SJMP  IRDNBEE_L1

;無子地址多字節寫
;占用R0,R1,R3,ACC
;入口參數:器件從地址SLA  發送數據區MTD  讀入字節數NUMBYTE
;出口參數:ACK,ACK=1時操作正確。
IWRNBYTEEXT:
           CLR   ACK
           MOV   R2,#00H            
           LCALL GETBUS
           CJNE  R2,#00H,IWRNBEE_RET
           MOV   R0,#MTD
           MOV   R1,NUMBYTE
           MOV   A,SLA
           LCALL SENDBYTE                          ;器件尋址
           JNB   ACK,IWRNBEE_END                   ;器件無應答則結束
IWRNBEE_L1:MOV   A,@R0                             ;取出入數據
           LCALL SENDBYTE                          ;寫入數據
           JNB   ACK,IRDNBEE_END
           INC   R0
           DJNZ  R1,IWRNBEE_L1                     ;寫完NUMBYTE個字節?
IWRNBEE_END:LCALL ENDBUS         
IWRNBEE_RET:RET




;                         請注意
;
;占用內部資源:         R0,R1,R2,R3,ACC,Cy。
;    在你的程序里要做以下定義:
;使用前須定義變量:  SLA 器件從地址  SUBA器件子地址  NUMBYTE讀/寫的字節數 ,位變量ACK 
;使用前須定義常量:  SDA SCL 總線位  MTD 發送數據緩沖區首址    MRD 接收數據緩沖區首址
;(ACK為調試/測試位,ACK為0時表示無器件應答;R2為總線出錯字節,不為00H則是總線出錯)
;軟件包調用返回后,I2CON,I2CFG寄存器值可供診斷。

;(1)IRDBYTE  無子地址讀單字節子程序
;       入口:器件從地址SLA
;       出口:讀出數據ACC,應答位ACK,總線出錯字R2
;       
;(2)IRDNBYTE 有子址地址讀多字節子程序
;       入口:器件從地址SLA,器件子地址SUBA,讀出字節數NUMBYTE
;       出口:讀出數據依次放在MRD區,應答位ACK,總線出錯字R2
;
;(3)IWRBYTE  無子地址寫單字節子程序
;      入口: 器件從地址SLA,寫入的數據ACC
;      出口: 應答位ACK,總線出錯字R2
;
;(4)IWRNBYTE 有子地址寫多字節子程序
;      入口: 器件從地址SLA,寫入的數據依次放在MTD區,寫入字節數NUMBYTE
;      出口: 應答位ACK,總線出錯字R2

;(5)IRDNBYTEEXT 無子地址讀多字節子程序
;       入口:器件從地址SLA,讀出字節數NUMBYTE
;       出口:讀出數據依次放在MRD區,應答位ACK,總線出錯字R2

;(6)IWRNBYTEEXT 無子地址寫多字節子程序
;      入口: 器件從地址SLA,寫入的數據依次放在MTD區,寫入字節數NUMBYTE
;      出口: 應答位ACK,總線出錯字R2

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区大片| 成人黄色国产精品网站大全在线免费观看 | 亚洲三级在线免费观看| 一区二区三区四区精品在线视频| 亚洲成av人片观看| 国产另类ts人妖一区二区| 一本大道久久精品懂色aⅴ| 欧美精品一二三四| 国产欧美一区二区精品秋霞影院| 亚洲欧洲精品天堂一级| 日韩黄色免费电影| 成人免费黄色大片| 欧美高清一级片在线| 久久色成人在线| 一区二区三区在线视频免费 | 日韩一区二区精品在线观看| 久久久不卡影院| 一区二区三区在线免费视频| 久久se精品一区二区| 色综合久久中文字幕| 精品少妇一区二区三区日产乱码| 亚洲欧洲精品天堂一级| 精品一区二区在线看| 欧美在线观看视频在线| 久久久不卡网国产精品二区| 亚洲成人7777| proumb性欧美在线观看| 日韩午夜激情av| 一区二区三区小说| 懂色中文一区二区在线播放| 91精品在线免费观看| 亚洲人xxxx| 丁香啪啪综合成人亚洲小说| 日韩午夜在线观看| 亚洲自拍与偷拍| av在线综合网| 国产日韩欧美高清| 寂寞少妇一区二区三区| 欧美日韩中文另类| 亚洲欧美日韩在线不卡| 国产二区国产一区在线观看| 日韩午夜激情视频| 天天影视涩香欲综合网 | 亚洲香肠在线观看| 成人福利视频网站| 亚洲一区二区在线免费观看视频| 福利电影一区二区| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 亚洲成av人影院| 91在线观看污| 日本一区二区电影| 精久久久久久久久久久| 欧美一区二区三区性视频| 亚洲午夜私人影院| 日本久久一区二区| 亚洲精品成人悠悠色影视| 一本一道波多野结衣一区二区| 中文字幕不卡在线观看| 国产精品66部| 久久综合色之久久综合| 久久国产精品99久久久久久老狼| 精品视频免费看| 亚洲激情五月婷婷| 在线观看日韩电影| 亚洲女与黑人做爰| 在线免费精品视频| 亚洲一区精品在线| 欧美色综合久久| 偷拍亚洲欧洲综合| 7777精品伊人久久久大香线蕉完整版 | 国产精品18久久久久久久久 | 粉嫩久久99精品久久久久久夜| 久久久另类综合| 国产美女主播视频一区| 久久精品亚洲精品国产欧美kt∨| 国产一区二区日韩精品| 国产三级一区二区| 不卡一区在线观看| 亚洲欧美偷拍另类a∨色屁股| 色偷偷88欧美精品久久久| 一区二区三区丝袜| 欧美日韩精品免费观看视频| 午夜精品久久久久久久| 91精品国产色综合久久久蜜香臀| 免费成人结看片| 久久久久一区二区三区四区| 成人免费电影视频| 自拍av一区二区三区| 国产无人区一区二区三区| 国产麻豆精品在线| 国产精品私人影院| 91久久精品一区二区三区| 亚洲成人www| 日韩午夜中文字幕| 国产99精品国产| 亚洲免费av网站| 51精品国自产在线| 国产精品18久久久| 亚洲精品网站在线观看| 欧美肥妇free| 韩国av一区二区三区| 最新久久zyz资源站| 欧美色区777第一页| 麻豆精品一二三| 国产精品久久久久一区| 欧美日韩一区二区三区在线| 久久爱www久久做| 中文字幕一区二区三区乱码在线| 在线观看www91| 激情另类小说区图片区视频区| 国产精品久久久久三级| 欧美日韩一二三区| 久久se这里有精品| 国产精品第一页第二页第三页| 欧美日韩第一区日日骚| 国产一本一道久久香蕉| 亚洲一区二区欧美日韩| 精品久久久久久久久久久久久久久 | 91亚洲精品久久久蜜桃网站| 亚洲成在线观看| 久久精品一区二区三区不卡| 日本久久一区二区三区| 国产精一区二区三区| 亚洲一区中文在线| 久久亚洲一区二区三区明星换脸 | 亚洲高清视频在线| 久久久久久久久久久电影| 欧美性生交片4| 另类小说色综合网站| 亚洲色图欧美在线| 亚洲精品一区二区三区蜜桃下载| 日本黄色一区二区| 国产精品一区三区| 视频一区欧美日韩| 1024国产精品| 欧美福利视频导航| 91国偷自产一区二区三区观看| 日韩av中文字幕一区二区三区 | 成人丝袜高跟foot| 日产精品久久久久久久性色| 亚洲欧洲av在线| 久久久综合激的五月天| 555www色欧美视频| 欧洲av在线精品| 不卡一二三区首页| 国产麻豆视频精品| 蜜桃视频在线一区| 亚洲一区二区综合| 亚洲人快播电影网| 国产精品视频观看| 久久久另类综合| 精品久久久久久无| 在线综合亚洲欧美在线视频| 一本一道久久a久久精品综合蜜臀| 高潮精品一区videoshd| 免费成人在线播放| 丝袜国产日韩另类美女| 亚洲综合在线免费观看| 中文字幕亚洲不卡| 欧美激情一区在线| 久久久精品国产免费观看同学| 日韩一区二区电影网| 欧美日韩视频在线第一区| 色婷婷av一区二区三区gif| 国产 日韩 欧美大片| 国产麻豆视频一区二区| 国产在线精品一区二区三区不卡| 日本三级亚洲精品| 视频在线观看一区二区三区| 香蕉成人啪国产精品视频综合网| 一个色妞综合视频在线观看| 自拍偷拍亚洲激情| 亚洲裸体在线观看| 亚洲人成网站在线| 一区二区三区精品在线| 樱桃国产成人精品视频| 亚洲精品视频免费看| 亚洲欧美电影一区二区| 亚洲男人电影天堂| 玉米视频成人免费看| 亚洲影院理伦片| 午夜精品久久久久久不卡8050| 午夜精品成人在线| 日韩精品成人一区二区在线| 日韩黄色片在线观看| 美国毛片一区二区三区| 久久不见久久见免费视频7| 韩国毛片一区二区三区| 国产精品小仙女| 不卡一二三区首页| 在线观看不卡一区| 91精品国产一区二区三区| 欧美一区二区三区小说| 欧美精品一区视频| 国产精品蜜臀在线观看| 中文字幕综合网| 午夜精品久久久久久久99水蜜桃 | 国产视频在线观看一区二区三区| 久久久不卡影院| 国产精品不卡一区|