#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)
sbit SDA = P1^4;
sbit SCL = P1^5;
bit isda; //设备地址标志
bit isma; //存储地址标志
unsigned char addr;
unsigned char pdata buffer[256];
void main()
{
P_SW2 = 0x80;
I2CCFG = 0x81; //使能I2C从机模式
I2CSLADR = 0x5a; //设置从机设备地址为5A
I2CSLST = 0x00;
I2CSLCR = 0x00; //禁止从机模式中断
isda = 1; //用户变量初始化
isma = 1;
addr = 0;
I2CTXD = buffer[addr];
while (1)
{
if (I2CSLST & 0x40)
{
I2CSLST &= ~0x40; //处理START事件
}
else if (I2CSLST & 0x20)
{
I2CSLST &= ~0x20; //处理RECV事件
if (isda)
{
isda = 0; //处理RECV事件(RECV DEVICE ADDR)
}
else if (isma)
{
isma = 0; //处理RECV事件(RECV MEMORY ADDR)
addr = I2CRXD;
I2CTXD = buffer[addr];
}
else
{
buffer[addr++] = I2CRXD; //处理RECV事件(RECV DATA)
}
}
else if (I2CSLST & 0x10)
{
I2CSLST &= ~0x10; //处理SEND事件
if (I2CSLST & 0x02)
{
I2CTXD = 0xff;
}
else
{
I2CTXD = buffer[++addr];
}
}
else if (I2CSLST & 0x08)
{
I2CSLST &= ~0x08; //处理STOP事件
isda = 1;
isma = 1;
}
}
}
STC8A I2C从机模式_STC8A8K_
版权申诉
5星 · 超过95%的资源 132 浏览量
2021-09-30
10:00:09
上传
评论 2
收藏 2KB ZIP 举报
呼啸庄主
- 粉丝: 74
- 资源: 4702
最新资源
- Unity3D版本游戏源码2-91极道杀戮最新支持webgFullGameKitHammer2
- HTML5+CSS+JS精品网页模板 大学生期末大作业 Web前端网页制作
- 基于Flask的Python全国招聘岗位就业可视化系统源码+项目说明.zip
- 基于STM32F103C8T6单片机、LCD1602、TC77温度传感器的温度采集proteus仿真应用开发设计
- 彭博ESG综合得分、分项得分(2011-2020年)
- Unity3D版本游戏源码2-125太空飞机大战AirStrikeStarterKitv1.1
- 2022-2000全国42家上市银行财务数据整理-商业银行不良贷款资本充足率理财产品余额杠杆
- 社会信用示范城市信用代码和虚拟变量数据集(1990-2022年).txt
- 1980-2021年全国及各省劳动者报酬(EXCEL)
- Unity3D版本游戏源码2-122第一人射击游戏工程AdvancedShooterKit1.5.2
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈