单片机iic是做什么的? 单片机iic程序不懂给分析下啊

\u4ec0\u4e4851\u5355\u7247\u673a\u578b\u53f7\u652f\u6301iic\uff1f

\u5927\u90e8\u520651\u5355\u7247\u673a\u90fd\u4e0d\u652f\u6301iic\uff0c\u597d\u8c61\u53ea\u6709C8051F410\u7cfb\u5217\u652f\u6301\uff0c\u4f30\u8ba1\u8fd9\u4e2a\u82af\u7247\u4e0d\u4fbf\u5b9c
\u4e00\u822c\u90fd\u7528\u666e\u901aIO\u5f15\u811a\u6765\u6a21\u62dfiic\u603b\u7ebf\u65f6\u5e8f

\u8d34\u4e2a\u7a0b\u5e8f\u7ed9\u4f60\u770b\u770b\uff0c\uff0c\uff0c\u5355\u7247\u673a\u6ca1\u6709I2C\u603b\u7ebf\u63a5\u53e3\uff0c\u53ea\u80fd\u9760\u8f6f\u4ef6\u6a21\u62df
/*\u7a0b\u5e8f\u7684I2C\u4ece\u5668\u4ef6\u5730\u5740\u4e3a1010\uff0c\u7247\u9009\u5730\u5740\u4e3a000*/
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit SDA=P1^7;
sbit SCL=P1^6;

void Delay(uint us)
{
for(us;us>0;us--);
}


void start_iic() // \u542f\u52a8I2C\u603b\u7ebf
{
SDA=1; // \u53d1\u9001\u8d77\u59cb\u6761\u4ef6\u6570\u636e\u4fe1\u53f7\uff0c\u542f\u52a8\u65f6\uff0c
SCL=1; // \u5fc5\u9700\u4f7f\u6570\u636e\u7ebf\u3001\u65f6\u949f\u4fe1\u53f7\u7ebf\u5904\u4e8e\u9ad8\u7535\u5e73\uff08\u7a7a\u95f2\u6001\uff09
Delay(10); // \u4f7f\u7528I2C\u603b\u7ebf\u5fc5\u9700\u8003\u8651\u4fdd\u6301\u65f6\u95f4\u548c\u5efa\u7acb\u65f6\u95f4\uff0c\u6545\u5ef6\u65f6
SDA=0; //\u4ea7\u751f\u4e0b\u964d\u6cbf\uff0c\u53d1\u9001\u8d77\u59cb\u4fe1\u53f7
Delay(10);
SCL=0;
}


void stop_iic()
{
SDA=0; //\u4e3a\u4ea7\u751f\u4e0a\u8df3\u6cbf\u505a\u51c6\u5907
SCL=1; //\u6253\u5f00\u65f6\u949f\u7ebf
Delay(10);
SDA=1; //\u4ea7\u751f\u505c\u6b62\u4fe1\u53f7\uff08\u4e0a\u8df3\u6cbf\u6709\u6548\uff09
Delay(10);
SCL=0; //\u65f6\u949f\u7ebf\u6062\u590d\u65e0\u6548\u6001//
}


void ack_iic()
{
SDA=0;// \u63a5\u53d7\u5668\u4ef6\u53d1\u9001\u5e94\u7b54\u4fe1\u53f7
SCL=1;
Delay(10);
SCL=0;
SDA=1;//\u5e94\u7b54\u4fe1\u53f7\u4f4e\u7535\u5e73\u6709\u6548\uff0c\u6545\u9700\u5c06\u5176\u91cd\u65b0\u7f6e\u9ad8\u7535\u5e73
}


void nack_iic()
{
SDA=1; //\u4e3b\u5668\u4ef6\u53d1\u975e\u5e94\u7b54\u4fe1\u53f7\uff0c\u901a\u77e5AT24C08\u4e0d\u518d\u53d1\u9001\u6570\u636e
SCL=1;
Delay(10);
SCL=0;
SDA=0; //\u975e\u5e94\u7b54\u4fe1\u53f7\u9ad8\u7535\u5e73\u6709\u6548\uff0c\u6545\u9700\u5c06\u5176\u91cd\u65b0\u7f6e\u4f4e\u7535\u5e73
}


Write_byte(uchar c)
{
uchar i;
for(i=0;i<8;i++)
{
if(c&0x80)SDA=1;
else SDA=0;
SCL=1;
Delay(10);
SCL=0;//\u56e0\u4e3a\u5f53\u65f6\u949f\u7ebf\u6709\u6548\u662f\uff0c\u6570\u636e\u7ebf\u5fc5\u987b\u4fdd\u6301\u7a33\u5b9a\u7684\u7535\u5e73\uff0c
c=c<<1;//\u8981\u6539\u53d8SDA\u7535\u5e73\uff0c\u5e94\u5148\u5c06SCL\u62c9\u4f4e
}
SDA=1;//\u91ca\u653eI2C\u603b\u7ebf\uff0c\u51c6\u5907\u63a5\u53d7\u5e94\u7b54\u4fe1\u53f7
SCL=1;
Delay(10);
if(SDA==1)F0=0;//\u6ca1\u6709\u63a5\u5230\u5e94\u7b54\u4f4d
else F0=1;
SCL=0;
}



uchar Read_byte()
{
uchar i;
uchar r=0;
SDA=1; //\u7f6e\u6570\u636e\u7ebf\u4e3a\u8f93\u5165\u65b9\u5f0f
for(i=0;i<8;i++)
{
r=r<<1;
SCL=1;
Delay(10); //\u4fdd\u8bc1\u4e00\u5b9a\u7684\u7535\u5e73\u4fdd\u6301\u65f6\u95f4
if(SDA==1)r++; //\u4ece\u9ad8\u4f4d\u5f00\u59cb\uff0c\u4e00\u4f4d\u4e00\u4f4d\u7684\u8bfb
SCL=0;
}
return r;
}

main()
{
uchar slave=0xa0;//I2C\u603b\u7ebf\u4ece\u5668\u4ef6\u5730\u5740\uff08\u6ce8\u610f\uff1a\u786c\u4ef6\u7535\u8def\u7684\u63a5\u6cd5\u8981\u662f\u7247\u9009\u5730\u5740\u4e3a0\uff0c\u5426\u5219\u4e0d\u80fd\u5de5\u4f5c\uff09
uchar Rslave=slave+1;//\u4e3b\u5668\u4ef6\u53d1\u9001\u8bfb\u63a7\u5236\u5b57\u5b57\u8282
uchar addre=0x20;// \u6307\u5b9a\u7684\u5199\u6570\u636e\u5730\u5740
uchar wbuf=0x23;//\u5c06\u8981\u5199\u8fdbaddre\u7684\u6570\u636e
uchar rbuf;//\u5b58\u653e\u8bfb\u51fa\u7684\u6570\u636e\u7684\u4e34\u65f6\u53d8\u91cf
start_iic();//\u4ea7\u751f\u8d77\u59cb\u4fe1\u53f7
Write_byte(slave); //\u53d1\u9001\u4ece\u5668\u4ef6\u5730\u5740
if(F0==0)return 0; //\u68c0\u67e5\u5e94\u7b54\u4f4d
Write_byte(addre); //\u53d1\u9001\u76ee\u7684\u5730\u5740
if(F0==0)return 0;
Write_byte(wbuf); //\u53d1\u90018\u4e3a\u6570\u636e
if(F0==0)return 0;
stop_iic(); //\u505c\u6b62\u4fe1\u53f7

/*8\u4f4d\u7684\u6570\u636e\u53d1\u9001\u5b8c\u6bd5*/

Delay(1000);
start_iic();
Write_byte(slave);
if(F0==0)return 0;
Write_byte(addre);
if(F0==0)return 0;

start_iic();//\u518d\u6b21\u4ea7\u751f\u8d77\u59cb\u4fe1\u53f7\uff0c\u4e0d\u80fd\u5c11
Write_byte(Rslave);//\u9001\u8bfb\u63a7\u5236\u5b57
if(F0==0)return 0;
rbuf=Read_byte();//\u8bfb\u51fa\u6307\u5b9a\u5355\u5143\u7684\u5185\u5bb9
nack_iic();//\u975e\u5e94\u7b54\u4fe1\u53f7
stop_iic();

/*8\u4f4d\u7684\u6570\u636e\u8bfb\u53d6\u5b8c\u6bd5*/

TMOD=0x20; //\u4e32\u53e3\u8c03\u8bd5
TL1=0xfd;
TH1=0xfd;
SCON=0x40;
PCON=0x00;
TR1=1;
while(1)
{
SBUF=rbuf; //\u653e\u5165\u7f13\u51b2
while(TI==0);
TI=0;
Delay(10000);
}

}

与使用IIC协议的芯片连接通信。单片机的IIC一般是指的单片机能够通过编程实现硬件IIC。你说的是STM32单片机吧?
硬件IIC比模拟IIC速度更快,但是接口固定,并不是一个好选择。用来学习还是不错。

I2C是个串行半双工的同学协议,与串口通信类似

  • 鍗曠墖鏈篿ic鏄仛浠涔堢殑?
    绛旓細涓庝娇鐢↖IC鍗忚鐨勮姱鐗囪繛鎺ラ氫俊銆鍗曠墖鏈虹殑IIC涓鑸槸鎸囩殑鍗曠墖鏈鸿兘澶熼氳繃缂栫▼瀹炵幇纭欢IIC銆備綘璇寸殑鏄疭TM32鍗曠墖鏈哄惂锛熺‖浠禝IC姣旀ā鎷烮IC閫熷害鏇村揩锛屼絾鏄帴鍙e浐瀹氾紝骞朵笉鏄竴涓ソ閫夋嫨銆傜敤鏉ュ涔犺繕鏄笉閿欍
  • 鍗曠墖鏈涓浣曢夌敤SPI銆乁ART鍜IIC/SmBus?鏈夎皝鐭ラ亾浠栦滑鐨勪紶杈撻熷害鍜屽簲鐢ㄥ満...
    绛旓細1銆丼PI锛歋PI(SerialPeripheralInterface)鏄疢OTOROLA鍏徃鎻愬嚭鐨勫悓姝ヤ覆琛屾荤嚎鏂瑰紡銆傞珮閫熷悓姝ヤ覆琛屽彛銆3锝4绾挎帴鍙o紝鏀跺彂鐙珛銆佸彲鍚屾杩涜.鍥犲叾纭欢鍔熻兘寮哄ぇ鑰岃骞挎硾搴旂敤銆傚湪鍗曠墖鏈虹粍鎴愮殑鏅鸿兘浠櫒鍜屾祴鎺х郴缁熶腑銆2銆両IC鐢1鏍逛覆琛屾暟鎹嚎锛圫DA锛+1鏍逛覆琛屾椂閽熺嚎锛圫CL锛夋瀯鎴愶紝瀹炵幇浜嗗弻宸ョ殑鍚屾鏁版嵁浼犺緭锛堝弻鍚戜紶杈擄級銆傛湁...
  • 浠涔堟槸IIC鎺ュ彛
    绛旓細IIC鍗矷nter-IntegratedCircuit锛堥泦鎴愮數璺荤嚎锛夛紝鏄竴绉嶅鍚戞帶鍒舵荤嚎锛岀敱椋炲埄娴﹀崐瀵间綋鍏徃鍦ㄥ叓鍗佸勾浠e垵璁捐锛屼富瑕佹槸鐢ㄦ潵杩炴帴鏁翠綋鐢佃矾锛圛CS锛夈傚湪IIC涓紝澶氫釜鑺墖鍙互杩炴帴鍒板悓涓鎬荤嚎缁撴瀯涓嬶紝鍚屾椂姣忎釜鑺墖閮藉彲浠ヤ綔涓哄疄鏂芥暟鎹紶杈撶殑鎺у埗婧愶紝杩欑鏂瑰紡绠鍖栦簡淇″彿浼犺緭鎬荤嚎銆
  • 鍗曠墖鏈涓IIC鍗忚鏄?
    绛旓細I2C锛圛nter锛岻ntegrated Circuit锛夋荤嚎鏄敱PHILIPS鍏徃寮鍙戠殑涓ょ嚎寮忎覆琛屾荤嚎锛岀敤浜庤繛鎺ュ井鎺у埗鍣ㄥ強鍏跺鍥磋澶銆傛槸寰數瀛愰氫俊鎺у埗棰嗗煙骞挎硾閲囩敤鐨勪竴绉嶆荤嚎鏍囧噯銆傚畠鏄悓姝ラ氫俊鐨勪竴绉嶇壒娈婂舰寮忥紝鍏锋湁鎺ュ彛绾垮皯锛屾帶鍒舵柟寮忕畝鍗曪紝鍣ㄤ欢灏佽褰㈠紡灏忥紝閫氫俊閫熺巼杈冮珮绛変紭鐐广傚弬鑰冭祫鏂欙細http://baike.baidu.com/view/95764.htm...
  • iic涓庝箞sda鏄庝箞浼犳暟鎹殑
    绛旓細IIC 鍗矷nter-Integrated Circuit(闆嗘垚鐢佃矾鎬荤嚎锛锛岃繖绉嶆荤嚎绫诲瀷鏄敱椋炲埄娴﹀崐瀵间綋鍏徃鍦ㄥ叓鍗佸勾浠e垵璁捐鍑烘潵鐨勶紝涓昏鏄敤鏉ヨ繛鎺ユ暣浣撶數璺(ICS) 锛孖IC鏄竴绉嶅鍚戞帶鍒舵荤嚎锛屼篃灏辨槸璇村涓姱鐗囧彲浠ヨ繛鎺ュ埌鍚屼竴鎬荤嚎缁撴瀯涓嬶紝鍚屾椂姣忎釜鑺墖閮藉彲浠ヤ綔涓哄疄鏃舵暟鎹紶杈撶殑鎺у埗婧愩傝繖绉嶆柟寮忕畝鍖栦簡淇″彿浼犺緭鎬荤嚎鎺ュ彛銆
  • 鍗曠墖鏈虹殑IIC涓嶶ART闂??楂樻墜甯繖!
    绛旓細1銆俇ART閫氳缂栫▼绠鍗曪紝閫氳閫熷害杩滄瘮IIC蹇紝鍙互鐩存帴浣跨敤RS485寤朵几閫氳璺濈杈惧埌1km锛岄氳閫熷害寰堝鏄撳仛楂樸傛湰浜哄湪1km鑼冨洿鍐呭仛杩1Mbps閫氳銆2銆侷IC鏈韩鏄负鏉跨骇閫氳璁捐锛屾病鏈夎冭檻杩滆窛绂婚氳锛涘嵆浣跨煭璺濋氳閫熷害涔熺敱浜庣‖浠堕檺鍒堕毦浠ラ珮浜400kbps锛屼竴鑸煭璺濅负100kbps浠ュ唴銆傚綋鐒禝IC鍏冧欢涔熷彲鐢ㄥ叾浠栬姱鐗囪浆鎹㈠悗锛屽畬鎴...
  • iic娉㈠舰鍙樻垚涓夎娉鏄粈涔闂
    绛旓細鍚戣緭鍏ョ娉ㄥ叆淇″彿锛屾鏃跺簲璇ユ槸涓涓弽鍚戞斁澶у櫒锛屾牳瀵圭浉浣嶅拰澧炵泭锛屽鏋滀笉瀵癸紝灏辫妫鏌ラ敊璇疘IC(Inter Integrated Circuit锛闆嗘垚鐢佃矾鎬荤嚎)鏄竴绉嶇敱 PHILIPS 鍏徃寮鍙戠殑涓ょ嚎寮忎覆琛屾荤嚎锛岀敤浜庤繛鎺ュ井鎺у埗鍣ㄥ強鍏跺鍥磋澶囥傚畠鏄敱鏁版嵁绾 SDA 鍜屾椂閽 SCL 鏋勬垚鐨勪覆琛屾荤嚎锛屽彲鍙戦佸拰鎺ユ敹鏁版嵁銆傚湪 CPU (鍗曠墖鏈)涓嶪IC...
  • 鍗曠墖鏈瀛︿範IIC鎬荤嚎EEPROM閲嶈鍚,鏈浠涔鐢
    绛旓細杩欎釜骞朵笉闅撅紝鏈夋満浼氫簡瑙d竴涓嬪氨鍙互浜嗐IIC鎬荤嚎鍙渶瑕佷袱鏍圭嚎灏辫兘閫氫俊锛屾湁涓浜涙椂鍊欏紩鑴氳祫婧愪笉瓒冲張闇瑕佸瓨鍌ㄥ皯閲忔暟鎹殑鏃跺欏氨浼氱敤鍒般
  • i骞虫柟c 鏄浠涔鎰忔?璋佽兘璇︾粏鐨勪粙缁嶄笅?鎴戣鎵╁睍鍗曠墖鏈鐗囧flash
    绛旓細I2C 鏄竴绉嶆荤嚎鎺ュ彛, 鍙浜屾牴绾(IO鍙) ,鍗曠墖鏈浣滀负涓绘帶鍒跺櫒,鍦ㄦ荤嚎涓婂彲浠ユ寕鎺ュ涓澶(IC).http://www.zlgmcu.com/philips/philips-iic.asp 鍙傝冭祫鏂欙細http://www.zlgmcu.com/philips/philips-iic.asp
  • 璇烽棶鍗曠墖鏈虹殑VCC銆 GND銆 TXD銆 SDA銆 SCK鏄粈涔鎰忔?
    绛旓細SDA鍜孲CK鍒欐槸鐢ㄤ簬IIC锛圛nter-Integrated Circuit锛夋荤嚎鐨勬帴鍙c係DA鏄疘IC鏁版嵁绾匡紝鐢ㄤ簬浼犺緭鏁版嵁淇℃伅锛岃孲CK鏄疘IC鏃堕挓绾匡紝鎺у埗鏁版嵁鐨勪紶杈撹妭濂忋傚煎緱娉ㄦ剰鐨勬槸锛鍗曠墖鏈虹殑涓茶绔彛閫氬父涓嶈兘鐩存帴涓嶪IC鎬荤嚎杩涜閫氫俊锛屽畠浠箣闂存槸鐙珛涓斾簰涓嶅共鎵扮殑銆傚崟鐗囨満锛屽疄璐ㄤ笂鏄竴涓井鍨嬭绠楁満锛屽畠灏嗕竴涓畬鏁寸殑璁$畻鏈虹郴缁熼泦鎴愬湪涓鍧...
  • 扩展阅读:单片机入门基础知识 ... 为什么不建议学plc ... 现在搞plc还有出路吗 ... iic时序图 ... 为什么不建议学单片机 ... 单片机有必要学吗 ... 单片机io口四种模式 ... 单片机工作太难找了 ... iic通信协议的特点 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网