资源简介
使用stc15w,内涵stc库函数,串口中断接收数据,使用消息队列,通过trigger脚来通知主机读取,亲测试通过。

代码片段和文件信息
#include “user.h“
#define IIC_NUM 1
#define write 0xfe
#define read 0x01
#if (IIC_NUM>0)
#define IIC_SDAOut() //GPIO_InitStructure_Mode_OUT_PP(IIC_cfg[IIC_busId].SDAPortIIC_cfg[IIC_busId].SDAPin)
#define IIC_SDAIn() //GPIO_InitStructure_Mode_IPU(IIC_cfg[IIC_busId].SDAPortIIC_cfg[IIC_busId].SDAPin)
#define IIC_SDA_1() GPIO_SetBits(IIC_cfg[IIC_busId].SDAPortIIC_cfg[IIC_busId].SDAPin);
#define IIC_SDA_0() GPIO_ResetBits(IIC_cfg[IIC_busId].SDAPortIIC_cfg[IIC_busId].SDAPin);
#define IIC_SCL_1() GPIO_SetBits(IIC_cfg[IIC_busId].SCLPortIIC_cfg[IIC_busId].SCLPin);
#define IIC_SCL_0() GPIO_ResetBits(IIC_cfg[IIC_busId].SCLPortIIC_cfg[IIC_busId].SCLPin);
#define IIC_SDA_STATE() GPIO_ReadInputDataBit(IIC_cfg[IIC_busId].SDAPortIIC_cfg[IIC_busId].SDAPin)
#define IIC_Delay() IIC_delay(IIC_cfg[IIC_busId].IICDelay_us)
#define SetBusId(id) IIC_busId=id
typedef struct _IIC_CFG_{
uint8_t IICDelay_us;
GPIO_TypeDef* SDAPort;
uint16_t SDAPin;
GPIO_TypeDef* SCLPort;
uint16_t SCLPin;
}IIC_CFG;
static const IIC_CFG IIC_cfg[IIC_NUM]={
//根据实际情况调整频率,此测试程序100us最佳
{100SDA2_PORTSDA2_PINSCL2_PORTSCL2_PIN}
};
static uint8_t IIC_busId=0;
#else
#define IIC_SDAOut()
#define IIC_SDAIn()
#define IIC_SDA_1()
#define IIC_SDA_0()
#define IIC_SCL_1()
#define IIC_SCL_0()
#define IIC_SDA_STATE() 0
#define IIC_Delay()
#define SetBusId(id)
#endif
void IIC_delay(uint8_t x)
{
delay_us(x);
}
void IIC_Start(void)
{
/* 当SCL高电平时,SDA出现一个下跳沿表示IIC总线启动信号 */
IIC_SDA_1();
IIC_SCL_1();
IIC_Delay();
IIC_SDA_0();
IIC_Delay();
IIC_SCL_0();
IIC_Delay();
}
void IIC_Stop(void)
{
/* 当SCL高电平时,SDA出现一个上跳沿表示IIC总线停止信号 */
IIC_SCL_0();
IIC_Delay();
IIC_SDA_0();
IIC_Delay();
IIC_SCL_1();
IIC_Delay();
IIC_SDA_1();
}
uint8_t IIC_WaitAck(void)
{
uint8_t wait=0xff;
IIC_SDA_1(); /* CPU释放SDA总线 */
IIC_SDAIn();
IIC_Delay();
IIC_SCL_1(); /* CPU驱动SCL = 1 此时器件会返回ACK应答 */
IIC_Delay();
while(wait--)
{
if(!IIC_SDA_STATE())
{
IIC_SCL_0();
IIC_Delay();
IIC_SDAOut();
return true;
}
IIC_Delay();
}
IIC_SDAOut();
return false;
}
void IIC_Ack(void)
{
IIC_SDA_0(); /* CPU驱动SDA = 0 */
IIC_Delay();
// Delay_us(1);
IIC_SCL_1(); /* CPU产生1个时钟 */
IIC_Delay();
//Delay_us(1);
IIC_SCL_0();
IIC_Delay();
//Delay_us(1);
IIC_SDA_1(); /* CPU释放SDA总线 */
}
void IIC_NAck(void)
{
IIC_SDA_1(); /* CPU驱动SDA = 1 */
IIC_Delay();
// Delay_us(1);
IIC_SCL_1(); /* CPU产生1个时钟 */
IIC_Delay();
// Delay_us(1);
IIC_SCL_0();
IIC_Delay();
// Delay_us(1);
}
uint8_t IIC_SendByte(uint8_t _ucByte)
{
uint8_t i;
/* 先发送字节的高位bit7 */
for (i = 0; i < 8; i++)
{
if (_ucByte & 0x80)
{
IIC_SDA_1(
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-01-04 09:21 IIC_MASTER\
文件 6567 2018-01-04 09:25 IIC_MASTER\iic.c
文件 521 2017-12-27 17:07 IIC_MASTER\iic.h
文件 1777 2018-01-04 09:27 IIC_MASTER\iic_stc_demo.c
文件 43 2018-01-04 09:26 IIC_MASTER\readme.txt
目录 0 2018-01-04 09:16 IIC_SLAVE\
目录 0 2018-01-04 09:16 IIC_SLAVE\Listings\
文件 42293 2018-01-03 18:47 IIC_SLAVE\Listings\PA3.m51
文件 14458 2017-12-11 16:11 IIC_SLAVE\Listings\USART.lst
文件 548 2018-01-02 12:20 IIC_SLAVE\Listings\apd.lst
文件 1356 2018-01-03 18:37 IIC_SLAVE\Listings\delay.lst
文件 569 2018-01-02 12:20 IIC_SLAVE\Listings\eeprom.lst
文件 3679 2018-01-03 18:37 IIC_SLAVE\Listings\fun.lst
文件 555 2018-01-02 12:20 IIC_SLAVE\Listings\func.lst
文件 10787 2018-01-03 18:37 IIC_SLAVE\Listings\gpio.lst
文件 9275 2018-01-03 18:37 IIC_SLAVE\Listings\iic_slave.lst
文件 548 2018-01-02 12:20 IIC_SLAVE\Listings\key.lst
文件 1636 2018-01-03 18:37 IIC_SLAVE\Listings\main.lst
文件 4047 2018-01-03 18:37 IIC_SLAVE\Listings\message.lst
文件 562 2018-01-02 12:20 IIC_SLAVE\Listings\power.lst
文件 576 2018-01-02 12:20 IIC_SLAVE\Listings\protect.lst
文件 2336 2018-01-03 18:37 IIC_SLAVE\Listings\timer.lst
文件 576 2018-01-02 12:20 IIC_SLAVE\Listings\trigger.lst
文件 4798 2018-01-03 18:37 IIC_SLAVE\Listings\uart.lst
目录 0 2018-01-04 09:16 IIC_SLAVE\ob
文件 253063 2018-01-03 18:47 IIC_SLAVE\ob
文件 934 2017-12-27 13:56 IIC_SLAVE\ob
文件 9538 2018-01-03 18:47 IIC_SLAVE\ob
文件 257 2018-01-03 18:47 IIC_SLAVE\ob
文件 127883 2018-01-03 18:47 IIC_SLAVE\ob
文件 105 2018-01-02 12:20 IIC_SLAVE\ob
............此处省略99个文件信息
相关资源
- STC8951系列单片机中方指南
- Omron ETN21模块进行modbustcp通讯
- 基于MFC扩展CListCtrl子项显示图片并叠
- STC12C5A60S2 CH4521 驱动数码管 显示
- 可编辑的CListctrl 支持CEDIT文本框,C
- STC12C系列单片机函数库
- CListCtrlExDemo.rar
- 适用于STC单片机和51单片机的SX1262驱动
- EESkill NRF24L01 无线模块用户手册
- IAP15f2k61s2
- 校园一卡通系统中RFID读写器的设计
- STC11F04单片机串口终端程序
- STC11F32单片机的射频读卡器设计
- STC-ISP_V4.83
- 基于STC89C52的瓦斯检测及红外控制系统
- ROST内容挖掘软件
- 基于51单片机的超声波测距技术实现含
- RC522读写MI卡程序,STC89C52RC调试通过,
- STC89C52+LCD12864+18B20+1302万年历
- STC库文件 STC.CDB
- 单片机89c52与MLX90614红外的测温程序
- stc8单片机12位ad程序查询模式
- 测试STC15W408AS单片机串口收发
- STC-ISP51单片机
- ESP8266AP模式控制51单片机亮灯.docx
- [Altium_Designer]_STC89C52单片机最小系统原
- 51单片机控制步进电机软硬件实现
- 基于STC89C52的GSM智能家居报警系统
- 3_STC15F2K60S2仿真操作
- 基于STC89C52单片机的数字时钟
评论
共有 条评论