nbhkdz.com冰点文库

基于51单片机的IIC总线控制程序

时间:2011-10-18


////////////////////////////////////////////////////////////////////////////////// //函数功能:void iic_start() 启动信号 // void iic_stop(void) 停止信号 // void iic_check_answer() 应答信号 // void iic_write_byte(uchar dat) 写字节函数 // void iic_write_n_byte(uchar *buffer,uchar n) 写 n 个字节函数 // void iic_write_at_addr(uchar addr,uchar dat) 指定地址写字节函数 // uchar iic_read_byte(void) 读字节函数 // // uchar iic_read_at_addr(uchar addr) 读指定地址字节 ///////////////////////////////////////////////////////////////////////////////////

#ifndef __iic_H__ #define __iic_H__

sbit scl=P1^0; sbit sda=P1^1;

//延时 4us@12mhz void delay_iic() { ;;; }

//启动 iic 总线的函数,当 scl 为高电平时使 sda 产生一个负跳变 void iic_start(void) { sda=1; delay_iic(); scl=1; delay_iic(); sda=0; delay_iic(); }

//终止 iic 总线,当 scl 为高电平时使 sda 产生一个正跳变 void iic_stop(void) { sda=0;

delay_iic(); scl=1; delay_iic(); sda=1; delay_iic(); }

//发送完一个字节后检验设备的应答信号 void iic_check_answer() { uchar i; scl=1; delay_iic(); while((sda==1) && (i<250)) i++; scl=0; delay_iic(); }

//向 iic 总线写一个字节 void iic_write_byte(uchar dat) { uchar i,temp; temp=dat; for(i=0;i<8;i++) { temp=temp<<1; scl=0; delay_iic(); sda=CY; delay_iic(); scl=1; delay_iic(); } scl=0; delay_iic(); sda=1; delay_iic(); }

//向 I2C 总线写 n 个字节 void iic_write_n_byte(uchar *buffer,uchar n) { uchar i; iic_start(); for(i=0;i<n;i++) { iic_write_byte(buffer[i]); } iic_stop(); }

//向芯片的指定地址,写入字节 void iic_write_at_addr(uchar addr,uchar dat) { iic_start(); //设定地址,AT24C02 固定地址为 1010,再加上 设定的地址, iic_write_byte(0xa0); //最后一位表示读或写,0 表示写,所以为 1010 0000,即 0xa0 iic_check_answer(); //等待芯片应答 iic_write_byte(addr); //设置要写入数据的地址 iic_check_answer(); //等待芯片应答 iic_write_byte(dat); //写入要保存的数据 iic_check_answer(); //等待芯片应答 iic_stop(); } //从 I2C 总线读一个字节 uchar iic_read_byte(void) { uchar i,k; scl=0; delay_iic(); sda=1; delay_iic(); for(i=0; i<8; i++) { scl=1; delay_iic();

k =(k<<1)|sda; scl=0; delay_iic(); } return k; }

/*//从 I2C 总线读 n 个字节 bit iic_read_n_byte(uchar SlaveAdr,uchar n,uchar *buffer) { uchar i; iic_start(); Write_byte(SlaveAdr); //向总线发送接收器地址 if(!check_answer()) //等待接收器应答信号 return 0; for(i=0;i<n;i++) { buffer[i]=READ_byte(); if(i!=n) SEND_0(); //发送应答 else SEND_1(); //发送非应答 } iic_stop(); return 1; } */ //读取芯片指定地址的数据 uchar iic_read_at_addr(uchar addr) { uchar dat; iic_start(); iic_write_byte(0xa0);//向芯片发送一个写操作信号 iic_check_answer(); iic_write_byte(addr);//设置要读取的地址 iic_check_answer(); iic_start(); iic_write_byte(0xa1);//向芯片发送一个读操作信号 iic_check_answer(); dat=iic_read_byte(); iic_stop(); return dat; }

#endif


51单片机IIC总线程序.doc

51单片机IIC总线程序 - //===头文件加载=== #include &l

基于51单片机的IIC总线控制程序.doc

基于51单片机的IIC总线控制程序 - 此文件为.H文件,作者:liuzqiang_1016... 基于51单片机的IIC总线控制程序_信息与通信_工程科技_专业资料。此文件为.H文件,作者:l...

51单片机的模拟IIC总线程序.doc

51单片机的模拟IIC总线程序 - #include <reg764.h&

51单片机IIC程序.doc

标签: 信息通信| 单片机| 程序|51单片机IIC程序_信息与通信_工程科技_专业资料。基于51单片机的IIC通信程序,其中IIC协议实现是通过单片机模拟时序完成 ...

51单片机综合学习系统之 IIC总线学习篇_图文.pdf

51单片机综合学习系统之 IIC 总线学习篇大家好,通过...公司和其它集成电路制造商推出了很多基于 I2C 总线的...程序流程图 图10 程序流程图 相信看到这里,你应该...

基于单片机的I2C总线系统设计_图文.pdf

其编程流程如图2所示。 3基于P89C66X系列单片机的...陈志辉 I2C总线在MCS51系列单片机数据采集系统中的...王健 分析仪器中IIC总线异常的自动恢复[期刊论文]-...

第六讲 单片机与IIC总线接口_图文.ppt

第六讲 单片机与IIC总线接口 二、 80C51单片机I2C串行总线器件的接口

基于51单片机的CAN通讯协议C语言程序.txt

基于51单片机的CAN通讯协议C语言程序 - //---函数声明,变量定义---

51单片机IO口线模拟IIC总线3部曲之第3部.txt

51单片机IO口线模拟IIC总线3部曲之第3部 - 本文是对第1,2部的使用说明

51单片机IO口线模拟IIC总线3部曲之第2部.doc

(SCL_ON) sbit SCL = P1^6; // 模拟 I2C 时钟控制位,移植时请修改此处...基于51单片机的IIC总线控... 5页 2下载券 喜欢此文档的还喜欢 51...

基于51单片机控制的以太网通讯实现.pdf

基于51 单片机控制的以太网通讯实现摘要:介绍以太网...表 3 RTL8019AS 的 ISA 总线接口引脚与单片机的...4 程序设计 所有程序采用 Framclin C51 语言编制,...

51单片机模拟iic总线协议使用EEPROM器件AT24C02.doc

51 单片机软件实现 iic 总线的工作时序所用 EEPROM 芯片 AT24C

基于51单片机的CAN总线的远距离水位监控系统程序.doc

基于51单片机的CAN总线的远距离水位监控系统程序_工学_高等教育_教育专区。CAN总线的远距离水位监控系统 /* 描述: 独立的 CAN 控制器 SJA1000 基本硬件头文件定义...

如何对AT24C02编写驱动程序IIC总线协议_图文.ppt

如何对AT24C02编写驱动程序IIC总线协议_电子/...8.2 80C51单片机I2C串行总线器件的接口 8.2.1 ...

基于51单片机的CAN通讯源代码.txt

基于51单片机的CAN通讯源代码_计算机软件及应用_IT/计算机_专业资料。51单片机,...化总线定时器器错 */ #define CAN_INITOUTCTL_ERR 0XFA /*初始化输出控制...

51单片机IO口线模拟IIC总线3部曲之第3部.txt

51单片机IO口线模拟IIC总线3部曲之第3部 - 若有错误之处请不吝赐教。 IIC底层驱动包使用说明 一:说明: (1) 本软件包是使用51单片机IO口线来模拟IIC总线。...

51单片机IO口线模拟IIC总线3部曲之第3部.doc

51单片机IO口线模拟IIC总线3部曲之第3部 - 本文是对第 1,2 部的使用

51单片机IO口线模拟IIC总线3部曲之第2部.txt

51单片机IO口线模拟IIC总线3部曲之第2部 - // 把本文全部复制保存为I

超强悍的单片机教程LESSON8_IIC总线协议2_图文.ppt

在多主机系统中,可能同时有几个主机企图启 动总线传送数据。为了避免混乱, I2C总线要通 过总线仲裁,以决定由哪一台主机控制总线。在80C51单片机应用系统的串行总线...

【完整版】基于51单片机的交通信号灯系统_毕业论文设计.doc

STC89C51 单片机作为主控制器,STC89C51 单片机具有体积小,功耗低,控制能 力...存储模块 3.1 设计思想:系统掉电存储模块采用串行 E2PROM,它是基于 IIC 总线的...