欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
單片機同E2PROM AT24C02的接口電路和源程序
[打印本頁]
作者:
李李貍
時間:
2017-6-9 16:16
標題:
單片機同E2PROM AT24C02的接口電路和源程序
新手新帖 適合初學者練手
設計單片機AT89C51同E2PROM AT24C02的接口電路,并編寫程序,單片機先寫入8個字節數據到AT24C02從0x30開始的單元中,然后再從0x32單元開始逐個讀出5個數據并送數碼管顯示。
0.png
(20.47 KB, 下載次數: 109)
下載附件
2017-6-9 18:16 上傳
0.png
(58.04 KB, 下載次數: 125)
下載附件
2017-6-9 18:15 上傳
單片機源程序如下:
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define WriteDeviceAddress 0xa0 //定義器件寫地址
#define ReadDviceAddress 0xa1 //定義器件讀地址
sbit SCL=P3^3; //P2.7口模擬SCL信號
sbit SDA=P3^2; // P2.6口模擬SDA信號
bit ACK; //定義應答位
unsigned char i,rebuf[16] _at_ 0x40; //16字節的數據接收緩沖區
void DelayMs(unsigned int number) //延時函數
{
unsigned char temp;
for(;number!=0;number--)
for(temp=100;temp!=0;temp--) ;
}
void Start() /*發起始位*/
{
SDA=1;
SCL=1;
SDA=0;
SCL=0;
}
void Stop() /*發停止位*/
{
SCL=0;
SDA=0;
SCL=1;
SDA=1;
}
void YEAck() /*發應答信號*/
{
SDA=0;
SCL=1;
SCL=0;
}
void NoAck() /*發非應答信號*/
{
SDA=1;
SCL=1;
SCL=0;
}
bit TestAck() /*測試應答信號*/
{
bit ErrorBit;
SDA=1;
SCL=1;
ErrorBit=SDA;
SCL=0;
return(ErrorBit);
}
Write8Bit(unsigned char input) /*寫入 8 個 bit 到 24c02 */
{
unsigned char temp;
for(temp=8;temp!=0;temp--)
{
SDA=(bit)(input&0x80);
SCL=1;
SCL=0;
input=input<<1;
}
}
uchar Read8Bit() /*從 24c02 中讀出 8 個 bit*/
{
unsigned char temp,rbyte=0;
for(temp=8;temp!=0;temp--)
{
SDA=1;
SCL=1;
rbyte=rbyte<<1;
rbyte=rbyte|((unsigned char)(SDA));
SCL=0;
}
return(rbyte);
}
/*向24c02的address地址中寫入8個字節數據ch*/
void Write24c02(uchar ch,uchar address)
{
Start();
Write8Bit(WriteDeviceAddress);
ACK=TestAck();
if (ACK==1)
Stop();
Write8Bit(address);
ACK=TestAck();
if (ACK==1)
Stop();
for(i=0;i<8;i++)
{
Write8Bit(ch);
TestAck();
if (ACK==1)
Stop();
ch++;
}
Stop();
DelayMs(10);
}
/*從24c02的地址address中讀取mm個字節數據*/
Read24c02_mm (uchar mm, uchar address)
{
uchar ch;
Start();
Write8Bit(WriteDeviceAddress);
ACK=TestAck();
if (ACK==1)
Stop();
Write8Bit(address);
ACK=TestAck();
if (ACK==1)
Stop();
Start();
Write8Bit(ReadDviceAddress);
ACK=TestAck();
if (ACK==1)
Stop();
for(i=0;i<mm-1;i++)
{
ch=Read8Bit();
P0=ch;
DelayMs(5000);
YEAck();
}
ch=Read8Bit();
P0=ch;
DelayMs(5000);
NoAck();
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
項目12仿真.zip
(47.7 KB, 下載次數: 46)
2017-6-9 16:11 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1