《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 解決方案 > PIC單片機(jī)的IIC接口程序

PIC單片機(jī)的IIC接口程序

2009-01-16
關(guān)鍵詞: 接口程序 PIC

PIC單片機(jī)的IIC接口程序

InitI2CBusMaster

;************************************************************
TxmtStartBit
   bsf    Bus_Busy                       ; on a start condition bus is busy
   bsf    STATUS, RP0                    ; Select page 1
   bsf    _SDA                           ; set SDA high
   bsf    _SCL                           ; clock is high
   call   Delay40uSec                    ; This is necessary for setup time
   bcf    _SDA                           ; This gives a falling edge on SDA while clock is high
   call   Delay47uSec                    ; Necessary for START HOLD time
   return
;************************************************************
TxmtStopBit
   bsf    STATUS, RP0                    ; Select page 1
   bcf    _SCL                           ; clock is low
   bcf    _SDA                           ; set SDA low
   bsf    _SCL                           ; clock is pulled up
   call   Delay40uSec                    ; Setup time for STOP condition
   bsf    _SDA                           ; rising edge on SDA while CLOCK is high
   call   Delay47uSec                    ; makes sure a START isn't sent immediately after a STOP
   bcf    Bus_Busy                       ; The bus isn't busy anymore
   return
;************************************************************
AbortI2C
   call   TxmtStopBit                    ; Send a stop bit
   bsf    Abort                          ; set the abort bit
   return
;************************************************************
TxmtSlaveAddr
   movf   SlaveAddr, w                   ; Move slave address to W
   bcf    ACK_Error                      ; reset Acknowledge error bit
   movwf  I2CData                        ; move W to I2C Data
   bcf    I2CData, LSB                   ; Set for write
   btfsc  Slave_RW                       ; If skip then write operation
   bsf    I2CData, LSB                   ; Clear for read
   call   SendData                       ; send the address
   btfss  Txmt_Success                   ; skip if successful
   goto   AddrSendFail                   ; Oops, we failed
   retlw  TRUE                           ; return true
AddrSendFail
   btfss  ACK_Error                      ; was there an error acknowledging
   retlw  FALSE                          ; No, so return 0
   call   TxmtStopBit                    ; Address not acknowleged, so send STOP bit
   retlw  FALSE                          ; Unsuccessful, so return 0

;************************************************************
SendData
 ; We might should make a copy of the data here, the example does but I don't see why!!!
   bsf    Txmt_Progress                  ; We are in the middle of transmitting
   bcf    Txmt_Success                   ; reset success bit
   movlw  0x08
   movwf  I2CBitCount                    ; Set I2C Bit Count to 8
   bsf    STATUS, RP0                    ; Select page 1
TxmtNextBit:
   bcf    _SCL                           ; Set clock Low
   rlf    I2CData, F                     ; MSB First, Note that I2CData is Destroyed
   bcf    _SDA                           ; Set clock based on what the MSB is
   btfsc  STATUS,C                       ; Was the MSB a 1
   bsf    _SDA                           ; Nope set it high
   call   Delay47uSec                    ; guarantee min LOW TIME tLOW & Setup time
   bsf    _SCL                           ; set clock high
   call   Delay40uSec                    ; guarantee min HIGH TIME tHIGH
   decfsz I2CBitCount, F                 ; are we done yet
   goto   TxmtNextBit                    ; nope, send the next bit
;
; Check For Acknowledge
;
   bcf    _SCL                           ; reset clock
   bsf    _SDA                           ; Release SDA line for Slave to pull down
   call   Delay47uSec                    ; guarantee min LOW TIME tLOW & Setup time
   bsf    _SCL                           ; clock for slave to ACK
   call   Delay40uSec                    ; guarantee min HIGH TIME tHIGH
   bcf    STATUS, RP0                    ; Select PAGE 0 to test SDA pin
   btfsc  SdaPin                         ; SDA should be pulled low by slave if OK
   goto   TxmtErrorAck                   ; Uh oh, slave isn't behaving (or isn't there)
   bsf    STATUS, RP0                    ; Select PAGE 1
   bcf    _SCL                           ; reset clock
   bcf    Txmt_Progress                  ; reset progress bit in Bus Status
   bsf    Txmt_Success                   ; Transmission successful
   bcf    ACK_Error                      ; ACK OK
   return
TxmtErrorAck
   bsf    STATUS,RP0                     ; select page 1
   bsf    _SDA                           ; tristate SDA
   bsf    _SCL                           ; tristate SCL
   bcf    Txmt_Progress                  ; reset progress bit in Bus Status
   bcf    Txmt_Success                   ; Transmission NOT successful
   bsf    ACK_Error                      ; No ACK From Slave
   return

;************************************************************
GetData
   bsf    Rcv_Progress                   ; set Bus status for txmt progress
   bcf    Rcv_Success                    ; reset status bit
   movlw  0x08
   movwf  I2CBitCount
RcvNextBit
   bsf    STATUS, RP0                    ; page 1 for TRIS manipulation
   bcf    _SCL                           ; lower clock
   bcf    _SDA                           ; lower data line
   call   Delay47uSec                    ; guarantee min LOW TIME tLOW & setup time
   bsf    _SCL                           ; clock high, data sent by slave
   call   Delay40uSec                    ; guarantee min HIGH TIME tHIGH
   bcf    STATUS, RP0                    ; select page 0 to read Ports
   bcf    STATUS, C                      ; 0 out Status
   btfsc  SdaPin                         ; Check state of pin
   bsf    STATUS, C                      ; Pin was high, set status
   rlf    I2CData, F                     ; left Shift data (MSB first)
   decfsz I2CBitCount, F                 ; Are we done yet
   goto   RcvNextBit                     ; Nope, go get the next one
;
; Generate ACK bit if not last byte to be read,
; if last byte Gennerate NACK ; do not send ACK on last byte, main routine will send a STOP bit
;
   bsf    STATUS, RP0                    ; Page 1 for TRIS manipulation
   bcf    _SCL                           ; pull SCL low
   bcf    _SDA                           ; ACK by pulling SDA low
   btfsc  Last_Byte_Rcv                  ; Is it the last byte to receive
   bsf    _SDA                           ; If so, send NACK by setting SDA high
   call   Delay47uSec                    ; guarantee min LOW TIME tLOW & Setup time
   bsf    _SCL                           ; Raise Clock back up
   call   Delay40uSec                    ; guarantee min HIGH TIME tHIGH
RcvEnd:
   bcf    _SCL                           ; reset clock
   bcf    Rcv_Progress                   ; reset bit in Bus Status
   bsf    Rcv_Success                    ; transmission successful
   bcf    ACK_Error                      ; ACK OK
   return

Delay47uSec:
   movlw ((_47uS_Delay-5)/3 + 1)         ; move delay into W
DlyK
   movwf DelayCount                      ; move what is in W to DelayCount
   decfsz   DelayCount, F                ; Decrement DelayCount
   goto  $-1                             ; Loop until 0
   return                                ; return

Delay40uSec:
   movlw ((_40uS_Delay-8)/3 + 1)         ; move delay into W
   goto  DlyK                            ; goto DlyK loop

 

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
亚洲精品日产精品乱码不卡| 亚洲日本va午夜在线电影| 日韩午夜黄色| 国产精品美女在线观看| 久久国产精品99久久久久久老狼| 欧美高清视频一区| 亚洲丝袜av一区| 麻豆久久婷婷| 亚洲小说欧美另类婷婷| 免费av成人在线| 依依成人综合视频| 午夜激情久久久| 91久久亚洲| 久久视频国产精品免费视频在线 | 欧美日韩国产在线观看| 欧美专区在线观看| 国产精品久久久久久一区二区三区| 亚洲精品偷拍| 精品1区2区3区4区| 欧美主播一区二区三区美女 久久精品人 | 亚洲男女自偷自拍图片另类| 欧美激情视频一区二区三区在线播放| 亚洲欧洲99久久| 国产精品久久9| 亚洲天堂av综合网| 亚洲精品久久久久久下一站| 美女脱光内衣内裤视频久久网站| 欧美一级成年大片在线观看| 国产精品一二一区| 欧美一区观看| 亚洲欧美电影在线观看| 嫩草国产精品入口| 亚洲国产成人精品久久| 激情久久一区| 麻豆成人在线播放| 亚洲日本久久| 亚洲精品欧美一区二区三区| 欧美精品久久久久a| 亚洲图片激情小说| 亚洲一区二区三区影院| 国产精品一区二区久久久| 亚洲综合视频网| 亚洲欧美日韩一区二区在线| 国产欧美一区二区三区沐欲| 久久久久国产成人精品亚洲午夜| 欧美尤物一区| 一色屋精品视频在线看| 欧美日韩123| 午夜影视日本亚洲欧洲精品| 欧美在线视频一区| 亚洲人成在线观看| 国产精品www994| 久久综合色影院| 一区二区三区视频免费在线观看| 一区二区欧美日韩| 国产最新精品精品你懂的| 欧美成人一区二区三区在线观看 | 狠狠久久亚洲欧美专区| 国产精品伦一区| 亚洲精品男同| 一区二区视频在线观看| 欧美一区二区成人| 欧美成年人在线观看| 欧美一激情一区二区三区| 欧美国产综合| 日韩一级黄色片| 欧美自拍偷拍| 亚洲三级影院| 欧美**字幕| 99视频精品全部免费在线| 欧美精品一区二区三区蜜臀| 亚洲欧美日韩精品一区二区| 久久精品九九| 亚洲欧美激情四射在线日| 亚洲国产一区二区a毛片| 国产日韩欧美在线一区| 欧美激情视频在线免费观看 欧美视频免费一 | 午夜精品免费在线| 在线亚洲+欧美+日本专区| 亚洲第一中文字幕在线观看| 国产欧美91| 国产精品每日更新在线播放网址| 欧美日韩999| 欧美日韩麻豆| 欧美激情按摩在线| 欧美精品日韩一区| 欧美理论在线播放| 欧美成人免费大片| 欧美精品免费观看二区| 欧美二区乱c少妇| 欧美激情 亚洲a∨综合| 欧美精品一区二区高清在线观看| 欧美国产日韩xxxxx| 欧美精品久久一区二区| 欧美日韩妖精视频| 国产精品丝袜91| 国产一区二区高清不卡| 在线观看视频免费一区二区三区| 亚洲国产精品ⅴa在线观看| 亚洲精品国产精品乱码不99| 一本色道久久88亚洲综合88| 一区二区三区蜜桃网| 亚洲欧美另类在线观看| 亚洲第一天堂无码专区| 日韩亚洲欧美成人一区| 亚洲欧美制服另类日韩| 久久久人人人| 欧美jizzhd精品欧美巨大免费| 欧美激情一区二区三级高清视频| 欧美激情bt| 国产精品一二| 亚洲人成高清| 香蕉久久夜色精品国产| 亚洲人午夜精品免费| 午夜视频一区在线观看| 麻豆亚洲精品| 国产毛片久久| 亚洲黄色免费网站| 欧美有码在线视频| 亚洲天堂男人| 欧美大片免费观看| 国产亚洲一区二区精品| av不卡免费看| 欧美国产高清| 免费成人黄色| 国产女精品视频网站免费| 亚洲国产精品一区二区三区| 亚洲欧美bt| 午夜精品亚洲| 欧美日韩亚洲网| 亚洲国产精品一区| 在线国产亚洲欧美| 激情av一区| 激情五月***国产精品| 亚洲国产高清在线| 亚洲一区二区高清| 99热免费精品| 中文国产一区| 国产精品免费看片| 国产精品国产三级国产普通话蜜臀| 久久精品99| 欧美成人精品高清在线播放| 美女网站在线免费欧美精品| 久久久精品欧美丰满| 国产美女精品视频免费观看| 亚洲一区在线视频| 性欧美videos另类喷潮| 亚洲自拍电影| 国产精品都在这里| 亚洲午夜激情网站| 亚洲性夜色噜噜噜7777| 欧美日韩免费高清| 这里只有精品在线播放| 欧美日韩系列| 亚洲精选一区| 欧美三级日韩三级国产三级| 在线日韩av永久免费观看| 亚洲国产mv| 欧美激情一区二区三区| 一区二区三区视频观看| 欧美中文字幕视频在线观看| 国产网站欧美日韩免费精品在线观看 | 99精品热6080yy久久| 亚洲欧美日韩一区| 国产一区二区三区高清 | 欧美午夜宅男影院| 欧美在线播放一区| 另类天堂av| 中文欧美字幕免费| 久久久久久亚洲精品中文字幕| 亚洲国产精品悠悠久久琪琪| 亚洲调教视频在线观看| 国产在线精品二区| 亚洲缚视频在线观看| 欧美日韩国产综合视频在线观看中文 | 国内精品国产成人| 亚洲国产精品成人精品| 欧美精品一区在线| 亚洲一区二区精品在线观看| 久久国产精品99精品国产| 亚洲日本一区二区三区| 亚洲自拍偷拍福利| 激情国产一区二区| 亚洲成人在线视频播放| 国产精品嫩草影院av蜜臀| 国产综合网站| 亚洲狠狠婷婷| 欧美日本簧片| 亚洲国产欧美一区二区三区同亚洲| 欧美日韩亚洲免费| 99国产精品久久久久老师| 欧美国产欧美综合| 亚洲嫩草精品久久| 欧美三级视频在线观看| 亚洲国产一区二区在线| 国产美女一区二区| 香蕉乱码成人久久天堂爱免费 | 一区二区三欧美| 欧美国产日韩一区| 亚洲美女在线国产|