网页
资讯
视频
图片
知道
文库
贴吧
地图
采购
进入贴吧
全吧搜索
吧内搜索
搜贴
搜人
进吧
搜标签
日
一
二
三
四
五
六
签到排名:今日本吧第
个签到,
本吧因你更精彩,明天继续来努力!
本吧签到人数:0
一键签到
成为超级会员,使用一键签到
一键签到
本月漏签
0
次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行
补签
。
连续签到:
天 累计签到:
天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
07月23日
漏签
0
天
单片机吧
关注:
211,981
贴子:
1,047,312
看贴
图片
吧主推荐
视频
游戏
3
回复贴,共
1
页
<<返回单片机吧
>0< 加载中...
STC8G单片机求助
只看楼主
收藏
回复
inevit5
少尉
6
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
老哥们求教,我用stc8g单片机硬件iic想和at24c08通信,但是无法实现,在CSDN,bing,b站,GitHub都找过了,没法解决
程序网盘链接如下
链接:
网盘链接
提取码:e8s4
MCU起航
吧主
14
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
#include "reg51.h"
#include "intrins.h"
sfr P_SW2 = 0xba;
#define I2CCFG (*(unsigned char volatile xdata *)0xfe80)
#define I2CMSCR (*(unsigned char volatile xdata *)0xfe81)
#define I2CMSST (*(unsigned char volatile xdata *)0xfe82)
#define I2CSLCR (*(unsigned char volatile xdata *)0xfe83)
#define I2CSLST (*(unsigned char volatile xdata *)0xfe84)
#define I2CSLADR (*(unsigned char volatile xdata *)0xfe85)
#define I2CTXD (*(unsigned char volatile xdata *)0xfe86)
#define I2CRXD (*(unsigned char volatile xdata *)0xfe87)
sfr P0M1 = 0x93;
sfr P0M0 = 0x94;
sfr P1M1 = 0x91;
sfr P1M0 = 0x92;
sfr P2M1 = 0x95;
sfr P2M0 = 0x96;
sfr P3M1 = 0xb1;
sfr P3M0 = 0xb2;
sfr P4M1 = 0xb3;
sfr P4M0 = 0xb4;
sfr P5M1 = 0xc9;
sfr P5M0 = 0xca;
sbit SDA = P1^4;
sbit SCL = P1^5;
bit busy;
void I2C_Isr() interrupt 24
{
_push_(P_SW2);
P_SW2 |= 0x80;
if (I2CMSST & 0x40)
{
I2CMSST &= ~0x40; //清中断标志
busy = 0;
}
_pop_(P_SW2);
}
void Start()
{
busy = 1;
I2CMSCR = 0x81; //发送START命令
while (busy);
}
void SendData(char dat)
{
I2CTXD = dat; //写数据到数据缓冲区
busy = 1;
I2CMSCR = 0x82; //发送SEND命令
while (busy);
}
void RecvACK()
{
busy = 1;
I2CMSCR = 0x83; //发送读ACK命令
while (busy);
}
char RecvData()
{
busy = 1;
I2CMSCR = 0x84; //发送RECV命令
while (busy);
return I2CRXD;
}
void SendACK()
{
I2CMSST = 0x00; //设置ACK信号
busy = 1;
I2CMSCR = 0x85; //发送ACK命令
while (busy);
}
void SendNAK()
{
I2CMSST = 0x01; //设置NAK信号
busy = 1;
I2CMSCR = 0x85; //发送ACK命令
while (busy);
}
void Stop()
{
busy = 1;
I2CMSCR = 0x86; //发送STOP命令
while (busy);
}
void Delay()
{
int i;
for (i=0; i<3000; i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
void main()
{
P0M0 = 0x00;
P0M1 = 0x00;
P1M0 = 0x00;
P1M1 = 0x00;
P2M0 = 0x00;
P2M1 = 0x00;
P3M0 = 0x00;
P3M1 = 0x00;
P4M0 = 0x00;
P4M1 = 0x00;
P5M0 = 0x00;
P5M1 = 0x00;
P_SW2 = 0x80;
I2CCFG = 0xe0; //使能I2C主机模式
I2CMSST = 0x00;
EA = 1;
Start(); //发送起始命令
SendData(0xa0); //发送设备地址+写命令
RecvACK();
SendData(0x00); //发送存储地址高字节
RecvACK();
SendData(0x00); //发送存储地址低字节
RecvACK();
SendData(0x12); //写测试数据1
RecvACK();
SendData(0x78); //写测试数据2
RecvACK();
Stop(); //发送停止命令
Delay(); //等待设备写数据
Start(); //发送起始命令
SendData(0xa0); //发送设备地址+写命令
RecvACK();
SendData(0x00); //发送存储地址高字节
RecvACK();
SendData(0x00); //发送存储地址低字节
RecvACK();
Start(); //发送起始命令
SendData(0xa1); //发送设备地址+读命令
RecvACK();
P0 = RecvData(); //读取数据1
SendACK();
P2 = RecvData(); //读取数据2
SendNAK();
Stop(); //发送停止命令
P_SW2 = 0x00;
while (1);
}
这是IIC,中断方式和AT24C256通信的,你改改就行了
2025-07-23 09:27:19
广告
不感兴趣
开通SVIP免广告
smarkfetish
大校
13
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
死太惨不看🙈🙈🙈🙈🙈
国产AAA
中尉
7
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
是不是没有等待,这个芯片的读取还是写入反应速度没有那么快
登录百度账号
扫二维码下载贴吧客户端
下载贴吧APP
看高清直播、视频!
贴吧页面意见反馈
违规贴吧举报反馈通道
贴吧违规信息处理公示