资源简介
BLE蓝牙使用例子,可以参考使用,兄弟们反正分数不多,自己用着就好,里面有IIC和串口透传的例子

代码片段和文件信息
#include
#include “MY51.H“
sbit sda=P2^0; //总线连接口定义
sbit scl=P2^1; //总线连接口定义
void delay250us() //需要4个机器周期大概4.34us
{
for( unsigned char i=0;i<250;i++ )
{
_nop_();
} //晶振频率11.0592M机器周期为1.085微秒
}
void iic_start() //启动信号
{
sda=1;
scl=1;
delayus(); //sda和scl同为高电平保持4.7us以上
_nop_(); //1.085us共5.78us下面sda=0是下降沿不能计算在延时时间中
sda=0; //下降沿
delayus(); //sda低电平保持4us以上 这里是4.34us满足要求
}
void iic_stop() //停止信号
{
sda=0;_nop_(); //准备状态
scl=1;
delayus(); //该状态稳定时间要求保持4us以上
sda=1; //scl高电平期间sda来一个上升沿
delayus(); //sda保持4.7us以上4.34加上函数返回时间大于4.7us
//注:此时scl和sda都为1
}
void iic_sendByte(uchar byteData) //mcu发送一个字节
{
uchar i;
uchar temp=byteData;
for(i=0;i<8;i++)
{
temp=temp<<1; //移动后最高位到了PSW寄存器的CY位中
scl=0; //准备
_nop_(); //稳定一下
sda=CY; //将待发送的数据一位位的放到sda上
_nop_();
scl=1; //每一个高电平期间ic器件都会将数据取走
_nop_();
}
scl=0; //如果写成scl=1;sda=1就是停止信号不能这么写
_nop_();
sda=1; //释放总线数据总线不用时要释放
_nop_();
}
uchar iic_readByte() //读一个字节
{
uchar itemp;
scl=0; //准备读数据
_nop_();
sda=1; //释放总线
_nop_();
for(i=0;i<8;i++)
{
scl=1; //mcu开始取数据
delayus(); //scl为高电平后ic器件就会将1位数据送到sda上
//总共用时不会大于4.34us的然后就可以让mcu读sda了
temp=(temp<<1)|sda; //读一位保存到temp中
scl=0;
delayus();
}
return temp;
}
bool iic_checkACK() //处理应答信号
{
uchar errCounts=255; //定义超时量为255次
scl=1;
_nop_();
while(sda)
{ //在一段时间内检测到sda=0的话认为是应答信号
if(0==errCounts)
{
scl=0; //钳住总线
_nop_();
return false; //没有应答信号
}
errCounts--;
}
scl=0; //钳住总线为下1次通信做准备
_nop_();
return true; //成功处理应答信号
}
void iic_init() //总线初始化
{
scl=1;
sda=1;
delayus();
}
void iic_sendACK(bool b_ACK) //发送应答或非应答信号
{
scl=0; //准备
_nop_();
if(b_ACK) //ACK
{
sda=0;
}
else //unACK
{
sda=1;
}
_nop_();
scl=1;
delayus(); //大于4us的延时
scl=0; //钳住scl以便继续接收数据
_nop_();
}
void IIC_writeByte(uchar addressuchar dataByte)//向24c02写一字节数据
{
iic_start();
iic_sendByte(0xa0);//mcu写控制字前4位固定1010后三位地址0末位0是写
iic_checkACK(); //mcu处理应答信号
iic_sendByte(address); //准备在指定地址处写入
iic_checkACK();
iic_sendByte(dataByte); //写数据
iic_checkACK();
iic_stop();
delayms(2);
//按字节写入时24c02在接收到停止信号后将数据擦写到内部这需要时间
//并且在这段时间内不会响应总线上的任何请求故让mcu有2毫秒以上的等待
}
void IIC_writeData(uchar addressuchar numBytesuchar* buf)//写入任意长度数据
{
while(numBytes--)
{
IIC_writeByte(address++*buf++);
}
}
void IIC_readData(uchar beginAddruchar dataSizeuchar* buf)//读取任意长度字节
{
iic_start(); //起始信号
iic_sendByte(0xa0); //控制字写
iic_checkACK(); //处理应答信号
iic_sendByte(beginAddr); //发送地址
iic_checkACK(); //处理应答信号
iic_start(); //发送起始信号
iic_sendByte(0xa1); //控制字读
iic_checkACK(); //处理应答信号
while(dataSize--) //读取dataSize个字节
{
*buf++=iic_readByte(); //读取一个个字节并保存到缓冲区buf中
iic_sendACK(dataSize); //发送应答当dataSize为
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-03-15 08:55 IIC例子\
文件 4775 2017-10-16 22:27 IIC例子\JDY-16 IIC使用例子.c
目录 0 2018-03-15 08:55 串口例子\
文件 2772 2017-11-19 22:05 串口例子\JDY-16 串口例子.c
- 上一篇:数控加工切削用量计算器V2.0
- 下一篇:使用命令行升级texlive宏包.pdf
相关资源
- Periodic solutions for a kind of p-Laplacian e
- New Periodic Solutions for the Circular Restri
- A Sequential Bundle Method for Solving a MPEC
- cc2541 BLE DEMO
- 由浅入深,蓝牙4.0/BLE协议栈开发攻略
-
AN_BLE-SDKDH-C1_Teli
nk BLE SDK DeveloperHan - js实现动态修改table内容功能
- Blessing 3 v3.8.2.mq4
- 广义Einstein-Cartan-Kibble-Sciama引力和引力
- Continuum of positive solutions for discrete &
- BLE-CC254x-1.3.2 蓝牙官方源代码
- New Analytical Solution of a Generalized Negat
- Multiplicity of positive solutions for p(x)
- Existence of positive solutions for some singu
- Guide to Reliable Distributed Systems
- Cluster Ensembles – A Knowledge Reuse fr
- Forefront让CableWireless从容面对垃圾邮件
- A discrete fruit fly optimization algorithm fo
- flowable整合Spring
- THERMAL ANNEALING TREATMENT TO ACHIEVE SWITCHA
- A Novel Algorithm for Ternary Reversible Logic
- Discovery of Reversible and Persistent Electri
- 磁盘分区助手PA5.2_Portable
- Facile hydrothermal synthesis of Tb2(MoO4)
- A Facile Mixed-Solvothermal Route to γ-B
- IT十年经典书系列英文版-Design_Patter
- 狼群算法Multi-strategy ensemble grey wolf
- AndreaMosaicPortable蒙太奇马赛克拼图制作
- Bumblebee2双目立体摄像机资料
- 6进制与浮点数包括float和double互转、
评论
共有 条评论