IIC器件的讀寫(xiě)操作,大家看看這個(gè)所謂的“教程”!!
這里,無(wú)論是“接收”,還是“發(fā)送”,都是“ACK”,其“ACK”的內(nèi)容是(SCL_IC_ C ARD=1; SCL_IC_ C ARD=0;”)就這些。這樣能行嗎?這個(gè)“老師”連基本的IIC協(xié)議都沒(méi)弄懂。這大概不會(huì)是筆誤吧?
本文引用地址:http://cafeforensic.com/article/201611/323428.htm在IIC協(xié)議中,不管是主控器件還是從器件,A、向總線發(fā)送一個(gè)字節(jié)數(shù)據(jù)后,就要發(fā)送一個(gè)應(yīng)答信號(hào)(1bit),告訴接收器件“發(fā)送完成”。B、接收器件正確接收到一個(gè)字節(jié)的數(shù)據(jù)后,也要發(fā)送一個(gè)應(yīng)答信號(hào)(1bit),告訴發(fā)送器件“接收完成”
如果接收器件接收不正確,則不會(huì)發(fā)送應(yīng)答信號(hào)。發(fā)送器件就檢測(cè)不到“應(yīng)答信號(hào)”,這時(shí)就要從“開(kāi)始”步驟重來(lái)。
這里就有了這么幾個(gè)環(huán)節(jié):“應(yīng)答信號(hào)(1bit,低位)”、“非應(yīng)答信號(hào)(1bit,高位)、“檢測(cè)應(yīng)答信號(hào)”。
讀的流程:發(fā)送開(kāi)始信號(hào)-發(fā)送器件地址(含“寫(xiě)”信息)-檢測(cè)應(yīng)答-發(fā)送字節(jié)地址-檢測(cè)應(yīng)答-發(fā)送開(kāi)始信號(hào)(含“讀”信息)-檢測(cè)應(yīng)答-讀一個(gè)字節(jié)-發(fā)送應(yīng)答信號(hào)-......讀第N字節(jié)-發(fā)送非應(yīng)答信號(hào)-發(fā)送停止信號(hào)
寫(xiě)的流程:發(fā)送開(kāi)始信號(hào)-發(fā)送器件地址(含“寫(xiě)”信息)-檢測(cè)應(yīng)答-發(fā)送字節(jié)地址-檢測(cè)應(yīng)答-寫(xiě)一個(gè)字節(jié)-檢測(cè)應(yīng)答信號(hào)-......寫(xiě)第N字節(jié)-檢測(cè)應(yīng)答信號(hào)-發(fā)送停止信號(hào)
上面僅就多字節(jié)讀寫(xiě)做了簡(jiǎn)單的描述,單字節(jié)的類(lèi)似。
特別說(shuō)明:無(wú)論哪一個(gè)“檢測(cè)應(yīng)答信號(hào)”不成功,都要返回到“發(fā)送開(kāi)始信號(hào)”處,重新開(kāi)始。 如果是大容量的,發(fā)送地址分高位、低位2次,都要“檢測(cè)應(yīng)答”
下面就是這個(gè)“教程”的摘錄:
*****************(鄭重提醒:這是一個(gè)不正確的程序,千萬(wàn)不要套用)******************
第十四講 IC卡(24C01)
在日常生活中,IC卡的使用越來(lái)越廣泛,而且還有進(jìn)一步擴(kuò)大的趨勢(shì)。因此
有必要掌握這方面的知識(shí),下面以24C01 為例,簡(jiǎn)單地介紹一般使用方法。
#include#include sbit SC L _ IC _ C AR D= P1 ^3 ; sbit SDA_ IC _ C AR D= P1 ^4 ; sbit WP_IC_CARD =P1^7; bdata char com_data; sbit m o s_bit=com_data^7; sbit low_bit=com_data^0; unsigned char data display _buf fer[8]; void d e l a y(i n t n ); unsigned char rd_24c01(char a); void w r_24c01(char a,char b); ma in() { unsigned char i; WP_IC_CARD=1; for (i=0;i<=7;i++) {display _buf fer[i]=rd_24c01(i);delay (250);} for (i=0;i<=7;i++) {w r_24c01(i,display_buf fer[i]);delay (250);} while(1); } void start() //啟動(dòng)讀寫(xiě)時(shí)序 { // 圖4-22 (c )開(kāi)始、結(jié)束脈沖時(shí)序 SDA_IC_ C ARD=1; SCL_IC_ C ARD=1; SDA_ IC _ C AR D= 0 ; // 啟動(dòng)start SCL_IC_ C ARD=0; } void stop() //停止操作 { // 圖4-22 (c )開(kāi)始、結(jié)束脈沖時(shí)序 SDA_IC_ C ARD=0; SCL_IC_ C ARD=1; SDA_IC_ C ARD=1; } void ack() //應(yīng)答函數(shù) { SCL_IC_ C ARD=1; SCL_IC_ C ARD=0; } void shift8(char a) //8位移位輸出 { data unsigned char i; com _data=a; for(i=0;i<8;i++) { SDA_IC_CARD=mo s_bit; S C L _ IC _ C AR D= 1 ; S C L _ IC _ C AR D= 0 ; com _data=com_data*2; } }
評(píng)論