网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数: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
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 3回复贴,共1页
<<返回单片机吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示