久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
AT89S52單片機模擬I2C總線協議讀寫AT24C04
[打印本頁]
作者:
51黑tt
時間:
2016-3-6 13:31
標題:
AT89S52單片機模擬I2C總線協議讀寫AT24C04
I2C總線是2條線總線.數據線SDA,時鐘線SCL.結構簡單.
AT24C04是具有I2C總線接口的EEPROM.大小為512*8bit.單片機AT89S52本身不具有I2C總線結口,所以可編寫程序用并行端口模擬I2C總線協議讀寫AT24C04.
多個設備通信的重點(1.電平的區別,如串口通信中PC與單片機通信,PC機[color=#cc0033]串口電平[/color]值為+12V~-12V,單片機為TTL電平0V~+5V.,所以要用電平轉換芯片轉電平.2,通信協議.(串口通信協議))
具體的協議內容與數據格式可查資料.
代碼如下:
#include <reg52.h>
#define WriteDeviceAddress 0xa0
#define ReadDeviceAddress 0xa1
sbit SCL = P3^4;
sbit SDA = P3^5;
sbit DOG = P0^0;
sbit PP = P0^1;
sbit DOG1 = P0^7;
void DelayMs(unsigned int number)
{
unsigned char tmp;
for(;number!=0;number--,DOG1=!DOG1)
{
for(tmp=112;tmp!=0;tmp--)
{
}
}
}
void Start()
{
SDA = 1;
DelayMs(1);
SCL = 1;
DelayMs(1);
SDA = 0;
DelayMs(1);
SCL = 0;
DelayMs(1);
}
bit Write8bit(unsigned char input)
{
unsigned char tmp;
for(tmp =8;tmp!=0;tmp--)
{
SDA = (bit)(input&0x80);
DelayMs(1);
SCL = 1;
DelayMs(1);
SCL = 0;
DelayMs(1);
input = input << 1;
}
return 1;
}
bit TestAck()
{
bit ErrorBit;
SDA = 1;
DelayMs(1);
SCL = 1;
DelayMs(1);
ErrorBit = SDA;
DelayMs(1);
SCL = 0;
DelayMs(1);
return(ErrorBit);
}
void Stop()
{
SCL = 0;
DelayMs(1);
SDA = 0;
DelayMs(1);
SCL = 1;
DelayMs(1);
SDA = 1;
DelayMs(1);
}
void WriteI2C(unsigned char *Wdata, unsigned char RomAddress, unsigned char number)
{
Start();
Write8bit(WriteDeviceAddress);
TestAck();
Write8bit(RomAddress);
TestAck();
for(;number!=0;number--)
{
Write8bit(*Wdata);
TestAck();
Wdata++;
}
Stop();
DelayMs(1);
}
unsigned char Read8Bit()
{
unsigned char tmp,rbyte = 0;
for(tmp=8;tmp!=0;tmp--)
{
SCL = 1;
DelayMs(1);
rbyte = rbyte << 1;
DelayMs(1);
rbyte = rbyte|((unsigned char)(SDA));
SCL = 0;
DelayMs(1);
}
return(rbyte);
}
void Ack()
{
SDA = 0;
DelayMs(1);
SCL = 1;
DelayMs(1);
SCL = 0 ;
DelayMs(1);
SDA = 1;
DelayMs(1);
}
void NoAck()
{
SDA = 1;
DelayMs(1);
SCL = 1;
DelayMs(1);
SCL = 0 ;
DelayMs(1);
}
void ReadI2C(unsigned char* RamAddress,unsigned char RomAddress,unsigned char bytes)
{
Start();
Write8bit(WriteDeviceAddress);
TestAck();
Write8bit(RomAddress);
TestAck();
Start();
Write8bit(ReadDeviceAddress);
TestAck();
while(bytes != 1)
{
*RamAddress = Read8Bit();
Ack();
RamAddress++;
bytes--;
}
*RamAddress = Read8Bit();
NoAck();
Stop();
}
void main()
{
unsigned char writeByte[8] = {0xC0,0X34,0X12,0X22,0X11,0X01,0X00,0X00};
unsigned char readByte[8];
unsigned char *addw;
unsigned char *addr;
unsigned char i;
unsigned char ok = 0;
bit write = 1;
DOG = 1;
while(1)
{
if(write == 1)
{
addw = writeByte;
addr = readByte;
WriteI2C(addw,0x00,8);
ReadI2C(addr,0x00,8);
for(i=0;i<8;i++)
{
if(writeByte[i] == readByte[i])
{
ok++;
}
}
if(ok == 8)
{
DOG = 0; //一樣P0.0亮
}
else
{
PP = 0; //不一樣P0.1亮
}
write = 0;
}
}
}
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
www亚洲精品
|
国产一二三
|
一区二区三区黄色
|
亚洲精品视频免费
|
一级毛片av
|
成人免费视频一区二区
|
亚洲男人天堂网
|
国产精品1区2区
|
一区二区三区四区视频在线观看
|
一起操在线
|
欧美不卡在线
|
久久久一区二区三区
|
www.一区二区
|
在线免费av网站
|
中文字幕亚洲一区
|
天天插天天爽
|
日韩精品大片
|
国产精品一区三区
|
黄色成人小视频
|
久久精品网
|
美女91网站
|
午夜看看
|
国产午夜在线
|
久久伊人国产
|
毛片在线观看网站
|
亚洲视频一区二区三区
|
一区二区三区四区在线播放
|
一区二区网站
|
欧美一区二区视频在线观看
|
www.黄色网
|
www.97超碰
|
黄色免费网
|
精品成人av
|
自拍偷拍中文字幕
|
国产三级精品三级在线观看
|
国产tv
|
日韩a在线观看
|
国产精品婷婷
|
中文字幕国产精品
|
亚洲第一免费视频
|
国产成人区
|