CT107D蓝桥杯IIC驱动通用所有单片机(7)
2017-03-09 13:35
232 查看
直接上代码
h文件
c文件
h文件
#ifndef _IIC_H #define _IIC_H #include "regx52.h" #include "intrins.h" #define somenop {_nop_();_nop_();_nop_();_nop_();_nop_();} #define SlaveAddrW 0xA0 #define SlaveAddrR 0xA1 //总线引脚定义 sbit SDA = P2^1; /* 数据线 */ sbit SCL = P2^0; /* 时钟线 */ //函数声明 void IIC_Start(void); void IIC_Stop(void); void IIC_Ack(unsigned char ackbit); void IIC_SendByte(unsigned char byt); bit IIC_WaitAck(void); unsigned char IIC_RecByte(void); #endif
c文件
/* 程序说明: IIC总线驱动程序 软件环境: Keil uVision 4.10 硬件环境: CT107单片机综合实训平台(12MHz) 日 期: 2011-8-9 */ #include "iic.h" //总线启动条件 void IIC_Start(void) { SDA = 1; SCL = 1; somenop; SDA = 0; somenop; SCL = 0; } //总线停止条件 void IIC_Stop(void) { SDA = 0; SCL = 1; somenop; SDA = 1; } //应答位控制 void IIC_Ack(unsigned char ackbit) { if(ackbit) { SDA = 0; } else { SDA = 1; } somenop; SCL = 1; somenop; SCL = 0; SDA = 1; somenop; } //等待应答 bit IIC_WaitAck(void) { SDA = 1; somenop; SCL = 1; somenop; if(SDA) { SCL = 0; IIC_Stop(); return 0; } else { SCL = 0; return 1; } } //通过I2C总线发送数据 void IIC_SendByte(unsigned char byt) { unsigned char i; for(i=0;i<8;i++) { if(byt&0x80) { SDA = 1; } else { SDA = 0; } somenop; SCL = 1; byt <<= 1; somenop; SCL = 0; } } //从I2C总线上接收数据 unsigned char IIC_RecByte(void) { unsigned char da; unsigned char i; for(i=0;i<8;i++) { SCL = 1; somenop; da <<= 1; if(SDA) da |= 0x01; SCL = 0; somenop; } return da; }
相关文章推荐
- CT107D蓝桥杯单片机编程LED(1)
- IIC专题(一)-Smart210的I2C操作使用I2C通用驱动撰写用户态驱动程序
- 使用单片机STM8S 驱动 CT1642
- CT107D蓝桥杯DS1302实例(数码管时钟)
- 【蓝桥单片机】CT107D错误笔记
- 单片机——iic总线驱动
- CT107D蓝桥杯DS18B20使用
- CT107D蓝桥杯矩阵键盘使用
- 通用GPIO驱动和apk(含jni),支持所有GPIO,支持LED控制,支持友善6410/210开发板,支持安卓2.3/4.0,内核2.6/3.0
- 通用的单片机驱动lcd1602头文件,驱动液晶lcd1062的通用c语言头文件调用即可
- 【蓝桥杯单片机组】| DS1302(官方驱动)+ 矩阵按键 + 数码管(改,解决数码管跳动的问题)
- CT107D蓝桥杯外部中断
- C/C++ 获取文件夹下所有文件名 windows和linux通用
- [RK3288][Android6.0] 调试笔记 --- 通用GPIO驱动控制LED
- μC/OS-II下通用驱动框架的设计与实现
- LINUX的字符设备驱动基本原理用到单片机系统中
- 单片机汇编语言模块化编程-LCD1602驱动
- 【单片机笔记】有源蜂鸣器驱动-效率编程
- LINUX下的IIC驱动(四)
- java清除所有微博短链接 Java问题通用解决代码