STM8S 模拟I2C程序
STM8S的硬件I2C还是存在问题,不敢贸然使用.
于是决定用模拟I2C.
#define SCL PE_ODR_ODR1 #define SDA PE_ODR_ODR2 #define SDAM PE_IDR_IDR2 #define SET_SCL_OUT() {PE_DDR_DDR1=1; PE_CR1_C11 = 1; PE_CR2_C21 = 0;} #define SET_SDA_OUT() {PE_DDR_DDR2=1; PE_CR1_C12 = 1; PE_CR2_C22 = 0;} #define SET_SDA_IN() {PE_DDR_DDR2=0; PE_CR1_C12 = 0; PE_CR2_C22 = 0;} //-------------------------------------------------------------- // Prototype : void I2C_Start(void) // Calls : Delay_5us() // Description : Start Singnal //-------------------------------------------------------------- void I2C_Init(void) { I2C_CR1 &= 0xFE; // PE=0, disable I2C module SET_SCL_OUT(); SET_SDA_OUT(); } //-------------------------------------------------------------- // Prototype : void Delay_5us(void) // Description : 大约延时5us //-------------------------------------------------------------- void Delay_5us(void) { uchar i; //fcpu 8MHz 时 ; i>; i--); } //-------------------------------------------------------------- // Prototype : void I2C_Start(void) // Calls : Delay_5us() // Description : Start Singnal //-------------------------------------------------------------- void I2C_Start(void) { // SDA 1->0 while SCL High SDA = ; SCL = ; Delay_5us(); SDA = ; Delay_5us(); SCL = ; } //-------------------------------------------------------------- // Prototype : void I2C_Stop(void) // Calls : Delay_5us() // Description : Stop Singnal //-------------------------------------------------------------- void I2C_Stop(void) { // SDA 0->1 while SCL High SDA = ; SCL = ; Delay_5us(); SDA = ; Delay_5us(); } //-------------------------------------------------------------- // Prototype : void I2C_SendACK(uchar ack); // Calls : Delay_5us() // Parameters : bit ack:1-noack, 0-ack // Description : Master device send ACK to slave device. //-------------------------------------------------------------- void I2C_SendACK(uchar ack) { ) { SDA = ; } else { SDA = ; } SCL = ; Delay_5us(); SCL = ; Delay_5us(); } //-------------------------------------------------------------- // Prototype : uchar I2C_SendByte(uchar sendDAT) // Calls : Delay_5us() // Parameters : uchar sendDAT---data to be send // Return Value : CY--slave ack (1---noack,0---ack) // Description : Send one byte to I2C //-------------------------------------------------------------- uchar I2C_SendByte(uchar sendDAT) { uchar i,revack; ; i< ; i++) { SCL = ; Delay_5us(); if (sendDAT & 0x80) // write data { SDA = ; } else { SDA = ; } sendDAT <<= ; SCL = ; Delay_5us(); } SCL = ; Delay_5us(); SET_SDA_IN(); SCL = ; asm("nop"); asm("nop"); revack = (uchar)SDAM; Delay_5us(); SCL = ; SET_SDA_OUT(); Delay_5us(); return revack; } //-------------------------------------------------------------- // Prototype : uchar I2C_RecvByte() // Calls : Delay_5us() // Parameters : none // Return Value : revDAT- received data // Description : Receive one byte from I2C //-------------------------------------------------------------- uchar I2C_RecvByte() { uchar i; uchar revDAT = ; SDA = ; // latch the Data port befor reading SET_SDA_IN(); ; i<; i++) { revDAT <<= ; SCL = ; asm("nop"); asm("nop"); if (SDAM) { revDAT |= 0x01; } else { revDAT &= 0xfe; } Delay_5us(); SCL = ; Delay_5us(); } SET_SDA_OUT(); return revDAT; } //-------------------------------------------------------------- // Prototype : void Write_PT2314(uchar wdata) // Calls : I2C_Start(), I2C_Stop(),I2C_SendByte() // Parameters : RegAddr-- target memory address, // wrdata--- data to be writing // Description : Write one byte to target memory //-------------------------------------------------------------- void Write_24c02(uchar regadd,uchar wdata) { I2C_Start(); I2C_SendByte(0xA0); // Device Addr + Write (operation) I2C_SendByte(regadd); I2C_SendByte(wdata); I2C_Stop(); } uchar Read_24c02(uchar regadd) { uchar revdata; I2C_Start(); I2C_SendByte(0xA0); // Device Addr + Write (operation) I2C_SendByte(regadd); I2C_Start(); I2C_SendByte(0xA1); // Device Addr + Write (operation) revdata = I2C_RecvByte(); I2C_SendACK(); I2C_Stop(); return revdata; }
STM8S 模拟I2C程序的更多相关文章
- gpio模拟i2c驱动
前段时间做项目,需要gpio模拟i2c通信,最后参考了一些资料,然后编写了一个程序.现在发出来,以免以后忘记,也为一些需要的朋友提供参考.不喜勿喷哈. /* 说明:该程序是基于atmel公司的sama ...
- MSP430的IO口模拟I2C总线对AT24C25进行读写程序
功能: 实现MSP430口线模拟I2C总线协议与24C04通信. ** 描述: 主系统工作时钟为12MHz,I2C工 ...
- S5PV210之GPIO模拟I2c时序之pcf8591与at24xx linux3.0.8驱动
目录:一. 说明 二. 驱动程序说明及问题 三. 案例一 四. 案例二 一. 说明 mini210开发板上带了at24c08, 看了linux内核自带的at24.c的驱动程序,编译下载到看 ...
- 模拟I2C从机
模拟I2C主机的比较多,但是从机相对主机而言要难很多,这个供大家借鉴. 这个从机程序支持主机对它的随机写和随机读,连续读和连续写没做,有兴趣的可以完善下,呵呵. //Microcontrol CODE ...
- STM32F207 两路ADC连续转换及GPIO模拟I2C给MT9V024初始化参数
1.为了更好的方便调试,串口必须要有的,主要打印一些信息,当前时钟.转换后的电压值和I2C读出的数据. 2.通过GPIO 模拟I2C对镁光的MT9V024进行参数初始化.之前用我以前公司SP0A19芯 ...
- STM32F4XX中断方式通过IO模拟I2C总线Master模式
STM32的I2C硬核为了规避NXP的知识产权,使得I2C用起来经常出问题,因此ST公司推出了CPAL库,CPAL库在中断方式工作下仅支持无子地址 的器件,无法做到中断方式完成读写大部分I2C器件.同 ...
- STM32F10x_模拟I2C读写EEPROM
Ⅰ.写在前面 说到IIC,大家都应该不会陌生,我们初学单片机的时候或多或少都知道或了解过,甚至使用I2C控制过器件.但是,有多少人真正去深入理解,或者深入研究过I2C通信协议呢? 1.我们有必要学习I ...
- C51单片机模拟I2C总线驱动程序设计
/********************************** I2C总线驱动 ******************************** 模块名:I2C总线驱动 型号:I2C 功能描述 ...
- STM32F10x_模拟I2C读写_硬件I2C读写
STM32F10x_模拟I2C读写EEPROM STM32F10x_硬件I2C读写EEPROM(标准外设库版本) STM32F10x_硬件I2C主从通信(轮询发送,中断接收)
随机推荐
- highgui.h备查 分类: C/C++ OpenCV 2014-11-08 18:11 292人阅读 评论(0) 收藏
/*M/////////////////////////////////////////////////////////////////////////////////////// // // IMP ...
- C# 保存窗口为图片(保存纵断面图)
源代码例如以下: #region 保存纵断面截图 private void button_save_Click(object sender , EventArgs e) { SaveFileDialo ...
- iOS-#ifdef DEBUG代码块介绍
iOS-#ifdef DEBUG宏定义介绍 一.#ifdef DEBUG代码块 #ifdef DEBUG // Debug 模式的代码... #else // Release 模式的代码... #en ...
- Android Studio快速生成get set等函数
方式一:Code-->Generate 方式二:通过快捷键Alt+Insert
- HTML5媒体播放说明
HTML5中video标签播放m3u8整理 http://www.xue163.com/588880/39097/390970871.html 移动端HTML5<video>视频播放优化实 ...
- System.Data.DbType的字符串和数据库中字符串类型对应关系
前两天项目中因为历史原因数据库中的一个字段是varchar类型,在做SQL参数化处理时候默认都是DbType.String, 免得查询出现数据转换,于是做类型一致,搜了下对应关系还没找到,只好自己打开 ...
- wsdlLocation可以写成项目的相对路劲吗
如果客户端的代码使用wsdl生成的话,这个地址是从wsdl描述的<service>里的<location>获取的,如果开发过程中服务地址换了,那只能手工来修改了,好像只有一个地 ...
- iOS、mac开源项目及库汇总
原文地址:http://blog.csdn.net/qq_26359763/article/details/51076499 iOS每日一记------------之 中级完美大整理 iOS.m ...
- 启动scala的方法
1.从官网 http://www.scala-lang.org/download/ 下载scala二进制通用版本以后,在终端命令行添加下载解压包的bin目录到环境变量: export PATH=/Us ...
- 让一个Html元素撑满整个屏幕可以这样玩
style="width:100%; height: 100%; overflow:hidden; position:absolute; top: 0; left: 0; z-index: ...